Skip to content

Commit 7281178

Browse files
committed
Restructure encoders
Drop minor efficiency in favor of code clarity
1 parent 011407e commit 7281178

File tree

4 files changed

+59
-46
lines changed

4 files changed

+59
-46
lines changed

src/lib/encoder/safe32.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,43 @@
1-
import { PuidEncoder } from "../../types/puid"
1+
import { PuidEncoder } from '../../types/puid'
2+
3+
// n: 012 3456 7 8 901 2 34 567 8 9 0 123 4 567 890 1
4+
// c: 234 6789 b d fgh j mn pqr t B D FGH J LMN PQR T
25

36
export default (): PuidEncoder => {
47
const two = '2'.charCodeAt(0)
5-
const six = '6'.charCodeAt(0) - 3
8+
const six = '6'.charCodeAt(0)
69
const b = 'b'.charCodeAt(0)
710
const d = 'd'.charCodeAt(0)
8-
const f = 'f'.charCodeAt(0) - 9
11+
const f = 'f'.charCodeAt(0)
912
const j = 'j'.charCodeAt(0)
10-
const m = 'm'.charCodeAt(0) - 13
11-
const p = 'p'.charCodeAt(0) - 15
13+
const m = 'm'.charCodeAt(0)
14+
const p = 'p'.charCodeAt(0)
1215
const t = 't'.charCodeAt(0)
1316
const B = 'B'.charCodeAt(0)
1417
const D = 'D'.charCodeAt(0)
15-
const F = 'F'.charCodeAt(0) - 21
18+
const F = 'F'.charCodeAt(0)
1619
const J = 'J'.charCodeAt(0)
17-
const L = 'L'.charCodeAt(0) - 25
18-
const P = 'P'.charCodeAt(0) - 28
20+
const L = 'L'.charCodeAt(0)
21+
const P = 'P'.charCodeAt(0)
1922
const T = 'T'.charCodeAt(0)
2023

2124
return (n: number) => {
2225
if (n < 3) return n + two
23-
if (n < 7) return n + six
26+
if (n < 7) return n - 3 + six
2427
if (n === 7) return b
2528
if (n === 8) return d
26-
if (n < 12) return n + f
29+
if (n < 12) return n - 9 + f
2730
if (n === 12) return j
28-
if (n < 15) return n + m
29-
if (n < 18) return n + p
31+
if (n < 15) return n - 13 + m
32+
if (n < 18) return n - 15 + p
3033
if (n === 18) return t
3134
if (n === 19) return B
3235
if (n === 20) return D
33-
if (n < 24) return n + F
36+
if (n < 24) return n - 21 + F
3437
if (n === 24) return J
35-
if (n < 28) return n + L
36-
if (n < 31) return n + P
37-
return T
38+
if (n < 28) return n - 25 + L
39+
if (n < 31) return n - 28 + P
40+
if (n === 31) return T
41+
return NaN
3842
}
3943
}

src/lib/encoder/safe64.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
import { PuidEncoder } from "../../types/puid"
1+
import { PuidEncoder } from '../../types/puid'
2+
3+
// n: 01234567890123456789012345 67890123456789012345678901 2345678901 2 3
4+
// c: ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _
25

36
export default (): PuidEncoder => {
4-
const upper = 'A'.charCodeAt(0)
5-
const lower = 'a'.charCodeAt(0) - 26
6-
const decimal = '0'.charCodeAt(0) - 52
7+
const A = 'A'.charCodeAt(0)
8+
const a = 'a'.charCodeAt(0)
9+
const zero = '0'.charCodeAt(0)
710
const hyphen = '-'.charCodeAt(0)
811
const underscore = '_'.charCodeAt(0)
912

1013
return (n: number) => {
11-
if (n < 26) return n + upper
12-
if (n < 52) return n + lower
13-
if (n < 62) return n + decimal
14+
if (n < 26) return n + A
15+
if (n < 52) return n - 26 + a
16+
if (n < 62) return n - 52 + zero
1417
if (n === 62) return hyphen
15-
return underscore
18+
if (n === 63) return underscore
19+
return NaN
1620
}
1721
}

src/lib/encoder/safeAscii.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
import { PuidEncoder } from '../../types/puid'
22

3+
// n: 0 1234 5678901234567890123456789012345678901234567890123456 789 012345678901234567890123456789
4+
// c: ! #$%& ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ ]^_ abcdefghijklmnopqrstuvwxyz{|}~
5+
36
export default (): PuidEncoder => {
47
const bang = '!'.charCodeAt(0)
5-
const ampersand = '&'.charCodeAt(0) - 4
6-
const openSquareBracket = '['.charCodeAt(0) - 56
7-
const underscore = '_'.charCodeAt(0) - 59
8-
const a = 'a'.charCodeAt(0) - 60
9-
const tilde = '~'.charCodeAt(0)
8+
const hash = '#'.charCodeAt(0)
9+
const openParen = '('.charCodeAt(0)
10+
const closeSquareBracket = ']'.charCodeAt(0)
11+
const a = 'a'.charCodeAt(0)
1012

1113
return (n: number) => {
1214
if (n === 0) return bang
13-
if (n < 5) return n + ampersand
14-
if (n < 57) return n + openSquareBracket
15-
if (n < 60) return n + underscore
16-
if (n < 90) return n + a
17-
// CxInc throw
18-
return tilde
15+
if (n < 5) return n - 1 + hash
16+
if (n < 57) return n - 5 + openParen
17+
if (n < 60) return n - 57 + closeSquareBracket
18+
if (n < 90) return n - 60 + a
19+
return NaN
1920
}
2021
}

src/lib/encoder/symbol.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
1-
import { PuidEncoder } from "../../types/puid"
1+
import { PuidEncoder } from '../../types/puid'
2+
3+
// n: 0 1234 56789012 3456789 0 123 4567
4+
// c: ! #$%& ()*+,-./ :;<=>?@ [ ]^_ {|}~
25

36
export default (): PuidEncoder => {
47
const bang = '!'.charCodeAt(0)
5-
const hash = '#'.charCodeAt(0) - 1
6-
const openParen = '('.charCodeAt(0) - 5
7-
const colon = ':'.charCodeAt(0) - 13
8+
const hash = '#'.charCodeAt(0)
9+
const openParen = '('.charCodeAt(0)
10+
const colon = ':'.charCodeAt(0)
811
const openSquareBracket = '['.charCodeAt(0)
9-
const closeSquareBracket = ']'.charCodeAt(0) - 21
10-
const openCurlyBracket = '{'.charCodeAt(0) - 24
12+
const closeSquareBracket = ']'.charCodeAt(0)
13+
const openCurlyBracket = '{'.charCodeAt(0)
1114

1215
return (n: number) => {
1316
if (n === 0) return bang
14-
if (n < 5) return n + hash
15-
if (n < 13) return n + openParen
16-
if (n < 20) return n + colon
17+
if (n < 5) return n - 1 + hash
18+
if (n < 13) return n - 5 + openParen
19+
if (n < 20) return n - 13 + colon
1720
if (n === 20) return openSquareBracket
18-
if (n < 24) return n + closeSquareBracket
19-
return n + openCurlyBracket
21+
if (n < 24) return n - 21 + closeSquareBracket
22+
if (n < 28) return n - 24 + openCurlyBracket
23+
return NaN
2024
}
2125
}

0 commit comments

Comments
 (0)