knitting 0.1.53 → 0.1.55

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.
Files changed (135) hide show
  1. package/README.md +38 -27
  2. package/knitting.d.ts +797 -5
  3. package/knitting.js +9780 -5
  4. package/map.md +9 -12
  5. package/package.json +14 -13
  6. package/shared-memory.d.ts +155 -0
  7. package/shared-memory.js +1342 -0
  8. package/unsafe.d.ts +71 -1
  9. package/unsafe.js +878 -1
  10. package/utils.d.ts +31 -1
  11. package/utils.js +116 -1
  12. package/process-shared-buffer.d.ts +0 -1
  13. package/process-shared-buffer.js +0 -1
  14. package/src/api.d.ts +0 -69
  15. package/src/api.js +0 -555
  16. package/src/common/envelope.d.ts +0 -17
  17. package/src/common/envelope.js +0 -22
  18. package/src/common/module-url.d.ts +0 -1
  19. package/src/common/module-url.js +0 -24
  20. package/src/common/node-compat.d.ts +0 -20
  21. package/src/common/node-compat.js +0 -24
  22. package/src/common/path-canonical.d.ts +0 -6
  23. package/src/common/path-canonical.js +0 -41
  24. package/src/common/runtime.d.ts +0 -15
  25. package/src/common/runtime.js +0 -91
  26. package/src/common/shared-buffer-region.d.ts +0 -11
  27. package/src/common/shared-buffer-region.js +0 -21
  28. package/src/common/shared-buffer-text.d.ts +0 -16
  29. package/src/common/shared-buffer-text.js +0 -65
  30. package/src/common/task-source.d.ts +0 -3
  31. package/src/common/task-source.js +0 -84
  32. package/src/common/task-symbol.d.ts +0 -1
  33. package/src/common/task-symbol.js +0 -1
  34. package/src/common/with-resolvers.d.ts +0 -9
  35. package/src/common/with-resolvers.js +0 -23
  36. package/src/common/worker-runtime.d.ts +0 -42
  37. package/src/common/worker-runtime.js +0 -61
  38. package/src/connections/buffer-reference-native.d.ts +0 -56
  39. package/src/connections/buffer-reference-native.js +0 -217
  40. package/src/connections/buffer-reference.d.ts +0 -78
  41. package/src/connections/buffer-reference.js +0 -461
  42. package/src/connections/bun.d.ts +0 -22
  43. package/src/connections/bun.js +0 -214
  44. package/src/connections/deno.d.ts +0 -22
  45. package/src/connections/deno.js +0 -205
  46. package/src/connections/file-descriptor.d.ts +0 -39
  47. package/src/connections/file-descriptor.js +0 -161
  48. package/src/connections/index.d.ts +0 -4
  49. package/src/connections/index.js +0 -4
  50. package/src/connections/node-addons.d.ts +0 -5
  51. package/src/connections/node-addons.js +0 -43
  52. package/src/connections/node-buffer-pointer.d.ts +0 -20
  53. package/src/connections/node-buffer-pointer.js +0 -16
  54. package/src/connections/node.d.ts +0 -30
  55. package/src/connections/node.js +0 -62
  56. package/src/connections/posix.d.ts +0 -32
  57. package/src/connections/posix.js +0 -77
  58. package/src/connections/process-shared-buffer.d.ts +0 -75
  59. package/src/connections/process-shared-buffer.js +0 -279
  60. package/src/connections/shared-array-buffer-payload.d.ts +0 -36
  61. package/src/connections/shared-array-buffer-payload.js +0 -235
  62. package/src/connections/types.d.ts +0 -50
  63. package/src/connections/types.js +0 -37
  64. package/src/connections/windows.d.ts +0 -28
  65. package/src/connections/windows.js +0 -224
  66. package/src/debug/env-diff.d.ts +0 -26
  67. package/src/debug/env-diff.js +0 -49
  68. package/src/debug/gate.d.ts +0 -18
  69. package/src/debug/gate.js +0 -69
  70. package/src/debug/handle.d.ts +0 -23
  71. package/src/debug/handle.js +0 -48
  72. package/src/error.d.ts +0 -13
  73. package/src/error.js +0 -49
  74. package/src/ipc/tools/ring-queue.d.ts +0 -33
  75. package/src/ipc/tools/ring-queue.js +0 -159
  76. package/src/ipc/transport/shared-memory.d.ts +0 -23
  77. package/src/ipc/transport/shared-memory.js +0 -35
  78. package/src/memory/byte-carpet.d.ts +0 -73
  79. package/src/memory/byte-carpet.js +0 -157
  80. package/src/memory/lock.d.ts +0 -201
  81. package/src/memory/lock.js +0 -739
  82. package/src/memory/payload-config.d.ts +0 -31
  83. package/src/memory/payload-config.js +0 -67
  84. package/src/memory/payloadCodec.d.ts +0 -46
  85. package/src/memory/payloadCodec.js +0 -1334
  86. package/src/memory/regionRegistry.d.ts +0 -17
  87. package/src/memory/regionRegistry.js +0 -285
  88. package/src/memory/shared-buffer-io.d.ts +0 -55
  89. package/src/memory/shared-buffer-io.js +0 -403
  90. package/src/permission/index.d.ts +0 -2
  91. package/src/permission/index.js +0 -2
  92. package/src/permission/protocol.d.ts +0 -166
  93. package/src/permission/protocol.js +0 -650
  94. package/src/runtime/balancer.d.ts +0 -19
  95. package/src/runtime/balancer.js +0 -149
  96. package/src/runtime/dispatcher.d.ts +0 -34
  97. package/src/runtime/dispatcher.js +0 -142
  98. package/src/runtime/inline-executor.d.ts +0 -10
  99. package/src/runtime/inline-executor.js +0 -282
  100. package/src/runtime/pool.d.ts +0 -30
  101. package/src/runtime/pool.js +0 -391
  102. package/src/runtime/process-worker.d.ts +0 -92
  103. package/src/runtime/process-worker.js +0 -673
  104. package/src/runtime/tx-queue.d.ts +0 -26
  105. package/src/runtime/tx-queue.js +0 -151
  106. package/src/shared/abortSignal.d.ts +0 -23
  107. package/src/shared/abortSignal.js +0 -134
  108. package/src/types.d.ts +0 -346
  109. package/src/types.js +0 -2
  110. package/src/utils/http.d.ts +0 -29
  111. package/src/utils/http.js +0 -100
  112. package/src/worker/bootstrap.d.ts +0 -5
  113. package/src/worker/bootstrap.js +0 -78
  114. package/src/worker/composable-runners.d.ts +0 -12
  115. package/src/worker/composable-runners.js +0 -97
  116. package/src/worker/loop.d.ts +0 -2
  117. package/src/worker/loop.js +0 -382
  118. package/src/worker/process-worker-bootstrap.d.ts +0 -8
  119. package/src/worker/process-worker-bootstrap.js +0 -160
  120. package/src/worker/rx-queue.d.ts +0 -25
  121. package/src/worker/rx-queue.js +0 -173
  122. package/src/worker/safety/index.d.ts +0 -4
  123. package/src/worker/safety/index.js +0 -4
  124. package/src/worker/safety/performance.d.ts +0 -1
  125. package/src/worker/safety/performance.js +0 -17
  126. package/src/worker/safety/process.d.ts +0 -2
  127. package/src/worker/safety/process.js +0 -79
  128. package/src/worker/safety/startup.d.ts +0 -16
  129. package/src/worker/safety/startup.js +0 -30
  130. package/src/worker/safety/worker-data.d.ts +0 -2
  131. package/src/worker/safety/worker-data.js +0 -36
  132. package/src/worker/task-loader.d.ts +0 -27
  133. package/src/worker/task-loader.js +0 -78
  134. package/src/worker/timers.d.ts +0 -18
  135. package/src/worker/timers.js +0 -116
