@typed/id 1.0.0-beta.0 → 1.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -86
  3. package/dist/Cuid.d.ts +128 -13
  4. package/dist/Cuid.d.ts.map +1 -1
  5. package/dist/Cuid.js +135 -41
  6. package/dist/DateTimes.d.ts +66 -3
  7. package/dist/DateTimes.d.ts.map +1 -1
  8. package/dist/DateTimes.js +72 -5
  9. package/dist/Ids.d.ts +139 -34
  10. package/dist/Ids.d.ts.map +1 -1
  11. package/dist/Ids.js +121 -21
  12. package/dist/IdsTest.d.ts +34 -0
  13. package/dist/IdsTest.d.ts.map +1 -0
  14. package/dist/IdsTest.js +44 -0
  15. package/dist/Ksuid.d.ts +51 -1
  16. package/dist/Ksuid.d.ts.map +1 -1
  17. package/dist/Ksuid.js +60 -8
  18. package/dist/NanoId.d.ts +47 -0
  19. package/dist/NanoId.d.ts.map +1 -1
  20. package/dist/NanoId.js +48 -1
  21. package/dist/RandomValues.d.ts +63 -4
  22. package/dist/RandomValues.d.ts.map +1 -1
  23. package/dist/RandomValues.js +74 -10
  24. package/dist/Ulid.d.ts +49 -1
  25. package/dist/Ulid.d.ts.map +1 -1
  26. package/dist/Ulid.js +54 -4
  27. package/dist/Uuid4.d.ts +47 -0
  28. package/dist/Uuid4.d.ts.map +1 -1
  29. package/dist/Uuid4.js +48 -1
  30. package/dist/Uuid5.d.ts +178 -6
  31. package/dist/Uuid5.d.ts.map +1 -1
  32. package/dist/Uuid5.js +152 -15
  33. package/dist/Uuid7.d.ts +121 -15
  34. package/dist/Uuid7.d.ts.map +1 -1
  35. package/dist/Uuid7.js +124 -16
  36. package/dist/__tests__/helpers.d.ts +7 -0
  37. package/dist/__tests__/helpers.d.ts.map +1 -0
  38. package/dist/__tests__/helpers.js +19 -0
  39. package/dist/__tests__/public-contract.type-test.d.ts +2 -0
  40. package/dist/__tests__/public-contract.type-test.d.ts.map +1 -0
  41. package/dist/__tests__/public-contract.type-test.js +3 -0
  42. package/dist/_sha.d.ts +32 -0
  43. package/dist/_sha.d.ts.map +1 -1
  44. package/dist/_sha.js +32 -0
  45. package/dist/_uuid-stringify.d.ts +15 -0
  46. package/dist/_uuid-stringify.d.ts.map +1 -1
  47. package/dist/_uuid-stringify.js +15 -0
  48. package/dist/internal/Ids.d.ts +23 -0
  49. package/dist/internal/Ids.d.ts.map +1 -0
  50. package/dist/internal/Ids.js +29 -0
  51. package/package.json +73 -11
  52. package/dist/Id.test.d.ts +0 -2
  53. package/dist/Id.test.d.ts.map +0 -1
  54. package/dist/Id.test.js +0 -190
  55. package/src/Cuid.ts +0 -124
  56. package/src/DateTimes.ts +0 -36
  57. package/src/Id.test.ts +0 -217
  58. package/src/Ids.ts +0 -124
  59. package/src/Ksuid.ts +0 -74
  60. package/src/NanoId.ts +0 -33
  61. package/src/RandomValues.ts +0 -33
  62. package/src/Ulid.ts +0 -51
  63. package/src/Uuid4.ts +0 -24
  64. package/src/Uuid5.ts +0 -71
  65. package/src/Uuid7.ts +0 -104
  66. package/src/_sha.ts +0 -11
  67. package/src/_uuid-stringify.ts +0 -30
  68. package/src/index.ts +0 -10
  69. package/tsconfig.json +0 -6
  70. package/vitest.config.ts +0 -8
