@gql.tada/cli-utils 1.7.3 → 1.8.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/CHANGELOG.md +49 -0
- package/dist/chunks/index-chunk.js +3702 -6218
- package/dist/chunks/index-chunk.js.map +1 -1
- package/dist/chunks/index-chunk.mjs +3674 -6196
- package/dist/chunks/index-chunk.mjs.map +1 -1
- package/dist/chunks/index-chunk2.js +79 -49
- package/dist/chunks/index-chunk2.js.map +1 -1
- package/dist/chunks/index-chunk2.mjs +128 -98
- package/dist/chunks/index-chunk2.mjs.map +1 -1
- package/dist/chunks/runner-chunk.js +2822 -0
- package/dist/chunks/runner-chunk.js.map +1 -0
- package/dist/chunks/runner-chunk.mjs +2805 -0
- package/dist/chunks/runner-chunk.mjs.map +1 -0
- package/dist/chunks/thread-chunk.js +472 -476
- package/dist/chunks/thread-chunk.js.map +1 -1
- package/dist/chunks/thread-chunk.mjs +494 -498
- package/dist/chunks/thread-chunk.mjs.map +1 -1
- package/dist/chunks/thread-chunk2.js +547 -137
- package/dist/chunks/thread-chunk2.js.map +1 -1
- package/dist/chunks/thread-chunk2.mjs +543 -141
- package/dist/chunks/thread-chunk2.mjs.map +1 -1
- package/dist/chunks/thread-chunk3.js.map +1 -1
- package/dist/chunks/thread-chunk3.mjs.map +1 -1
- package/dist/gql-tada-cli.d.ts +6 -0
- package/package.json +8 -8
|
@@ -62,87 +62,117 @@ exports.expose = function expose(i) {
|
|
|
62
62
|
return function main(r) {
|
|
63
63
|
var i;
|
|
64
64
|
var s = 0;
|
|
65
|
-
|
|
65
|
+
var o = 0;
|
|
66
|
+
return (...u) => {
|
|
66
67
|
if (!i) {
|
|
67
68
|
(i = new e.Worker(r, t)).unref();
|
|
68
69
|
}
|
|
69
|
-
var
|
|
70
|
-
var
|
|
71
|
-
var
|
|
72
|
-
var
|
|
70
|
+
var d = i;
|
|
71
|
+
var c = 0 | ++o;
|
|
72
|
+
var l = [];
|
|
73
|
+
var f = !1;
|
|
73
74
|
var v = !1;
|
|
74
|
-
var
|
|
75
|
-
var
|
|
75
|
+
var p = !1;
|
|
76
|
+
var k;
|
|
77
|
+
var g;
|
|
76
78
|
function cleanup() {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
if (v) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
v = !0;
|
|
83
|
+
k = void 0;
|
|
84
|
+
g = void 0;
|
|
85
|
+
d.removeListener("message", receiveMessage);
|
|
86
|
+
d.removeListener("error", receiveError);
|
|
87
|
+
d.removeListener("exit", receiveExit);
|
|
88
|
+
if (0 == --s) {
|
|
89
|
+
d.unref();
|
|
90
|
+
}
|
|
82
91
|
}
|
|
83
92
|
function sendMessage(e) {
|
|
84
|
-
|
|
85
|
-
id:
|
|
93
|
+
d.postMessage({
|
|
94
|
+
id: c,
|
|
86
95
|
kind: e
|
|
87
96
|
});
|
|
88
97
|
}
|
|
89
|
-
function
|
|
98
|
+
function fail(e) {
|
|
99
|
+
var r = g;
|
|
90
100
|
cleanup();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
if (r) {
|
|
102
|
+
r(e);
|
|
103
|
+
} else {
|
|
104
|
+
l.length = 1;
|
|
105
|
+
l[0] = {
|
|
106
|
+
id: c,
|
|
107
|
+
kind: a.Throw,
|
|
108
|
+
data: e
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function receiveError(e) {
|
|
113
|
+
fail(e);
|
|
114
|
+
}
|
|
115
|
+
function receiveExit(e) {
|
|
116
|
+
if (v) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (i === d) {
|
|
120
|
+
i = void 0;
|
|
121
|
+
}
|
|
122
|
+
fail(new Error(`Worker stopped unexpectedly with exit code ${e}`));
|
|
97
123
|
}
|
|
98
124
|
function receiveMessage(e) {
|
|
99
125
|
var r = e && "object" == typeof e && "kind" in e ? e : null;
|
|
100
126
|
if (!r) {
|
|
101
127
|
return;
|
|
102
|
-
} else if (
|
|
103
|
-
|
|
128
|
+
} else if (g && r.kind === a.Throw) {
|
|
129
|
+
g(getMessageData(r));
|
|
104
130
|
cleanup();
|
|
105
|
-
} else if (
|
|
106
|
-
|
|
131
|
+
} else if (k && r.kind === a.Return) {
|
|
132
|
+
k({
|
|
107
133
|
done: !0,
|
|
108
134
|
value: getMessageData(r)
|
|
109
135
|
});
|
|
110
136
|
cleanup();
|
|
111
|
-
} else if (
|
|
112
|
-
|
|
113
|
-
|
|
137
|
+
} else if (k && r.kind === a.Next) {
|
|
138
|
+
p = !1;
|
|
139
|
+
k({
|
|
114
140
|
done: !1,
|
|
115
141
|
value: getMessageData(r)
|
|
116
142
|
});
|
|
117
143
|
} else if (r.kind === a.Throw || r.kind === a.Return) {
|
|
118
|
-
|
|
144
|
+
l.push(r);
|
|
119
145
|
cleanup();
|
|
120
146
|
} else if (r.kind === a.Next) {
|
|
121
|
-
|
|
122
|
-
|
|
147
|
+
l.push(r);
|
|
148
|
+
p = !1;
|
|
123
149
|
}
|
|
124
150
|
}
|
|
125
151
|
return {
|
|
126
152
|
async next() {
|
|
127
|
-
if (!
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
153
|
+
if (!f) {
|
|
154
|
+
f = !0;
|
|
155
|
+
if (0 == s++) {
|
|
156
|
+
d.ref();
|
|
157
|
+
}
|
|
158
|
+
d.addListener("message", receiveMessage);
|
|
159
|
+
d.addListener("error", receiveError);
|
|
160
|
+
d.addListener("exit", receiveExit);
|
|
161
|
+
d.postMessage({
|
|
162
|
+
id: c,
|
|
133
163
|
kind: n.Start,
|
|
134
|
-
data:
|
|
164
|
+
data: u
|
|
135
165
|
});
|
|
136
166
|
}
|
|
137
|
-
if (
|
|
167
|
+
if (v && !l.length) {
|
|
138
168
|
return {
|
|
139
169
|
done: !0
|
|
140
170
|
};
|
|
141
|
-
} else if (!
|
|
142
|
-
|
|
171
|
+
} else if (!v && !p && l.length <= 1) {
|
|
172
|
+
p = !0;
|
|
143
173
|
sendMessage(n.Pull);
|
|
144
174
|
}
|
|
145
|
-
var e =
|
|
175
|
+
var e = l.shift();
|
|
146
176
|
if (e && e.kind === a.Throw) {
|
|
147
177
|
cleanup();
|
|
148
178
|
throw getMessageData(e);
|
|
@@ -159,21 +189,21 @@ exports.expose = function expose(i) {
|
|
|
159
189
|
};
|
|
160
190
|
} else {
|
|
161
191
|
return new Promise(((e, r) => {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
192
|
+
k = r => {
|
|
193
|
+
k = void 0;
|
|
194
|
+
g = void 0;
|
|
165
195
|
e(r);
|
|
166
196
|
};
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
197
|
+
g = e => {
|
|
198
|
+
k = void 0;
|
|
199
|
+
g = void 0;
|
|
170
200
|
r(e);
|
|
171
201
|
};
|
|
172
202
|
}));
|
|
173
203
|
}
|
|
174
204
|
},
|
|
175
205
|
async return() {
|
|
176
|
-
if (!
|
|
206
|
+
if (!v) {
|
|
177
207
|
cleanup();
|
|
178
208
|
sendMessage(n.Close);
|
|
179
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-chunk2.js","sources":["../../src/threads/index.ts"],"sourcesContent":["import type { WorkerOptions } from 'node:worker_threads';\nimport { Worker, isMainThread, parentPort, SHARE_ENV } from 'node:worker_threads';\n\nconst port = parentPort!;\nif (!isMainThread && !port) {\n throw new ReferenceError('Failed to receive parent message port');\n}\n\nconst enum MainMessageCodes {\n Start = 'START',\n Close = 'CLOSE',\n Pull = 'PULL',\n}\n\ninterface MainMessage {\n id?: number;\n kind: MainMessageCodes;\n data?: any;\n}\n\nconst enum ThreadMessageCodes {\n Next = 'NEXT',\n Throw = 'THROW',\n Return = 'RETURN',\n}\n\ninterface ThreadMessage {\n id?: number;\n kind: ThreadMessageCodes;\n data?: any;\n extra?: Record<string, unknown>;\n}\n\nconst workerOpts: WorkerOptions = {\n env: SHARE_ENV,\n stderr: false,\n stdout: false,\n stdin: false,\n};\n\nconst getMessageData = (message: ThreadMessage) => {\n const data = message.data;\n if (message.kind === ThreadMessageCodes.Throw) {\n return typeof data === 'object' && data && message.extra != null\n ? Object.assign(data, message.extra)\n : data;\n } else {\n return data;\n }\n};\n\nconst asyncIteratorSymbol = (): typeof Symbol.asyncIterator =>\n (typeof Symbol === 'function' && Symbol.asyncIterator) || ('@@asyncIterator' as any);\n\n/** Capture the stack above the caller */\nfunction captureStack(): NodeJS.CallSite[] {\n const _error: any = new Error();\n const _prepareStackTrace = Error.prepareStackTrace;\n try {\n let stack: NodeJS.CallSite[] | undefined;\n Error.prepareStackTrace = (_error, _stack) => (stack = _stack);\n Error.captureStackTrace(_error);\n if (!_error.stack) throw _error;\n return (stack && stack.slice(2)) || [];\n } finally {\n Error.prepareStackTrace = _prepareStackTrace;\n }\n}\n\nexport interface Generator<Args extends readonly any[], Next> {\n // TODO: Update to support for AsyncGenerator interface\n (...args: Args): AsyncIterableIterator<Next>;\n}\n\nfunction main<Args extends readonly any[], Next>(url: string | URL): Generator<Args, Next> {\n let worker: Worker;\n let ids = 0;\n return (...args: Args) => {\n if (!worker) {\n worker = new Worker(url, workerOpts);\n worker.unref();\n }\n\n const id = ++ids | 0;\n const buffer: ThreadMessage[] = [];\n\n let started = false;\n let ended = false;\n let pulled = false;\n let resolve: ((value: IteratorResult<Next>) => void) | void;\n let reject: ((error: any) => void) | void;\n\n function cleanup() {\n ended = true;\n resolve = undefined;\n reject = undefined;\n worker.removeListener('message', receiveMessage);\n worker.removeListener('error', receiveError);\n }\n\n function sendMessage(kind: MainMessageCodes) {\n worker.postMessage({ id, kind });\n }\n\n function receiveError(error: any) {\n cleanup();\n buffer.length = 1;\n buffer[0] = {\n id,\n kind: ThreadMessageCodes.Throw,\n data: error,\n };\n }\n\n function receiveMessage(data: unknown) {\n const message: ThreadMessage | null =\n data && typeof data === 'object' && 'kind' in data ? (data as ThreadMessage) : null;\n if (!message) {\n return;\n } else if (reject && message.kind === ThreadMessageCodes.Throw) {\n reject(getMessageData(message));\n cleanup();\n } else if (resolve && message.kind === ThreadMessageCodes.Return) {\n resolve({ done: true, value: getMessageData(message) });\n cleanup();\n } else if (resolve && message.kind === ThreadMessageCodes.Next) {\n pulled = false;\n resolve({ done: false, value: getMessageData(message) });\n } else if (\n message.kind === ThreadMessageCodes.Throw ||\n message.kind === ThreadMessageCodes.Return\n ) {\n buffer.push(message);\n cleanup();\n } else if (message.kind === ThreadMessageCodes.Next) {\n buffer.push(message);\n pulled = false;\n }\n }\n\n return {\n async next() {\n if (!started) {\n started = true;\n worker.addListener('message', receiveMessage);\n worker.addListener('error', receiveError);\n worker.postMessage({\n id,\n kind: MainMessageCodes.Start,\n data: args,\n });\n }\n if (ended && !buffer.length) {\n return { done: true } as IteratorReturnResult<any>;\n } else if (!ended && !pulled && buffer.length <= 1) {\n pulled = true;\n sendMessage(MainMessageCodes.Pull);\n }\n const message = buffer.shift();\n if (message && message.kind === ThreadMessageCodes.Throw) {\n cleanup();\n throw getMessageData(message);\n } else if (message && message.kind === ThreadMessageCodes.Return) {\n cleanup();\n return { value: getMessageData(message), done: true };\n } else if (message && message.kind === ThreadMessageCodes.Next) {\n return { value: getMessageData(message), done: false };\n } else {\n return new Promise((_resolve, _reject) => {\n resolve = (value) => {\n resolve = undefined;\n reject = undefined;\n _resolve(value);\n };\n reject = (error) => {\n resolve = undefined;\n reject = undefined;\n _reject(error);\n };\n });\n }\n },\n async return() {\n if (!ended) {\n cleanup();\n sendMessage(MainMessageCodes.Close);\n }\n return { done: true } as IteratorReturnResult<any>;\n },\n [asyncIteratorSymbol()]() {\n return this;\n },\n };\n };\n}\n\nfunction thread<Args extends readonly any[], Next>(\n message: MainMessage,\n generator: Generator<Args, Next>\n): void {\n if (message.kind !== MainMessageCodes.Start) return;\n const id = message.id;\n const iterator = generator(...(message.data as any));\n\n let ended = false;\n let pulled = false;\n let looping = false;\n\n function cleanup() {\n ended = true;\n port.removeListener('message', receiveMessage);\n }\n\n async function sendMessage(kind: ThreadMessageCodes, data?: any) {\n try {\n const message: ThreadMessage = { id, kind, data };\n // NOTE: Copy error annotations to separate property\n if (kind === ThreadMessageCodes.Throw && typeof data === 'object' && data != null)\n message.extra = { ...data };\n port.postMessage(message);\n } catch (error) {\n cleanup();\n if (iterator.throw) {\n let result = await iterator.throw();\n if (result.done === false && iterator.return) {\n result = await iterator.return();\n sendMessage(ThreadMessageCodes.Return, result.value);\n } else {\n sendMessage(ThreadMessageCodes.Return, result.value);\n }\n } else {\n sendMessage(ThreadMessageCodes.Return);\n }\n }\n }\n\n async function receiveMessage(data: unknown) {\n const message: MainMessage | null =\n data && typeof data === 'object' && 'kind' in data ? (data as MainMessage) : null;\n let next: IteratorResult<Next>;\n if (!message) {\n return;\n } else if (message.kind === MainMessageCodes.Close) {\n cleanup();\n if (iterator.return) iterator.return();\n } else if (message.kind === MainMessageCodes.Pull && looping) {\n pulled = true;\n } else if (message.kind === MainMessageCodes.Pull) {\n for (pulled = looping = true; pulled && !ended; ) {\n try {\n if ((next = await iterator.next()).done) {\n cleanup();\n if (iterator.return) next = await iterator.return();\n sendMessage(ThreadMessageCodes.Return, next.value);\n } else {\n pulled = false;\n sendMessage(ThreadMessageCodes.Next, next.value);\n }\n } catch (error) {\n cleanup();\n sendMessage(ThreadMessageCodes.Throw, error);\n }\n }\n looping = false;\n }\n }\n\n port.addListener('message', receiveMessage);\n}\n\nexport function expose<Args extends readonly any[], Return>(\n generator: Generator<Args, Return>\n): Generator<Args, Return> {\n if (isMainThread) {\n const call = captureStack()[0];\n const file = call && call.getFileName();\n if (!file) throw new ReferenceError('Captured stack trace is empty');\n const url = file.startsWith('file://') ? new URL(file) : file;\n return main(url);\n } else {\n port.addListener('message', (data) => {\n const message: MainMessage | null =\n data && typeof data === 'object' && 'kind' in data ? (data as MainMessage) : null;\n if (message) thread(message, generator);\n });\n return generator;\n }\n}\n"],"names":["port","parentPort","isMainThread","ReferenceError","MainMessageCodes","ThreadMessageCodes","workerOpts","env","SHARE_ENV","stderr","stdout","stdin","getMessageData","message","data","kind","Throw","extra","Object","assign","asyncIteratorSymbol","Symbol","asyncIterator","expose","generator","call","captureStack","_error","Error","_prepareStackTrace","prepareStackTrace","stack","_stack","captureStackTrace","slice","file","getFileName","main","url","worker","ids","args","Worker","unref","id","buffer","started","ended","pulled","resolve","reject","cleanup","undefined","removeListener","receiveMessage","receiveError","sendMessage","postMessage","error","length","Return","done","value","Next","push","next","addListener","Start","Pull","shift","Promise","_resolve","_reject","return","Close","this","startsWith","URL","thread","iterator","looping","async","throw","result"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-chunk2.js","sources":["../../src/threads/index.ts"],"sourcesContent":["import type { WorkerOptions } from 'node:worker_threads';\nimport { Worker, isMainThread, parentPort, SHARE_ENV } from 'node:worker_threads';\n\nconst port = parentPort!;\nif (!isMainThread && !port) {\n throw new ReferenceError('Failed to receive parent message port');\n}\n\nconst enum MainMessageCodes {\n Start = 'START',\n Close = 'CLOSE',\n Pull = 'PULL',\n}\n\ninterface MainMessage {\n id?: number;\n kind: MainMessageCodes;\n data?: any;\n}\n\nconst enum ThreadMessageCodes {\n Next = 'NEXT',\n Throw = 'THROW',\n Return = 'RETURN',\n}\n\ninterface ThreadMessage {\n id?: number;\n kind: ThreadMessageCodes;\n data?: any;\n extra?: Record<string, unknown>;\n}\n\nconst workerOpts: WorkerOptions = {\n env: SHARE_ENV,\n stderr: false,\n stdout: false,\n stdin: false,\n};\n\nconst getMessageData = (message: ThreadMessage) => {\n const data = message.data;\n if (message.kind === ThreadMessageCodes.Throw) {\n return typeof data === 'object' && data && message.extra != null\n ? Object.assign(data, message.extra)\n : data;\n } else {\n return data;\n }\n};\n\nconst asyncIteratorSymbol = (): typeof Symbol.asyncIterator =>\n (typeof Symbol === 'function' && Symbol.asyncIterator) || ('@@asyncIterator' as any);\n\n/** Capture the stack above the caller */\nfunction captureStack(): NodeJS.CallSite[] {\n const _error: any = new Error();\n const _prepareStackTrace = Error.prepareStackTrace;\n try {\n let stack: NodeJS.CallSite[] | undefined;\n Error.prepareStackTrace = (_error, _stack) => (stack = _stack);\n Error.captureStackTrace(_error);\n if (!_error.stack) throw _error;\n return (stack && stack.slice(2)) || [];\n } finally {\n Error.prepareStackTrace = _prepareStackTrace;\n }\n}\n\nexport interface Generator<Args extends readonly any[], Next> {\n // TODO: Update to support for AsyncGenerator interface\n (...args: Args): AsyncIterableIterator<Next>;\n}\n\nfunction main<Args extends readonly any[], Next>(url: string | URL): Generator<Args, Next> {\n let worker: Worker | undefined;\n let activeCalls = 0;\n let ids = 0;\n return (...args: Args) => {\n if (!worker) {\n worker = new Worker(url, workerOpts);\n worker.unref();\n }\n\n const currentWorker = worker;\n const id = ++ids | 0;\n const buffer: ThreadMessage[] = [];\n\n let started = false;\n let ended = false;\n let pulled = false;\n let resolve: ((value: IteratorResult<Next>) => void) | void;\n let reject: ((error: any) => void) | void;\n\n function cleanup() {\n if (ended) return;\n ended = true;\n resolve = undefined;\n reject = undefined;\n currentWorker.removeListener('message', receiveMessage);\n currentWorker.removeListener('error', receiveError);\n currentWorker.removeListener('exit', receiveExit);\n if (--activeCalls === 0) currentWorker.unref();\n }\n\n function sendMessage(kind: MainMessageCodes) {\n currentWorker.postMessage({ id, kind });\n }\n\n function fail(error: any) {\n const pendingReject = reject;\n cleanup();\n if (pendingReject) {\n pendingReject(error);\n } else {\n buffer.length = 1;\n buffer[0] = {\n id,\n kind: ThreadMessageCodes.Throw,\n data: error,\n };\n }\n }\n\n function receiveError(error: any) {\n fail(error);\n }\n\n function receiveExit(code: number) {\n if (ended) return;\n if (worker === currentWorker) worker = undefined;\n fail(new Error(`Worker stopped unexpectedly with exit code ${code}`));\n }\n\n function receiveMessage(data: unknown) {\n const message: ThreadMessage | null =\n data && typeof data === 'object' && 'kind' in data ? (data as ThreadMessage) : null;\n if (!message) {\n return;\n } else if (reject && message.kind === ThreadMessageCodes.Throw) {\n reject(getMessageData(message));\n cleanup();\n } else if (resolve && message.kind === ThreadMessageCodes.Return) {\n resolve({ done: true, value: getMessageData(message) });\n cleanup();\n } else if (resolve && message.kind === ThreadMessageCodes.Next) {\n pulled = false;\n resolve({ done: false, value: getMessageData(message) });\n } else if (\n message.kind === ThreadMessageCodes.Throw ||\n message.kind === ThreadMessageCodes.Return\n ) {\n buffer.push(message);\n cleanup();\n } else if (message.kind === ThreadMessageCodes.Next) {\n buffer.push(message);\n pulled = false;\n }\n }\n\n return {\n async next() {\n if (!started) {\n started = true;\n if (activeCalls++ === 0) currentWorker.ref();\n currentWorker.addListener('message', receiveMessage);\n currentWorker.addListener('error', receiveError);\n currentWorker.addListener('exit', receiveExit);\n currentWorker.postMessage({\n id,\n kind: MainMessageCodes.Start,\n data: args,\n });\n }\n if (ended && !buffer.length) {\n return { done: true } as IteratorReturnResult<any>;\n } else if (!ended && !pulled && buffer.length <= 1) {\n pulled = true;\n sendMessage(MainMessageCodes.Pull);\n }\n const message = buffer.shift();\n if (message && message.kind === ThreadMessageCodes.Throw) {\n cleanup();\n throw getMessageData(message);\n } else if (message && message.kind === ThreadMessageCodes.Return) {\n cleanup();\n return { value: getMessageData(message), done: true };\n } else if (message && message.kind === ThreadMessageCodes.Next) {\n return { value: getMessageData(message), done: false };\n } else {\n return new Promise((_resolve, _reject) => {\n resolve = (value) => {\n resolve = undefined;\n reject = undefined;\n _resolve(value);\n };\n reject = (error) => {\n resolve = undefined;\n reject = undefined;\n _reject(error);\n };\n });\n }\n },\n async return() {\n if (!ended) {\n cleanup();\n sendMessage(MainMessageCodes.Close);\n }\n return { done: true } as IteratorReturnResult<any>;\n },\n [asyncIteratorSymbol()]() {\n return this;\n },\n };\n };\n}\n\nfunction thread<Args extends readonly any[], Next>(\n message: MainMessage,\n generator: Generator<Args, Next>\n): void {\n if (message.kind !== MainMessageCodes.Start) return;\n const id = message.id;\n const iterator = generator(...(message.data as any));\n\n let ended = false;\n let pulled = false;\n let looping = false;\n\n function cleanup() {\n ended = true;\n port.removeListener('message', receiveMessage);\n }\n\n async function sendMessage(kind: ThreadMessageCodes, data?: any) {\n try {\n const message: ThreadMessage = { id, kind, data };\n // NOTE: Copy error annotations to separate property\n if (kind === ThreadMessageCodes.Throw && typeof data === 'object' && data != null)\n message.extra = { ...data };\n port.postMessage(message);\n } catch (error) {\n cleanup();\n if (iterator.throw) {\n let result = await iterator.throw();\n if (result.done === false && iterator.return) {\n result = await iterator.return();\n sendMessage(ThreadMessageCodes.Return, result.value);\n } else {\n sendMessage(ThreadMessageCodes.Return, result.value);\n }\n } else {\n sendMessage(ThreadMessageCodes.Return);\n }\n }\n }\n\n async function receiveMessage(data: unknown) {\n const message: MainMessage | null =\n data && typeof data === 'object' && 'kind' in data ? (data as MainMessage) : null;\n let next: IteratorResult<Next>;\n if (!message) {\n return;\n } else if (message.kind === MainMessageCodes.Close) {\n cleanup();\n if (iterator.return) iterator.return();\n } else if (message.kind === MainMessageCodes.Pull && looping) {\n pulled = true;\n } else if (message.kind === MainMessageCodes.Pull) {\n for (pulled = looping = true; pulled && !ended; ) {\n try {\n if ((next = await iterator.next()).done) {\n cleanup();\n if (iterator.return) next = await iterator.return();\n sendMessage(ThreadMessageCodes.Return, next.value);\n } else {\n pulled = false;\n sendMessage(ThreadMessageCodes.Next, next.value);\n }\n } catch (error) {\n cleanup();\n sendMessage(ThreadMessageCodes.Throw, error);\n }\n }\n looping = false;\n }\n }\n\n port.addListener('message', receiveMessage);\n}\n\nexport function expose<Args extends readonly any[], Return>(\n generator: Generator<Args, Return>\n): Generator<Args, Return> {\n if (isMainThread) {\n const call = captureStack()[0];\n const file = call && call.getFileName();\n if (!file) throw new ReferenceError('Captured stack trace is empty');\n const url = file.startsWith('file://') ? new URL(file) : file;\n return main(url);\n } else {\n port.addListener('message', (data) => {\n const message: MainMessage | null =\n data && typeof data === 'object' && 'kind' in data ? (data as MainMessage) : null;\n if (message) thread(message, generator);\n });\n return generator;\n }\n}\n"],"names":["port","parentPort","isMainThread","ReferenceError","MainMessageCodes","ThreadMessageCodes","workerOpts","env","SHARE_ENV","stderr","stdout","stdin","getMessageData","message","data","kind","Throw","extra","Object","assign","asyncIteratorSymbol","Symbol","asyncIterator","expose","generator","call","captureStack","_error","Error","_prepareStackTrace","prepareStackTrace","stack","_stack","captureStackTrace","slice","file","getFileName","main","url","worker","activeCalls","ids","args","Worker","unref","currentWorker","id","buffer","started","ended","pulled","resolve","reject","cleanup","undefined","removeListener","receiveMessage","receiveError","receiveExit","sendMessage","postMessage","fail","error","pendingReject","length","code","Return","done","value","Next","push","next","ref","addListener","Start","Pull","shift","Promise","_resolve","_reject","return","Close","this","startsWith","URL","thread","iterator","looping","async","throw","result"],"mappings":"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"}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { isMainThread as e, parentPort as r, Worker as n, SHARE_ENV as
|
|
1
|
+
import { isMainThread as e, parentPort as r, Worker as n, SHARE_ENV as t } from "node:worker_threads";
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var a = r;
|
|
4
4
|
|
|
5
|
-
if (!e && !
|
|
5
|
+
if (!e && !a) {
|
|
6
6
|
throw new ReferenceError("Failed to receive parent message port");
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var i = function(e) {
|
|
10
10
|
e.Start = "START";
|
|
11
11
|
e.Close = "CLOSE";
|
|
12
12
|
e.Pull = "PULL";
|
|
13
13
|
return e;
|
|
14
|
-
}(
|
|
14
|
+
}(i || {});
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var s = function(e) {
|
|
17
17
|
e.Next = "NEXT";
|
|
18
18
|
e.Throw = "THROW";
|
|
19
19
|
e.Return = "RETURN";
|
|
20
20
|
return e;
|
|
21
|
-
}(
|
|
21
|
+
}(s || {});
|
|
22
22
|
|
|
23
23
|
var o = {
|
|
24
|
-
env:
|
|
24
|
+
env: t,
|
|
25
25
|
stderr: !1,
|
|
26
26
|
stdout: !1,
|
|
27
27
|
stdin: !1
|
|
@@ -29,7 +29,7 @@ var o = {
|
|
|
29
29
|
|
|
30
30
|
var getMessageData = e => {
|
|
31
31
|
var r = e.data;
|
|
32
|
-
if (e.kind ===
|
|
32
|
+
if (e.kind === s.Throw) {
|
|
33
33
|
return "object" == typeof r && r && null != e.extra ? Object.assign(r, e.extra) : r;
|
|
34
34
|
} else {
|
|
35
35
|
return r;
|
|
@@ -40,7 +40,7 @@ var asyncIteratorSymbol = () => "function" == typeof Symbol && Symbol.asyncItera
|
|
|
40
40
|
|
|
41
41
|
function expose(r) {
|
|
42
42
|
if (e) {
|
|
43
|
-
var
|
|
43
|
+
var t = function captureStack() {
|
|
44
44
|
var e = new Error;
|
|
45
45
|
var r = Error.prepareStackTrace;
|
|
46
46
|
try {
|
|
@@ -55,127 +55,157 @@ function expose(r) {
|
|
|
55
55
|
Error.prepareStackTrace = r;
|
|
56
56
|
}
|
|
57
57
|
}()[0];
|
|
58
|
-
var u =
|
|
58
|
+
var u = t && t.getFileName();
|
|
59
59
|
if (!u) {
|
|
60
60
|
throw new ReferenceError("Captured stack trace is empty");
|
|
61
61
|
}
|
|
62
62
|
return function main(e) {
|
|
63
63
|
var r;
|
|
64
|
+
var t = 0;
|
|
64
65
|
var a = 0;
|
|
65
|
-
return (...
|
|
66
|
+
return (...u) => {
|
|
66
67
|
if (!r) {
|
|
67
68
|
(r = new n(e, o)).unref();
|
|
68
69
|
}
|
|
69
|
-
var
|
|
70
|
-
var d =
|
|
71
|
-
var
|
|
72
|
-
var
|
|
70
|
+
var c = r;
|
|
71
|
+
var d = 0 | ++a;
|
|
72
|
+
var l = [];
|
|
73
|
+
var f = !1;
|
|
73
74
|
var v = !1;
|
|
74
|
-
var
|
|
75
|
-
var
|
|
75
|
+
var p = !1;
|
|
76
|
+
var g;
|
|
77
|
+
var k;
|
|
76
78
|
function cleanup() {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
if (v) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
v = !0;
|
|
83
|
+
g = void 0;
|
|
84
|
+
k = void 0;
|
|
85
|
+
c.removeListener("message", receiveMessage);
|
|
86
|
+
c.removeListener("error", receiveError);
|
|
87
|
+
c.removeListener("exit", receiveExit);
|
|
88
|
+
if (0 == --t) {
|
|
89
|
+
c.unref();
|
|
90
|
+
}
|
|
82
91
|
}
|
|
83
92
|
function sendMessage(e) {
|
|
84
|
-
|
|
85
|
-
id:
|
|
93
|
+
c.postMessage({
|
|
94
|
+
id: d,
|
|
86
95
|
kind: e
|
|
87
96
|
});
|
|
88
97
|
}
|
|
89
|
-
function
|
|
98
|
+
function fail(e) {
|
|
99
|
+
var r = k;
|
|
90
100
|
cleanup();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
if (r) {
|
|
102
|
+
r(e);
|
|
103
|
+
} else {
|
|
104
|
+
l.length = 1;
|
|
105
|
+
l[0] = {
|
|
106
|
+
id: d,
|
|
107
|
+
kind: s.Throw,
|
|
108
|
+
data: e
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function receiveError(e) {
|
|
113
|
+
fail(e);
|
|
114
|
+
}
|
|
115
|
+
function receiveExit(e) {
|
|
116
|
+
if (v) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (r === c) {
|
|
120
|
+
r = void 0;
|
|
121
|
+
}
|
|
122
|
+
fail(new Error(`Worker stopped unexpectedly with exit code ${e}`));
|
|
97
123
|
}
|
|
98
124
|
function receiveMessage(e) {
|
|
99
125
|
var r = e && "object" == typeof e && "kind" in e ? e : null;
|
|
100
126
|
if (!r) {
|
|
101
127
|
return;
|
|
102
|
-
} else if (
|
|
103
|
-
|
|
128
|
+
} else if (k && r.kind === s.Throw) {
|
|
129
|
+
k(getMessageData(r));
|
|
104
130
|
cleanup();
|
|
105
|
-
} else if (
|
|
106
|
-
|
|
131
|
+
} else if (g && r.kind === s.Return) {
|
|
132
|
+
g({
|
|
107
133
|
done: !0,
|
|
108
134
|
value: getMessageData(r)
|
|
109
135
|
});
|
|
110
136
|
cleanup();
|
|
111
|
-
} else if (
|
|
112
|
-
|
|
113
|
-
|
|
137
|
+
} else if (g && r.kind === s.Next) {
|
|
138
|
+
p = !1;
|
|
139
|
+
g({
|
|
114
140
|
done: !1,
|
|
115
141
|
value: getMessageData(r)
|
|
116
142
|
});
|
|
117
|
-
} else if (r.kind ===
|
|
118
|
-
|
|
143
|
+
} else if (r.kind === s.Throw || r.kind === s.Return) {
|
|
144
|
+
l.push(r);
|
|
119
145
|
cleanup();
|
|
120
|
-
} else if (r.kind ===
|
|
121
|
-
|
|
122
|
-
|
|
146
|
+
} else if (r.kind === s.Next) {
|
|
147
|
+
l.push(r);
|
|
148
|
+
p = !1;
|
|
123
149
|
}
|
|
124
150
|
}
|
|
125
151
|
return {
|
|
126
152
|
async next() {
|
|
127
|
-
if (!
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
153
|
+
if (!f) {
|
|
154
|
+
f = !0;
|
|
155
|
+
if (0 == t++) {
|
|
156
|
+
c.ref();
|
|
157
|
+
}
|
|
158
|
+
c.addListener("message", receiveMessage);
|
|
159
|
+
c.addListener("error", receiveError);
|
|
160
|
+
c.addListener("exit", receiveExit);
|
|
161
|
+
c.postMessage({
|
|
162
|
+
id: d,
|
|
163
|
+
kind: i.Start,
|
|
164
|
+
data: u
|
|
135
165
|
});
|
|
136
166
|
}
|
|
137
|
-
if (
|
|
167
|
+
if (v && !l.length) {
|
|
138
168
|
return {
|
|
139
169
|
done: !0
|
|
140
170
|
};
|
|
141
|
-
} else if (!
|
|
142
|
-
|
|
143
|
-
sendMessage(
|
|
171
|
+
} else if (!v && !p && l.length <= 1) {
|
|
172
|
+
p = !0;
|
|
173
|
+
sendMessage(i.Pull);
|
|
144
174
|
}
|
|
145
|
-
var e =
|
|
146
|
-
if (e && e.kind ===
|
|
175
|
+
var e = l.shift();
|
|
176
|
+
if (e && e.kind === s.Throw) {
|
|
147
177
|
cleanup();
|
|
148
178
|
throw getMessageData(e);
|
|
149
|
-
} else if (e && e.kind ===
|
|
179
|
+
} else if (e && e.kind === s.Return) {
|
|
150
180
|
cleanup();
|
|
151
181
|
return {
|
|
152
182
|
value: getMessageData(e),
|
|
153
183
|
done: !0
|
|
154
184
|
};
|
|
155
|
-
} else if (e && e.kind ===
|
|
185
|
+
} else if (e && e.kind === s.Next) {
|
|
156
186
|
return {
|
|
157
187
|
value: getMessageData(e),
|
|
158
188
|
done: !1
|
|
159
189
|
};
|
|
160
190
|
} else {
|
|
161
191
|
return new Promise(((e, r) => {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
192
|
+
g = r => {
|
|
193
|
+
g = void 0;
|
|
194
|
+
k = void 0;
|
|
165
195
|
e(r);
|
|
166
196
|
};
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
197
|
+
k = e => {
|
|
198
|
+
g = void 0;
|
|
199
|
+
k = void 0;
|
|
170
200
|
r(e);
|
|
171
201
|
};
|
|
172
202
|
}));
|
|
173
203
|
}
|
|
174
204
|
},
|
|
175
205
|
async return() {
|
|
176
|
-
if (!
|
|
206
|
+
if (!v) {
|
|
177
207
|
cleanup();
|
|
178
|
-
sendMessage(
|
|
208
|
+
sendMessage(i.Close);
|
|
179
209
|
}
|
|
180
210
|
return {
|
|
181
211
|
done: !0
|
|
@@ -188,47 +218,47 @@ function expose(r) {
|
|
|
188
218
|
};
|
|
189
219
|
}(u.startsWith("file://") ? new URL(u) : u);
|
|
190
220
|
} else {
|
|
191
|
-
|
|
221
|
+
a.addListener("message", (e => {
|
|
192
222
|
var n = e && "object" == typeof e && "kind" in e ? e : null;
|
|
193
223
|
if (n) {
|
|
194
224
|
!function thread(e, r) {
|
|
195
|
-
if (e.kind !==
|
|
225
|
+
if (e.kind !== i.Start) {
|
|
196
226
|
return;
|
|
197
227
|
}
|
|
198
228
|
var n = e.id;
|
|
199
|
-
var
|
|
229
|
+
var t = r(...e.data);
|
|
200
230
|
var o = !1;
|
|
201
231
|
var u = !1;
|
|
202
|
-
var
|
|
232
|
+
var c = !1;
|
|
203
233
|
function cleanup() {
|
|
204
234
|
o = !0;
|
|
205
|
-
|
|
235
|
+
a.removeListener("message", receiveMessage);
|
|
206
236
|
}
|
|
207
237
|
async function sendMessage(e, r) {
|
|
208
238
|
try {
|
|
209
|
-
var
|
|
239
|
+
var i = {
|
|
210
240
|
id: n,
|
|
211
241
|
kind: e,
|
|
212
242
|
data: r
|
|
213
243
|
};
|
|
214
|
-
if (e ===
|
|
215
|
-
|
|
244
|
+
if (e === s.Throw && "object" == typeof r && null != r) {
|
|
245
|
+
i.extra = {
|
|
216
246
|
...r
|
|
217
247
|
};
|
|
218
248
|
}
|
|
219
|
-
|
|
249
|
+
a.postMessage(i);
|
|
220
250
|
} catch (e) {
|
|
221
251
|
cleanup();
|
|
222
|
-
if (
|
|
223
|
-
var o = await
|
|
224
|
-
if (!1 === o.done &&
|
|
225
|
-
o = await
|
|
226
|
-
sendMessage(
|
|
252
|
+
if (t.throw) {
|
|
253
|
+
var o = await t.throw();
|
|
254
|
+
if (!1 === o.done && t.return) {
|
|
255
|
+
o = await t.return();
|
|
256
|
+
sendMessage(s.Return, o.value);
|
|
227
257
|
} else {
|
|
228
|
-
sendMessage(
|
|
258
|
+
sendMessage(s.Return, o.value);
|
|
229
259
|
}
|
|
230
260
|
} else {
|
|
231
|
-
sendMessage(
|
|
261
|
+
sendMessage(s.Return);
|
|
232
262
|
}
|
|
233
263
|
}
|
|
234
264
|
}
|
|
@@ -237,35 +267,35 @@ function expose(r) {
|
|
|
237
267
|
var n;
|
|
238
268
|
if (!r) {
|
|
239
269
|
return;
|
|
240
|
-
} else if (r.kind ===
|
|
270
|
+
} else if (r.kind === i.Close) {
|
|
241
271
|
cleanup();
|
|
242
|
-
if (
|
|
243
|
-
|
|
272
|
+
if (t.return) {
|
|
273
|
+
t.return();
|
|
244
274
|
}
|
|
245
|
-
} else if (r.kind ===
|
|
275
|
+
} else if (r.kind === i.Pull && c) {
|
|
246
276
|
u = !0;
|
|
247
|
-
} else if (r.kind ===
|
|
248
|
-
for (u =
|
|
277
|
+
} else if (r.kind === i.Pull) {
|
|
278
|
+
for (u = c = !0; u && !o; ) {
|
|
249
279
|
try {
|
|
250
|
-
if ((n = await
|
|
280
|
+
if ((n = await t.next()).done) {
|
|
251
281
|
cleanup();
|
|
252
|
-
if (
|
|
253
|
-
n = await
|
|
282
|
+
if (t.return) {
|
|
283
|
+
n = await t.return();
|
|
254
284
|
}
|
|
255
|
-
sendMessage(
|
|
285
|
+
sendMessage(s.Return, n.value);
|
|
256
286
|
} else {
|
|
257
287
|
u = !1;
|
|
258
|
-
sendMessage(
|
|
288
|
+
sendMessage(s.Next, n.value);
|
|
259
289
|
}
|
|
260
290
|
} catch (e) {
|
|
261
291
|
cleanup();
|
|
262
|
-
sendMessage(
|
|
292
|
+
sendMessage(s.Throw, e);
|
|
263
293
|
}
|
|
264
294
|
}
|
|
265
|
-
|
|
295
|
+
c = !1;
|
|
266
296
|
}
|
|
267
297
|
}
|
|
268
|
-
|
|
298
|
+
a.addListener("message", receiveMessage);
|
|
269
299
|
}(n, r);
|
|
270
300
|
}
|
|
271
301
|
}));
|