@milkio/stargate-worker 1.0.0-beta.28 → 1.0.0-beta.30
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/index.d.ts +25 -3
- package/index.js +225 -3
- package/package.json +1 -1
- package/utils/create-id.d.ts +1 -0
package/index.d.ts
CHANGED
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
export type MilkioStargateOptions = {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
port: {
|
|
3
|
+
postMessage: (data: any) => void;
|
|
4
|
+
addEventListener: (event: "message", callback: (event: {
|
|
5
|
+
data: any;
|
|
6
|
+
}) => void) => void;
|
|
7
|
+
removeEventListener: (event: "message", callback: (event: {
|
|
8
|
+
data: any;
|
|
9
|
+
}) => void) => void;
|
|
10
|
+
};
|
|
4
11
|
};
|
|
5
12
|
export type Mixin<T, U> = U & Omit<T, keyof U>;
|
|
13
|
+
export type ExecuteOptions = {
|
|
14
|
+
params?: Record<any, any>;
|
|
15
|
+
headers?: Record<string, string>;
|
|
16
|
+
type?: "action" | "stream";
|
|
17
|
+
};
|
|
18
|
+
export type ExecuteResultsOption = {
|
|
19
|
+
executeId: string;
|
|
20
|
+
};
|
|
21
|
+
export type GeneratorGeneric<T> = T extends AsyncGenerator<infer I> ? I : never;
|
|
6
22
|
export declare function createStargateWorker<Generated extends {
|
|
7
23
|
routeSchema: any;
|
|
8
24
|
rejectCode: any;
|
|
9
|
-
}>(stargateOptions: MilkioStargateOptions): Promise<
|
|
25
|
+
}>(stargateOptions: MilkioStargateOptions): Promise<{
|
|
26
|
+
execute<Path extends keyof Generated["routeSchema"]>(path: Path, options?: Mixin<ExecuteOptions, {
|
|
27
|
+
params?: Generated["routeSchema"][Path]["types"]["params"];
|
|
28
|
+
}>): Promise<Generated["routeSchema"][Path]["types"]["\uD83D\uDC23"] extends boolean ? // action
|
|
29
|
+
[Partial<Generated["rejectCode"]>, null, ExecuteResultsOption] | [null, Generated["routeSchema"][Path]["types"]["result"], ExecuteResultsOption] : // stream
|
|
30
|
+
[Partial<Generated["rejectCode"]>, null, ExecuteResultsOption] | [null, AsyncGenerator<[Partial<Generated["rejectCode"]>, null] | [null, GeneratorGeneric<Generated["routeSchema"][Path]["types"]["result"]>], ExecuteResultsOption>]>;
|
|
31
|
+
}>;
|
package/index.js
CHANGED
|
@@ -1,8 +1,230 @@
|
|
|
1
|
+
// packages/milkio-stargate-worker/utils/create-id.ts
|
|
2
|
+
function defineIdGenerator(options) {
|
|
3
|
+
if (!options.length)
|
|
4
|
+
options.length = 24;
|
|
5
|
+
if (options.length < 1)
|
|
6
|
+
throw new Error("Invalid length");
|
|
7
|
+
if (options.length > 61)
|
|
8
|
+
throw new Error("Invalid length");
|
|
9
|
+
if (options.timestamp && options.length < 9)
|
|
10
|
+
throw new Error("Invalid length");
|
|
11
|
+
let lastTime = 0;
|
|
12
|
+
let lastDecimal = 0n;
|
|
13
|
+
return {
|
|
14
|
+
createId() {
|
|
15
|
+
let randLength = options.length;
|
|
16
|
+
const now = Date.now();
|
|
17
|
+
let id = "";
|
|
18
|
+
if (options.timestamp) {
|
|
19
|
+
randLength -= 8;
|
|
20
|
+
id = `${id}${__bigIntToString(BigInt(now)).padStart(8, "0")}`;
|
|
21
|
+
}
|
|
22
|
+
if (options.sequential && lastTime === now) {
|
|
23
|
+
id = `${id}${__bigIntToString(++lastDecimal).padStart(1, "0")}`;
|
|
24
|
+
} else {
|
|
25
|
+
lastTime = now;
|
|
26
|
+
const min = 0n;
|
|
27
|
+
const max = __getMaxValue(BigInt(randLength));
|
|
28
|
+
lastDecimal = __secureRandomBigInt(min, max);
|
|
29
|
+
id = `${id}${__bigIntToString(lastDecimal).padStart(randLength, "0")}`;
|
|
30
|
+
}
|
|
31
|
+
return id;
|
|
32
|
+
},
|
|
33
|
+
getIdTimestamp(id) {
|
|
34
|
+
return options.timestamp ? Number(__stringToBigInt(id.slice(0, 8).replaceAll("0", ""))) : 0;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
var ENCODING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
39
|
+
function __secureRandomBigInt(min, max) {
|
|
40
|
+
if (min >= max)
|
|
41
|
+
throw new Error("Invalid range");
|
|
42
|
+
const range = max - min + 1n;
|
|
43
|
+
const byteCount = Math.ceil(Number(BigInt(range.toString(2).length)) / 8);
|
|
44
|
+
const entropyBytes = new Uint8Array(byteCount);
|
|
45
|
+
let randomValue;
|
|
46
|
+
do {
|
|
47
|
+
crypto.getRandomValues(entropyBytes);
|
|
48
|
+
randomValue = BigInt(`0x${Array.from(entropyBytes).map((b) => b.toString(16).padStart(2, "0")).join("")}`) % range;
|
|
49
|
+
} while (randomValue < 0n);
|
|
50
|
+
return min + randomValue;
|
|
51
|
+
}
|
|
52
|
+
function __bigIntToString(value) {
|
|
53
|
+
const base = BigInt(ENCODING.length);
|
|
54
|
+
let result = "";
|
|
55
|
+
let current = value;
|
|
56
|
+
if (current === 0n)
|
|
57
|
+
return ENCODING[0];
|
|
58
|
+
while (current > 0n) {
|
|
59
|
+
const remainder = current % base;
|
|
60
|
+
result = ENCODING[Number(remainder)] + result;
|
|
61
|
+
current = current / base;
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
function __stringToBigInt(str) {
|
|
66
|
+
const charMap = {};
|
|
67
|
+
for (let i = 0;i < ENCODING.length; i++) {
|
|
68
|
+
charMap[ENCODING[i]] = i;
|
|
69
|
+
}
|
|
70
|
+
const base = BigInt(ENCODING.length);
|
|
71
|
+
let result = 0n;
|
|
72
|
+
for (let i = 0;i < str.length; i++) {
|
|
73
|
+
const char = str[i];
|
|
74
|
+
if (!(char in charMap)) {
|
|
75
|
+
throw new Error(`Invalid character '${char}' in input string`);
|
|
76
|
+
}
|
|
77
|
+
const value = BigInt(charMap[char]);
|
|
78
|
+
result = result * base + value;
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
function __getMaxValue(n) {
|
|
83
|
+
return BigInt(ENCODING.length) ** n - 1n;
|
|
84
|
+
}
|
|
85
|
+
var idGenerator = defineIdGenerator({ length: 24, timestamp: false, sequential: false });
|
|
86
|
+
var __createId = idGenerator.createId;
|
|
87
|
+
|
|
1
88
|
// packages/milkio-stargate-worker/index.ts
|
|
2
|
-
async function createStargateWorker(stargateOptions) {
|
|
89
|
+
async function createStargateWorker(stargateOptions) {
|
|
90
|
+
const connect = new Promise((resolve) => {
|
|
91
|
+
const handler = (event) => {
|
|
92
|
+
if (event.data !== "PONG")
|
|
93
|
+
return;
|
|
94
|
+
clearInterval(timer);
|
|
95
|
+
stargateOptions.port.removeEventListener("message", handler);
|
|
96
|
+
resolve(true);
|
|
97
|
+
};
|
|
98
|
+
stargateOptions.port.addEventListener("message", handler);
|
|
99
|
+
stargateOptions.port.postMessage("PING");
|
|
100
|
+
const timer = setInterval(() => stargateOptions.port.postMessage("PING"), 42);
|
|
101
|
+
});
|
|
102
|
+
const stargate = {
|
|
103
|
+
async execute(path, options) {
|
|
104
|
+
return new Promise(async (resolve, reject) => {
|
|
105
|
+
await connect;
|
|
106
|
+
const executeId = __createId();
|
|
107
|
+
if (options?.type === "action" || !options?.type) {
|
|
108
|
+
const handler = (event) => {
|
|
109
|
+
if (typeof event.data !== "object")
|
|
110
|
+
return;
|
|
111
|
+
if (event.data.executeId !== executeId)
|
|
112
|
+
return;
|
|
113
|
+
stargateOptions.port.removeEventListener("message", handler);
|
|
114
|
+
if (!event.data.success)
|
|
115
|
+
resolve([event.data.error, null, { executeId }]);
|
|
116
|
+
if (event.data.success)
|
|
117
|
+
resolve([null, event.data.data, { executeId }]);
|
|
118
|
+
};
|
|
119
|
+
stargateOptions.port.addEventListener("message", handler);
|
|
120
|
+
stargateOptions.port.postMessage({
|
|
121
|
+
executeId,
|
|
122
|
+
path,
|
|
123
|
+
params: options?.params,
|
|
124
|
+
headers: options?.headers
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (options?.type === "stream") {
|
|
128
|
+
let generator;
|
|
129
|
+
const handler = (event) => {
|
|
130
|
+
if (typeof event.data !== "object")
|
|
131
|
+
return;
|
|
132
|
+
if (event.data.executeId !== executeId)
|
|
133
|
+
return;
|
|
134
|
+
stargateOptions.port.removeEventListener("message", handler);
|
|
135
|
+
if (!generator) {
|
|
136
|
+
generator = createControllableAsyncGenerator();
|
|
137
|
+
if (!event.data.success)
|
|
138
|
+
resolve([event.data.error, null, { executeId }]);
|
|
139
|
+
if (event.data.success)
|
|
140
|
+
resolve([null, generator, { executeId }]);
|
|
141
|
+
} else {
|
|
142
|
+
if (event.data.done)
|
|
143
|
+
generator.complete();
|
|
144
|
+
else if (event.data.success)
|
|
145
|
+
generator.push(event.data.data);
|
|
146
|
+
else if (!event.data.success)
|
|
147
|
+
generator.error(event.data.data);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
stargateOptions.port.addEventListener("message", handler);
|
|
151
|
+
stargateOptions.port.postMessage({
|
|
152
|
+
executeId,
|
|
153
|
+
path,
|
|
154
|
+
params: options?.params,
|
|
155
|
+
headers: options?.headers
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
return stargate;
|
|
162
|
+
}
|
|
163
|
+
function createControllableAsyncGenerator() {
|
|
164
|
+
const queue = [];
|
|
165
|
+
let deferred = null;
|
|
166
|
+
let finished = false;
|
|
167
|
+
const processQueue = () => {
|
|
168
|
+
if (deferred && queue.length > 0) {
|
|
169
|
+
const item = queue.shift();
|
|
170
|
+
if (item.error) {
|
|
171
|
+
deferred.reject(item.error);
|
|
172
|
+
} else {
|
|
173
|
+
deferred.resolve({ value: item.value, done: item.done || false });
|
|
174
|
+
}
|
|
175
|
+
deferred = null;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const generator = {
|
|
179
|
+
[Symbol.asyncIterator]() {
|
|
180
|
+
return this;
|
|
181
|
+
},
|
|
182
|
+
async next() {
|
|
183
|
+
if (finished)
|
|
184
|
+
return { value: undefined, done: true };
|
|
185
|
+
return new Promise((resolve, reject) => {
|
|
186
|
+
deferred = { resolve, reject };
|
|
187
|
+
processQueue();
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
async return(value) {
|
|
191
|
+
finished = true;
|
|
192
|
+
queue.length = 0;
|
|
193
|
+
return { value, done: true };
|
|
194
|
+
},
|
|
195
|
+
async throw(error) {
|
|
196
|
+
finished = true;
|
|
197
|
+
queue.length = 0;
|
|
198
|
+
return Promise.reject(error);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
return {
|
|
202
|
+
generator,
|
|
203
|
+
push: (value) => {
|
|
204
|
+
if (finished)
|
|
205
|
+
return;
|
|
206
|
+
queue.push({ value });
|
|
207
|
+
processQueue();
|
|
208
|
+
},
|
|
209
|
+
complete: (value) => {
|
|
210
|
+
if (finished)
|
|
211
|
+
return;
|
|
212
|
+
finished = true;
|
|
213
|
+
queue.push({ done: true, value });
|
|
214
|
+
processQueue();
|
|
215
|
+
},
|
|
216
|
+
error: (err) => {
|
|
217
|
+
if (finished)
|
|
218
|
+
return;
|
|
219
|
+
finished = true;
|
|
220
|
+
queue.push({ error: err });
|
|
221
|
+
processQueue();
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
}
|
|
3
225
|
export {
|
|
4
226
|
createStargateWorker
|
|
5
227
|
};
|
|
6
228
|
|
|
7
|
-
//# debugId=
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB7IFRTT04gfSBmcm9tIFwiQHNvdXRoZXJuLWF1cm9yYS90c29uXCI7XG5cbmV4cG9ydCB0eXBlIE1pbGtpb1N0YXJnYXRlT3B0aW9ucyA9IHtcbiAgcG9zdE1lc3NhZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIHNlcmlhbGl6ZTogXCJuYXRpdmVcIiB8IFwidHNvblwiIHwgXCJqc29uXCI7XG59O1xuXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3RhcmdhdGVXb3JrZXI8XG4gIEdlbmVyYXRlZCBleHRlbmRzIHsgcm91dGVTY2hlbWE6IGFueTsgcmVqZWN0Q29kZTogYW55IH1cbj4oc3RhcmdhdGVPcHRpb25zOiBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMpIHtcbiAgLy9cbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFTQSxlQUFzQixvQkFFckIsQ0FBQyxpQkFBd0M7IiwKICAiZGVidWdJZCI6ICJBQTQzQTA0NTg0NUQ1NDQxNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
229
|
+
//# debugId=C3A691A15581F6EE64756E2164756E21
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXHV0aWxzXFxjcmVhdGUtaWQudHMiLCAiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElOR1swXTtcblxuICB3aGlsZSAoY3VycmVudCA+IDBuKSB7XG4gICAgY29uc3QgcmVtYWluZGVyID0gY3VycmVudCAlIGJhc2U7XG4gICAgcmVzdWx0ID0gRU5DT0RJTkdbTnVtYmVyKHJlbWFpbmRlcildICsgcmVzdWx0O1xuICAgIGN1cnJlbnQgPSBjdXJyZW50IC8gYmFzZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX3N0cmluZ1RvQmlnSW50KHN0cjogc3RyaW5nKTogYmlnaW50IHtcbiAgY29uc3QgY2hhck1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEVOQ09ESU5HLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhck1hcFtFTkNPRElOR1tpXV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmICghKGNoYXIgaW4gY2hhck1hcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGlucHV0IHN0cmluZ2ApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChjaGFyTWFwW2NoYXJdKTtcbiAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX2dldE1heFZhbHVlKG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKSAqKiBuIC0gMW47XG59XG5cbmNvbnN0IGlkR2VuZXJhdG9yID0gZGVmaW5lSWRHZW5lcmF0b3IoeyBsZW5ndGg6IDI0LCB0aW1lc3RhbXA6IGZhbHNlLCBzZXF1ZW50aWFsOiBmYWxzZSB9KTtcblxuZXhwb3J0IGNvbnN0IF9fY3JlYXRlSWQgPSBpZEdlbmVyYXRvci5jcmVhdGVJZDtcbiIsCiAgICAiaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuL3V0aWxzL2NyZWF0ZS1pZC50c1wiO1xuXG5leHBvcnQgdHlwZSBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMgPSB7XG4gIHBvcnQ6IHtcbiAgICBwb3N0TWVzc2FnZTogKGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgICBhZGRFdmVudExpc3RlbmVyOiAoZXZlbnQ6IFwibWVzc2FnZVwiLCBjYWxsYmFjazogKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogXCJtZXNzYWdlXCIsIGNhbGxiYWNrOiAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHZvaWQpID0+IHZvaWQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xuXG5leHBvcnQgdHlwZSBFeGVjdXRlT3B0aW9ucyA9IHtcbiAgcGFyYW1zPzogUmVjb3JkPGFueSwgYW55PjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHR5cGU/OiBcImFjdGlvblwiIHwgXCJzdHJlYW1cIjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGVSZXN1bHRzT3B0aW9uID0geyBleGVjdXRlSWQ6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBHZW5lcmF0b3JHZW5lcmljPFQ+ID0gVCBleHRlbmRzIEFzeW5jR2VuZXJhdG9yPGluZmVyIEk+ID8gSSA6IG5ldmVyO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3RhcmdhdGVXb3JrZXI8R2VuZXJhdGVkIGV4dGVuZHMgeyByb3V0ZVNjaGVtYTogYW55OyByZWplY3RDb2RlOiBhbnkgfT4oc3RhcmdhdGVPcHRpb25zOiBNaWxraW9TdGFyZ2F0ZU9wdGlvbnMpIHtcbiAgY29uc3QgY29ubmVjdCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudDogeyBkYXRhOiBhbnkgfSkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmRhdGEgIT09IFwiUE9OR1wiKSByZXR1cm47XG4gICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9O1xuICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiUElOR1wiKTtcbiAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHN0YXJnYXRlT3B0aW9ucy5wb3J0LnBvc3RNZXNzYWdlKFwiUElOR1wiKSwgNDIpO1xuICB9KTtcbiAgY29uc3Qgc3RhcmdhdGUgPSB7XG4gICAgYXN5bmMgZXhlY3V0ZTxQYXRoIGV4dGVuZHMga2V5b2YgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl0+KFxuICAgICAgcGF0aDogUGF0aCxcbiAgICAgIG9wdGlvbnM/OiBNaXhpbjxcbiAgICAgICAgRXhlY3V0ZU9wdGlvbnMsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xuICAgICAgICB9XG4gICAgICA+LFxuICAgICk6IFByb21pc2U8XG4gICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wi8J+Qo1wiXSBleHRlbmRzIGJvb2xlYW5cbiAgICAgICAgPyAvLyBhY3Rpb25cbiAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxuICAgICAgICA6IC8vIHN0cmVhbVxuICAgICAgICAgIFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsLCBFeGVjdXRlUmVzdWx0c09wdGlvbl0gfCBbbnVsbCwgQXN5bmNHZW5lcmF0b3I8W1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGxdIHwgW251bGwsIEdlbmVyYXRvckdlbmVyaWM8R2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXT5dLCBFeGVjdXRlUmVzdWx0c09wdGlvbj5dXG4gICAgPiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQXN5bmNQcm9taXNlRXhlY3V0b3I6IDxleHBsYW5hdGlvbj5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF3YWl0IGNvbm5lY3Q7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGVJZCA9IF9fY3JlYXRlSWQoKTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnR5cGUgPT09IFwiYWN0aW9uXCIgfHwgIW9wdGlvbnM/LnR5cGUpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiB7IGRhdGE6IGFueSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgIT09IFwib2JqZWN0XCIpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmV4ZWN1dGVJZCAhPT0gZXhlY3V0ZUlkKSByZXR1cm47XG4gICAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGF0YS5zdWNjZXNzKSByZXNvbHZlKFtldmVudC5kYXRhLmVycm9yLCBudWxsLCB7IGV4ZWN1dGVJZCB9XSk7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5zdWNjZXNzKSByZXNvbHZlKFtudWxsLCBldmVudC5kYXRhLmRhdGEsIHsgZXhlY3V0ZUlkIH1dIGFzIGFueSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBleGVjdXRlSWQsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zPy5wYXJhbXMsXG4gICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zPy50eXBlID09PSBcInN0cmVhbVwiKSB7XG4gICAgICAgICAgbGV0IGdlbmVyYXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQ29udHJvbGxhYmxlQXN5bmNHZW5lcmF0b3I+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IHsgZGF0YTogYW55IH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXhlY3V0ZUlkICE9PSBleGVjdXRlSWQpIHJldHVybjtcbiAgICAgICAgICAgIHN0YXJnYXRlT3B0aW9ucy5wb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgaWYgKCFnZW5lcmF0b3IpIHtcbiAgICAgICAgICAgICAgZ2VuZXJhdG9yID0gY3JlYXRlQ29udHJvbGxhYmxlQXN5bmNHZW5lcmF0b3IoKTtcbiAgICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhLnN1Y2Nlc3MpIHJlc29sdmUoW2V2ZW50LmRhdGEuZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkIH1dKTtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3VjY2VzcykgcmVzb2x2ZShbbnVsbCwgZ2VuZXJhdG9yLCB7IGV4ZWN1dGVJZCB9XSBhcyBhbnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZG9uZSkgZ2VuZXJhdG9yLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEuc3VjY2VzcykgZ2VuZXJhdG9yLnB1c2goZXZlbnQuZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoIWV2ZW50LmRhdGEuc3VjY2VzcykgZ2VuZXJhdG9yLmVycm9yKGV2ZW50LmRhdGEuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBoYW5kbGVyKTtcbiAgICAgICAgICBzdGFyZ2F0ZU9wdGlvbnMucG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBleGVjdXRlSWQsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zPy5wYXJhbXMsXG4gICAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zPy5oZWFkZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBzdGFyZ2F0ZTtcbn1cblxudHlwZSBEZWZlcnJlZDxUPiA9IHtcbiAgcmVzb2x2ZTogKHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pID0+IHZvaWQ7XG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xsYWJsZUFzeW5jR2VuZXJhdG9yPFQ+KCk6IHtcbiAgZ2VuZXJhdG9yOiBBc3luY0dlbmVyYXRvcjxUPjtcbiAgcHVzaDogKHZhbHVlOiBUKSA9PiB2b2lkO1xuICBjb21wbGV0ZTogKHJldHVyblZhbHVlPzogVCkgPT4gdm9pZDtcbiAgZXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59IHtcbiAgY29uc3QgcXVldWU6IEFycmF5PHsgdmFsdWU/OiBUOyBkb25lPzogYm9vbGVhbjsgZXJyb3I/OiBFcnJvciB9PiA9IFtdO1xuICBsZXQgZGVmZXJyZWQ6IERlZmVycmVkPEl0ZXJhdG9yUmVzdWx0PFQ+PiB8IG51bGwgPSBudWxsO1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcblxuICBjb25zdCBwcm9jZXNzUXVldWUgPSAoKSA9PiB7XG4gICAgaWYgKGRlZmVycmVkICYmIHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpITtcbiAgICAgIGlmIChpdGVtLmVycm9yKSB7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdChpdGVtLmVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoeyB2YWx1ZTogaXRlbS52YWx1ZSEsIGRvbmU6IGl0ZW0uZG9uZSB8fCBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIGRlZmVycmVkID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2VuZXJhdG9yOiBBc3luY0dlbmVyYXRvcjxUPiA9IHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xuICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGRlZmVycmVkID0geyByZXNvbHZlLCByZWplY3QgfTtcbiAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV0dXJuKHZhbHVlPzogVCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VD4+IHtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICByZXR1cm4geyB2YWx1ZSwgZG9uZTogdHJ1ZSB9O1xuICAgIH0sXG5cbiAgICBhc3luYyB0aHJvdyhlcnJvcj86IEVycm9yKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgcXVldWUubGVuZ3RoID0gMDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSxcbiAgfSBhcyBhbnk7XG5cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0b3IsXG4gICAgcHVzaDogKHZhbHVlOiBUKSA9PiB7XG4gICAgICBpZiAoZmluaXNoZWQpIHJldHVybjtcbiAgICAgIHF1ZXVlLnB1c2goeyB2YWx1ZSB9KTtcbiAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sXG4gICAgY29tcGxldGU6ICh2YWx1ZT86IFQpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgcXVldWUucHVzaCh7IGRvbmU6IHRydWUsIHZhbHVlIH0pO1xuICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSxcbiAgICBlcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgcXVldWUucHVzaCh7IGVycm9yOiBlcnIgfSk7XG4gICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICB9LFxuICB9O1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQU1BLFNBQVMsaUJBQWlCLENBQUMsU0FBNkI7QUFBQSxFQUN0RCxLQUFLLFFBQVE7QUFBQSxJQUFRLFFBQVEsU0FBUztBQUFBLEVBQ3RDLElBQUksUUFBUSxTQUFTO0FBQUEsSUFBRyxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUN4RCxJQUFJLFFBQVEsU0FBUztBQUFBLElBQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsRUFDekQsSUFBSSxRQUFRLGFBQWEsUUFBUSxTQUFTO0FBQUEsSUFBRyxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUM3RSxJQUFJLFdBQVc7QUFBQSxFQUNmLElBQUksY0FBYztBQUFBLEVBQ2xCLE9BQU87QUFBQSxJQUNMLFFBQVEsR0FBRztBQUFBLE1BQ1QsSUFBSSxhQUFhLFFBQVE7QUFB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S0FBSztBQUFBO0FBQUEsU0FHdkIsTUFBSyxDQUFDLE9BQTJDO0FBQUEsTUFDckQsV0FBVztBQUFBLE1BQ1gsTUFBTSxTQUFTO0FBQUEsTUFDZixPQUFPLFFBQVEsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUUvQjtBQUFBLEVBRUEsT0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLE1BQU0sQ0FBQyxVQUFhO0FBQUEsTUFDbEIsSUFBSTtBQUFBLFFBQVU7QUFBQSxNQUNkLE1BQU0sS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQ3BCLGFBQWE7QUFBQTtBQUFBLElBRWYsVUFBVSxDQUFDLFVBQWM7QUFBQSxNQUN2QixJQUFJO0FBQUEsUUFBVTtBQUFBLE1BQ2QsV0FBVztBQUFBLE1BQ1gsTUFBTSxLQUFLLEVBQUUsTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUFBLE1BQ2hDLGFBQWE7QUFBQTtBQUFBLElBRWYsT0FBTyxDQUFDLFFBQWU7QUFBQSxNQUNyQixJQUFJO0FBQUEsUUFBVTtBQUFBLE1BQ2QsV0FBVztBQUFBLE1BQ1gsTUFBTSxLQUFLLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFBQSxNQUN6QixhQUFhO0FBQUE7QUFBQSxFQUVqQjtBQUFBOyIsCiAgImRlYnVnSWQiOiAiQzNBNjkxQTE1NTgxRjZFRTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@milkio/stargate-worker","version":"1.0.0-beta.
|
|
1
|
+
{"name":"@milkio/stargate-worker","version":"1.0.0-beta.30","type":"module","module":"./index.js","types":"./index.d.ts","dependencies":{}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const __createId: () => string;
|