package/src/Uuid7.ts DELETED
@@ -1,104 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Layer from "effect/Layer";
3
- import * as Schema from "effect/Schema";
4
- import * as ServiceMap from "effect/ServiceMap";
5
- import { uuidStringify } from "./_uuid-stringify.js";
6
- import { DateTimes } from "./DateTimes.js";
7
- import { RandomValues } from "./RandomValues.js";
8
-
9
- export const Uuid7 = Schema.String.pipe(
10
- Schema.check(Schema.isUUID(7)),
11
- Schema.brand("@typed/id/UUID7"),
12
- );
13
- export type Uuid7 = typeof Uuid7.Type;
14
-
15
- export const isUuid7: (value: string) => value is Uuid7 = Schema.is(Uuid7);
16
-
17
- export type Uuid7Seed = {
18
- readonly timestamp: number;
19
- readonly seq: number;
20
- readonly randomBytes: Uint8Array & { length: 16 };
21
- };
22
-
23
- export class Uuid7State extends ServiceMap.Service<Uuid7State>()("@typed/id/Uuid7State", {
24
- make: Effect.gen(function* () {
25
- const { now } = yield* DateTimes;
26
- const getRandomValues = yield* RandomValues;
27
- const state = {
28
- msecs: Number.NEGATIVE_INFINITY,
29
- seq: 0,
30
- };
31
-
32
- function updateV7State(now: number, randomBytes: Uint8Array) {
33
- if (now > state.msecs) {
34
- // Time has moved on! Pick a new random sequence number
35
- state.seq =
36
- (randomBytes[6] << 23) | (randomBytes[7] << 16) | (randomBytes[8] << 8) | randomBytes[9];
37
- state.msecs = now;
38
- } else {
39
- // Bump sequence counter w/ 32-bit rollover
40
- state.seq = (state.seq + 1) | 0;
41
-
42
- // In case of rollover, bump timestamp to preserve monotonicity. This is
43
- // allowed by the RFC and should self-correct as the system clock catches
44
- // up. See https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-9.4
45
- if (state.seq === 0) {
46
- state.msecs++;
47
- }
48
- }
49
- }
50
-
51
- return Effect.gen(function* () {
52
- const randomBytes = yield* getRandomValues<Uuid7Seed["randomBytes"]>(16);
53
- updateV7State(yield* now, randomBytes);
54
- return { timestamp: state.msecs, seq: state.seq, randomBytes };
55
- });
56
- }),
57
- }) {
58
- static readonly next = Effect.flatten(Uuid7State.asEffect());
59
-
60
- static readonly Default = Layer.effect(Uuid7State, Uuid7State.make).pipe(
61
- Layer.provideMerge([DateTimes.Default, RandomValues.Default]),
62
- );
63
- }
64
-
65
- export const uuid7: Effect.Effect<Uuid7, never, Uuid7State> = Effect.map(
66
- Uuid7State.next,
67
- uuid7FromSeed,
68
- );
69
-
70
- function uuid7FromSeed({ randomBytes, seq, timestamp }: Uuid7Seed): Uuid7 {
71
- const result = new Uint8Array(16);
72
-
73
- // byte 0-5: timestamp (48 bits)
74
- result[0] = (timestamp / 0x10000000000) & 0xff;
75
- result[1] = (timestamp / 0x100000000) & 0xff;
76
- result[2] = (timestamp / 0x1000000) & 0xff;
77
- result[3] = (timestamp / 0x10000) & 0xff;
78
- result[4] = (timestamp / 0x100) & 0xff;
79
- result[5] = timestamp & 0xff;
80
-
81
- // byte 6: `version` (4 bits) | sequence bits 28-31 (4 bits)
82
- result[6] = 0x70 | ((seq >>> 28) & 0x0f);
83
-
84
- // byte 7: sequence bits 20-27 (8 bits)
85
- result[7] = (seq >>> 20) & 0xff;
86
-
87
- // byte 8: `variant` (2 bits) | sequence bits 14-19 (6 bits)
88
- result[8] = 0x80 | ((seq >>> 14) & 0x3f);
89
-
90
- // byte 9: sequence bits 6-13 (8 bits)
91
- result[9] = (seq >>> 6) & 0xff;
92
-
93
- // byte 10: sequence bits 0-5 (6 bits) | random (2 bits)
94
- result[10] = ((seq << 2) & 0xff) | (randomBytes[10] & 0x03);
95
-
96
- // bytes 11-15: random (40 bits)
97
- result[11] = randomBytes[11];
98
- result[12] = randomBytes[12];
99
- result[13] = randomBytes[13];
100
- result[14] = randomBytes[14];
101
- result[15] = randomBytes[15];
102
-
103
- return Uuid7.makeUnsafe(uuidStringify(result));
104
- }
package/src/_sha.ts DELETED
@@ -1,11 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
-
3
- export const sha1 = (data: BufferSource) =>
4
- Effect.promise(() =>
5
- crypto.subtle.digest("SHA-1", data).then((buffer) => new Uint8Array(buffer)),
6
- );
7
-
8
- export const sha512 = (data: BufferSource) =>
9
- Effect.promise(() =>
10
- crypto.subtle.digest("SHA-512", data).then((buffer) => new Uint8Array(buffer)),
11
- );
@@ -1,30 +0,0 @@
1
- const byteToHex: Array<string> = [];
2
-
3
- for (let i = 0; i < 256; ++i) {
4
- byteToHex.push((i + 0x100).toString(16).slice(1));
5
- }
6
-
7
- export function uuidStringify(seed: Uint8Array): string {
8
- return [
9
- byteToHex[seed[0]],
10
- byteToHex[seed[1]],
11
- byteToHex[seed[2]],
12
- byteToHex[seed[3]],
13
- "-",
14
- byteToHex[seed[4]],
15
- byteToHex[seed[5]],
16
- "-",
17
- byteToHex[seed[6]],
18
- byteToHex[seed[7]],
19
- "-",
20
- byteToHex[seed[8]],
21
- byteToHex[seed[9]],
22
- "-",
23
- byteToHex[seed[10]],
24
- byteToHex[seed[11]],
25
- byteToHex[seed[12]],
26
- byteToHex[seed[13]],
27
- byteToHex[seed[14]],
28
- byteToHex[seed[15]],
29
- ].join("");
30
- }
package/src/index.ts DELETED
@@ -1,10 +0,0 @@
1
- export * from "./Cuid.js";
2
- export * from "./DateTimes.js";
3
- export * from "./Ids.js";
4
- export * from "./Ksuid.js";
5
- export * from "./NanoId.js";
6
- export * from "./RandomValues.js";
7
- export * from "./Ulid.js";
8
- export * from "./Uuid4.js";
9
- export * from "./Uuid5.js";
10
- export * from "./Uuid7.js";
package/tsconfig.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": { "rootDir": "src", "outDir": "dist" },
4
- "include": ["src"],
5
- "exclude": ["**/*.test.ts"]
6
- }
package/vitest.config.ts DELETED
@@ -1,8 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
-
3
- export default defineConfig({
4
- test: {
5
- include: ["src/**/*.{test,spec}.ts"],
6
- exclude: ["**/node_modules/**", "**/dist/**"],
7
- },
8
- });