@typed/id 0.16.0 → 0.17.1
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.
- package/dist/Cuid.d.ts +3 -1
- package/dist/Cuid.js +3 -1
- package/dist/Cuid.js.map +1 -1
- package/dist/DateTimes.d.ts +2 -1
- package/dist/DateTimes.js +4 -2
- package/dist/DateTimes.js.map +1 -1
- package/dist/Ksuid.d.ts +8 -0
- package/dist/Ksuid.js +57 -0
- package/dist/Ksuid.js.map +1 -0
- package/dist/NanoId.d.ts +1 -1
- package/dist/NanoId.js +1 -1
- package/dist/NanoId.js.map +1 -1
- package/dist/Uuid4.d.ts +1 -1
- package/dist/Uuid4.js +2 -2
- package/dist/Uuid4.js.map +1 -1
- package/dist/Uuid5.d.ts +2 -1
- package/dist/Uuid5.js +3 -2
- package/dist/Uuid5.js.map +1 -1
- package/dist/Uuid7.d.ts +3 -2
- package/dist/Uuid7.js +4 -3
- package/dist/Uuid7.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +34 -3
- package/src/Cuid.ts +3 -1
- package/src/DateTimes.ts +5 -2
- package/src/Ksuid.ts +82 -0
- package/src/NanoId.ts +1 -1
- package/src/Uuid4.ts +2 -2
- package/src/Uuid5.ts +3 -2
- package/src/Uuid7.ts +4 -3
- package/src/id.test.ts +27 -2
- package/src/index.ts +1 -0
- package/dist/Uuid.d.ts +0 -27
- package/dist/Uuid.js +0 -45
- package/dist/Uuid.js.map +0 -1
- package/dist/Uuid6.d.ts +0 -27
- package/dist/Uuid6.js +0 -104
- package/dist/Uuid6.js.map +0 -1
package/dist/Cuid.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
3
|
+
import * as Schema from 'effect/Schema';
|
|
2
4
|
import { DateTimes } from './DateTimes.js';
|
|
3
5
|
import { GetRandomValues } from './GetRandomValues.js';
|
|
4
6
|
export declare const Cuid: Schema.brand<Schema.filter<Schema.Schema<string, string, never>>, "@typed/id/CUID">;
|
package/dist/Cuid.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
3
|
+
import * as Schema from 'effect/Schema';
|
|
2
4
|
import { DateTimes } from './DateTimes.js';
|
|
3
5
|
import { GetRandomValues } from './GetRandomValues.js';
|
|
4
6
|
// Constants
|
package/dist/Cuid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cuid.js","sourceRoot":"","sources":["../src/Cuid.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Cuid.js","sourceRoot":"","sources":["../src/Cuid.ts"],"names":[],"mappings":"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"}
|
package/dist/DateTimes.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
2
3
|
declare const DateTimes_base: import("effect/Context").TagClass<DateTimes, "DateTimes", {
|
|
3
4
|
readonly now: Effect.Effect<number>;
|
|
4
5
|
readonly date: Effect.Effect<Date>;
|
package/dist/DateTimes.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
2
3
|
export class DateTimes extends Effect.Tag('DateTimes')() {
|
|
3
4
|
static make = (now) => Layer.succeed(this, {
|
|
4
5
|
now,
|
|
@@ -7,10 +8,11 @@ export class DateTimes extends Effect.Tag('DateTimes')() {
|
|
|
7
8
|
static Default = this.make(Effect.clockWith((clock) => clock.currentTimeMillis));
|
|
8
9
|
static Fixed = (base) => Layer.effect(DateTimes, Effect.gen(function* () {
|
|
9
10
|
const clock = yield* Effect.clock;
|
|
11
|
+
const baseN = BigInt(base.getTime());
|
|
10
12
|
const startMillis = yield* clock.currentTimeMillis;
|
|
11
13
|
const now = clock.currentTimeMillis.pipe(Effect.map((millis) =>
|
|
12
14
|
// Use BigInt to avoid floating point precision issues which can break deterministic testing
|
|
13
|
-
Number(
|
|
15
|
+
Number(baseN + BigInt(millis) - BigInt(startMillis))));
|
|
14
16
|
return {
|
|
15
17
|
now,
|
|
16
18
|
date: now.pipe(Effect.map((millis) => new Date(millis))),
|
package/dist/DateTimes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimes.js","sourceRoot":"","sources":["../src/DateTimes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DateTimes.js","sourceRoot":"","sources":["../src/DateTimes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAMnD;IACD,MAAM,CAAU,IAAI,GAAG,CAAC,GAA0B,EAA0B,EAAE,CAC5E,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAClB,GAAG;QACH,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACzD,CAAC,CAAA;IAEJ,MAAM,CAAU,OAAO,GAA2B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEjH,MAAM,CAAU,KAAK,GAAG,CAAC,IAAU,EAA0B,EAAE,CAC7D,KAAK,CAAC,MAAM,CACV,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACpC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAA;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CACtC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACpB,4FAA4F;QAC5F,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CACrD,CACF,CAAA;QAED,OAAO;YACL,GAAG;YACH,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACzD,CAAA;IACH,CAAC,CAAC,CACH,CAAA"}
|
package/dist/Ksuid.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
3
|
+
import { DateTimes } from './DateTimes.js';
|
|
4
|
+
import { GetRandomValues } from './GetRandomValues.js';
|
|
5
|
+
export declare const Ksuid: Schema.brand<Schema.filter<Schema.Schema<string, string, never>>, "@typed/id/KSUID">;
|
|
6
|
+
export type Ksuid = Schema.Schema.Type<typeof Ksuid>;
|
|
7
|
+
export declare const isKsuid: (value: string) => value is Ksuid;
|
|
8
|
+
export declare const makeKsuid: Effect.Effect<Ksuid, never, DateTimes | GetRandomValues>;
|
package/dist/Ksuid.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
3
|
+
import { DateTimes } from './DateTimes.js';
|
|
4
|
+
import { GetRandomValues } from './GetRandomValues.js';
|
|
5
|
+
// Constants
|
|
6
|
+
const EPOCH = 14e11; // 2014-03-01T00:00:00Z
|
|
7
|
+
const TIMESTAMP_BYTES = 4;
|
|
8
|
+
const PAYLOAD_BYTES = 16;
|
|
9
|
+
const TOTAL_BYTES = TIMESTAMP_BYTES + PAYLOAD_BYTES;
|
|
10
|
+
const STRING_LENGTH = 27;
|
|
11
|
+
// Schema
|
|
12
|
+
export const Ksuid = Schema.String.pipe(Schema.pattern(/^[0-9a-zA-Z]{27}$/), Schema.brand('@typed/id/KSUID'));
|
|
13
|
+
export const isKsuid = Schema.is(Ksuid);
|
|
14
|
+
// Utilities
|
|
15
|
+
const base62Chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
16
|
+
const base = BigInt(base62Chars.length);
|
|
17
|
+
function base62Encode(bytes) {
|
|
18
|
+
let number = 0n;
|
|
19
|
+
for (const byte of bytes) {
|
|
20
|
+
number = (number << 8n) + BigInt(byte);
|
|
21
|
+
}
|
|
22
|
+
const chars = new Array(STRING_LENGTH);
|
|
23
|
+
let i = chars.length;
|
|
24
|
+
while (i > 0) {
|
|
25
|
+
i--;
|
|
26
|
+
const remainder = Number(number % base);
|
|
27
|
+
chars[i] = base62Chars[remainder];
|
|
28
|
+
number = number / base;
|
|
29
|
+
}
|
|
30
|
+
return chars.join('');
|
|
31
|
+
}
|
|
32
|
+
// Core Functions
|
|
33
|
+
function ksuidFromSeed({ timestamp, payload }) {
|
|
34
|
+
// Create the combined bytes
|
|
35
|
+
const bytes = new Uint8Array(TOTAL_BYTES);
|
|
36
|
+
// Support for timestamps before the epoch, usually for testing
|
|
37
|
+
if (timestamp < EPOCH) {
|
|
38
|
+
timestamp += EPOCH;
|
|
39
|
+
}
|
|
40
|
+
// Write timestamp (4 bytes, big-endian)
|
|
41
|
+
const seconds = Math.floor((timestamp - EPOCH) / 1000);
|
|
42
|
+
bytes[0] = (seconds >>> 24) & 0xff;
|
|
43
|
+
bytes[1] = (seconds >>> 16) & 0xff;
|
|
44
|
+
bytes[2] = (seconds >>> 8) & 0xff;
|
|
45
|
+
bytes[3] = seconds & 0xff;
|
|
46
|
+
// Copy payload
|
|
47
|
+
bytes.set(payload, TIMESTAMP_BYTES);
|
|
48
|
+
// Encode as base62
|
|
49
|
+
return Ksuid.make(base62Encode(bytes));
|
|
50
|
+
}
|
|
51
|
+
// Public API
|
|
52
|
+
export const makeKsuid = Effect.gen(function* () {
|
|
53
|
+
const timestamp = yield* DateTimes.now;
|
|
54
|
+
const payload = yield* GetRandomValues.apply(PAYLOAD_BYTES);
|
|
55
|
+
return ksuidFromSeed({ timestamp, payload });
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=Ksuid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ksuid.js","sourceRoot":"","sources":["../src/Ksuid.ts"],"names":[],"mappings":"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"}
|
package/dist/NanoId.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Schema } from 'effect';
|
|
2
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
3
3
|
import { GetRandomValues } from './GetRandomValues.js';
|
|
4
4
|
export declare const isNanoId: (id: string) => id is NanoId;
|
|
5
5
|
export declare const NanoId: Schema.brand<typeof Schema.String, "@typed/id/NanoId">;
|
package/dist/NanoId.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Schema } from 'effect';
|
|
2
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
3
3
|
import { GetRandomValues } from './GetRandomValues.js';
|
|
4
4
|
const nanoIdPattern = /[0-9a-zA-Z_-]/;
|
|
5
5
|
export const isNanoId = (id) => nanoIdPattern.test(id);
|
package/dist/NanoId.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NanoId.js","sourceRoot":"","sources":["../src/NanoId.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"NanoId.js","sourceRoot":"","sources":["../src/NanoId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,aAAa,GAAG,eAAe,CAAA;AAErC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAgB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE5E,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;AA2B1E,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IAC9C,IAAI,IAAI,EAAE,CAAA;IACV,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACd,WAAW;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;SAAM,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACrB,QAAQ;QACR,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC/C,CAAC;SAAM,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAU,EAAE,CACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,cAAc,GACzB,eAAe,CAAC,KAAK,CAAC,EAAE,CAAQ,CAAA;AAElC,MAAM,CAAC,MAAM,UAAU,GAAkD,MAAM,CAAC,GAAG,CACjF,cAAc,EACd,MAAM,CACP,CAAA"}
|
package/dist/Uuid4.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
2
3
|
import { GetRandomValues } from './GetRandomValues.js';
|
|
3
|
-
import { Schema } from 'effect';
|
|
4
4
|
export declare const Uuid4: Schema.brand<typeof Schema.UUID, "@typed/id/UUID4">;
|
|
5
5
|
export type Uuid4 = Schema.Schema.Type<typeof Uuid4>;
|
|
6
6
|
export declare const isUuid4: (value: string) => value is Uuid4;
|
package/dist/Uuid4.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
2
3
|
import { GetRandomValues } from './GetRandomValues.js';
|
|
3
|
-
import { Schema } from 'effect';
|
|
4
4
|
import { uuidStringify } from './UuidStringify.js';
|
|
5
5
|
export const Uuid4 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID4'));
|
|
6
6
|
export const isUuid4 = Schema.is(Uuid4);
|
|
@@ -9,6 +9,6 @@ function uuid4FromSeed(seed) {
|
|
|
9
9
|
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
10
10
|
seed[6] = (seed[6] & 0x0f) | 0x40;
|
|
11
11
|
seed[8] = (seed[8] & 0x3f) | 0x80;
|
|
12
|
-
return uuidStringify(seed);
|
|
12
|
+
return Uuid4.make(uuidStringify(seed));
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=Uuid4.js.map
|
package/dist/Uuid4.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Uuid4.js","sourceRoot":"","sources":["../src/Uuid4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"Uuid4.js","sourceRoot":"","sources":["../src/Uuid4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,OAAO,GAAsC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;AAE1E,MAAM,CAAC,MAAM,SAAS,GAAiD,MAAM,CAAC,GAAG,CAC/E,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,EACzB,aAAa,CACd,CAAA;AAED,SAAS,aAAa,CAAC,IAAgB;IACrC,gEAAgE;IAChE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACjC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;AACxC,CAAC"}
|
package/dist/Uuid5.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
-
import
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
3
|
+
import * as Schema from 'effect/Schema';
|
|
3
4
|
export declare const Uuid5: Schema.brand<typeof Schema.UUID, "@typed/id/UUID5">;
|
|
4
5
|
export type Uuid5 = Schema.Schema.Type<typeof Uuid5>;
|
|
5
6
|
export declare const isUuid5: (value: string) => value is Uuid5;
|
package/dist/Uuid5.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
-
import
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
3
|
+
import * as Schema from 'effect/Schema';
|
|
3
4
|
import { uuidStringify } from './UuidStringify.js';
|
|
4
5
|
export const Uuid5 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID5'));
|
|
5
6
|
export const isUuid5 = Schema.is(Uuid5);
|
|
@@ -42,7 +43,7 @@ export function makeUuid5(namespace, name) {
|
|
|
42
43
|
// Set version (5) and variant bits
|
|
43
44
|
result[6] = (result[6] & 0x0f) | 0x50; // version 5
|
|
44
45
|
result[8] = (result[8] & 0x3f) | 0x80; // variant 1
|
|
45
|
-
return uuidStringify(result);
|
|
46
|
+
return Uuid5.make(uuidStringify(result));
|
|
46
47
|
});
|
|
47
48
|
}
|
|
48
49
|
//# sourceMappingURL=Uuid5.js.map
|
package/dist/Uuid5.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Uuid5.js","sourceRoot":"","sources":["../src/Uuid5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"Uuid5.js","sourceRoot":"","sources":["../src/Uuid5.ts"],"names":[],"mappings":"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"}
|
package/dist/Uuid7.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
3
|
+
import * as Schema from 'effect/Schema';
|
|
4
4
|
import { DateTimes } from './DateTimes.js';
|
|
5
|
+
import { GetRandomValues } from './GetRandomValues.js';
|
|
5
6
|
export declare const Uuid7: Schema.brand<typeof Schema.UUID, "@typed/id/UUID7">;
|
|
6
7
|
export type Uuid7 = Schema.Schema.Type<typeof Uuid7>;
|
|
7
8
|
export declare const isUuid7: (value: string) => value is Uuid7;
|
package/dist/Uuid7.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect';
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import * as Layer from 'effect/Layer';
|
|
3
|
+
import * as Schema from 'effect/Schema';
|
|
4
4
|
import { DateTimes } from './DateTimes.js';
|
|
5
|
+
import { GetRandomValues } from './GetRandomValues.js';
|
|
5
6
|
import { uuidStringify } from './UuidStringify.js';
|
|
6
7
|
export const Uuid7 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID7'));
|
|
7
8
|
export const isUuid7 = Schema.is(Uuid7);
|
|
@@ -66,6 +67,6 @@ function uuid7FromSeed({ timestamp, seq, randomBytes }) {
|
|
|
66
67
|
result[13] = randomBytes[13];
|
|
67
68
|
result[14] = randomBytes[14];
|
|
68
69
|
result[15] = randomBytes[15];
|
|
69
|
-
return uuidStringify(result);
|
|
70
|
+
return Uuid7.make(uuidStringify(result));
|
|
70
71
|
}
|
|
71
72
|
//# sourceMappingURL=Uuid7.js.map
|
package/dist/Uuid7.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Uuid7.js","sourceRoot":"","sources":["../src/Uuid7.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"Uuid7.js","sourceRoot":"","sources":["../src/Uuid7.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @typed/id
|
|
2
2
|
|
|
3
|
-
A TypeScript library providing common ID format generation using [Effect](https://effect.website/). This package includes implementations for UUID, NanoID, ULID, and
|
|
3
|
+
A TypeScript library providing common ID format generation using [Effect](https://effect.website/). This package includes implementations for UUID, NanoID, ULID, CUID2, and KSUID generation with a focus on type safety and functional programming principles.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -21,9 +21,16 @@ yarn add @typed/id effect
|
|
|
21
21
|
- NanoID
|
|
22
22
|
- ULID
|
|
23
23
|
- CUID2
|
|
24
|
+
- KSUID
|
|
24
25
|
- ⚡ Efficient and secure random value generation
|
|
25
26
|
- 📦 Zero dependencies (except Effect)
|
|
26
27
|
|
|
28
|
+
## Stackblitz
|
|
29
|
+
|
|
30
|
+
Check the console to see the outputs
|
|
31
|
+
|
|
32
|
+
> https://stackblitz.com/edit/vitejs-vite-eukvweq2?file=src%2Fmain.ts
|
|
33
|
+
|
|
27
34
|
## Usage
|
|
28
35
|
|
|
29
36
|
```typescript
|
|
@@ -41,6 +48,7 @@ import {
|
|
|
41
48
|
makeUlid,
|
|
42
49
|
makeCuid,
|
|
43
50
|
CuidState,
|
|
51
|
+
makeKsuid,
|
|
44
52
|
} from '@typed/id'
|
|
45
53
|
|
|
46
54
|
// Generate a UUID v4 (random)
|
|
@@ -53,7 +61,7 @@ await makeUuid4.pipe(
|
|
|
53
61
|
|
|
54
62
|
// Generate a UUID v5 (namespace + name based)
|
|
55
63
|
await makeUuid5(Uuid5Namespace.URL, 'https://example.com').pipe(
|
|
56
|
-
Effect.provide(Sha1.Default),
|
|
64
|
+
Effect.provide([GetRandomValues.CryptoRandom, DateTimes.Default, Sha1.Default]),
|
|
57
65
|
Effect.flatMap(Effect.log),
|
|
58
66
|
Effect.runPromise
|
|
59
67
|
)
|
|
@@ -92,6 +100,14 @@ await makeCuid.pipe(
|
|
|
92
100
|
Effect.runPromise
|
|
93
101
|
)
|
|
94
102
|
// Output: "clh3aqnd900003b64zpka3df"
|
|
103
|
+
|
|
104
|
+
// Generate a KSUID
|
|
105
|
+
await makeKsuid.pipe(
|
|
106
|
+
Effect.provide([GetRandomValues.CryptoRandom, DateTimes.Default]),
|
|
107
|
+
Effect.flatMap(Effect.log),
|
|
108
|
+
Effect.runPromise
|
|
109
|
+
)
|
|
110
|
+
// Output: "1jIGxyVFPeR4GkCcDPQU2bXhxy9"
|
|
95
111
|
```
|
|
96
112
|
|
|
97
113
|
## API
|
|
@@ -122,7 +138,7 @@ Pre-defined namespaces for UUID v5 generation:
|
|
|
122
138
|
|
|
123
139
|
- `makeCuid`: Generates a CUID2 (Collision-resistant Unique IDentifier)
|
|
124
140
|
- `CuidState.layer(envData)`: Creates a CUID state layer with environment fingerprint
|
|
125
|
-
- `envData`: A string identifying the environment (e.g., 'browser', 'node', 'mobile-ios')
|
|
141
|
+
- `envData`: A string identifying the environment (e.g., 'browser', 'node', 'mobile-ios', uniqueProcessId())
|
|
126
142
|
- Used to help prevent collisions in distributed systems
|
|
127
143
|
- Cached and reused for efficiency
|
|
128
144
|
- Format: 24 characters, starting with a lowercase letter, followed by numbers and lowercase letters
|
|
@@ -133,6 +149,21 @@ Pre-defined namespaces for UUID v5 generation:
|
|
|
133
149
|
- Horizontally scalable
|
|
134
150
|
- Includes timestamp for time-based sorting
|
|
135
151
|
|
|
152
|
+
### KSUID
|
|
153
|
+
|
|
154
|
+
- `makeKsuid`: Generates a KSUID (K-Sortable Unique IDentifier)
|
|
155
|
+
- Format: 27 characters of base62 (0-9A-Za-z)
|
|
156
|
+
- Components:
|
|
157
|
+
- 32-bit timestamp (seconds since 2014-03-01)
|
|
158
|
+
- 128-bit random payload
|
|
159
|
+
- Properties:
|
|
160
|
+
- Time-sortable (lexicographically ordered by time)
|
|
161
|
+
- URL-safe (base62 encoded)
|
|
162
|
+
- Includes entropy for uniqueness
|
|
163
|
+
- Fixed size (27 characters)
|
|
164
|
+
- ~136 years of timestamp space from 2014
|
|
165
|
+
- No special character dependencies
|
|
166
|
+
|
|
136
167
|
## License
|
|
137
168
|
|
|
138
169
|
MIT
|
package/src/Cuid.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from 'effect/Effect'
|
|
2
|
+
import * as Layer from 'effect/Layer'
|
|
3
|
+
import * as Schema from 'effect/Schema'
|
|
2
4
|
import { DateTimes } from './DateTimes.js'
|
|
3
5
|
import { GetRandomValues } from './GetRandomValues.js'
|
|
4
6
|
|
package/src/DateTimes.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from 'effect/Effect'
|
|
2
|
+
import * as Layer from 'effect/Layer'
|
|
2
3
|
|
|
3
4
|
export class DateTimes extends Effect.Tag('DateTimes')<
|
|
4
5
|
DateTimes,
|
|
@@ -20,11 +21,12 @@ export class DateTimes extends Effect.Tag('DateTimes')<
|
|
|
20
21
|
DateTimes,
|
|
21
22
|
Effect.gen(function* () {
|
|
22
23
|
const clock = yield* Effect.clock
|
|
24
|
+
const baseN = BigInt(base.getTime())
|
|
23
25
|
const startMillis = yield* clock.currentTimeMillis
|
|
24
26
|
const now = clock.currentTimeMillis.pipe(
|
|
25
27
|
Effect.map((millis) =>
|
|
26
28
|
// Use BigInt to avoid floating point precision issues which can break deterministic testing
|
|
27
|
-
Number(
|
|
29
|
+
Number(baseN + BigInt(millis) - BigInt(startMillis)),
|
|
28
30
|
),
|
|
29
31
|
)
|
|
30
32
|
|
|
@@ -35,3 +37,4 @@ export class DateTimes extends Effect.Tag('DateTimes')<
|
|
|
35
37
|
}),
|
|
36
38
|
)
|
|
37
39
|
}
|
|
40
|
+
|
package/src/Ksuid.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as Effect from 'effect/Effect'
|
|
2
|
+
import * as Schema from 'effect/Schema'
|
|
3
|
+
import { DateTimes } from './DateTimes.js'
|
|
4
|
+
import { GetRandomValues } from './GetRandomValues.js'
|
|
5
|
+
|
|
6
|
+
// Constants
|
|
7
|
+
const EPOCH = 14e11 // 2014-03-01T00:00:00Z
|
|
8
|
+
const TIMESTAMP_BYTES = 4
|
|
9
|
+
const PAYLOAD_BYTES = 16
|
|
10
|
+
const TOTAL_BYTES = TIMESTAMP_BYTES + PAYLOAD_BYTES
|
|
11
|
+
const STRING_LENGTH = 27
|
|
12
|
+
|
|
13
|
+
// Schema
|
|
14
|
+
export const Ksuid = Schema.String.pipe(
|
|
15
|
+
Schema.pattern(/^[0-9a-zA-Z]{27}$/),
|
|
16
|
+
Schema.brand('@typed/id/KSUID'),
|
|
17
|
+
)
|
|
18
|
+
export type Ksuid = Schema.Schema.Type<typeof Ksuid>
|
|
19
|
+
|
|
20
|
+
export const isKsuid: (value: string) => value is Ksuid = Schema.is(Ksuid)
|
|
21
|
+
|
|
22
|
+
// Types
|
|
23
|
+
type KsuidSeed = {
|
|
24
|
+
readonly timestamp: number
|
|
25
|
+
readonly payload: Uint8Array
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Utilities
|
|
29
|
+
const base62Chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
|
|
30
|
+
const base = BigInt(base62Chars.length)
|
|
31
|
+
|
|
32
|
+
function base62Encode(bytes: Uint8Array): string {
|
|
33
|
+
let number = 0n
|
|
34
|
+
for (const byte of bytes) {
|
|
35
|
+
number = (number << 8n) + BigInt(byte)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const chars: string[] = new Array(STRING_LENGTH)
|
|
39
|
+
let i = chars.length
|
|
40
|
+
|
|
41
|
+
while (i > 0) {
|
|
42
|
+
i--
|
|
43
|
+
const remainder = Number(number % base)
|
|
44
|
+
chars[i] = base62Chars[remainder]
|
|
45
|
+
number = number / base
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return chars.join('')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Core Functions
|
|
52
|
+
function ksuidFromSeed({ timestamp, payload }: KsuidSeed): Ksuid {
|
|
53
|
+
// Create the combined bytes
|
|
54
|
+
const bytes = new Uint8Array(TOTAL_BYTES)
|
|
55
|
+
|
|
56
|
+
// Support for timestamps before the epoch, usually for testing
|
|
57
|
+
if (timestamp < EPOCH) {
|
|
58
|
+
timestamp += EPOCH
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Write timestamp (4 bytes, big-endian)
|
|
62
|
+
const seconds = Math.floor((timestamp - EPOCH) / 1000)
|
|
63
|
+
bytes[0] = (seconds >>> 24) & 0xff
|
|
64
|
+
bytes[1] = (seconds >>> 16) & 0xff
|
|
65
|
+
bytes[2] = (seconds >>> 8) & 0xff
|
|
66
|
+
bytes[3] = seconds & 0xff
|
|
67
|
+
|
|
68
|
+
// Copy payload
|
|
69
|
+
bytes.set(payload, TIMESTAMP_BYTES)
|
|
70
|
+
|
|
71
|
+
// Encode as base62
|
|
72
|
+
return Ksuid.make(base62Encode(bytes))
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Public API
|
|
76
|
+
export const makeKsuid: Effect.Effect<Ksuid, never, DateTimes | GetRandomValues> = Effect.gen(
|
|
77
|
+
function* () {
|
|
78
|
+
const timestamp = yield* DateTimes.now
|
|
79
|
+
const payload = yield* GetRandomValues.apply(PAYLOAD_BYTES)
|
|
80
|
+
return ksuidFromSeed({ timestamp, payload })
|
|
81
|
+
},
|
|
82
|
+
)
|
package/src/NanoId.ts
CHANGED
package/src/Uuid4.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect'
|
|
2
|
+
import * as Schema from 'effect/Schema'
|
|
2
3
|
import { GetRandomValues } from './GetRandomValues.js'
|
|
3
|
-
import { Schema } from 'effect'
|
|
4
4
|
import { uuidStringify } from './UuidStringify.js'
|
|
5
5
|
|
|
6
6
|
export const Uuid4 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID4'))
|
|
@@ -18,5 +18,5 @@ function uuid4FromSeed(seed: Uint8Array): Uuid4 {
|
|
|
18
18
|
seed[6] = (seed[6] & 0x0f) | 0x40
|
|
19
19
|
seed[8] = (seed[8] & 0x3f) | 0x80
|
|
20
20
|
|
|
21
|
-
return uuidStringify(seed)
|
|
21
|
+
return Uuid4.make(uuidStringify(seed))
|
|
22
22
|
}
|
package/src/Uuid5.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect'
|
|
2
|
-
import
|
|
2
|
+
import * as Layer from 'effect/Layer'
|
|
3
|
+
import * as Schema from 'effect/Schema'
|
|
3
4
|
import { uuidStringify } from './UuidStringify.js'
|
|
4
5
|
|
|
5
6
|
export const Uuid5 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID5'))
|
|
@@ -72,6 +73,6 @@ export function makeUuid5(
|
|
|
72
73
|
result[6] = (result[6] & 0x0f) | 0x50 // version 5
|
|
73
74
|
result[8] = (result[8] & 0x3f) | 0x80 // variant 1
|
|
74
75
|
|
|
75
|
-
return uuidStringify(result)
|
|
76
|
+
return Uuid5.make(uuidStringify(result))
|
|
76
77
|
})
|
|
77
78
|
}
|
package/src/Uuid7.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as Effect from 'effect/Effect'
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import * as Layer from 'effect/Layer'
|
|
3
|
+
import * as Schema from 'effect/Schema'
|
|
4
4
|
import { DateTimes } from './DateTimes.js'
|
|
5
|
+
import { GetRandomValues } from './GetRandomValues.js'
|
|
5
6
|
import { uuidStringify } from './UuidStringify.js'
|
|
6
7
|
|
|
7
8
|
export const Uuid7 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID7'))
|
|
@@ -100,5 +101,5 @@ function uuid7FromSeed({ timestamp, seq, randomBytes }: Uuid7Seed): Uuid7 {
|
|
|
100
101
|
result[14] = randomBytes[14]
|
|
101
102
|
result[15] = randomBytes[15]
|
|
102
103
|
|
|
103
|
-
return uuidStringify(result)
|
|
104
|
+
return Uuid7.make(uuidStringify(result))
|
|
104
105
|
}
|
package/src/id.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from '@effect/vitest'
|
|
2
|
-
import { Effect, flow } from 'effect'
|
|
2
|
+
import { Effect, flow, TestClock } from 'effect'
|
|
3
3
|
import {
|
|
4
4
|
DateTimes,
|
|
5
5
|
GetRandomValues,
|
|
@@ -17,12 +17,15 @@ import {
|
|
|
17
17
|
makeCuid,
|
|
18
18
|
isCuid,
|
|
19
19
|
CuidState,
|
|
20
|
+
makeKsuid,
|
|
21
|
+
isKsuid,
|
|
20
22
|
} from './index.js'
|
|
21
23
|
|
|
24
|
+
|
|
22
25
|
const makeTestValues = (length: number) => {
|
|
23
26
|
const values = new Uint8Array(length)
|
|
24
27
|
for (let i = 0; i < length; ++i) {
|
|
25
|
-
values[i] = i
|
|
28
|
+
values[i] = i % 256
|
|
26
29
|
}
|
|
27
30
|
return values
|
|
28
31
|
}
|
|
@@ -105,4 +108,26 @@ describe(__filename, () => {
|
|
|
105
108
|
}).pipe(provideTestValues),
|
|
106
109
|
)
|
|
107
110
|
})
|
|
111
|
+
|
|
112
|
+
describe('Ksuid', () => {
|
|
113
|
+
it.effect('generates a KSUID', () =>
|
|
114
|
+
Effect.gen(function* () {
|
|
115
|
+
console.log(yield* DateTimes.now)
|
|
116
|
+
const id = yield* makeKsuid
|
|
117
|
+
expect(id.length).toEqual(27)
|
|
118
|
+
expect(isKsuid(id)).toEqual(true)
|
|
119
|
+
expect(id).toMatchInlineSnapshot(`"00000000SYW7RiJxkEgOGusQGwp"`)
|
|
120
|
+
|
|
121
|
+
yield* TestClock.adjust(1000)
|
|
122
|
+
|
|
123
|
+
console.log(yield* DateTimes.now)
|
|
124
|
+
|
|
125
|
+
// Generate another to ensure uniqueness
|
|
126
|
+
const id2 = yield* makeKsuid
|
|
127
|
+
expect(id2).not.toEqual(id)
|
|
128
|
+
expect(isKsuid(id2)).toEqual(true)
|
|
129
|
+
expect(id2).toMatchInlineSnapshot(`"000007n4UlmTXBzjUOTX3nzfyYx"`)
|
|
130
|
+
}).pipe(provideTestValues),
|
|
131
|
+
)
|
|
132
|
+
})
|
|
108
133
|
})
|
package/src/index.ts
CHANGED
package/dist/Uuid.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as Effect from 'effect/Effect';
|
|
2
|
-
import { GetRandomValues } from './GetRandomValues.js';
|
|
3
|
-
import { Schema } from 'effect';
|
|
4
|
-
export declare const isUuid: (value: string) => value is Uuid;
|
|
5
|
-
export declare const Uuid: Schema.brand<typeof Schema.UUID, "@typed/id/UUID">;
|
|
6
|
-
export type Uuid = Schema.Schema.Type<typeof Uuid>;
|
|
7
|
-
export type UuidSeed = readonly [
|
|
8
|
-
zero: number,
|
|
9
|
-
one: number,
|
|
10
|
-
two: number,
|
|
11
|
-
three: number,
|
|
12
|
-
four: number,
|
|
13
|
-
five: number,
|
|
14
|
-
six: number,
|
|
15
|
-
seven: number,
|
|
16
|
-
eight: number,
|
|
17
|
-
nine: number,
|
|
18
|
-
ten: number,
|
|
19
|
-
eleven: number,
|
|
20
|
-
twelve: number,
|
|
21
|
-
thirteen: number,
|
|
22
|
-
fourteen: number,
|
|
23
|
-
fifteen: number
|
|
24
|
-
];
|
|
25
|
-
export declare const makeUuidSeed: Effect.Effect<UuidSeed, never, GetRandomValues>;
|
|
26
|
-
export declare const makeUuid: Effect.Effect<Uuid, never, GetRandomValues>;
|
|
27
|
-
export declare function uuid4(seed: UuidSeed): Uuid;
|
package/dist/Uuid.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import * as Effect from 'effect/Effect';
|
|
2
|
-
import { GetRandomValues } from './GetRandomValues.js';
|
|
3
|
-
import { Schema } from 'effect';
|
|
4
|
-
export const isUuid = Schema.is(Schema.UUID);
|
|
5
|
-
export const Uuid = Schema.UUID.pipe(Schema.brand('@typed/id/UUID'));
|
|
6
|
-
export const makeUuidSeed = GetRandomValues.apply(32);
|
|
7
|
-
export const makeUuid = Effect.map(makeUuidSeed, uuid4);
|
|
8
|
-
/**
|
|
9
|
-
* Convert array of 16 byte values to UUID string format of the form:
|
|
10
|
-
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
11
|
-
*/
|
|
12
|
-
const byteToHex = [];
|
|
13
|
-
for (let i = 0; i < 256; ++i) {
|
|
14
|
-
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
15
|
-
}
|
|
16
|
-
export function uuid4(seed) {
|
|
17
|
-
// Note: Be careful editing this code! It's been tuned for performance
|
|
18
|
-
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
19
|
-
//
|
|
20
|
-
// Note to future-self: No, you can't remove the `toLowerCase()` call.
|
|
21
|
-
// REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
|
|
22
|
-
return (
|
|
23
|
-
// biome-ignore lint/style/useTemplate: <explanation>
|
|
24
|
-
byteToHex[seed[0]] +
|
|
25
|
-
byteToHex[seed[1]] +
|
|
26
|
-
byteToHex[seed[2]] +
|
|
27
|
-
byteToHex[seed[3]] +
|
|
28
|
-
'-' +
|
|
29
|
-
byteToHex[seed[4]] +
|
|
30
|
-
byteToHex[seed[5]] +
|
|
31
|
-
'-' +
|
|
32
|
-
byteToHex[seed[6]] +
|
|
33
|
-
byteToHex[seed[7]] +
|
|
34
|
-
'-' +
|
|
35
|
-
byteToHex[seed[8]] +
|
|
36
|
-
byteToHex[seed[9]] +
|
|
37
|
-
'-' +
|
|
38
|
-
byteToHex[seed[10]] +
|
|
39
|
-
byteToHex[seed[11]] +
|
|
40
|
-
byteToHex[seed[12]] +
|
|
41
|
-
byteToHex[seed[13]] +
|
|
42
|
-
byteToHex[seed[14]] +
|
|
43
|
-
byteToHex[seed[15]]).toLowerCase();
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=Uuid.js.map
|
package/dist/Uuid.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Uuid.js","sourceRoot":"","sources":["../src/Uuid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,CAAC,MAAM,MAAM,GAAqC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAA;AAErF,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;AAsBpE,MAAM,CAAC,MAAM,YAAY,GAAoD,eAAe,CAAC,KAAK,CAChG,EAAE,CACI,CAAA;AAER,MAAM,CAAC,MAAM,QAAQ,GAAgD,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;AAEpG;;;GAGG;AACH,MAAM,SAAS,GAAkB,EAAE,CAAA;AAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IAC7B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAc;IAClC,uEAAuE;IACvE,oFAAoF;IACpF,EAAE;IACF,sEAAsE;IACtE,uEAAuE;IACvE,OACE;IACE,qDAAqD;IACrD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG;QACH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG;QACH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG;QACH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG;QACH,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CACpB,CAAC,WAAW,EACd,CAAA;AACH,CAAC"}
|
package/dist/Uuid6.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as Effect from 'effect/Effect';
|
|
2
|
-
import { GetRandomValues } from './GetRandomValues.js';
|
|
3
|
-
import { Layer, Schema } from 'effect';
|
|
4
|
-
import { DateTimes } from './DateTimes.js';
|
|
5
|
-
export declare const Uuid6: Schema.brand<typeof Schema.UUID, "@typed/id/UUID6">;
|
|
6
|
-
export type Uuid6 = Schema.Schema.Type<typeof Uuid6>;
|
|
7
|
-
export declare const isUuid6: (value: string) => value is Uuid6;
|
|
8
|
-
export type Uuid6Seed = {
|
|
9
|
-
readonly msecs: number;
|
|
10
|
-
readonly nsecs: number;
|
|
11
|
-
readonly clockSeq: number;
|
|
12
|
-
readonly nodeId: Uint8Array;
|
|
13
|
-
};
|
|
14
|
-
declare const Uuid6State_base: import("effect/Context").TagClass<Uuid6State, "Uuid6State", {
|
|
15
|
-
readonly next: Effect.Effect<Uuid6Seed>;
|
|
16
|
-
}> & Effect.Tag.Proxy<Uuid6State, {
|
|
17
|
-
readonly next: Effect.Effect<Uuid6Seed>;
|
|
18
|
-
}> & {
|
|
19
|
-
use: <X>(body: (_: {
|
|
20
|
-
readonly next: Effect.Effect<Uuid6Seed>;
|
|
21
|
-
}) => X) => [X] extends [Effect.Effect<infer A, infer E, infer R>] ? Effect.Effect<A, E, R | Uuid6State> : [X] extends [PromiseLike<infer A_1>] ? Effect.Effect<A_1, import("effect/Cause").UnknownException, Uuid6State> : Effect.Effect<X, never, Uuid6State>;
|
|
22
|
-
};
|
|
23
|
-
export declare class Uuid6State extends Uuid6State_base {
|
|
24
|
-
static Default: Layer.Layer<Uuid6State, never, GetRandomValues | DateTimes>;
|
|
25
|
-
}
|
|
26
|
-
export declare const makeUuid6: Effect.Effect<Uuid6, never, Uuid6State>;
|
|
27
|
-
export {};
|
package/dist/Uuid6.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import * as Effect from 'effect/Effect';
|
|
2
|
-
import { GetRandomValues } from './GetRandomValues.js';
|
|
3
|
-
import { Layer, Schema } from 'effect';
|
|
4
|
-
import { DateTimes } from './DateTimes.js';
|
|
5
|
-
import { uuidStringify } from './UuidStringify.js';
|
|
6
|
-
export const Uuid6 = Schema.UUID.pipe(Schema.brand('@typed/id/UUID6'));
|
|
7
|
-
export const isUuid6 = Schema.is(Uuid6);
|
|
8
|
-
export class Uuid6State extends Effect.Tag('Uuid6State')() {
|
|
9
|
-
static Default = Layer.effect(this, Effect.gen(function* () {
|
|
10
|
-
const { now } = yield* DateTimes;
|
|
11
|
-
const getRandomValues = yield* GetRandomValues;
|
|
12
|
-
const state = {
|
|
13
|
-
msecs: Number.NEGATIVE_INFINITY,
|
|
14
|
-
nsecs: 0,
|
|
15
|
-
clockSeq: -1,
|
|
16
|
-
nodeId: undefined,
|
|
17
|
-
};
|
|
18
|
-
function updateState(currentTime, randomBytes) {
|
|
19
|
-
if (currentTime === state.msecs) {
|
|
20
|
-
// Same msec-interval = simulate higher clock resolution by bumping `nsecs`
|
|
21
|
-
state.nsecs++;
|
|
22
|
-
// Check for `nsecs` overflow (nsecs is capped at 10K intervals / msec)
|
|
23
|
-
if (state.nsecs >= 10000) {
|
|
24
|
-
state.nodeId = undefined;
|
|
25
|
-
state.nsecs = 0;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
else if (currentTime > state.msecs) {
|
|
29
|
-
// Reset nsec counter when clock advances to a new msec interval
|
|
30
|
-
state.nsecs = 0;
|
|
31
|
-
}
|
|
32
|
-
else if (currentTime < state.msecs) {
|
|
33
|
-
// Handle clock regression
|
|
34
|
-
state.nodeId = undefined;
|
|
35
|
-
}
|
|
36
|
-
// Init node and clock sequence if needed
|
|
37
|
-
if (!state.nodeId) {
|
|
38
|
-
state.nodeId = randomBytes.slice(10, 16);
|
|
39
|
-
// Set multicast bit
|
|
40
|
-
state.nodeId[0] |= 0x01;
|
|
41
|
-
// Clock sequence must be randomized
|
|
42
|
-
state.clockSeq = ((randomBytes[8] << 8) | randomBytes[9]) & 0x3fff;
|
|
43
|
-
}
|
|
44
|
-
state.msecs = currentTime;
|
|
45
|
-
return {
|
|
46
|
-
msecs: state.msecs,
|
|
47
|
-
nsecs: state.nsecs,
|
|
48
|
-
clockSeq: state.clockSeq,
|
|
49
|
-
nodeId: state.nodeId,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
next: Effect.gen(function* () {
|
|
54
|
-
const timestamp = yield* now;
|
|
55
|
-
const randomBytes = yield* getRandomValues(16);
|
|
56
|
-
return updateState(timestamp, randomBytes);
|
|
57
|
-
}),
|
|
58
|
-
};
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
export const makeUuid6 = Effect.map(Uuid6State.next, uuid6FromSeed);
|
|
62
|
-
function uuid6FromSeed({ msecs, nsecs, clockSeq, nodeId }) {
|
|
63
|
-
// First generate the fields as they would be in a v1 UUID
|
|
64
|
-
const result = new Uint8Array(16);
|
|
65
|
-
// Offset to Gregorian epoch
|
|
66
|
-
msecs += 12219292800000;
|
|
67
|
-
// `time_low`
|
|
68
|
-
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
69
|
-
const time_low_bytes = new Uint8Array([
|
|
70
|
-
(tl >>> 24) & 0xff,
|
|
71
|
-
(tl >>> 16) & 0xff,
|
|
72
|
-
(tl >>> 8) & 0xff,
|
|
73
|
-
tl & 0xff,
|
|
74
|
-
]);
|
|
75
|
-
// `time_mid` and `time_high`
|
|
76
|
-
const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
|
|
77
|
-
const time_mid_high_bytes = new Uint8Array([
|
|
78
|
-
(tmh >>> 8) & 0xff,
|
|
79
|
-
tmh & 0xff,
|
|
80
|
-
((tmh >>> 24) & 0xf) | 0x10, // include version 1
|
|
81
|
-
(tmh >>> 16) & 0xff,
|
|
82
|
-
]);
|
|
83
|
-
result[0] = ((time_mid_high_bytes[2] & 0x0f) << 4) | ((time_mid_high_bytes[3] >> 4) & 0x0f);
|
|
84
|
-
result[1] = ((time_mid_high_bytes[3] & 0x0f) << 4) | ((time_mid_high_bytes[0] & 0xf0) >> 4);
|
|
85
|
-
result[2] = ((time_mid_high_bytes[0] & 0x0f) << 4) | ((time_mid_high_bytes[1] & 0xf0) >> 4);
|
|
86
|
-
result[3] = ((time_mid_high_bytes[1] & 0x0f) << 4) | ((time_low_bytes[0] & 0xf0) >> 4);
|
|
87
|
-
result[4] = ((time_low_bytes[0] & 0x0f) << 4) | ((time_low_bytes[1] & 0xf0) >> 4);
|
|
88
|
-
result[5] = ((time_low_bytes[1] & 0x0f) << 4) | ((time_low_bytes[2] & 0xf0) >> 4);
|
|
89
|
-
result[6] = 0x60 | (time_low_bytes[2] & 0x0f);
|
|
90
|
-
result[7] = time_low_bytes[3];
|
|
91
|
-
// clock_seq_hi_and_reserved
|
|
92
|
-
result[8] = (clockSeq >>> 8) | 0x80; // variant bits
|
|
93
|
-
// clock_seq_low
|
|
94
|
-
result[9] = clockSeq & 0xff;
|
|
95
|
-
// node
|
|
96
|
-
result[10] = nodeId[0];
|
|
97
|
-
result[11] = nodeId[1];
|
|
98
|
-
result[12] = nodeId[2];
|
|
99
|
-
result[13] = nodeId[3];
|
|
100
|
-
result[14] = nodeId[4];
|
|
101
|
-
result[15] = nodeId[5];
|
|
102
|
-
return uuidStringify(result);
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=Uuid6.js.map
|
package/dist/Uuid6.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Uuid6.js","sourceRoot":"","sources":["../src/Uuid6.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,OAAO,GAAsC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;AAS1E,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAKrD;IACD,MAAM,CAAC,OAAO,GAAgE,KAAK,CAAC,MAAM,CACxF,IAAI,EACJ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;QAChC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;QAE9C,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,MAAM,CAAC,iBAAiB;YAC/B,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC,CAAC;YACZ,MAAM,EAAE,SAAmC;SAC5C,CAAA;QAED,SAAS,WAAW,CAAC,WAAmB,EAAE,WAAuB;YAC/D,IAAI,WAAW,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChC,2EAA2E;gBAC3E,KAAK,CAAC,KAAK,EAAE,CAAA;gBAEb,uEAAuE;gBACvE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;oBACxB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;gBACjB,CAAC;YACH,CAAC;iBAAM,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrC,gEAAgE;gBAChE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;YACjB,CAAC;iBAAM,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrC,0BAA0B;gBAC1B,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;YAC1B,CAAC;YAED,yCAAyC;YACzC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBACxC,oBAAoB;gBACpB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;gBAEvB,oCAAoC;gBACpC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;YACpE,CAAC;YAED,KAAK,CAAC,KAAK,GAAG,WAAW,CAAA;YAEzB,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAA;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAA;gBAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;gBAC9C,OAAO,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAC5C,CAAC,CAAC;SACH,CAAA;IACH,CAAC,CAAC,CACH,CAAA;;AAGH,MAAM,CAAC,MAAM,SAAS,GAA4C,MAAM,CAAC,GAAG,CAC1E,UAAU,CAAC,IAAI,EACf,aAAa,CACd,CAAA;AAED,SAAS,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAa;IAClE,0DAA0D;IAC1D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAEjC,4BAA4B;IAC5B,KAAK,IAAI,cAAc,CAAA;IAEvB,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,WAAW,CAAA;IAC9D,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;QACpC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;QAClB,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;QAClB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI;QACjB,EAAE,GAAG,IAAI;KACV,CAAC,CAAA;IAEF,6BAA6B;IAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAA;IACvD,MAAM,mBAAmB,GAAG,IAAI,UAAU,CAAC;QACzC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI;QAClB,GAAG,GAAG,IAAI;QACV,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,oBAAoB;QACjD,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI;KACpB,CAAC,CAAA;IAEF,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC3F,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3F,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3F,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACtF,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACjF,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACjF,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC7C,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;IAE7B,4BAA4B;IAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA,CAAC,eAAe;IAEnD,gBAAgB;IAChB,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAA;IAE3B,OAAO;IACP,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAEtB,OAAO,aAAa,CAAC,MAAM,CAAU,CAAA;AACvC,CAAC"}
|