refactor(schema): extract shared public schemas (#33571)
This commit is contained in:
parent
60aba622ab
commit
516cfe4e09
130 changed files with 2014 additions and 1593 deletions
30
packages/schema/src/identifier.ts
Normal file
30
packages/schema/src/identifier.ts
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
const length = 26
|
||||
const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||||
let lastTimestamp = 0
|
||||
let counter = 0
|
||||
|
||||
export function ascending() {
|
||||
return create(false)
|
||||
}
|
||||
|
||||
export function descending() {
|
||||
return create(true)
|
||||
}
|
||||
|
||||
export function create(descending: boolean, timestamp = Date.now()) {
|
||||
if (timestamp !== lastTimestamp) {
|
||||
lastTimestamp = timestamp
|
||||
counter = 0
|
||||
}
|
||||
counter++
|
||||
|
||||
const current = BigInt(timestamp) * 0x1000n + BigInt(counter)
|
||||
const value = descending ? ~current : current
|
||||
const time = Array.from({ length: 6 }, (_, index) =>
|
||||
Number((value >> BigInt(40 - 8 * index)) & 0xffn)
|
||||
.toString(16)
|
||||
.padStart(2, "0"),
|
||||
).join("")
|
||||
const bytes = crypto.getRandomValues(new Uint8Array(length - 12))
|
||||
return time + Array.from(bytes, (byte) => chars[byte % 62]).join("")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue