knitting 0.1.55 → 0.1.56
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/knitting.d.ts +6 -797
- package/knitting.js +6 -9780
- package/map.md +12 -8
- package/package.json +14 -6
- package/process-shared-buffer.d.ts +1 -0
- package/process-shared-buffer.js +1 -0
- package/shared-memory.d.ts +1 -155
- package/shared-memory.js +1 -1342
- package/src/api.d.ts +69 -0
- package/src/api.js +619 -0
- package/src/common/envelope.d.ts +17 -0
- package/src/common/envelope.js +22 -0
- package/src/common/module-url.d.ts +1 -0
- package/src/common/module-url.js +24 -0
- package/src/common/node-compat.d.ts +20 -0
- package/src/common/node-compat.js +24 -0
- package/src/common/path-canonical.d.ts +6 -0
- package/src/common/path-canonical.js +41 -0
- package/src/common/runtime.d.ts +15 -0
- package/src/common/runtime.js +91 -0
- package/src/common/shared-buffer-region.d.ts +11 -0
- package/src/common/shared-buffer-region.js +21 -0
- package/src/common/shared-buffer-text.d.ts +16 -0
- package/src/common/shared-buffer-text.js +65 -0
- package/src/common/task-source.d.ts +3 -0
- package/src/common/task-source.js +84 -0
- package/src/common/task-symbol.d.ts +1 -0
- package/src/common/task-symbol.js +1 -0
- package/src/common/with-resolvers.d.ts +9 -0
- package/src/common/with-resolvers.js +23 -0
- package/src/common/worker-runtime.d.ts +42 -0
- package/src/common/worker-runtime.js +61 -0
- package/src/connections/buffer-reference-native.d.ts +56 -0
- package/src/connections/buffer-reference-native.js +217 -0
- package/src/connections/buffer-reference.d.ts +78 -0
- package/src/connections/buffer-reference.js +461 -0
- package/src/connections/bun.d.ts +22 -0
- package/src/connections/bun.js +214 -0
- package/src/connections/deno.d.ts +22 -0
- package/src/connections/deno.js +205 -0
- package/src/connections/file-descriptor.d.ts +39 -0
- package/src/connections/file-descriptor.js +161 -0
- package/src/connections/index.d.ts +4 -0
- package/src/connections/index.js +4 -0
- package/src/connections/node-addons.d.ts +5 -0
- package/src/connections/node-addons.js +44 -0
- package/src/connections/node-buffer-pointer.d.ts +20 -0
- package/src/connections/node-buffer-pointer.js +16 -0
- package/src/connections/node.d.ts +30 -0
- package/src/connections/node.js +62 -0
- package/src/connections/numeric-array.d.ts +5 -0
- package/src/connections/numeric-array.js +17 -0
- package/src/connections/package-assets.d.ts +2 -0
- package/src/connections/package-assets.js +45 -0
- package/src/connections/posix.d.ts +32 -0
- package/src/connections/posix.js +77 -0
- package/src/connections/process-shared-buffer.d.ts +75 -0
- package/src/connections/process-shared-buffer.js +279 -0
- package/src/connections/shared-array-buffer-payload.d.ts +36 -0
- package/src/connections/shared-array-buffer-payload.js +235 -0
- package/src/connections/types.d.ts +50 -0
- package/src/connections/types.js +37 -0
- package/src/connections/windows.d.ts +28 -0
- package/src/connections/windows.js +224 -0
- package/src/debug/env-diff.d.ts +26 -0
- package/src/debug/env-diff.js +49 -0
- package/src/debug/gate.d.ts +18 -0
- package/src/debug/gate.js +69 -0
- package/src/debug/handle.d.ts +23 -0
- package/src/debug/handle.js +48 -0
- package/src/error.d.ts +13 -0
- package/src/error.js +49 -0
- package/src/ipc/tools/ring-queue.d.ts +33 -0
- package/src/ipc/tools/ring-queue.js +159 -0
- package/src/ipc/transport/shared-memory.d.ts +23 -0
- package/src/ipc/transport/shared-memory.js +35 -0
- package/src/memory/byte-carpet.d.ts +73 -0
- package/src/memory/byte-carpet.js +157 -0
- package/src/memory/lock.d.ts +203 -0
- package/src/memory/lock.js +741 -0
- package/src/memory/payload-config.d.ts +31 -0
- package/src/memory/payload-config.js +67 -0
- package/src/memory/payloadCodec.d.ts +46 -0
- package/src/memory/payloadCodec.js +1377 -0
- package/src/memory/regionRegistry.d.ts +17 -0
- package/src/memory/regionRegistry.js +285 -0
- package/src/memory/shared-buffer-io.d.ts +55 -0
- package/src/memory/shared-buffer-io.js +403 -0
- package/src/permission/index.d.ts +2 -0
- package/src/permission/index.js +2 -0
- package/src/permission/protocol.d.ts +166 -0
- package/src/permission/protocol.js +650 -0
- package/src/runtime/balancer.d.ts +19 -0
- package/src/runtime/balancer.js +149 -0
- package/src/runtime/dispatcher.d.ts +40 -0
- package/src/runtime/dispatcher.js +142 -0
- package/src/runtime/inline-executor.d.ts +10 -0
- package/src/runtime/inline-executor.js +282 -0
- package/src/runtime/pool.d.ts +39 -0
- package/src/runtime/pool.js +404 -0
- package/src/runtime/process-worker.d.ts +92 -0
- package/src/runtime/process-worker.js +673 -0
- package/src/runtime/tx-queue.d.ts +26 -0
- package/src/runtime/tx-queue.js +155 -0
- package/src/shared/abortSignal.d.ts +23 -0
- package/src/shared/abortSignal.js +134 -0
- package/src/types.d.ts +357 -0
- package/src/types.js +2 -0
- package/src/utils/http.d.ts +29 -0
- package/src/utils/http.js +100 -0
- package/src/worker/bootstrap.d.ts +5 -0
- package/src/worker/bootstrap.js +78 -0
- package/src/worker/composable-runners.d.ts +12 -0
- package/src/worker/composable-runners.js +97 -0
- package/src/worker/loop.d.ts +2 -0
- package/src/worker/loop.js +382 -0
- package/src/worker/process-worker-bootstrap.d.ts +8 -0
- package/src/worker/process-worker-bootstrap.js +160 -0
- package/src/worker/rx-queue.d.ts +25 -0
- package/src/worker/rx-queue.js +173 -0
- package/src/worker/safety/index.d.ts +4 -0
- package/src/worker/safety/index.js +4 -0
- package/src/worker/safety/performance.d.ts +1 -0
- package/src/worker/safety/performance.js +17 -0
- package/src/worker/safety/process.d.ts +2 -0
- package/src/worker/safety/process.js +79 -0
- package/src/worker/safety/startup.d.ts +16 -0
- package/src/worker/safety/startup.js +30 -0
- package/src/worker/safety/worker-data.d.ts +2 -0
- package/src/worker/safety/worker-data.js +36 -0
- package/src/worker/task-loader.d.ts +27 -0
- package/src/worker/task-loader.js +70 -0
- package/src/worker/timers.d.ts +18 -0
- package/src/worker/timers.js +116 -0
- package/unsafe.d.ts +1 -71
- package/unsafe.js +1 -878
- package/utils.d.ts +1 -31
- package/utils.js +1 -116
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
export const BYTE_CARPET_ALIGN_BYTES = 64;
|
|
2
|
+
const U32_BYTES = Uint32Array.BYTES_PER_ELEMENT;
|
|
3
|
+
const toNonNegativeInteger = (value, label) => {
|
|
4
|
+
if (!Number.isInteger(value) || value < 0) {
|
|
5
|
+
throw new RangeError(`${label} must be a non-negative integer`);
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
};
|
|
9
|
+
export const alignBytes = (value, alignment = BYTE_CARPET_ALIGN_BYTES) => {
|
|
10
|
+
const safeValue = toNonNegativeInteger(value, "value");
|
|
11
|
+
const safeAlignment = toNonNegativeInteger(alignment, "alignment");
|
|
12
|
+
if (safeAlignment === 0) {
|
|
13
|
+
throw new RangeError("alignment must be greater than zero");
|
|
14
|
+
}
|
|
15
|
+
return Math.ceil(safeValue / safeAlignment) * safeAlignment;
|
|
16
|
+
};
|
|
17
|
+
export const makeSharedBufferRegion = (sab, byteOffset, byteLength) => ({
|
|
18
|
+
sab,
|
|
19
|
+
byteOffset: toNonNegativeInteger(byteOffset, "byteOffset"),
|
|
20
|
+
byteLength: toNonNegativeInteger(byteLength, "byteLength"),
|
|
21
|
+
});
|
|
22
|
+
export const createByteCarpet = ({ alignTo = BYTE_CARPET_ALIGN_BYTES, startByteOffset = 0, } = {}) => {
|
|
23
|
+
const defaultAlignment = toNonNegativeInteger(alignTo, "alignTo");
|
|
24
|
+
if (defaultAlignment === 0) {
|
|
25
|
+
throw new RangeError("alignTo must be greater than zero");
|
|
26
|
+
}
|
|
27
|
+
let cursor = toNonNegativeInteger(startByteOffset, "startByteOffset");
|
|
28
|
+
const slices = [];
|
|
29
|
+
const take = (name, byteLength, { alignTo: sliceAlignment = defaultAlignment, reserveByteLength, } = {}) => {
|
|
30
|
+
const logicalByteLength = toNonNegativeInteger(byteLength, `${name} byteLength`);
|
|
31
|
+
const safeSliceAlignment = toNonNegativeInteger(sliceAlignment, `${name} alignTo`);
|
|
32
|
+
if (safeSliceAlignment === 0) {
|
|
33
|
+
throw new RangeError(`${name} alignTo must be greater than zero`);
|
|
34
|
+
}
|
|
35
|
+
const reserved = reserveByteLength == null
|
|
36
|
+
? alignBytes(logicalByteLength, safeSliceAlignment)
|
|
37
|
+
: toNonNegativeInteger(reserveByteLength, `${name} reserveByteLength`);
|
|
38
|
+
if (reserved < logicalByteLength) {
|
|
39
|
+
throw new RangeError(`${name} reserveByteLength must cover byteLength`);
|
|
40
|
+
}
|
|
41
|
+
const byteOffset = alignBytes(cursor, safeSliceAlignment);
|
|
42
|
+
const slice = {
|
|
43
|
+
name,
|
|
44
|
+
byteOffset,
|
|
45
|
+
byteLength: logicalByteLength,
|
|
46
|
+
reservedByteLength: reserved,
|
|
47
|
+
};
|
|
48
|
+
slices.push(slice);
|
|
49
|
+
cursor = byteOffset + reserved;
|
|
50
|
+
return slice;
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
slices,
|
|
54
|
+
take,
|
|
55
|
+
byteLength: () => cursor,
|
|
56
|
+
bind: (sab, slice) => makeSharedBufferRegion(sab, slice.byteOffset, slice.byteLength),
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export const getStridedSlotOffsetU32 = ({ slotIndex, slotStrideU32, baseU32 = 0, extraU32 = 0, }) => (slotIndex * slotStrideU32) + baseU32 + extraU32;
|
|
60
|
+
export const getStridedSlotByteOffset = ({ slotIndex, slotStrideU32, baseByteOffset = 0, baseU32 = 0, extraU32 = 0, }) => baseByteOffset +
|
|
61
|
+
(getStridedSlotOffsetU32({
|
|
62
|
+
slotIndex,
|
|
63
|
+
slotStrideU32,
|
|
64
|
+
baseU32,
|
|
65
|
+
extraU32,
|
|
66
|
+
}) * U32_BYTES);
|
|
67
|
+
export const getStridedRegionSpanBytes = ({ slotCount, slotStrideU32, slotLengthU32, baseU32 = 0, }) => {
|
|
68
|
+
const safeSlotCount = toNonNegativeInteger(slotCount, "slotCount");
|
|
69
|
+
if (safeSlotCount === 0)
|
|
70
|
+
return 0;
|
|
71
|
+
return (getStridedSlotOffsetU32({
|
|
72
|
+
slotIndex: safeSlotCount - 1,
|
|
73
|
+
slotStrideU32,
|
|
74
|
+
baseU32,
|
|
75
|
+
}) + slotLengthU32) * U32_BYTES;
|
|
76
|
+
};
|
|
77
|
+
export const getInterleavedSlotStrideU32 = (slotStrideU32) => slotStrideU32 * 2;
|
|
78
|
+
export const getHeaderBlockByteLength = ({ slotCount, slotStrideU32, queues = 1, alignTo = BYTE_CARPET_ALIGN_BYTES, }) => alignBytes(slotCount * slotStrideU32 * U32_BYTES * queues, alignTo);
|
|
79
|
+
const createInterleavedHeaderPair = ({ sab, byteOffset, slotCount, slotStrideU32, }) => {
|
|
80
|
+
const headerSlotStrideU32 = getInterleavedSlotStrideU32(slotStrideU32);
|
|
81
|
+
const slotBytes = slotStrideU32 * U32_BYTES;
|
|
82
|
+
const spanBytes = getStridedRegionSpanBytes({
|
|
83
|
+
slotCount,
|
|
84
|
+
slotStrideU32: headerSlotStrideU32,
|
|
85
|
+
slotLengthU32: slotStrideU32,
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
headerSlotStrideU32,
|
|
89
|
+
requestHeaders: makeSharedBufferRegion(sab, byteOffset, spanBytes),
|
|
90
|
+
returnHeaders: makeSharedBufferRegion(sab, byteOffset + slotBytes, spanBytes),
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export const createLockControlCarpet = ({ signalBytes, abortBytes, lockSectorBytes, headerSlotStrideU32, slotCount, headerLayout = "interleaved", alignTo = BYTE_CARPET_ALIGN_BYTES, createBuffer = (byteLength) => new SharedArrayBuffer(byteLength), }) => {
|
|
94
|
+
const carpet = createByteCarpet({ alignTo });
|
|
95
|
+
const signalsSlice = carpet.take("signals", signalBytes);
|
|
96
|
+
const requestLockSlice = carpet.take("requestLockSector", lockSectorBytes);
|
|
97
|
+
const returnLockSlice = carpet.take("returnLockSector", lockSectorBytes);
|
|
98
|
+
let requestHeadersSlice;
|
|
99
|
+
let returnHeadersSlice;
|
|
100
|
+
let interleavedHeadersSlice;
|
|
101
|
+
if (headerLayout === "interleaved") {
|
|
102
|
+
interleavedHeadersSlice = carpet.take("interleavedHeaders", getHeaderBlockByteLength({
|
|
103
|
+
slotCount,
|
|
104
|
+
slotStrideU32: headerSlotStrideU32,
|
|
105
|
+
queues: 2,
|
|
106
|
+
alignTo,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
requestHeadersSlice = carpet.take("requestHeaders", getHeaderBlockByteLength({
|
|
111
|
+
slotCount,
|
|
112
|
+
slotStrideU32: headerSlotStrideU32,
|
|
113
|
+
alignTo,
|
|
114
|
+
}));
|
|
115
|
+
returnHeadersSlice = carpet.take("returnHeaders", getHeaderBlockByteLength({
|
|
116
|
+
slotCount,
|
|
117
|
+
slotStrideU32: headerSlotStrideU32,
|
|
118
|
+
alignTo,
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
const abortSignalsSlice = carpet.take("abortSignals", abortBytes);
|
|
122
|
+
const controlSAB = createBuffer(carpet.byteLength());
|
|
123
|
+
const signals = carpet.bind(controlSAB, signalsSlice);
|
|
124
|
+
const abortSignals = carpet.bind(controlSAB, abortSignalsSlice);
|
|
125
|
+
const requestLockSector = carpet.bind(controlSAB, requestLockSlice);
|
|
126
|
+
const returnLockSector = carpet.bind(controlSAB, returnLockSlice);
|
|
127
|
+
const headerPair = headerLayout === "interleaved"
|
|
128
|
+
? createInterleavedHeaderPair({
|
|
129
|
+
sab: controlSAB,
|
|
130
|
+
byteOffset: interleavedHeadersSlice.byteOffset,
|
|
131
|
+
slotCount,
|
|
132
|
+
slotStrideU32: headerSlotStrideU32,
|
|
133
|
+
})
|
|
134
|
+
: {
|
|
135
|
+
headerSlotStrideU32,
|
|
136
|
+
requestHeaders: carpet.bind(controlSAB, requestHeadersSlice),
|
|
137
|
+
returnHeaders: carpet.bind(controlSAB, returnHeadersSlice),
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
controlSAB,
|
|
141
|
+
signals,
|
|
142
|
+
abortSignals,
|
|
143
|
+
lock: {
|
|
144
|
+
headers: headerPair.requestHeaders,
|
|
145
|
+
headerSlotStrideU32: headerPair.headerSlotStrideU32,
|
|
146
|
+
lockSector: requestLockSector,
|
|
147
|
+
payloadSector: requestLockSector,
|
|
148
|
+
},
|
|
149
|
+
returnLock: {
|
|
150
|
+
headers: headerPair.returnHeaders,
|
|
151
|
+
headerSlotStrideU32: headerPair.headerSlotStrideU32,
|
|
152
|
+
lockSector: returnLockSector,
|
|
153
|
+
payloadSector: returnLockSector,
|
|
154
|
+
},
|
|
155
|
+
slices: carpet.slices,
|
|
156
|
+
};
|
|
157
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import RingQueue from "../ipc/tools/ring-queue.js";
|
|
2
|
+
import { type SharedBufferSource } from "../common/shared-buffer-region.js";
|
|
3
|
+
import { type LockBufferTextCompat } from "../common/shared-buffer-text.js";
|
|
4
|
+
import { type PayloadBufferOptions } from "./payload-config.js";
|
|
5
|
+
/**
|
|
6
|
+
* TODO: Compose all the instance where the array is passed as argument
|
|
7
|
+
*/
|
|
8
|
+
export declare enum PayloadSignal {
|
|
9
|
+
UNREACHABLE = 0,
|
|
10
|
+
BigInt = 2,
|
|
11
|
+
True = 3,
|
|
12
|
+
False = 4,
|
|
13
|
+
Undefined = 5,
|
|
14
|
+
NaN = 6,
|
|
15
|
+
Float64 = 9,
|
|
16
|
+
Null = 10
|
|
17
|
+
}
|
|
18
|
+
export declare enum PayloadBuffer {
|
|
19
|
+
BORDER_SIGNAL_BUFFER = 11,
|
|
20
|
+
String = 11,
|
|
21
|
+
Json = 12,
|
|
22
|
+
StaticString = 15,
|
|
23
|
+
StaticJson = 16,
|
|
24
|
+
Binary = 17,
|
|
25
|
+
StaticBinary = 18,
|
|
26
|
+
Int32Array = 19,
|
|
27
|
+
Float64Array = 20,
|
|
28
|
+
BigInt64Array = 21,
|
|
29
|
+
BigUint64Array = 22,
|
|
30
|
+
DataView = 23,
|
|
31
|
+
Error = 24,
|
|
32
|
+
Date = 25,
|
|
33
|
+
Symbol = 26,
|
|
34
|
+
StaticSymbol = 27,
|
|
35
|
+
BigInt = 28,
|
|
36
|
+
StaticBigInt = 29,
|
|
37
|
+
StaticInt32Array = 31,
|
|
38
|
+
StaticFloat64Array = 32,
|
|
39
|
+
StaticBigInt64Array = 33,
|
|
40
|
+
StaticBigUint64Array = 34,
|
|
41
|
+
StaticDataView = 35,
|
|
42
|
+
ArrayBuffer = 36,
|
|
43
|
+
StaticArrayBuffer = 37,
|
|
44
|
+
Buffer = 38,
|
|
45
|
+
StaticBuffer = 39,
|
|
46
|
+
EnvelopeStaticHeader = 40,
|
|
47
|
+
EnvelopeDynamicHeader = 41,
|
|
48
|
+
EnvelopeStaticHeaderString = 42,
|
|
49
|
+
EnvelopeDynamicHeaderString = 43,
|
|
50
|
+
ExternalPayload = 44,
|
|
51
|
+
StaticExternalPayload = 45,
|
|
52
|
+
ProcessSharedBuffer = 46,
|
|
53
|
+
BufferReference = 47,
|
|
54
|
+
SharedArrayBuffer = 48,
|
|
55
|
+
EnvelopeStaticHeaderExternal = 49,
|
|
56
|
+
EnvelopeDynamicHeaderExternal = 50,
|
|
57
|
+
EnvelopeStaticHeaderStringExternal = 51,
|
|
58
|
+
EnvelopeDynamicHeaderStringExternal = 52,
|
|
59
|
+
NumericArray = 53,
|
|
60
|
+
StaticNumericArray = 54
|
|
61
|
+
}
|
|
62
|
+
export declare enum LockBound {
|
|
63
|
+
paddingLock = 0,
|
|
64
|
+
padding = 0,
|
|
65
|
+
slots = 32,
|
|
66
|
+
header = 0
|
|
67
|
+
}
|
|
68
|
+
export declare const LOCK_CACHE_LINE_BYTES = 64;
|
|
69
|
+
export declare const LOCK_SECTOR_BYTES = 256;
|
|
70
|
+
export type Task = [
|
|
71
|
+
number,
|
|
72
|
+
number,
|
|
73
|
+
PayloadSignal | PayloadBuffer,
|
|
74
|
+
number,
|
|
75
|
+
number,
|
|
76
|
+
number,
|
|
77
|
+
number,
|
|
78
|
+
number
|
|
79
|
+
] & {
|
|
80
|
+
value: unknown;
|
|
81
|
+
finalize?: (() => void) | undefined;
|
|
82
|
+
resolve: (value?: unknown) => void;
|
|
83
|
+
reject: (reason?: unknown) => void;
|
|
84
|
+
};
|
|
85
|
+
export declare const PayloadTransportFinalizer: unique symbol;
|
|
86
|
+
export declare const PromisePayloadMarker: unique symbol;
|
|
87
|
+
export type PromisePayloadHandler = (task: Task, isRejected: boolean, value: unknown) => void;
|
|
88
|
+
export declare const beginPromisePayload: (task: Task) => boolean;
|
|
89
|
+
export declare const finishPromisePayload: (task: Task) => void;
|
|
90
|
+
export declare const isPromisePayloadPending: (task: Task) => boolean;
|
|
91
|
+
export declare const resetTaskLocalFlags: (task: Task) => void;
|
|
92
|
+
export declare const addTaskFinalizer: (task: Task, finalizer: () => void) => void;
|
|
93
|
+
export declare const attachPayloadTransportFinalizer: (task: Task, value: unknown) => void;
|
|
94
|
+
export declare const runTaskFinalizers: (task: Task) => void;
|
|
95
|
+
export declare enum TaskIndex {
|
|
96
|
+
/**
|
|
97
|
+
* Worker -> host response flags word.
|
|
98
|
+
*/
|
|
99
|
+
FlagsToHost = 0,
|
|
100
|
+
/**
|
|
101
|
+
* Host -> worker request function id (low 16 bits).
|
|
102
|
+
* High 16 bits are reserved for caller metadata on request path.
|
|
103
|
+
* NOTE: shares the same storage word as `FlagsToHost`.
|
|
104
|
+
*/
|
|
105
|
+
FunctionID = 0,
|
|
106
|
+
ID = 1,
|
|
107
|
+
Type = 2,
|
|
108
|
+
Start = 3,
|
|
109
|
+
End = 4,
|
|
110
|
+
PayloadLen = 5,
|
|
111
|
+
/**
|
|
112
|
+
* Low 5 bits: region slot index (0..31).
|
|
113
|
+
* High 27 bits: reserved for caller metadata (e.g. enqueue timing).
|
|
114
|
+
*/
|
|
115
|
+
slotBuffer = 6,
|
|
116
|
+
Size = 8,
|
|
117
|
+
/**
|
|
118
|
+
* Total slot length in Uint32 words, including the task header.
|
|
119
|
+
*/
|
|
120
|
+
TotalBuff = 144
|
|
121
|
+
}
|
|
122
|
+
export declare const TASK_SLOT_INDEX_BITS = 5;
|
|
123
|
+
export declare const TASK_SLOT_INDEX_MASK: number;
|
|
124
|
+
export declare const TASK_SLOT_META_BITS: number;
|
|
125
|
+
export declare const TASK_SLOT_META_VALUE_MASK: number;
|
|
126
|
+
export declare const TASK_FUNCTION_ID_BITS = 16;
|
|
127
|
+
export declare const TASK_FUNCTION_ID_MASK: number;
|
|
128
|
+
export declare const TASK_FUNCTION_META_BITS: number;
|
|
129
|
+
export declare const TASK_FUNCTION_META_VALUE_MASK: number;
|
|
130
|
+
export declare const getTaskFunctionID: (task: ArrayLike<number>) => number;
|
|
131
|
+
export declare const setTaskFunctionID: (task: Task, functionID: number) => void;
|
|
132
|
+
export declare const getTaskFunctionMeta: (task: ArrayLike<number>) => number;
|
|
133
|
+
export declare const setTaskFunctionMeta: (task: Task, value: number) => void;
|
|
134
|
+
export declare const getTaskSlotIndex: (task: ArrayLike<number>) => number;
|
|
135
|
+
export declare const setTaskSlotIndex: (task: Task, slotIndex: number) => void;
|
|
136
|
+
export declare const getTaskSlotMeta: (task: ArrayLike<number>) => number;
|
|
137
|
+
export declare const setTaskSlotMeta: (task: Task, value: number) => void;
|
|
138
|
+
export declare enum TaskFlag {
|
|
139
|
+
Reject = 1
|
|
140
|
+
}
|
|
141
|
+
export declare const LOCK_WORD_BYTES: number;
|
|
142
|
+
export declare const LOCK_HOST_BITS_OFFSET_BYTES = LockBound.paddingLock;
|
|
143
|
+
export declare const LOCK_WORKER_BITS_OFFSET_BYTES = 64;
|
|
144
|
+
export declare const LOCK_SECTOR_BYTE_LENGTH = 256;
|
|
145
|
+
export declare const PAYLOAD_LOCK_HOST_BITS_OFFSET_BYTES: number;
|
|
146
|
+
export declare const PAYLOAD_LOCK_WORKER_BITS_OFFSET_BYTES: number;
|
|
147
|
+
export declare const PAYLOAD_LOCK_SECTOR_BYTE_LENGTH = 256;
|
|
148
|
+
export declare const HEADER_SLOT_STRIDE_U32: number;
|
|
149
|
+
export declare const HEADER_SLOT_STRIDE_BYTES: number;
|
|
150
|
+
export declare const HEADER_TASK_LINE_U32: number;
|
|
151
|
+
export declare const HEADER_STATIC_PAYLOAD_U32: number;
|
|
152
|
+
export declare const HEADER_TASK_OFFSET_IN_SLOT_U32: number;
|
|
153
|
+
export declare const HEADER_U32_LENGTH: number;
|
|
154
|
+
export declare const HEADER_BYTE_LENGTH: number;
|
|
155
|
+
export declare const makeTask: () => Task;
|
|
156
|
+
type ResolveHostOptions = {
|
|
157
|
+
queue: Task[];
|
|
158
|
+
onResolved?: (task: Task) => void;
|
|
159
|
+
shouldSettle?: (task: Task) => boolean;
|
|
160
|
+
activeRejectPlaceholder?: Task["reject"];
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Complexity: 7 / 10
|
|
164
|
+
*
|
|
165
|
+
* SAFETY:
|
|
166
|
+
* - Single producer/consumer; do not call encode/decode concurrently.
|
|
167
|
+
* - Shared buffers must be the same between host/worker.
|
|
168
|
+
* - encode/decode are not re-entrant; payload codec uses a shared scratch buffer.
|
|
169
|
+
*/
|
|
170
|
+
export type Lock2 = ReturnType<typeof lock2>;
|
|
171
|
+
export declare const lock2: ({ headers, headerSlotStrideU32, LockBoundSector, payload, payloadConfig, payloadSector, textCompat, resultList, toSentList, recycleList, }: {
|
|
172
|
+
headers?: SharedBufferSource;
|
|
173
|
+
headerSlotStrideU32?: number;
|
|
174
|
+
LockBoundSector?: SharedBufferSource;
|
|
175
|
+
payload?: SharedBufferSource;
|
|
176
|
+
payloadConfig?: PayloadBufferOptions;
|
|
177
|
+
payloadSector?: SharedBufferSource;
|
|
178
|
+
textCompat?: LockBufferTextCompat;
|
|
179
|
+
toSentList?: RingQueue<Task>;
|
|
180
|
+
resultList?: RingQueue<Task>;
|
|
181
|
+
recycleList?: RingQueue<Task>;
|
|
182
|
+
}) => {
|
|
183
|
+
enlist: (task: Task) => true;
|
|
184
|
+
encode: (task: Task, state?: number) => boolean;
|
|
185
|
+
encodeManyFrom: (list: RingQueue<Task>) => number;
|
|
186
|
+
encodeAll: () => boolean;
|
|
187
|
+
publish: (task: Task) => boolean;
|
|
188
|
+
flushPending: () => boolean;
|
|
189
|
+
decode: () => boolean;
|
|
190
|
+
hasSpace: () => boolean;
|
|
191
|
+
resolved: RingQueue<Task>;
|
|
192
|
+
hostBits: Int32Array<import("../common/shared-buffer-region.js").SharedBuffer>;
|
|
193
|
+
workerBits: Int32Array<import("../common/shared-buffer-region.js").SharedBuffer>;
|
|
194
|
+
recyclecList: RingQueue<Task>;
|
|
195
|
+
resolveHost: ({ queue, onResolved, shouldSettle, activeRejectPlaceholder, }: ResolveHostOptions) => () => number;
|
|
196
|
+
hasPendingFrames: () => boolean;
|
|
197
|
+
getPendingFrameCount: () => number;
|
|
198
|
+
getPendingPromiseCount: () => number;
|
|
199
|
+
resetPendingState: () => void;
|
|
200
|
+
takeDeferredCount: () => number;
|
|
201
|
+
setPromiseHandler: (handler?: PromisePayloadHandler) => void;
|
|
202
|
+
};
|
|
203
|
+
export {};
|