@@ -1,391 +0,0 @@
1
- import { createHostTxQueue } from "./tx-queue.js";
2
- import { cleanupProcessWorkerMemoryQuietly, createProcessSharedMemoryAllocator, createProcessWorkerMemoryLayout, createProcessWorkerNativeSignalNotifier, readProcessSharedMemorySettings, readProcessWorkerCommandPrefix, readProcessWorkerRuntime, serializeWorkerBootstrapData, spawnProcessWorker, terminateWorkerQuietly, toProcessWorkerBootPayload, toWorkerCompatExecArgv, toWorkerSafeExecArgv, } from "./process-worker.js";
3
- import { createSharedMemoryTransport, TRANSPORT_SIGNAL_BYTES, } from "../ipc/transport/shared-memory.js";
4
- import { ChannelHandler, hostDispatcherLoop } from "./dispatcher.js";
5
- import { HEADER_SLOT_STRIDE_U32, lock2, LOCK_SECTOR_BYTE_LENGTH, LockBound, } from "../memory/lock.js";
6
- import "../worker/loop.js";
7
- import { createSharedArrayBuffer, createWasmSharedArrayBuffer, } from "../common/runtime.js";
8
- import { HAS_NODE_WORKER_THREADS, RUNTIME_WORKER, } from "../common/worker-runtime.js";
9
- import { probeLockBufferTextCompat } from "../common/shared-buffer-text.js";
10
- import { signalAbortFactory } from "../shared/abortSignal.js";
11
- import { createLockControlCarpet } from "../memory/byte-carpet.js";
12
- import { resolvePayloadBufferOptions, } from "../memory/payload-config.js";
13
- import { createBufferReferenceReturnReleaseMessage } from "../connections/buffer-reference.js";
14
- const WORKER_FATAL_MESSAGE_KEY = "__knittingWorkerFatal";
15
- const isWorkerFatalMessage = (value) => !!value &&
16
- typeof value === "object" &&
17
- typeof value[WORKER_FATAL_MESSAGE_KEY] === "string";
18
- // Keep idle workers self-healing if an Atomics.notify wake is missed.
19
- const DEFAULT_WORKER_PARK_MS = 1;
20
- const withDefaultWorkerTimers = (options) => {
21
- const parkMs = options?.timers?.parkMs ?? DEFAULT_WORKER_PARK_MS;
22
- if (options === undefined)
23
- return { timers: { parkMs } };
24
- return {
25
- ...options,
26
- timers: {
27
- ...options.timers,
28
- parkMs,
29
- },
30
- };
31
- };
32
- const withFixedPayloadConfig = (config) => ({
33
- ...config,
34
- mode: "fixed",
35
- payloadInitialBytes: config.payloadMaxByteLength,
36
- });
37
- export const spawnWorkerContext = ({ list, ids, names, sab, thread, debug, hostDebug, totalNumberOfThread, source, at, workerOptions, workerExecArgv, permission, host, payload, bufferReferenceReturn, abortSignalCapacity, usesAbortSignal, }) => {
38
- const tsFileUrl = new URL(import.meta.url);
39
- const poliWorker = RUNTIME_WORKER;
40
- const resolvedWorkerOptions = serializeWorkerBootstrapData(withDefaultWorkerTimers(workerOptions));
41
- const useProcessWorkerRuntime = resolvedWorkerOptions.runtime === "process";
42
- const processWorkerRuntime = useProcessWorkerRuntime
43
- ? readProcessWorkerRuntime(resolvedWorkerOptions)
44
- : undefined;
45
- const processWorkerCommandPrefix = useProcessWorkerRuntime
46
- ? readProcessWorkerCommandPrefix(resolvedWorkerOptions)
47
- : undefined;
48
- const processSharedMemorySettings = useProcessWorkerRuntime
49
- ? readProcessSharedMemorySettings(resolvedWorkerOptions)
50
- : undefined;
51
- if (!useProcessWorkerRuntime && typeof poliWorker !== "function") {
52
- throw new Error("Worker is not available in this runtime");
53
- }
54
- const WorkerCtor = poliWorker;
55
- // Lock buffers must be shared between host and worker.
56
- const sanitizeBytes = (value) => {
57
- if (!Number.isFinite(value))
58
- return undefined;
59
- const bytes = Math.floor(value);
60
- return bytes > 0 ? bytes : undefined;
61
- };
62
- const basePayloadConfig = resolvePayloadBufferOptions({
63
- options: payload,
64
- });
65
- const resolvedPayloadConfig = useProcessWorkerRuntime
66
- ? withFixedPayloadConfig(basePayloadConfig)
67
- : basePayloadConfig;
68
- const defaultAbortSignalCapacity = 258;
69
- const requestedAbortSignalCapacity = sanitizeBytes(abortSignalCapacity);
70
- const resolvedAbortSignalCapacity = requestedAbortSignalCapacity ??
71
- defaultAbortSignalCapacity;
72
- const abortSignalWords = Math.max(1, Math.ceil(resolvedAbortSignalCapacity / 32));
73
- const requestedSignalBytes = sanitizeBytes(sab?.size);
74
- const externalSignalSab = sab?.sharedSab;
75
- if (useProcessWorkerRuntime && externalSignalSab != null) {
76
- throw new Error("process worker runtime cannot use an external signal buffer");
77
- }
78
- const signalBytes = Math.max(TRANSPORT_SIGNAL_BYTES, requestedSignalBytes ?? TRANSPORT_SIGNAL_BYTES);
79
- const abortBytes = abortSignalWords * Uint32Array.BYTES_PER_ELEMENT;
80
- const processWorkerMemory = useProcessWorkerRuntime
81
- ? createProcessWorkerMemoryLayout({
82
- signalBytes,
83
- abortBytes,
84
- payloadBytes: resolvedPayloadConfig.payloadMaxByteLength,
85
- thread,
86
- sharedMemory: processSharedMemorySettings,
87
- })
88
- : undefined;
89
- const processSharedMemory = processWorkerMemory === undefined
90
- ? createProcessSharedMemoryAllocator(debug)
91
- : undefined;
92
- const createControlBuffer = processSharedMemory?.createBuffer ??
93
- createWasmSharedArrayBuffer;
94
- const createPayloadBuffer = processSharedMemory?.createBuffer;
95
- const makePayloadBuffer = () => createPayloadBuffer
96
- // ProcessSharedBuffer is fixed-size today, so reserve the configured
97
- // payload ceiling instead of relying on SAB growth.
98
- ? createPayloadBuffer(resolvedPayloadConfig.payloadMaxByteLength)
99
- : resolvedPayloadConfig.mode === "growable"
100
- ? createSharedArrayBuffer(resolvedPayloadConfig.payloadInitialBytes, resolvedPayloadConfig.payloadMaxByteLength)
101
- : createSharedArrayBuffer(resolvedPayloadConfig.payloadInitialBytes);
102
- const makeLockControlLayout = () => {
103
- // Keep the hottest control words in one compact front strip:
104
- // transport signals -> request lock -> return lock.
105
- // Request/return headers stay in separate contiguous slabs to preserve
106
- // sequential batching locality.
107
- // Abort bitmap stays at the tail.
108
- return createLockControlCarpet({
109
- signalBytes,
110
- abortBytes,
111
- lockSectorBytes: LOCK_SECTOR_BYTE_LENGTH,
112
- headerSlotStrideU32: HEADER_SLOT_STRIDE_U32,
113
- slotCount: LockBound.slots,
114
- headerLayout: "split",
115
- createBuffer: createControlBuffer,
116
- });
117
- };
118
- const controlLayout = processWorkerMemory?.controlLayout ??
119
- makeLockControlLayout();
120
- const lockPayload = processWorkerMemory?.lockPayload ?? makePayloadBuffer();
121
- const lockBuffers = {
122
- ...controlLayout.lock,
123
- payload: lockPayload,
124
- textCompat: probeLockBufferTextCompat({
125
- headers: controlLayout.lock.headers,
126
- payload: lockPayload,
127
- }),
128
- };
129
- const returnPayload = processWorkerMemory?.returnPayload ??
130
- makePayloadBuffer();
131
- const returnLockBuffers = {
132
- ...controlLayout.returnLock,
133
- payload: returnPayload,
134
- textCompat: probeLockBufferTextCompat({
135
- headers: controlLayout.returnLock.headers,
136
- payload: returnPayload,
137
- }),
138
- };
139
- const lock = lock2({
140
- headers: lockBuffers.headers,
141
- headerSlotStrideU32: lockBuffers.headerSlotStrideU32,
142
- LockBoundSector: lockBuffers.lockSector,
143
- payload: lockBuffers.payload,
144
- payloadSector: lockBuffers.payloadSector,
145
- payloadConfig: resolvedPayloadConfig,
146
- textCompat: lockBuffers.textCompat,
147
- });
148
- const returnLock = lock2({
149
- headers: returnLockBuffers.headers,
150
- headerSlotStrideU32: returnLockBuffers.headerSlotStrideU32,
151
- LockBoundSector: returnLockBuffers.lockSector,
152
- payload: returnLockBuffers.payload,
153
- payloadSector: returnLockBuffers.payloadSector,
154
- payloadConfig: resolvedPayloadConfig,
155
- textCompat: returnLockBuffers.textCompat,
156
- });
157
- const abortSignalSAB = usesAbortSignal === true
158
- ? controlLayout.abortSignals
159
- : undefined;
160
- const abortSignals = abortSignalSAB
161
- ? signalAbortFactory({
162
- sab: abortSignalSAB,
163
- maxSignals: resolvedAbortSignalCapacity,
164
- })
165
- : undefined;
166
- const signals = createSharedMemoryTransport({
167
- sabObject: externalSignalSab == null
168
- ? {
169
- size: requestedSignalBytes,
170
- sharedSab: controlLayout.signals,
171
- }
172
- : sab,
173
- isMain: true,
174
- thread,
175
- });
176
- const signalBox = signals;
177
- const nativeNotifySignal = createProcessWorkerNativeSignalNotifier({
178
- processRuntime: processWorkerRuntime,
179
- signal: signalBox.opView,
180
- });
181
- const queue = createHostTxQueue({
182
- lock,
183
- returnLock,
184
- abortSignals,
185
- releaseBufferReferenceReturn: bufferReferenceReturn === "borrow"
186
- ? (token) => {
187
- worker?.postMessage?.(createBufferReferenceReturnReleaseMessage(token));
188
- }
189
- : undefined,
190
- });
191
- const { enqueue, rejectAll, txIdle, } = queue;
192
- const channelHandler = new ChannelHandler();
193
- const { check } = hostDispatcherLoop({
194
- signalBox,
195
- queue,
196
- channelHandler,
197
- dispatcherOptions: host,
198
- notifySignal: nativeNotifySignal,
199
- });
200
- channelHandler.open(check);
201
- let worker;
202
- const workerUrl = source ?? tsFileUrl;
203
- const workerMode = useProcessWorkerRuntime
204
- ? "process"
205
- : HAS_NODE_WORKER_THREADS
206
- ? "worker_threads"
207
- : "worker";
208
- hostDebug?.(`worker thread=${thread} mode=${workerMode}` +
209
- `${processWorkerRuntime ? ` runtime=${processWorkerRuntime}` : ""}` +
210
- ` url=${String(workerUrl)}`);
211
- const workerDataPayload = {
212
- sab: signals.sab,
213
- abortSignalSAB,
214
- abortSignalMax: usesAbortSignal === true
215
- ? resolvedAbortSignalCapacity
216
- : undefined,
217
- list,
218
- ids,
219
- names,
220
- at,
221
- thread,
222
- debug,
223
- workerOptions: resolvedWorkerOptions,
224
- totalNumberOfThread,
225
- startAt: signalBox.startAt,
226
- lock: lockBuffers,
227
- returnLock: returnLockBuffers,
228
- payloadConfig: resolvedPayloadConfig,
229
- bufferReferenceReturn,
230
- permission,
231
- };
232
- const baseWorkerOptions = {
233
- //@ts-ignore Reason
234
- type: "module",
235
- //@ts-ignore
236
- workerData: workerDataPayload,
237
- };
238
- const withExecArgv = workerExecArgv && workerExecArgv.length > 0
239
- ? { ...baseWorkerOptions, execArgv: workerExecArgv }
240
- : baseWorkerOptions;
241
- if (processWorkerMemory !== undefined) {
242
- worker = spawnProcessWorker({
243
- workerUrl,
244
- bootPayload: toProcessWorkerBootPayload(workerDataPayload, processWorkerMemory),
245
- memory: processWorkerMemory,
246
- processRuntime: processWorkerRuntime,
247
- commandPrefix: processWorkerCommandPrefix,
248
- permission,
249
- });
250
- }
251
- else if (HAS_NODE_WORKER_THREADS) {
252
- try {
253
- worker = new WorkerCtor(workerUrl, withExecArgv);
254
- }
255
- catch (error) {
256
- if (error?.code === "ERR_WORKER_INVALID_EXEC_ARGV") {
257
- const fallbackExecArgv = toWorkerSafeExecArgv(withExecArgv.execArgv);
258
- if (fallbackExecArgv && fallbackExecArgv.length > 0) {
259
- try {
260
- worker = new WorkerCtor(workerUrl, { ...baseWorkerOptions, execArgv: fallbackExecArgv });
261
- }
262
- catch (fallbackError) {
263
- if (fallbackError?.code ===
264
- "ERR_WORKER_INVALID_EXEC_ARGV") {
265
- const compatExecArgv = toWorkerCompatExecArgv(fallbackExecArgv);
266
- if (compatExecArgv && compatExecArgv.length > 0) {
267
- try {
268
- worker = new WorkerCtor(workerUrl, { ...baseWorkerOptions, execArgv: compatExecArgv });
269
- }
270
- catch {
271
- worker = new WorkerCtor(workerUrl, baseWorkerOptions);
272
- }
273
- }
274
- else {
275
- worker = new WorkerCtor(workerUrl, baseWorkerOptions);
276
- }
277
- }
278
- else {
279
- throw fallbackError;
280
- }
281
- }
282
- }
283
- else {
284
- worker = new WorkerCtor(workerUrl, baseWorkerOptions);
285
- }
286
- }
287
- else {
288
- throw error;
289
- }
290
- }
291
- }
292
- else {
293
- worker = new WorkerCtor(workerUrl, {
294
- type: "module",
295
- });
296
- worker.postMessage?.(workerDataPayload);
297
- }
298
- let closedReason;
299
- const markWorkerClosed = (reason) => {
300
- if (closedReason)
301
- return;
302
- closedReason = reason;
303
- rejectAll(reason);
304
- channelHandler.close();
305
- };
306
- const onWorkerMessage = (message) => {
307
- if (!isWorkerFatalMessage(message))
308
- return;
309
- markWorkerClosed(`Worker startup failed: ${message[WORKER_FATAL_MESSAGE_KEY]}`);
310
- terminateWorkerQuietly(worker);
311
- };
312
- const onWorkerError = (error) => {
313
- const message = String(error?.message ?? error);
314
- markWorkerClosed(`Worker crashed: ${message}`);
315
- };
316
- const nodeWorker = worker;
317
- if (typeof nodeWorker.on === "function") {
318
- nodeWorker.on("message", onWorkerMessage);
319
- nodeWorker.on("error", onWorkerError);
320
- nodeWorker.on("exit", (code) => {
321
- if (typeof code === "number" && code === 0)
322
- return;
323
- const normalized = typeof code === "number" ? code : -1;
324
- markWorkerClosed(`Worker exited with code ${normalized}`);
325
- });
326
- }
327
- else {
328
- const eventWorker = worker;
329
- if (typeof eventWorker.addEventListener === "function") {
330
- eventWorker.addEventListener("message", (event) => {
331
- onWorkerMessage(event?.data);
332
- });
333
- eventWorker.addEventListener("error", (event) => {
334
- onWorkerError(event?.error ?? event?.message ?? event);
335
- });
336
- }
337
- else {
338
- eventWorker.onmessage = (event) => {
339
- onWorkerMessage(event?.data);
340
- };
341
- eventWorker.onerror = (event) => {
342
- onWorkerError(event);
343
- };
344
- }
345
- }
346
- const thisSignal = signalBox.opView;
347
- const a_add = Atomics.add;
348
- const a_load = Atomics.load;
349
- const a_notify = Atomics.notify;
350
- const canNotifySignal = thisSignal.buffer instanceof SharedArrayBuffer;
351
- const notifySignal = nativeNotifySignal ??
352
- (canNotifySignal ? (() => a_notify(thisSignal, 0, 1)) : undefined);
353
- //const scheduleFastCheck = queueMicrotask;
354
- const send = () => {
355
- if (check.isRunning === true)
356
- return;
357
- check.isRunning = true;
358
- Promise.resolve().then(check);
359
- // Macro lane: dispatcher check is driven by the channel callback.
360
- // channelHandler.notify();
361
- // Use opView as a wake token in lock2 mode to avoid lost wakeups.
362
- if (a_load(signalBox.rxStatus, 0) === 0) {
363
- a_add(thisSignal, 0, 1);
364
- notifySignal?.();
365
- }
366
- };
367
- lock.setPromiseHandler((task, isRejected, value) => {
368
- queue.settlePromisePayload(task, isRejected, value);
369
- send();
370
- });
371
- const call = ({ fnNumber, timeout, abortSignal }) => {
372
- const enqueues = enqueue(fnNumber, timeout, abortSignal);
373
- return (args) => {
374
- const pending = enqueues(args);
375
- send();
376
- return pending;
377
- };
378
- };
379
- const context = {
380
- txIdle,
381
- call,
382
- kills: async () => {
383
- markWorkerClosed("Thread closed");
384
- terminateWorkerQuietly(worker);
385
- cleanupProcessWorkerMemoryQuietly(processWorkerMemory);
386
- },
387
- lock,
388
- processSharedMemoryBackings: processSharedMemory?.backings,
389
- };
390
- return context;
391
- };
@@ -1,92 +0,0 @@
1
- import { type LockControlCarpet } from "../memory/byte-carpet.js";
2
- import type { DebugOptions, LockBuffers, WorkerData, WorkerSettings } from "../types.js";
3
- import { RUNTIME_PROCESS_WORKER_BOOT_VERSION } from "../common/worker-runtime.js";
4
- import { type SharedBufferSource } from "../common/shared-buffer-region.js";
5
- import { FileDescriptor, type ProcessSharedBufferMetadata } from "../connections/index.js";
6
- import type { SharedMemoryBuffer, SharedMemoryMapping } from "../connections/types.js";
7
- export type SpawnedWorker = {
8
- terminate: () => unknown;
9
- unref?: () => unknown;
10
- postMessage?: (message: unknown) => void;
11
- };
12
- export type NodeWorkerLike = {
13
- on?: (event: "error" | "exit" | "message", listener: (...args: unknown[]) => void) => void;
14
- };
15
- type ProcessWorkerWireLockBuffers = Omit<LockBuffers, "headers" | "lockSector" | "payload" | "payloadSector"> & {
16
- headers: ProcessSharedBufferMetadata;
17
- lockSector: ProcessSharedBufferMetadata;
18
- payload: ProcessSharedBufferMetadata;
19
- payloadSector: ProcessSharedBufferMetadata;
20
- };
21
- type ProcessWorkerWireData = Omit<WorkerData, "sab" | "abortSignalSAB" | "lock" | "returnLock"> & {
22
- sab: ProcessSharedBufferMetadata;
23
- abortSignalSAB?: ProcessSharedBufferMetadata;
24
- lock: ProcessWorkerWireLockBuffers;
25
- returnLock: ProcessWorkerWireLockBuffers;
26
- };
27
- export type ProcessWorkerBootPayload = {
28
- version: typeof RUNTIME_PROCESS_WORKER_BOOT_VERSION;
29
- workerData: ProcessWorkerWireData;
30
- };
31
- export type ProcessWorkerMemoryLayout = {
32
- mapping: SharedMemoryMapping<SharedMemoryBuffer>;
33
- descriptor: FileDescriptor;
34
- controlLayout: LockControlCarpet;
35
- lockPayload: SharedBufferSource;
36
- returnPayload: SharedBufferSource;
37
- cleanup: () => void;
38
- };
39
- export type ProcessWorkerRuntime = NonNullable<WorkerSettings["processRuntime"]>;
40
- export type ProcessWorkerCommandPrefix = NonNullable<WorkerSettings["processCommandPrefix"]>;
41
- export type ResolvedProcessSharedMemorySettings = {
42
- mode: "inherit" | "named";
43
- namePrefix?: string;
44
- unlinkOnShutdown: boolean;
45
- };
46
- type ProcessSharedMemoryNativeMapping = {
47
- sab: SharedArrayBuffer;
48
- fd: number;
49
- name?: string;
50
- size: number;
51
- baseAddressMod64?: number;
52
- };
53
- export type ProcessSharedMemoryBacking = ProcessSharedMemoryNativeMapping & {
54
- runtime: "node";
55
- buffer: SharedArrayBuffer;
56
- kind: "shared-array-buffer";
57
- byteLength: number;
58
- };
59
- type ProcessSharedMemoryAllocator = {
60
- createBuffer: (byteLength: number) => SharedArrayBuffer;
61
- backings: ProcessSharedMemoryBacking[];
62
- };
63
- export declare const toWorkerSafeExecArgv: (flags: string[] | undefined) => string[] | undefined;
64
- export declare const toWorkerCompatExecArgv: (flags: string[] | undefined) => string[] | undefined;
65
- export declare const createProcessSharedMemoryAllocator: (debug: DebugOptions | undefined) => ProcessSharedMemoryAllocator | undefined;
66
- export declare const createProcessWorkerMemoryLayout: ({ signalBytes, abortBytes, payloadBytes, thread, sharedMemory, }: {
67
- signalBytes: number;
68
- abortBytes: number;
69
- payloadBytes: number;
70
- thread: number;
71
- sharedMemory: ResolvedProcessSharedMemorySettings;
72
- }) => ProcessWorkerMemoryLayout;
73
- export declare const serializeWorkerBootstrapData: (options: WorkerSettings) => WorkerSettings;
74
- export declare const toProcessWorkerBootPayload: (workerData: WorkerData, memory: ProcessWorkerMemoryLayout) => ProcessWorkerBootPayload;
75
- export declare const readProcessWorkerRuntime: (options: WorkerSettings | undefined) => ProcessWorkerRuntime;
76
- export declare const readProcessWorkerCommandPrefix: (options: WorkerSettings | undefined) => ProcessWorkerCommandPrefix | undefined;
77
- export declare const readProcessSharedMemorySettings: (options: WorkerSettings | undefined) => ResolvedProcessSharedMemorySettings;
78
- export declare const createProcessWorkerNativeSignalNotifier: ({ processRuntime, signal, }: {
79
- processRuntime: ProcessWorkerRuntime | undefined;
80
- signal: Int32Array;
81
- }) => (() => void) | undefined;
82
- export declare const spawnProcessWorker: (options: {
83
- workerUrl: string | URL;
84
- bootPayload: ProcessWorkerBootPayload;
85
- memory: ProcessWorkerMemoryLayout;
86
- processRuntime: ProcessWorkerRuntime;
87
- commandPrefix?: ProcessWorkerCommandPrefix;
88
- permission?: WorkerData["permission"];
89
- }) => SpawnedWorker & NodeWorkerLike;
90
- export declare const terminateWorkerQuietly: (worker: SpawnedWorker) => void;
91
- export declare const cleanupProcessWorkerMemoryQuietly: (memory: ProcessWorkerMemoryLayout | undefined) => void;
92
- export {};