@stateforward/hsm.ts 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/dist/kind.cjs ADDED
@@ -0,0 +1,162 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/kind.ts
20
+ var kind_exports = {};
21
+ __export(kind_exports, {
22
+ IsKind: () => IsKind,
23
+ Kinds: () => Kinds,
24
+ MakeKind: () => MakeKind,
25
+ bases: () => bases,
26
+ isKind: () => isKind,
27
+ kind: () => kind,
28
+ kinds: () => kinds,
29
+ makeKind: () => makeKind
30
+ });
31
+ module.exports = __toCommonJS(kind_exports);
32
+ var length = 48;
33
+ var idLength = 8;
34
+ var depthMax = length / idLength;
35
+ var idMask = (1 << idLength) - 1;
36
+ var counter = 0;
37
+ var nextId = () => {
38
+ const id = counter & idMask;
39
+ counter += 1;
40
+ return id;
41
+ };
42
+ var extractId = (kindValue, depth) => Math.floor(kindValue / Math.pow(2, idLength * depth)) & idMask;
43
+ var bases = (id) => {
44
+ const baseKinds = Array(depthMax).fill(0);
45
+ for (let index = 1; index < depthMax; index += 1) {
46
+ baseKinds[index - 1] = extractId(id, index);
47
+ }
48
+ return baseKinds;
49
+ };
50
+ function kind(...baseKinds) {
51
+ let result = nextId();
52
+ const used = {};
53
+ let usedCount = 0;
54
+ for (const base of baseKinds) {
55
+ for (let depth = 0; depth < depthMax; depth += 1) {
56
+ const baseId = extractId(base, depth);
57
+ if (baseId === 0) {
58
+ break;
59
+ }
60
+ if (used[baseId]) {
61
+ continue;
62
+ }
63
+ used[baseId] = true;
64
+ usedCount += 1;
65
+ result += baseId * Math.pow(2, usedCount * idLength);
66
+ }
67
+ }
68
+ return result;
69
+ }
70
+ function isKind(kindValue, ...baseKinds) {
71
+ for (const base of baseKinds) {
72
+ const baseId = base & idMask;
73
+ if (kindValue === baseId) {
74
+ return true;
75
+ }
76
+ for (let depth = 0; depth < depthMax; depth += 1) {
77
+ const currentId = extractId(kindValue, depth);
78
+ if (currentId === baseId) {
79
+ return true;
80
+ }
81
+ }
82
+ }
83
+ return false;
84
+ }
85
+ var makeKind = (...baseKinds) => kind(...baseKinds);
86
+ var kinds = {
87
+ Null: makeKind(),
88
+ Element: makeKind(),
89
+ Partial: 0,
90
+ Vertex: 0,
91
+ Constraint: 0,
92
+ Behavior: 0,
93
+ Namespace: 0,
94
+ Concurrent: 0,
95
+ Sequential: 0,
96
+ StateMachine: 0,
97
+ Attribute: 0,
98
+ State: 0,
99
+ Model: 0,
100
+ Transition: 0,
101
+ Internal: 0,
102
+ External: 0,
103
+ Local: 0,
104
+ Self: 0,
105
+ Event: 0,
106
+ CompletionEvent: 0,
107
+ ChangeEvent: 0,
108
+ ErrorEvent: 0,
109
+ TimeEvent: 0,
110
+ CallEvent: 0,
111
+ Pseudostate: 0,
112
+ Initial: 0,
113
+ FinalState: 0,
114
+ Choice: 0,
115
+ Junction: 0,
116
+ DeepHistory: 0,
117
+ ShallowHistory: 0
118
+ };
119
+ kinds.Partial = makeKind(kinds.Element);
120
+ kinds.Vertex = makeKind(kinds.Element);
121
+ kinds.Constraint = makeKind(kinds.Element);
122
+ kinds.Behavior = makeKind(kinds.Element);
123
+ kinds.Namespace = makeKind(kinds.Element);
124
+ kinds.Concurrent = makeKind(kinds.Behavior);
125
+ kinds.Sequential = makeKind(kinds.Behavior);
126
+ kinds.StateMachine = makeKind(kinds.Concurrent, kinds.Namespace);
127
+ kinds.Attribute = makeKind(kinds.Element);
128
+ kinds.State = makeKind(kinds.Vertex, kinds.Namespace);
129
+ kinds.Model = makeKind(kinds.State);
130
+ kinds.Transition = makeKind(kinds.Element);
131
+ kinds.Internal = makeKind(kinds.Transition);
132
+ kinds.External = makeKind(kinds.Transition);
133
+ kinds.Local = makeKind(kinds.Transition);
134
+ kinds.Self = makeKind(kinds.Transition);
135
+ kinds.Event = makeKind(kinds.Element);
136
+ kinds.CompletionEvent = makeKind(kinds.Event);
137
+ kinds.ChangeEvent = makeKind(kinds.Event);
138
+ kinds.ErrorEvent = makeKind(kinds.CompletionEvent);
139
+ kinds.TimeEvent = makeKind(kinds.Event);
140
+ kinds.CallEvent = makeKind(kinds.Event);
141
+ kinds.Pseudostate = makeKind(kinds.Vertex);
142
+ kinds.Initial = makeKind(kinds.Pseudostate);
143
+ kinds.FinalState = makeKind(kinds.State);
144
+ kinds.Choice = makeKind(kinds.Pseudostate);
145
+ kinds.Junction = makeKind(kinds.Pseudostate);
146
+ kinds.DeepHistory = makeKind(kinds.Pseudostate);
147
+ kinds.ShallowHistory = makeKind(kinds.Pseudostate);
148
+ var Kinds = kinds;
149
+ var MakeKind = makeKind;
150
+ var IsKind = isKind;
151
+ // Annotate the CommonJS export names for ESM import in node:
152
+ 0 && (module.exports = {
153
+ IsKind,
154
+ Kinds,
155
+ MakeKind,
156
+ bases,
157
+ isKind,
158
+ kind,
159
+ kinds,
160
+ makeKind
161
+ });
162
+ //# sourceMappingURL=kind.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/kind.ts"],"sourcesContent":["export type Kind = number;\n\nconst length = 48;\nconst idLength = 8;\nconst depthMax = length / idLength;\nconst idMask = (1 << idLength) - 1;\n\nlet counter = 0;\n\nconst nextId = () => {\n const id = counter & idMask;\n counter += 1;\n return id;\n};\n\nconst extractId = (kindValue: number, depth: number) =>\n Math.floor(kindValue / Math.pow(2, idLength * depth)) & idMask;\n\nexport const bases = (id: number) => {\n const baseKinds = Array<number>(depthMax).fill(0);\n\n for (let index = 1; index < depthMax; index += 1) {\n baseKinds[index - 1] = extractId(id, index);\n }\n\n return baseKinds;\n};\n\nexport function kind(...baseKinds: number[]) {\n let result = nextId();\n const used: Record<number, true> = {};\n let usedCount = 0;\n\n for (const base of baseKinds) {\n for (let depth = 0; depth < depthMax; depth += 1) {\n const baseId = extractId(base, depth);\n if (baseId === 0) {\n break;\n }\n if (used[baseId]) {\n continue;\n }\n\n used[baseId] = true;\n usedCount += 1;\n result += baseId * Math.pow(2, usedCount * idLength);\n }\n }\n\n return result;\n}\n\nexport function isKind(kindValue: number, ...baseKinds: number[]) {\n for (const base of baseKinds) {\n const baseId = base & idMask;\n if (kindValue === baseId) {\n return true;\n }\n\n for (let depth = 0; depth < depthMax; depth += 1) {\n const currentId = extractId(kindValue, depth);\n if (currentId === baseId) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport const makeKind = (...baseKinds: number[]) => kind(...baseKinds);\n\nexport const kinds = {\n Null: makeKind(),\n Element: makeKind(),\n Partial: 0,\n Vertex: 0,\n Constraint: 0,\n Behavior: 0,\n Namespace: 0,\n Concurrent: 0,\n Sequential: 0,\n StateMachine: 0,\n Attribute: 0,\n State: 0,\n Model: 0,\n Transition: 0,\n Internal: 0,\n External: 0,\n Local: 0,\n Self: 0,\n Event: 0,\n CompletionEvent: 0,\n ChangeEvent: 0,\n ErrorEvent: 0,\n TimeEvent: 0,\n CallEvent: 0,\n Pseudostate: 0,\n Initial: 0,\n FinalState: 0,\n Choice: 0,\n Junction: 0,\n DeepHistory: 0,\n ShallowHistory: 0,\n} satisfies Record<string, Kind>;\n\nkinds.Partial = makeKind(kinds.Element);\nkinds.Vertex = makeKind(kinds.Element);\nkinds.Constraint = makeKind(kinds.Element);\nkinds.Behavior = makeKind(kinds.Element);\nkinds.Namespace = makeKind(kinds.Element);\nkinds.Concurrent = makeKind(kinds.Behavior);\nkinds.Sequential = makeKind(kinds.Behavior);\nkinds.StateMachine = makeKind(kinds.Concurrent, kinds.Namespace);\nkinds.Attribute = makeKind(kinds.Element);\nkinds.State = makeKind(kinds.Vertex, kinds.Namespace);\nkinds.Model = makeKind(kinds.State);\nkinds.Transition = makeKind(kinds.Element);\nkinds.Internal = makeKind(kinds.Transition);\nkinds.External = makeKind(kinds.Transition);\nkinds.Local = makeKind(kinds.Transition);\nkinds.Self = makeKind(kinds.Transition);\nkinds.Event = makeKind(kinds.Element);\nkinds.CompletionEvent = makeKind(kinds.Event);\nkinds.ChangeEvent = makeKind(kinds.Event);\nkinds.ErrorEvent = makeKind(kinds.CompletionEvent);\nkinds.TimeEvent = makeKind(kinds.Event);\nkinds.CallEvent = makeKind(kinds.Event);\nkinds.Pseudostate = makeKind(kinds.Vertex);\nkinds.Initial = makeKind(kinds.Pseudostate);\nkinds.FinalState = makeKind(kinds.State);\nkinds.Choice = makeKind(kinds.Pseudostate);\nkinds.Junction = makeKind(kinds.Pseudostate);\nkinds.DeepHistory = makeKind(kinds.Pseudostate);\nkinds.ShallowHistory = makeKind(kinds.Pseudostate);\n\nexport const Kinds = kinds;\nexport const MakeKind = makeKind;\nexport const IsKind = isKind;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,75 @@
1
+ type Kind = number;
2
+ declare const bases: (id: number) => number[];
3
+ declare function kind(...baseKinds: number[]): number;
4
+ declare function isKind(kindValue: number, ...baseKinds: number[]): boolean;
5
+ declare const makeKind: (...baseKinds: number[]) => number;
6
+ declare const kinds: {
7
+ Null: number;
8
+ Element: number;
9
+ Partial: number;
10
+ Vertex: number;
11
+ Constraint: number;
12
+ Behavior: number;
13
+ Namespace: number;
14
+ Concurrent: number;
15
+ Sequential: number;
16
+ StateMachine: number;
17
+ Attribute: number;
18
+ State: number;
19
+ Model: number;
20
+ Transition: number;
21
+ Internal: number;
22
+ External: number;
23
+ Local: number;
24
+ Self: number;
25
+ Event: number;
26
+ CompletionEvent: number;
27
+ ChangeEvent: number;
28
+ ErrorEvent: number;
29
+ TimeEvent: number;
30
+ CallEvent: number;
31
+ Pseudostate: number;
32
+ Initial: number;
33
+ FinalState: number;
34
+ Choice: number;
35
+ Junction: number;
36
+ DeepHistory: number;
37
+ ShallowHistory: number;
38
+ };
39
+ declare const Kinds: {
40
+ Null: number;
41
+ Element: number;
42
+ Partial: number;
43
+ Vertex: number;
44
+ Constraint: number;
45
+ Behavior: number;
46
+ Namespace: number;
47
+ Concurrent: number;
48
+ Sequential: number;
49
+ StateMachine: number;
50
+ Attribute: number;
51
+ State: number;
52
+ Model: number;
53
+ Transition: number;
54
+ Internal: number;
55
+ External: number;
56
+ Local: number;
57
+ Self: number;
58
+ Event: number;
59
+ CompletionEvent: number;
60
+ ChangeEvent: number;
61
+ ErrorEvent: number;
62
+ TimeEvent: number;
63
+ CallEvent: number;
64
+ Pseudostate: number;
65
+ Initial: number;
66
+ FinalState: number;
67
+ Choice: number;
68
+ Junction: number;
69
+ DeepHistory: number;
70
+ ShallowHistory: number;
71
+ };
72
+ declare const MakeKind: (...baseKinds: number[]) => number;
73
+ declare const IsKind: typeof isKind;
74
+
75
+ export { IsKind, type Kind, Kinds, MakeKind, bases, isKind, kind, kinds, makeKind };
package/dist/kind.d.ts ADDED
@@ -0,0 +1,75 @@
1
+ type Kind = number;
2
+ declare const bases: (id: number) => number[];
3
+ declare function kind(...baseKinds: number[]): number;
4
+ declare function isKind(kindValue: number, ...baseKinds: number[]): boolean;
5
+ declare const makeKind: (...baseKinds: number[]) => number;
6
+ declare const kinds: {
7
+ Null: number;
8
+ Element: number;
9
+ Partial: number;
10
+ Vertex: number;
11
+ Constraint: number;
12
+ Behavior: number;
13
+ Namespace: number;
14
+ Concurrent: number;
15
+ Sequential: number;
16
+ StateMachine: number;
17
+ Attribute: number;
18
+ State: number;
19
+ Model: number;
20
+ Transition: number;
21
+ Internal: number;
22
+ External: number;
23
+ Local: number;
24
+ Self: number;
25
+ Event: number;
26
+ CompletionEvent: number;
27
+ ChangeEvent: number;
28
+ ErrorEvent: number;
29
+ TimeEvent: number;
30
+ CallEvent: number;
31
+ Pseudostate: number;
32
+ Initial: number;
33
+ FinalState: number;
34
+ Choice: number;
35
+ Junction: number;
36
+ DeepHistory: number;
37
+ ShallowHistory: number;
38
+ };
39
+ declare const Kinds: {
40
+ Null: number;
41
+ Element: number;
42
+ Partial: number;
43
+ Vertex: number;
44
+ Constraint: number;
45
+ Behavior: number;
46
+ Namespace: number;
47
+ Concurrent: number;
48
+ Sequential: number;
49
+ StateMachine: number;
50
+ Attribute: number;
51
+ State: number;
52
+ Model: number;
53
+ Transition: number;
54
+ Internal: number;
55
+ External: number;
56
+ Local: number;
57
+ Self: number;
58
+ Event: number;
59
+ CompletionEvent: number;
60
+ ChangeEvent: number;
61
+ ErrorEvent: number;
62
+ TimeEvent: number;
63
+ CallEvent: number;
64
+ Pseudostate: number;
65
+ Initial: number;
66
+ FinalState: number;
67
+ Choice: number;
68
+ Junction: number;
69
+ DeepHistory: number;
70
+ ShallowHistory: number;
71
+ };
72
+ declare const MakeKind: (...baseKinds: number[]) => number;
73
+ declare const IsKind: typeof isKind;
74
+
75
+ export { IsKind, type Kind, Kinds, MakeKind, bases, isKind, kind, kinds, makeKind };
package/dist/kind.js ADDED
@@ -0,0 +1,21 @@
1
+ import {
2
+ IsKind,
3
+ Kinds,
4
+ MakeKind,
5
+ bases,
6
+ isKind,
7
+ kind,
8
+ kinds,
9
+ makeKind
10
+ } from "./chunk-UO7RF4FF.js";
11
+ export {
12
+ IsKind,
13
+ Kinds,
14
+ MakeKind,
15
+ bases,
16
+ isKind,
17
+ kind,
18
+ kinds,
19
+ makeKind
20
+ };
21
+ //# sourceMappingURL=kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/muid.cjs ADDED
@@ -0,0 +1,345 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/muid.ts
20
+ var muid_exports = {};
21
+ __export(muid_exports, {
22
+ Generator: () => Generator,
23
+ MUID: () => MUID,
24
+ ShardedGenerators: () => ShardedGenerators,
25
+ add64: () => add64,
26
+ and64: () => and64,
27
+ cmp64: () => cmp64,
28
+ from32: () => from32,
29
+ getDefaultConfig: () => getDefaultConfig,
30
+ make: () => make,
31
+ make64: () => make64,
32
+ makeMuid: () => makeMuid,
33
+ newGenerator: () => newGenerator,
34
+ or64: () => or64,
35
+ shl64: () => shl64,
36
+ shr64: () => shr64,
37
+ sub64: () => sub64
38
+ });
39
+ module.exports = __toCommonJS(muid_exports);
40
+ var defaultEpochValue = 17e11;
41
+ var make64 = (high, low) => ({
42
+ high: high >>> 0,
43
+ low: low >>> 0
44
+ });
45
+ var from32 = (value) => make64(0, value >>> 0);
46
+ var add64 = (a, b) => {
47
+ const low = a.low + b.low >>> 0;
48
+ const carry = a.low + b.low > 4294967295 ? 1 : 0;
49
+ const high = a.high + b.high + carry >>> 0;
50
+ return make64(high, low);
51
+ };
52
+ var sub64 = (a, b) => {
53
+ const low = a.low - b.low >>> 0;
54
+ const borrow = a.low < b.low ? 1 : 0;
55
+ const high = a.high - b.high - borrow >>> 0;
56
+ return make64(high, low);
57
+ };
58
+ var shl64 = (value, bits) => {
59
+ if (bits === 0) {
60
+ return value;
61
+ }
62
+ if (bits >= 64) {
63
+ return make64(0, 0);
64
+ }
65
+ if (bits >= 32) {
66
+ return make64(value.low << bits - 32, 0);
67
+ }
68
+ const high = value.high << bits | value.low >>> 32 - bits;
69
+ const low = value.low << bits;
70
+ return make64(high >>> 0, low >>> 0);
71
+ };
72
+ var shr64 = (value, bits) => {
73
+ if (bits === 0) {
74
+ return value;
75
+ }
76
+ if (bits >= 64) {
77
+ return make64(0, 0);
78
+ }
79
+ if (bits >= 32) {
80
+ return make64(0, value.high >>> bits - 32);
81
+ }
82
+ const low = value.low >>> bits | value.high << 32 - bits;
83
+ const high = value.high >>> bits;
84
+ return make64(high >>> 0, low >>> 0);
85
+ };
86
+ var or64 = (a, b) => make64((a.high | b.high) >>> 0, (a.low | b.low) >>> 0);
87
+ var and64 = (a, b) => make64((a.high & b.high) >>> 0, (a.low & b.low) >>> 0);
88
+ var cmp64 = (a, b) => {
89
+ if (a.high < b.high) {
90
+ return -1;
91
+ }
92
+ if (a.high > b.high) {
93
+ return 1;
94
+ }
95
+ if (a.low < b.low) {
96
+ return -1;
97
+ }
98
+ if (a.low > b.low) {
99
+ return 1;
100
+ }
101
+ return 0;
102
+ };
103
+ var gte64 = (a, b) => cmp64(a, b) >= 0;
104
+ var toHex64 = (value) => {
105
+ if (value.high === 0) {
106
+ return value.low.toString(16);
107
+ }
108
+ const highHex = value.high.toString(16);
109
+ let lowHex = value.low.toString(16);
110
+ while (lowHex.length < 8) {
111
+ lowHex = `0${lowHex}`;
112
+ }
113
+ return `${highHex}${lowHex}`;
114
+ };
115
+ var toString64 = (value) => {
116
+ if (value.high === 0) {
117
+ return value.low.toString();
118
+ }
119
+ if (value.high < 2097152) {
120
+ return (value.high * 4294967296 + value.low).toString();
121
+ }
122
+ return `0x${toHex64(value)}`;
123
+ };
124
+ var toBase32_64 = (value) => {
125
+ if (value.high === 0) {
126
+ return value.low.toString(32);
127
+ }
128
+ const hex = toHex64(value);
129
+ let num = 0;
130
+ let result = "";
131
+ for (let index = 0; index < hex.length; index += 1) {
132
+ num = num * 16 + Number.parseInt(hex[index], 16);
133
+ if (num >= 32) {
134
+ result += (num % 32).toString(32);
135
+ num = Math.floor(num / 32);
136
+ }
137
+ }
138
+ if (num > 0) {
139
+ result = `${num.toString(32)}${result}`;
140
+ }
141
+ return result || "0";
142
+ };
143
+ var hashString = (value) => {
144
+ let hash = make64(2166136261, 0);
145
+ const prime = from32(16777619);
146
+ for (let index = 0; index < value.length; index += 1) {
147
+ const char = from32(value.charCodeAt(index));
148
+ hash = and64(or64(hash, char), make64(0, 4294967295));
149
+ if (hash.high === 0) {
150
+ hash = from32(hash.low * prime.low >>> 0);
151
+ }
152
+ }
153
+ return hash;
154
+ };
155
+ var getMachineIdentifier = () => {
156
+ if (typeof process !== "undefined") {
157
+ const identifier = process.env.HOSTNAME ?? process.env.COMPUTERNAME ?? process.release?.name;
158
+ if (identifier) {
159
+ return identifier;
160
+ }
161
+ }
162
+ if (typeof navigator !== "undefined") {
163
+ return `${navigator.userAgent}${navigator.platform}${navigator.hardwareConcurrency ?? ""}`;
164
+ }
165
+ return `js-${Math.random().toString(36).slice(2)}`;
166
+ };
167
+ var getRandomBytes = (length) => {
168
+ const cryptoApi = globalThis.crypto;
169
+ if (cryptoApi?.getRandomValues) {
170
+ const values = new Uint8Array(length);
171
+ cryptoApi.getRandomValues(values);
172
+ return Array.from(values);
173
+ }
174
+ return Array.from({ length }, () => Math.floor(Math.random() * 256));
175
+ };
176
+ var getDefaultConfig = () => {
177
+ const epoch = make64(
178
+ Math.floor(defaultEpochValue / 4294967296),
179
+ defaultEpochValue % 4294967296
180
+ );
181
+ const timestampBitLen = 41;
182
+ const machineIDBitLen = 14;
183
+ const maxMachineID = (1 << machineIDBitLen) - 1;
184
+ const identifier = getMachineIdentifier();
185
+ let machineID;
186
+ if (identifier) {
187
+ const hash = hashString(identifier);
188
+ machineID = from32(hash.low & maxMachineID);
189
+ } else {
190
+ const randomBytes = getRandomBytes(4);
191
+ let randomValue = 0;
192
+ for (let index = 0; index < 4; index += 1) {
193
+ randomValue = randomValue << 8 | randomBytes[index];
194
+ }
195
+ machineID = from32(randomValue & maxMachineID);
196
+ }
197
+ return {
198
+ epoch,
199
+ machineID,
200
+ machineIDBitLen,
201
+ timestampBitLen
202
+ };
203
+ };
204
+ var MUID = class {
205
+ value;
206
+ constructor(value) {
207
+ if (typeof value === "number") {
208
+ this.value = from32(value);
209
+ return;
210
+ }
211
+ if (value && typeof value.high === "number" && typeof value.low === "number") {
212
+ this.value = make64(value.high, value.low);
213
+ return;
214
+ }
215
+ this.value = make64(0, 0);
216
+ }
217
+ toString() {
218
+ return toBase32_64(this.value);
219
+ }
220
+ toHex() {
221
+ return toHex64(this.value);
222
+ }
223
+ toDecimal() {
224
+ return toString64(this.value);
225
+ }
226
+ valueOf() {
227
+ return this.value;
228
+ }
229
+ };
230
+ var Generator = class {
231
+ timestampBitLen;
232
+ machineIDBitLen;
233
+ epoch;
234
+ shardIndex;
235
+ shardBitLen;
236
+ counterBitLen;
237
+ timestampBitShift;
238
+ machineIDShift;
239
+ shardIndexShift;
240
+ counterBitMask;
241
+ machineID;
242
+ state;
243
+ constructor(config = {}, shardIndex = 0, shardBitLen = 0) {
244
+ this.timestampBitLen = config.timestampBitLen ?? 41;
245
+ this.machineIDBitLen = config.machineIDBitLen ?? 14;
246
+ this.epoch = config.epoch ?? make64(
247
+ Math.floor(defaultEpochValue / 4294967296),
248
+ defaultEpochValue % 4294967296
249
+ );
250
+ this.shardIndex = shardIndex;
251
+ this.shardBitLen = shardBitLen;
252
+ this.counterBitLen = 64 - this.timestampBitLen - this.machineIDBitLen - this.shardBitLen;
253
+ this.timestampBitShift = this.machineIDBitLen + this.shardBitLen + this.counterBitLen;
254
+ this.machineIDShift = this.shardBitLen + this.counterBitLen;
255
+ this.shardIndexShift = this.counterBitLen;
256
+ this.counterBitMask = this.counterBitLen >= 32 ? make64(4294967295, 4294967295) : sub64(shl64(from32(1), this.counterBitLen), from32(1));
257
+ const machineIDMask = this.machineIDBitLen >= 32 ? make64(4294967295, 4294967295) : sub64(shl64(from32(1), this.machineIDBitLen), from32(1));
258
+ this.machineID = and64(config.machineID ?? from32(0), machineIDMask);
259
+ this.shardIndex = (this.shardIndex & (1 << Math.min(this.shardBitLen, 31)) - 1) >>> 0;
260
+ this.state = from32(1);
261
+ }
262
+ id() {
263
+ let now = sub64(from32(Date.now() & 4294967295), this.epoch);
264
+ const dateNow = Date.now();
265
+ if (dateNow > 4294967295) {
266
+ now = sub64(
267
+ make64(Math.floor(dateNow / 4294967296), dateNow & 4294967295),
268
+ this.epoch
269
+ );
270
+ }
271
+ const lastTimestamp = shr64(this.state, this.counterBitLen);
272
+ let counter = and64(this.state, this.counterBitMask);
273
+ if (cmp64(now, lastTimestamp) < 0) {
274
+ now = lastTimestamp;
275
+ }
276
+ if (cmp64(now, lastTimestamp) === 0) {
277
+ if (gte64(counter, this.counterBitMask)) {
278
+ now = add64(now, from32(1));
279
+ counter = from32(1);
280
+ } else {
281
+ counter = add64(counter, from32(1));
282
+ }
283
+ } else {
284
+ counter = from32(1);
285
+ }
286
+ this.state = or64(shl64(now, this.counterBitLen), counter);
287
+ const timestampPart = shl64(now, this.timestampBitShift);
288
+ const machineIDPart = shl64(this.machineID, this.machineIDShift);
289
+ const shardIndexPart = shl64(from32(this.shardIndex), this.shardIndexShift);
290
+ return new MUID(
291
+ or64(or64(or64(timestampPart, machineIDPart), shardIndexPart), counter)
292
+ );
293
+ }
294
+ };
295
+ var ShardedGenerators = class {
296
+ pool;
297
+ size;
298
+ index = 0;
299
+ constructor() {
300
+ const numCPU = typeof navigator !== "undefined" && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4;
301
+ const shardBits = numCPU > 1 ? Math.min(Math.ceil(Math.log2(numCPU)), 5) : 0;
302
+ const defaultConfig = getDefaultConfig();
303
+ this.size = 1 << shardBits;
304
+ this.pool = [];
305
+ for (let index = 0; index < this.size; index += 1) {
306
+ this.pool.push(new Generator(defaultConfig, index, shardBits));
307
+ }
308
+ }
309
+ next() {
310
+ const generator = this.pool[this.index];
311
+ this.index = (this.index + 1) % this.size;
312
+ return generator;
313
+ }
314
+ };
315
+ var defaultGenerator = new Generator(getDefaultConfig(), 0, 0);
316
+ var make = () => defaultGenerator.id();
317
+ var newGenerator = (config = {}, shardIndex = 0, shardBitLen = 0) => new Generator(
318
+ {
319
+ ...getDefaultConfig(),
320
+ ...config
321
+ },
322
+ shardIndex,
323
+ shardBitLen
324
+ );
325
+ var makeMuid = (prefix) => `${prefix}-${make().toString()}`;
326
+ // Annotate the CommonJS export names for ESM import in node:
327
+ 0 && (module.exports = {
328
+ Generator,
329
+ MUID,
330
+ ShardedGenerators,
331
+ add64,
332
+ and64,
333
+ cmp64,
334
+ from32,
335
+ getDefaultConfig,
336
+ make,
337
+ make64,
338
+ makeMuid,
339
+ newGenerator,
340
+ or64,
341
+ shl64,
342
+ shr64,
343
+ sub64
344
+ });
345
+ //# sourceMappingURL=muid.cjs.map