@typed/id 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present The Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @typed/id
2
+
3
+ > WIP
4
+
5
+ Docs: https://tylors.github.io/typed/docs/id
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.webCrypto = exports.pseudoRandom = exports.nodeCrypto = exports.getRandomValues = exports.GetRandomValues = void 0;
7
+ var Context = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@typed/context"));
8
+ var _effect = /*#__PURE__*/require("effect");
9
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
10
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /**
11
+ * @since 1.0.0
12
+ */
13
+ /**
14
+ * @since 1.0.0
15
+ */
16
+ const GetRandomValues = exports.GetRandomValues = /*#__PURE__*/Context.Fn()(_ => class GetRandomValues extends _("@typed/id/GetRandomValues") {});
17
+ const getRandomValuesWeb = (crypto, length) => crypto.getRandomValues(new Uint8Array(length));
18
+ /**
19
+ * @since 1.0.0
20
+ */
21
+ const webCrypto = crypto => GetRandomValues.implement(length => _effect.Effect.sync(() => getRandomValuesWeb(crypto, length)));
22
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
23
+ exports.webCrypto = webCrypto;
24
+ const getRandomValuesNode = (crypto, length) => {
25
+ const bytes = crypto.randomBytes(length);
26
+ const view = new Uint8Array(length);
27
+ for (let i = 0; i < bytes.length; ++i) {
28
+ view[i] = bytes[i];
29
+ }
30
+ return view;
31
+ };
32
+ /**
33
+ * @since 1.0.0
34
+ */
35
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
36
+ const nodeCrypto = crypto => GetRandomValues.implement(length => _effect.Effect.sync(() => getRandomValuesNode(crypto, length)));
37
+ /**
38
+ * @since 1.0.0
39
+ */
40
+ exports.nodeCrypto = nodeCrypto;
41
+ const pseudoRandom = exports.pseudoRandom = /*#__PURE__*/GetRandomValues.implement(length => _effect.Effect.gen(function* (_) {
42
+ const view = new Uint8Array(length);
43
+ for (let i = 0; i < length; ++i) {
44
+ view[i] = yield* _(_effect.Random.nextInt);
45
+ }
46
+ return view;
47
+ }));
48
+ /**
49
+ * @since 1.0.0
50
+ */
51
+ const getRandomValues = exports.getRandomValues = /*#__PURE__*/GetRandomValues.layer( /*#__PURE__*/_effect.Effect.gen(function* (_) {
52
+ if (typeof crypto === "undefined") {
53
+ const crypto = yield* _(_effect.Effect.promise(() => Promise.resolve().then(() => _interopRequireWildcard(require("node:crypto")))));
54
+ return length => _effect.Effect.sync(() => getRandomValuesNode(crypto, length));
55
+ } else {
56
+ return length => _effect.Effect.sync(() => getRandomValuesWeb(crypto, length));
57
+ }
58
+ }));
59
+ //# sourceMappingURL=GetRandomValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetRandomValues.js","names":["Context","_interopRequireWildcard","require","_effect","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","GetRandomValues","exports","Fn","_","getRandomValuesWeb","crypto","length","getRandomValues","Uint8Array","webCrypto","implement","Effect","sync","getRandomValuesNode","bytes","randomBytes","view","nodeCrypto","pseudoRandom","gen","Random","nextInt","layer","promise","Promise","resolve","then"],"sources":["../../src/GetRandomValues.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.nanoId = exports.makeNanoIdSeed = exports.makeNanoId = exports.isNanoId = exports.NanoId = void 0;
7
+ var _effect = /*#__PURE__*/require("effect");
8
+ var _GetRandomValues = /*#__PURE__*/require("./GetRandomValues");
9
+ /**
10
+ * @since 1.0.0
11
+ */
12
+
13
+ const nanoIdPattern = /[0-9a-zA-Z_-]/;
14
+ /**
15
+ * @since 1.0.0
16
+ */
17
+ const isNanoId = id => nanoIdPattern.test(id);
18
+ /**
19
+ * @since 1.0.0
20
+ */
21
+ exports.isNanoId = isNanoId;
22
+ const NanoId = exports.NanoId = /*#__PURE__*/_effect.Brand.refined(isNanoId, input => _effect.Brand.error(`Expected a NanoID but received ${input}.`));
23
+ const numToCharacter = byte => {
24
+ byte &= 63;
25
+ if (byte < 36) {
26
+ // `0-9a-z`
27
+ return byte.toString(36);
28
+ } else if (byte < 62) {
29
+ // `A-Z`
30
+ return (byte - 26).toString(36).toUpperCase();
31
+ } else if (byte > 62) {
32
+ return "-";
33
+ } else {
34
+ return "_";
35
+ }
36
+ };
37
+ const characters = /*#__PURE__*/Array.from({
38
+ length: 64
39
+ }, (_, i) => {
40
+ return numToCharacter(i);
41
+ });
42
+ /**
43
+ * @since 1.0.0
44
+ */
45
+ const nanoId = seed => NanoId(seed.reduce((id, x) => id + characters[x], ""));
46
+ /**
47
+ * @since 1.0.0
48
+ */
49
+ exports.nanoId = nanoId;
50
+ const makeNanoIdSeed = exports.makeNanoIdSeed = /*#__PURE__*/_GetRandomValues.GetRandomValues.apply(21);
51
+ /**
52
+ * @since 1.0.0
53
+ */
54
+ const makeNanoId = exports.makeNanoId = /*#__PURE__*/_effect.Effect.map(makeNanoIdSeed, nanoId);
55
+ //# sourceMappingURL=NanoId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NanoId.js","names":["_effect","require","_GetRandomValues","nanoIdPattern","isNanoId","id","test","exports","NanoId","Brand","refined","input","error","numToCharacter","byte","toString","toUpperCase","characters","Array","from","length","_","i","nanoId","seed","reduce","x","makeNanoIdSeed","GetRandomValues","apply","makeNanoId","Effect","map"],"sources":["../../src/NanoId.ts"],"sourcesContent":[null],"mappings":";;;;;;AAIA,IAAAA,OAAA,gBAAAC,OAAA;AACA,IAAAC,gBAAA,gBAAAD,OAAA;AALA;;;;AAOA,MAAME,aAAa,GAAG,eAAe;AAErC;;;AAGO,MAAMC,QAAQ,GAAIC,EAAU,IAAmBF,aAAa,CAACG,IAAI,CAACD,EAAE,CAAC;AAO5E;;;AAAAE,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAGO,MAAMI,MAAM,GAAAD,OAAA,CAAAC,MAAA,gBAAGC,aAAK,CAACC,OAAO,CACjCN,QAAQ,EACPO,KAAK,IAAKF,aAAK,CAACG,KAAK,CAAC,kCAAkCD,KAAK,GAAG,CAAC,CACnE;AA6BD,MAAME,cAAc,GAAIC,IAAY,IAAY;EAC9CA,IAAI,IAAI,EAAE;EACV,IAAIA,IAAI,GAAG,EAAE,EAAE;IACb;IACA,OAAOA,IAAI,CAACC,QAAQ,CAAC,EAAE,CAAC;EAC1B,CAAC,MAAM,IAAID,IAAI,GAAG,EAAE,EAAE;IACpB;IACA,OAAO,CAACA,IAAI,GAAG,EAAE,EAAEC,QAAQ,CAAC,EAAE,CAAC,CAACC,WAAW,EAAE;EAC/C,CAAC,MAAM,IAAIF,IAAI,GAAG,EAAE,EAAE;IACpB,OAAO,GAAG;EACZ,CAAC,MAAM;IACL,OAAO,GAAG;EACZ;AACF,CAAC;AAED,MAAMG,UAAU,gBAAGC,KAAK,CAACC,IAAI,CAAC;EAAEC,MAAM,EAAE;AAAE,CAAE,EAAE,CAACC,CAAC,EAAEC,CAAC,KAAI;EACrD,OAAOT,cAAc,CAACS,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF;;;AAGO,MAAMC,MAAM,GAAIC,IAAgB,IAAahB,MAAM,CAACgB,IAAI,CAACC,MAAM,CAAC,CAACpB,EAAE,EAAEqB,CAAC,KAAKrB,EAAE,GAAGY,UAAU,CAACS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE1G;;;AAAAnB,OAAA,CAAAgB,MAAA,GAAAA,MAAA;AAGO,MAAMI,cAAc,GAAApB,OAAA,CAAAoB,cAAA,gBAAsDC,gCAAe,CAACC,KAAK,CAAC,EAAE,CAAQ;AAEjH;;;AAGO,MAAMC,UAAU,GAAAvB,OAAA,CAAAuB,UAAA,gBAAkDC,cAAM,CAACC,GAAG,CAACL,cAAc,EAAEJ,MAAM,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.uuid = exports.nanoId = void 0;
7
+ var Schema = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/schema/Schema"));
8
+ var NanoId = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./NanoId"));
9
+ var Uuid = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Uuid"));
10
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ /**
13
+ * @since 1.0.0
14
+ */
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ */
19
+ const uuid = exports.uuid = /*#__PURE__*/Schema.string.pipe( /*#__PURE__*/Schema.fromBrand(Uuid.Uuid));
20
+ /**
21
+ * @since 1.0.0
22
+ */
23
+ const nanoId = exports.nanoId = /*#__PURE__*/Schema.string.pipe( /*#__PURE__*/Schema.fromBrand(NanoId.NanoId));
24
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","names":["Schema","_interopRequireWildcard","require","NanoId","Uuid","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","uuid","exports","string","pipe","fromBrand","nanoId"],"sources":["../../src/Schema.ts"],"sourcesContent":[null],"mappings":";;;;;;AAIA,IAAAA,MAAA,gBAAAC,uBAAA,eAAAC,OAAA;AACA,IAAAC,MAAA,gBAAAF,uBAAA,eAAAC,OAAA;AACA,IAAAE,IAAA,gBAAAH,uBAAA,eAAAC,OAAA;AAA8B,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAN9B;;;;AAQA;;;AAGO,MAAMY,IAAI,GAAAC,OAAA,CAAAD,IAAA,gBAAqC1B,MAAM,CAAC4B,MAAM,CAACC,IAAI,eACtE7B,MAAM,CAAC8B,SAAS,CAAC1B,IAAI,CAACA,IAAI,CAAC,CAC5B;AAED;;;AAGO,MAAM2B,MAAM,GAAAJ,OAAA,CAAAI,MAAA,gBAAyC/B,MAAM,CAAC4B,MAAM,CAACC,IAAI,eAC5E7B,MAAM,CAAC8B,SAAS,CAAC3B,MAAM,CAACA,MAAM,CAAC,CAChC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.makeUuidSeed = exports.makeUuid = exports.isUuid = exports.Uuid = void 0;
7
+ exports.uuid4 = uuid4;
8
+ var Brand = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Brand"));
9
+ var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
10
+ var _GetRandomValues = /*#__PURE__*/require("./GetRandomValues");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ /**
14
+ * @since 1.0.0
15
+ */
16
+
17
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
18
+ /**
19
+ * Returns `true` if a string is a UUID.
20
+ * @since 1.0.0
21
+ */
22
+ const isUuid = value => uuidPattern.test(value);
23
+ /**
24
+ * @since 1.0.0
25
+ */
26
+ exports.isUuid = isUuid;
27
+ const Uuid = exports.Uuid = /*#__PURE__*/Brand.refined(isUuid, input => Brand.error(`Expected a UUID but received ${input}.`));
28
+ /**
29
+ * @since 1.0.0
30
+ */
31
+ const makeUuidSeed = exports.makeUuidSeed = /*#__PURE__*/_GetRandomValues.GetRandomValues.apply(32);
32
+ /**
33
+ * @since 1.0.0
34
+ */
35
+ const makeUuid = exports.makeUuid = /*#__PURE__*/Effect.map(makeUuidSeed, uuid4);
36
+ /**
37
+ * Convert array of 16 byte values to UUID string format of the form:
38
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
39
+ */
40
+ const byteToHex = [];
41
+ for (let i = 0; i < 256; ++i) {
42
+ byteToHex.push((i + 0x100).toString(16).slice(1));
43
+ }
44
+ /**
45
+ * @since 1.0.0
46
+ */
47
+ function uuid4(seed) {
48
+ // Note: Be careful editing this code! It's been tuned for performance
49
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
50
+ //
51
+ // Note to future-self: No, you can't remove the `toLowerCase()` call.
52
+ // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
53
+ return (byteToHex[seed[0]] + byteToHex[seed[1]] + byteToHex[seed[2]] + byteToHex[seed[3]] + "-" + byteToHex[seed[4]] + byteToHex[seed[5]] + "-" + byteToHex[seed[6]] + byteToHex[seed[7]] + "-" + byteToHex[seed[8]] + byteToHex[seed[9]] + "-" + byteToHex[seed[10]] + byteToHex[seed[11]] + byteToHex[seed[12]] + byteToHex[seed[13]] + byteToHex[seed[14]] + byteToHex[seed[15]]).toLowerCase();
54
+ }
55
+ //# sourceMappingURL=Uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uuid.js","names":["Brand","_interopRequireWildcard","require","Effect","_GetRandomValues","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","uuidPattern","isUuid","value","test","exports","Uuid","refined","input","error","makeUuidSeed","GetRandomValues","apply","makeUuid","map","uuid4","byteToHex","push","toString","slice","seed","toLowerCase"],"sources":["../../src/Uuid.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _GetRandomValues = /*#__PURE__*/require("./GetRandomValues");
7
+ Object.keys(_GetRandomValues).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _GetRandomValues[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _GetRandomValues[key];
14
+ }
15
+ });
16
+ });
17
+ var _NanoId = /*#__PURE__*/require("./NanoId");
18
+ Object.keys(_NanoId).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _NanoId[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _NanoId[key];
25
+ }
26
+ });
27
+ });
28
+ var _Uuid = /*#__PURE__*/require("./Uuid");
29
+ Object.keys(_Uuid).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _Uuid[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _Uuid[key];
36
+ }
37
+ });
38
+ });
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_GetRandomValues","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_NanoId","_Uuid"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;AAOA,IAAAA,gBAAA,gBAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,gBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,gBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,gBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AAIA,IAAAK,OAAA,gBAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,OAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,OAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,OAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AAIA,IAAAM,KAAA,gBAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,KAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,KAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,KAAA,CAAAN,GAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Context from "@typed/context";
5
+ import type { Layer } from "effect";
6
+ import { Effect } from "effect";
7
+ /**
8
+ * @since 1.0.0
9
+ */
10
+ export declare const GetRandomValues: Context.Fn<{
11
+ readonly __identifier__: "@typed/id/GetRandomValues";
12
+ }, (length: number) => Effect.Effect<never, never, Uint8Array>>;
13
+ /**
14
+ * @since 1.0.0
15
+ */
16
+ export type GetRandomValues = Context.Fn.Identifier<typeof GetRandomValues>;
17
+ /**
18
+ * @since 1.0.0
19
+ */
20
+ export declare const webCrypto: (crypto: Crypto) => Layer.Layer<never, never, GetRandomValues>;
21
+ /**
22
+ * @since 1.0.0
23
+ */
24
+ export declare const nodeCrypto: (crypto: typeof import("node:crypto")) => Layer.Layer<never, never, GetRandomValues>;
25
+ /**
26
+ * @since 1.0.0
27
+ */
28
+ export declare const pseudoRandom: Layer.Layer<never, never, GetRandomValues>;
29
+ /**
30
+ * @since 1.0.0
31
+ */
32
+ export declare const getRandomValues: Layer.Layer<never, never, GetRandomValues>;
33
+ //# sourceMappingURL=GetRandomValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetRandomValues.d.ts","sourceRoot":"","sources":["../../src/GetRandomValues.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEvC;;GAEG;AACH,eAAO,MAAM,eAAe;;YAAuB,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAEpG,CAAA;AACD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;AAI3E;;GAEG;AACH,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CACU,CAAA;AAY9F;;GAEG;AAEH,eAAO,MAAM,UAAU,WAAY,cAAc,aAAa,CAAC,KAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CACZ,CAAA;AAE/F;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAUnE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAUtE,CAAA"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { Brand, Effect } from "effect";
5
+ import { GetRandomValues } from "./GetRandomValues";
6
+ /**
7
+ * @since 1.0.0
8
+ */
9
+ export declare const isNanoId: (id: string) => id is NanoId;
10
+ /**
11
+ * @since 1.0.0
12
+ */
13
+ export type NanoId = string & Brand.Brand<"@typed/id/NanoId">;
14
+ /**
15
+ * @since 1.0.0
16
+ */
17
+ export declare const NanoId: Brand.Brand.Constructor<NanoId>;
18
+ /**
19
+ * @since 1.0.0
20
+ */
21
+ export type NanoIdSeed = readonly [
22
+ zero: number,
23
+ one: number,
24
+ two: number,
25
+ three: number,
26
+ four: number,
27
+ five: number,
28
+ six: number,
29
+ seven: number,
30
+ eight: number,
31
+ nine: number,
32
+ ten: number,
33
+ eleven: number,
34
+ twelve: number,
35
+ thirteen: number,
36
+ fourteen: number,
37
+ fifteen: number,
38
+ sixteen: number,
39
+ seventeen: number,
40
+ eighteen: number,
41
+ nineteen: number,
42
+ twenty: number
43
+ ];
44
+ /**
45
+ * @since 1.0.0
46
+ */
47
+ export declare const nanoId: (seed: NanoIdSeed) => NanoId;
48
+ /**
49
+ * @since 1.0.0
50
+ */
51
+ export declare const makeNanoIdSeed: Effect.Effect<GetRandomValues, never, NanoIdSeed>;
52
+ /**
53
+ * @since 1.0.0
54
+ */
55
+ export declare const makeNanoId: Effect.Effect<GetRandomValues, never, NanoId>;
56
+ //# sourceMappingURL=NanoId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NanoId.d.ts","sourceRoot":"","sources":["../../src/NanoId.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAInD;;GAEG;AACH,eAAO,MAAM,QAAQ,OAAQ,MAAM,iBAAyC,CAAA;AAE5E;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;AAE7D;;GAEG;AACH,eAAO,MAAM,MAAM,iCAGlB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS;IAChC,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;CACf,CAAA;AAqBD;;GAEG;AACH,eAAO,MAAM,MAAM,wBAAuB,MAAgE,CAAA;AAE1G;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,UAAU,CAAoC,CAAA;AAEjH;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAsC,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Schema from "@effect/schema/Schema";
5
+ import * as NanoId from "./NanoId";
6
+ import * as Uuid from "./Uuid";
7
+ /**
8
+ * @since 1.0.0
9
+ */
10
+ export declare const uuid: Schema.Schema<string, Uuid.Uuid>;
11
+ /**
12
+ * @since 1.0.0
13
+ */
14
+ export declare const nanoId: Schema.Schema<string, NanoId.NanoId>;
15
+ //# sourceMappingURL=Schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAE9B;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAEjD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAEvD,CAAA"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Brand from "effect/Brand";
5
+ import * as Effect from "effect/Effect";
6
+ import { GetRandomValues } from "./GetRandomValues";
7
+ /**
8
+ * Returns `true` if a string is a UUID.
9
+ * @since 1.0.0
10
+ */
11
+ export declare const isUuid: (value: string) => value is Uuid;
12
+ /**
13
+ * @since 1.0.0
14
+ */
15
+ export type Uuid = string & Brand.Brand<"@typed/id/UUID">;
16
+ /**
17
+ * @since 1.0.0
18
+ */
19
+ export declare const Uuid: Brand.Brand.Constructor<Uuid>;
20
+ /**
21
+ * @since 1.0.0
22
+ */
23
+ export type UuidSeed = readonly [
24
+ zero: number,
25
+ one: number,
26
+ two: number,
27
+ three: number,
28
+ four: number,
29
+ five: number,
30
+ six: number,
31
+ seven: number,
32
+ eight: number,
33
+ nine: number,
34
+ ten: number,
35
+ eleven: number,
36
+ twelve: number,
37
+ thirteen: number,
38
+ fourteen: number,
39
+ fifteen: number
40
+ ];
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ export declare const makeUuidSeed: Effect.Effect<GetRandomValues, never, UuidSeed>;
45
+ /**
46
+ * @since 1.0.0
47
+ */
48
+ export declare const makeUuid: Effect.Effect<GetRandomValues, never, Uuid>;
49
+ /**
50
+ * @since 1.0.0
51
+ */
52
+ export declare function uuid4(seed: UuidSeed): Uuid;
53
+ //# sourceMappingURL=Uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uuid.d.ts","sourceRoot":"","sources":["../../src/Uuid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAInD;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,IAAgE,CAAA;AAEjH;;GAEG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;AACzD;;GAEG;AACH,eAAO,MAAM,IAAI,+BAAgG,CAAA;AAEjH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS;IAC9B,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,MAAM;CAChB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAoC,CAAA;AAE7G;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAmC,CAAA;AAYpG;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CA4B1C"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @since 1.18.0
3
+ */
4
+ /**
5
+ * @since 1.18.0
6
+ */
7
+ export * from "./GetRandomValues";
8
+ /**
9
+ * @since 1.18.0
10
+ */
11
+ export * from "./NanoId";
12
+ /**
13
+ * @since 1.18.0
14
+ */
15
+ export * from "./Uuid";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,cAAc,mBAAmB,CAAA;AACjC;;GAEG;AACH,cAAc,UAAU,CAAA;AACxB;;GAEG;AACH,cAAc,QAAQ,CAAA"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Context from "@typed/context";
5
+ import { Effect, Random } from "effect";
6
+ /**
7
+ * @since 1.0.0
8
+ */
9
+ export const GetRandomValues = Context.Fn()((_) => class GetRandomValues extends _("@typed/id/GetRandomValues") {
10
+ });
11
+ const getRandomValuesWeb = (crypto, length) => crypto.getRandomValues(new Uint8Array(length));
12
+ /**
13
+ * @since 1.0.0
14
+ */
15
+ export const webCrypto = (crypto) => GetRandomValues.implement((length) => Effect.sync(() => getRandomValuesWeb(crypto, length)));
16
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
17
+ const getRandomValuesNode = (crypto, length) => {
18
+ const bytes = crypto.randomBytes(length);
19
+ const view = new Uint8Array(length);
20
+ for (let i = 0; i < bytes.length; ++i) {
21
+ view[i] = bytes[i];
22
+ }
23
+ return view;
24
+ };
25
+ /**
26
+ * @since 1.0.0
27
+ */
28
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
29
+ export const nodeCrypto = (crypto) => GetRandomValues.implement((length) => Effect.sync(() => getRandomValuesNode(crypto, length)));
30
+ /**
31
+ * @since 1.0.0
32
+ */
33
+ export const pseudoRandom = GetRandomValues.implement((length) => Effect.gen(function* (_) {
34
+ const view = new Uint8Array(length);
35
+ for (let i = 0; i < length; ++i) {
36
+ view[i] = yield* _(Random.nextInt);
37
+ }
38
+ return view;
39
+ }));
40
+ /**
41
+ * @since 1.0.0
42
+ */
43
+ export const getRandomValues = GetRandomValues.layer(Effect.gen(function* (_) {
44
+ if (typeof crypto === "undefined") {
45
+ const crypto = yield* _(Effect.promise(() => import("node:crypto")));
46
+ return (length) => Effect.sync(() => getRandomValuesNode(crypto, length));
47
+ }
48
+ else {
49
+ return (length) => Effect.sync(() => getRandomValuesWeb(crypto, length));
50
+ }
51
+ }));
52
+ //# sourceMappingURL=GetRandomValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetRandomValues.js","sourceRoot":"","sources":["../../src/GetRandomValues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { Brand, Effect } from "effect";
5
+ import { GetRandomValues } from "./GetRandomValues";
6
+ const nanoIdPattern = /[0-9a-zA-Z_-]/;
7
+ /**
8
+ * @since 1.0.0
9
+ */
10
+ export const isNanoId = (id) => nanoIdPattern.test(id);
11
+ /**
12
+ * @since 1.0.0
13
+ */
14
+ export const NanoId = Brand.refined(isNanoId, (input) => Brand.error(`Expected a NanoID but received ${input}.`));
15
+ const numToCharacter = (byte) => {
16
+ byte &= 63;
17
+ if (byte < 36) {
18
+ // `0-9a-z`
19
+ return byte.toString(36);
20
+ }
21
+ else if (byte < 62) {
22
+ // `A-Z`
23
+ return (byte - 26).toString(36).toUpperCase();
24
+ }
25
+ else if (byte > 62) {
26
+ return "-";
27
+ }
28
+ else {
29
+ return "_";
30
+ }
31
+ };
32
+ const characters = Array.from({ length: 64 }, (_, i) => {
33
+ return numToCharacter(i);
34
+ });
35
+ /**
36
+ * @since 1.0.0
37
+ */
38
+ export const nanoId = (seed) => NanoId(seed.reduce((id, x) => id + characters[x], ""));
39
+ /**
40
+ * @since 1.0.0
41
+ */
42
+ export const makeNanoIdSeed = GetRandomValues.apply(21);
43
+ /**
44
+ * @since 1.0.0
45
+ */
46
+ export const makeNanoId = Effect.map(makeNanoIdSeed, nanoId);
47
+ //# sourceMappingURL=NanoId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NanoId.js","sourceRoot":"","sources":["../../src/NanoId.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,aAAa,GAAG,eAAe,CAAA;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAgB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAO5E;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CACjC,QAAQ,EACR,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,KAAK,GAAG,CAAC,CACnE,CAAA;AA6BD,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,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACrD,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;AAC1B,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAE1G;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsD,eAAe,CAAC,KAAK,CAAC,EAAE,CAAQ,CAAA;AAEjH;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Schema from "@effect/schema/Schema";
5
+ import * as NanoId from "./NanoId";
6
+ import * as Uuid from "./Uuid";
7
+ /**
8
+ * @since 1.0.0
9
+ */
10
+ export const uuid = Schema.string.pipe(Schema.fromBrand(Uuid.Uuid));
11
+ /**
12
+ * @since 1.0.0
13
+ */
14
+ export const nanoId = Schema.string.pipe(Schema.fromBrand(NanoId.NanoId));
15
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAC/C,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAE9B;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAqC,MAAM,CAAC,MAAM,CAAC,IAAI,CACtE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAyC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAChC,CAAA"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Brand from "effect/Brand";
5
+ import * as Effect from "effect/Effect";
6
+ import { GetRandomValues } from "./GetRandomValues";
7
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8
+ /**
9
+ * Returns `true` if a string is a UUID.
10
+ * @since 1.0.0
11
+ */
12
+ export const isUuid = (value) => uuidPattern.test(value);
13
+ /**
14
+ * @since 1.0.0
15
+ */
16
+ export const Uuid = Brand.refined(isUuid, (input) => Brand.error(`Expected a UUID but received ${input}.`));
17
+ /**
18
+ * @since 1.0.0
19
+ */
20
+ export const makeUuidSeed = GetRandomValues.apply(32);
21
+ /**
22
+ * @since 1.0.0
23
+ */
24
+ export const makeUuid = Effect.map(makeUuidSeed, uuid4);
25
+ /**
26
+ * Convert array of 16 byte values to UUID string format of the form:
27
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
28
+ */
29
+ const byteToHex = [];
30
+ for (let i = 0; i < 256; ++i) {
31
+ byteToHex.push((i + 0x100).toString(16).slice(1));
32
+ }
33
+ /**
34
+ * @since 1.0.0
35
+ */
36
+ export function uuid4(seed) {
37
+ // Note: Be careful editing this code! It's been tuned for performance
38
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
39
+ //
40
+ // Note to future-self: No, you can't remove the `toLowerCase()` call.
41
+ // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
42
+ return (byteToHex[seed[0]] +
43
+ byteToHex[seed[1]] +
44
+ byteToHex[seed[2]] +
45
+ byteToHex[seed[3]] +
46
+ "-" +
47
+ byteToHex[seed[4]] +
48
+ byteToHex[seed[5]] +
49
+ "-" +
50
+ byteToHex[seed[6]] +
51
+ byteToHex[seed[7]] +
52
+ "-" +
53
+ byteToHex[seed[8]] +
54
+ byteToHex[seed[9]] +
55
+ "-" +
56
+ byteToHex[seed[10]] +
57
+ byteToHex[seed[11]] +
58
+ byteToHex[seed[12]] +
59
+ byteToHex[seed[13]] +
60
+ byteToHex[seed[14]] +
61
+ byteToHex[seed[15]]).toLowerCase();
62
+ }
63
+ //# sourceMappingURL=Uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uuid.js","sourceRoot":"","sources":["../../src/Uuid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,WAAW,GAAG,iEAAiE,CAAA;AAErF;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAqC,CAAC,KAAa,EAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAMjH;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAO,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,KAAK,GAAG,CAAC,CAAC,CAAA;AAwBjH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAoD,eAAe,CAAC,KAAK,CAAC,EAAE,CAAQ,CAAA;AAE7G;;GAEG;AACH,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;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,IAAc;IAClC,uEAAuE;IACvE,oFAAoF;IACpF,EAAE;IACF,sEAAsE;IACtE,uEAAuE;IACvE,OAAO,CACL,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,EAAU,CAAA;AACzB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @since 1.18.0
3
+ */
4
+ /**
5
+ * @since 1.18.0
6
+ */
7
+ export * from "./GetRandomValues";
8
+ /**
9
+ * @since 1.18.0
10
+ */
11
+ export * from "./NanoId";
12
+ /**
13
+ * @since 1.18.0
14
+ */
15
+ export * from "./Uuid";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,cAAc,mBAAmB,CAAA;AACjC;;GAEG;AACH,cAAc,UAAU,CAAA;AACxB;;GAEG;AACH,cAAc,QAAQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": []
4
+ }
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@typed/id",
3
+ "version": "0.1.0",
4
+ "description": "",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/tylors/typed.git"
9
+ },
10
+ "sideEffects": [],
11
+ "author": "Typed contributors",
12
+ "dependencies": {
13
+ "@effect/schema": "0.49.4",
14
+ "effect": "2.0.0-next.56",
15
+ "@typed/context": "0.1.0"
16
+ },
17
+ "main": "./dist/cjs/index.js",
18
+ "module": "./dist/esm/index.js",
19
+ "types": "./dist/dts/index.d.ts",
20
+ "exports": {
21
+ "./package.json": "./package.json",
22
+ ".": {
23
+ "types": "./dist/dts/index.d.ts",
24
+ "import": "./dist/esm/index.js",
25
+ "default": "./dist/cjs/index.js"
26
+ },
27
+ "./GetRandomValues": {
28
+ "types": "./dist/dts/GetRandomValues.d.ts",
29
+ "import": "./dist/esm/GetRandomValues.js",
30
+ "default": "./dist/cjs/GetRandomValues.js"
31
+ },
32
+ "./NanoId": {
33
+ "types": "./dist/dts/NanoId.d.ts",
34
+ "import": "./dist/esm/NanoId.js",
35
+ "default": "./dist/cjs/NanoId.js"
36
+ },
37
+ "./Schema": {
38
+ "types": "./dist/dts/Schema.d.ts",
39
+ "import": "./dist/esm/Schema.js",
40
+ "default": "./dist/cjs/Schema.js"
41
+ },
42
+ "./Uuid": {
43
+ "types": "./dist/dts/Uuid.d.ts",
44
+ "import": "./dist/esm/Uuid.js",
45
+ "default": "./dist/cjs/Uuid.js"
46
+ }
47
+ },
48
+ "typesVersions": {
49
+ "*": {
50
+ "GetRandomValues": [
51
+ "./dist/dts/GetRandomValues.d.ts"
52
+ ],
53
+ "NanoId": [
54
+ "./dist/dts/NanoId.d.ts"
55
+ ],
56
+ "Schema": [
57
+ "./dist/dts/Schema.d.ts"
58
+ ],
59
+ "Uuid": [
60
+ "./dist/dts/Uuid.d.ts"
61
+ ]
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import * as Context from "@typed/context"
6
+ import type { Layer } from "effect"
7
+ import { Effect, Random } from "effect"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ */
12
+ export const GetRandomValues = Context.Fn<(length: number) => Effect.Effect<never, never, Uint8Array>>()(
13
+ (_) => class GetRandomValues extends _("@typed/id/GetRandomValues") {}
14
+ )
15
+ /**
16
+ * @since 1.0.0
17
+ */
18
+ export type GetRandomValues = Context.Fn.Identifier<typeof GetRandomValues>
19
+
20
+ const getRandomValuesWeb = (crypto: Crypto, length: number) => crypto.getRandomValues(new Uint8Array(length))
21
+
22
+ /**
23
+ * @since 1.0.0
24
+ */
25
+ export const webCrypto = (crypto: Crypto): Layer.Layer<never, never, GetRandomValues> =>
26
+ GetRandomValues.implement((length) => Effect.sync(() => getRandomValuesWeb(crypto, length)))
27
+
28
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
29
+ const getRandomValuesNode = (crypto: typeof import("node:crypto"), length: number) => {
30
+ const bytes = crypto.randomBytes(length)
31
+ const view = new Uint8Array(length)
32
+ for (let i = 0; i < bytes.length; ++i) {
33
+ view[i] = bytes[i]
34
+ }
35
+ return view
36
+ }
37
+
38
+ /**
39
+ * @since 1.0.0
40
+ */
41
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
42
+ export const nodeCrypto = (crypto: typeof import("node:crypto")): Layer.Layer<never, never, GetRandomValues> =>
43
+ GetRandomValues.implement((length) => Effect.sync(() => getRandomValuesNode(crypto, length)))
44
+
45
+ /**
46
+ * @since 1.0.0
47
+ */
48
+ export const pseudoRandom: Layer.Layer<never, never, GetRandomValues> = GetRandomValues.implement((length) =>
49
+ Effect.gen(function*(_) {
50
+ const view = new Uint8Array(length)
51
+
52
+ for (let i = 0; i < length; ++i) {
53
+ view[i] = yield* _(Random.nextInt)
54
+ }
55
+
56
+ return view
57
+ })
58
+ )
59
+
60
+ /**
61
+ * @since 1.0.0
62
+ */
63
+ export const getRandomValues: Layer.Layer<never, never, GetRandomValues> = GetRandomValues.layer(
64
+ Effect.gen(function*(_) {
65
+ if (typeof crypto === "undefined") {
66
+ const crypto = yield* _(Effect.promise(() => import("node:crypto")))
67
+
68
+ return (length: number) => Effect.sync(() => getRandomValuesNode(crypto, length))
69
+ } else {
70
+ return (length: number) => Effect.sync(() => getRandomValuesWeb(crypto, length))
71
+ }
72
+ })
73
+ )
package/src/NanoId.ts ADDED
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import { Brand, Effect } from "effect"
6
+ import { GetRandomValues } from "./GetRandomValues"
7
+
8
+ const nanoIdPattern = /[0-9a-zA-Z_-]/
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ */
13
+ export const isNanoId = (id: string): id is NanoId => nanoIdPattern.test(id)
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ */
18
+ export type NanoId = string & Brand.Brand<"@typed/id/NanoId">
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ */
23
+ export const NanoId = Brand.refined<NanoId>(
24
+ isNanoId,
25
+ (input) => Brand.error(`Expected a NanoID but received ${input}.`)
26
+ )
27
+
28
+ /**
29
+ * @since 1.0.0
30
+ */
31
+ export type NanoIdSeed = readonly [
32
+ zero: number,
33
+ one: number,
34
+ two: number,
35
+ three: number,
36
+ four: number,
37
+ five: number,
38
+ six: number,
39
+ seven: number,
40
+ eight: number,
41
+ nine: number,
42
+ ten: number,
43
+ eleven: number,
44
+ twelve: number,
45
+ thirteen: number,
46
+ fourteen: number,
47
+ fifteen: number,
48
+ sixteen: number,
49
+ seventeen: number,
50
+ eighteen: number,
51
+ nineteen: number,
52
+ twenty: number
53
+ ]
54
+
55
+ const numToCharacter = (byte: number): string => {
56
+ byte &= 63
57
+ if (byte < 36) {
58
+ // `0-9a-z`
59
+ return byte.toString(36)
60
+ } else if (byte < 62) {
61
+ // `A-Z`
62
+ return (byte - 26).toString(36).toUpperCase()
63
+ } else if (byte > 62) {
64
+ return "-"
65
+ } else {
66
+ return "_"
67
+ }
68
+ }
69
+
70
+ const characters = Array.from({ length: 64 }, (_, i) => {
71
+ return numToCharacter(i)
72
+ })
73
+
74
+ /**
75
+ * @since 1.0.0
76
+ */
77
+ export const nanoId = (seed: NanoIdSeed): NanoId => NanoId(seed.reduce((id, x) => id + characters[x], ""))
78
+
79
+ /**
80
+ * @since 1.0.0
81
+ */
82
+ export const makeNanoIdSeed: Effect.Effect<GetRandomValues, never, NanoIdSeed> = GetRandomValues.apply(21) as any
83
+
84
+ /**
85
+ * @since 1.0.0
86
+ */
87
+ export const makeNanoId: Effect.Effect<GetRandomValues, never, NanoId> = Effect.map(makeNanoIdSeed, nanoId)
package/src/Schema.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import * as Schema from "@effect/schema/Schema"
6
+ import * as NanoId from "./NanoId"
7
+ import * as Uuid from "./Uuid"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ */
12
+ export const uuid: Schema.Schema<string, Uuid.Uuid> = Schema.string.pipe(
13
+ Schema.fromBrand(Uuid.Uuid)
14
+ )
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ */
19
+ export const nanoId: Schema.Schema<string, NanoId.NanoId> = Schema.string.pipe(
20
+ Schema.fromBrand(NanoId.NanoId)
21
+ )
package/src/Uuid.ts ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import * as Brand from "effect/Brand"
6
+ import * as Effect from "effect/Effect"
7
+ import { GetRandomValues } from "./GetRandomValues"
8
+
9
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
10
+
11
+ /**
12
+ * Returns `true` if a string is a UUID.
13
+ * @since 1.0.0
14
+ */
15
+ export const isUuid: (value: string) => value is Uuid = (value: string): value is Uuid => uuidPattern.test(value)
16
+
17
+ /**
18
+ * @since 1.0.0
19
+ */
20
+ export type Uuid = string & Brand.Brand<"@typed/id/UUID">
21
+ /**
22
+ * @since 1.0.0
23
+ */
24
+ export const Uuid = Brand.refined<Uuid>(isUuid, (input) => Brand.error(`Expected a UUID but received ${input}.`))
25
+
26
+ /**
27
+ * @since 1.0.0
28
+ */
29
+ export type UuidSeed = readonly [
30
+ zero: number,
31
+ one: number,
32
+ two: number,
33
+ three: number,
34
+ four: number,
35
+ five: number,
36
+ six: number,
37
+ seven: number,
38
+ eight: number,
39
+ nine: number,
40
+ ten: number,
41
+ eleven: number,
42
+ twelve: number,
43
+ thirteen: number,
44
+ fourteen: number,
45
+ fifteen: number
46
+ ]
47
+
48
+ /**
49
+ * @since 1.0.0
50
+ */
51
+ export const makeUuidSeed: Effect.Effect<GetRandomValues, never, UuidSeed> = GetRandomValues.apply(32) as any
52
+
53
+ /**
54
+ * @since 1.0.0
55
+ */
56
+ export const makeUuid: Effect.Effect<GetRandomValues, never, Uuid> = Effect.map(makeUuidSeed, uuid4)
57
+
58
+ /**
59
+ * Convert array of 16 byte values to UUID string format of the form:
60
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
61
+ */
62
+ const byteToHex: Array<string> = []
63
+
64
+ for (let i = 0; i < 256; ++i) {
65
+ byteToHex.push((i + 0x100).toString(16).slice(1))
66
+ }
67
+
68
+ /**
69
+ * @since 1.0.0
70
+ */
71
+ export function uuid4(seed: UuidSeed): Uuid {
72
+ // Note: Be careful editing this code! It's been tuned for performance
73
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
74
+ //
75
+ // Note to future-self: No, you can't remove the `toLowerCase()` call.
76
+ // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
77
+ return (
78
+ byteToHex[seed[0]] +
79
+ byteToHex[seed[1]] +
80
+ byteToHex[seed[2]] +
81
+ byteToHex[seed[3]] +
82
+ "-" +
83
+ byteToHex[seed[4]] +
84
+ byteToHex[seed[5]] +
85
+ "-" +
86
+ byteToHex[seed[6]] +
87
+ byteToHex[seed[7]] +
88
+ "-" +
89
+ byteToHex[seed[8]] +
90
+ byteToHex[seed[9]] +
91
+ "-" +
92
+ byteToHex[seed[10]] +
93
+ byteToHex[seed[11]] +
94
+ byteToHex[seed[12]] +
95
+ byteToHex[seed[13]] +
96
+ byteToHex[seed[14]] +
97
+ byteToHex[seed[15]]
98
+ ).toLowerCase() as Uuid
99
+ }
package/src/index.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @since 1.18.0
3
+ */
4
+
5
+ /**
6
+ * @since 1.18.0
7
+ */
8
+ export * from "./GetRandomValues"
9
+ /**
10
+ * @since 1.18.0
11
+ */
12
+ export * from "./NanoId"
13
+ /**
14
+ * @since 1.18.0
15
+ */
16
+ export * from "./Uuid"