knitting 0.1.54 → 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 +3 -3
  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 -627
  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 -40
  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 -39
  101. package/src/runtime/pool.js +0 -404
  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 -155
  106. package/src/shared/abortSignal.d.ts +0 -23
  107. package/src/shared/abortSignal.js +0 -134
  108. package/src/types.d.ts +0 -357
  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
package/map.md CHANGED
@@ -18,7 +18,7 @@ The core flow is:
18
18
 
19
19
  - `knitting.ts`: Main package entry. Re-exports `createPool`, `task`,
20
20
  `importTask`, `isMain`, `Envelope`, and `workerMainLoop`.
21
- - `process-shared-buffer.ts`: Secondary public export for process-shared-buffer
21
+ - `shared-memory.ts`: Secondary public export for process-safe shared-memory
22
22
  helpers.
23
23
  - `unsafe.ts`: Public export for experimental lower-level capabilities such as
24
24
  `BufferReference`.
@@ -34,11 +34,11 @@ The core flow is:
34
34
 
35
35
  ## Build And Scripts
36
36
 
37
- - `build.ts`: Bundles `knitting.ts` to `out/` with Bun for a Node ESM target.
38
- - `tsconfig.npm.json`: TypeScript config for the npm release build. Emits
39
- `.js` and `.d.ts` files beside the source tree.
40
- - `scripts/rewrite-declaration-imports.mjs`: Post-processes emitted `.d.ts`
41
- files so declaration imports point at `.js` files for npm consumers.
37
+ - `build.ts`: Bundles each public entry to one root `.js` file with Bun for a
38
+ Node ESM target.
39
+ - `tsconfig.npm.json`: TypeScript config used by npm declaration bundling.
40
+ - `scripts/build-declarations.mjs`: Bundles each public entry to one root
41
+ `.d.ts` file for npm consumers.
42
42
  - `scripts/build-native-addons.ts`: Compiles the native Node addons into
43
43
  `build/Release/` on Linux, macOS, and Windows. It finds Node headers/libs,
44
44
  splits user flags, builds the shared-memory and futex addons, and emits the
@@ -309,12 +309,9 @@ The core flow is:
309
309
 
310
310
  - `build/Release/*.node`: Native addon output produced by
311
311
  `scripts/build-native-addons.ts`.
312
- - `out/`: Bundled output produced by `build.ts`.
313
- - `dest/`: Scratch output used by the `build:node` package script.
314
- - `knitting.js`, `knitting.d.ts`, `process-shared-buffer.js`,
315
- `process-shared-buffer.d.ts`, and `src/**/*.js` / `src/**/*.d.ts`: npm
316
- release build artifacts produced by `tsconfig.npm.json`.
312
+ - `knitting.js`, `knitting.d.ts`, `shared-memory.js`, `shared-memory.d.ts`,
313
+ `unsafe.js`, `unsafe.d.ts`, `utils.js`, and `utils.d.ts`: npm release build
314
+ artifacts produced by `build.ts` and `scripts/build-declarations.mjs`.
317
315
  - `results/`: Benchmark output produced by `run.sh`.
318
316
  - `log/`, `logs`, and `*.log`: Local runtime/log output.
319
317
  - `node_modules/`: Installed dependencies. Not part of the source map.
320
-
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "knitting",
3
- "version": "0.1.54",
3
+ "version": "0.1.55",
4
4
  "description": "Shared-memory IPC runtime for Node.js, Deno, and Bun.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -20,9 +20,9 @@
20
20
  "types": "./knitting.d.ts",
21
21
  "default": "./knitting.js"
22
22
  },
23
- "./process-shared-buffer": {
24
- "types": "./process-shared-buffer.d.ts",
25
- "default": "./process-shared-buffer.js"
23
+ "./shared-memory": {
24
+ "types": "./shared-memory.d.ts",
25
+ "default": "./shared-memory.js"
26
26
  },
27
27
  "./unsafe": {
28
28
  "types": "./unsafe.d.ts",
@@ -41,24 +41,24 @@
41
41
  "prebuilds/**/*.dll",
42
42
  "scripts/build-native-addons.ts",
43
43
  "src/**/*.cc",
44
- "src/**/*.d.ts",
45
- "src/**/*.js",
46
44
  "knitting.d.ts",
47
45
  "knitting.js",
48
- "process-shared-buffer.d.ts",
49
- "process-shared-buffer.js",
46
+ "shared-memory.d.ts",
47
+ "shared-memory.js",
50
48
  "unsafe.d.ts",
51
49
  "unsafe.js",
52
50
  "utils.d.ts",
53
51
  "utils.js"
54
52
  ],
55
53
  "scripts": {
56
- "build": "bun run build.ts",
57
- "build:npm": "tsc -p tsconfig.npm.json && node scripts/rewrite-declaration-imports.mjs",
54
+ "build": "bun run build.ts && node scripts/build-declarations.mjs",
55
+ "build:js": "bun run build.ts",
56
+ "build:types": "node scripts/build-declarations.mjs",
57
+ "build:npm": "npm run build",
58
58
  "build:native": "bun run scripts/build-native-addons.ts",
59
- "build:release": "bun run build:native && bun run build && npm run build:npm",
60
- "build:node": "bun build knitting.ts --outdir dest --target node --format esm",
61
- "prepack": "npm run build:npm",
59
+ "build:release": "bun run build:native && npm run build",
60
+ "build:node": "npm run build:js",
61
+ "prepack": "npm run build",
62
62
  "release:npm": "npm run test:all && npm publish",
63
63
  "release:npm:dry-run": "npm publish --dry-run",
64
64
  "test": "npm run test:deno",
@@ -84,6 +84,7 @@
84
84
  "@types/bun": "latest",
85
85
  "@types/deno": "latest",
86
86
  "@types/node": "latest",
87
+ "dts-bundle-generator": "^9.5.1",
87
88
  "mitata": "^1.0.34",
88
89
  "typescript": "^5.2.0"
89
90
  }
@@ -0,0 +1,155 @@
1
+ type SharedBuffer = SharedArrayBuffer | ArrayBuffer;
2
+ type SharedBufferRegion = {
3
+ sab: SharedBuffer;
4
+ byteOffset: number;
5
+ byteLength: number;
6
+ };
7
+ type ConnectionRuntime = "node" | "deno" | "bun";
8
+ type SharedMemoryBuffer = ArrayBuffer | SharedArrayBuffer;
9
+ type SharedMemoryBufferKind = "shared-array-buffer" | "external-array-buffer";
10
+ type SharedMemoryCreateMode = "anonymous" | "create" | "open";
11
+ type SharedMemoryMapping<Buffer extends SharedMemoryBuffer = SharedMemoryBuffer> = {
12
+ runtime: ConnectionRuntime;
13
+ fd: number;
14
+ name?: string;
15
+ size: number;
16
+ byteLength: number;
17
+ buffer: Buffer;
18
+ kind: SharedMemoryBufferKind;
19
+ sab?: SharedArrayBuffer;
20
+ arrayBuffer?: ArrayBuffer;
21
+ baseAddressMod64?: number;
22
+ unsafePointer?: unknown;
23
+ close?: () => void;
24
+ };
25
+ type CreateSharedMemoryOptions = {
26
+ size: number;
27
+ /**
28
+ * `anonymous` keeps the current fd-backed private mapping behavior.
29
+ * `create` and `open` use a named shared-memory object so independent
30
+ * processes can rendezvous by name.
31
+ */
32
+ mode?: SharedMemoryCreateMode;
33
+ name?: string;
34
+ };
35
+ type MapSharedMemoryOptions = {
36
+ fd: number;
37
+ name?: string;
38
+ size: number;
39
+ duplicateFd?: boolean;
40
+ };
41
+ type SharedMemoryConnectionPrimitives<Mapping extends SharedMemoryMapping = SharedMemoryMapping> = {
42
+ runtime: ConnectionRuntime;
43
+ createSharedMemory: (options: number | CreateSharedMemoryOptions) => Mapping;
44
+ mapSharedMemory: (options: MapSharedMemoryOptions) => Mapping;
45
+ unlinkSharedMemory?: (name: string) => boolean;
46
+ };
47
+ type FileDescriptorMetadata = {
48
+ version: 1;
49
+ fd: number;
50
+ name?: string;
51
+ size: number;
52
+ byteLength: number;
53
+ runtime?: ConnectionRuntime;
54
+ kind?: SharedMemoryMapping["kind"];
55
+ baseAddressMod64?: number;
56
+ };
57
+ type FileDescriptorMapper = Pick<SharedMemoryConnectionPrimitives, "mapSharedMemory">;
58
+ declare class FileDescriptor {
59
+ #private;
60
+ readonly fd: number;
61
+ readonly name?: string;
62
+ readonly size: number;
63
+ readonly byteLength: number;
64
+ readonly runtime?: ConnectionRuntime;
65
+ readonly kind?: SharedMemoryMapping["kind"];
66
+ readonly baseAddressMod64?: number;
67
+ constructor(metadata: FileDescriptorMetadata, mapping?: SharedMemoryMapping);
68
+ static fromMapping(mapping: SharedMemoryMapping): FileDescriptor;
69
+ static fromMetadata(metadata: unknown): FileDescriptor;
70
+ static parse(serialized: string): FileDescriptor;
71
+ toMetadata(): FileDescriptorMetadata;
72
+ toJSON(): FileDescriptorMetadata;
73
+ stringify(): string;
74
+ stringifyMetadata(): string;
75
+ toString(): string;
76
+ attach(mapping: SharedMemoryMapping): this;
77
+ get mapping(): SharedMemoryMapping | undefined;
78
+ map(mapper: FileDescriptorMapper): SharedMemoryMapping;
79
+ getBuffer(mapper?: FileDescriptorMapper): SharedMemoryBuffer;
80
+ getSharedArrayBuffer(mapper?: FileDescriptorMapper): SharedArrayBuffer;
81
+ getSAB(mapper?: FileDescriptorMapper): SharedArrayBuffer;
82
+ }
83
+ export type ProcessSharedBufferMetadata = {
84
+ version: 1;
85
+ descriptor: FileDescriptorMetadata;
86
+ byteOffset: number;
87
+ byteLength: number;
88
+ };
89
+ export declare const PROCESS_SHARED_BUFFER_BRAND: unique symbol;
90
+ declare const PROCESS_SHARED_BUFFER_NUMERIC_TRANSFER: unique symbol;
91
+ declare const EXTERNAL_PAYLOAD_BRAND: unique symbol;
92
+ type ProcessSharedBufferNumericMetadata = readonly [
93
+ fd: number,
94
+ size: number,
95
+ descriptorByteLength: number,
96
+ byteOffset: number,
97
+ byteLength: number,
98
+ runtime: number,
99
+ kind: number,
100
+ baseAddressMod64: number
101
+ ];
102
+ export type ProcessSharedBufferRange = {
103
+ byteOffset?: number;
104
+ byteLength?: number;
105
+ };
106
+ export type ProcessSharedBufferCreator = Pick<SharedMemoryConnectionPrimitives, "createSharedMemory">;
107
+ export type ProcessSharedBufferMapper = Pick<SharedMemoryConnectionPrimitives, "mapSharedMemory">;
108
+ export type ProcessSharedBufferPrimitives = Pick<SharedMemoryConnectionPrimitives, "createSharedMemory" | "mapSharedMemory"> & {
109
+ unlinkSharedMemory?: (name: string) => boolean;
110
+ };
111
+ export type ProcessSharedBufferView = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | BigInt64Array | BigUint64Array | Float32Array | Float64Array;
112
+ export type ProcessSharedBufferViewConstructor<View extends ProcessSharedBufferView = ProcessSharedBufferView> = {
113
+ readonly BYTES_PER_ELEMENT: number;
114
+ new (buffer: SharedBuffer, byteOffset: number, length: number): View;
115
+ };
116
+ export declare const setDefaultProcessSharedBufferPrimitives: (primitives: ProcessSharedBufferPrimitives | undefined) => void;
117
+ export declare const getDefaultProcessSharedBufferPrimitives: () => ProcessSharedBufferPrimitives;
118
+ /**
119
+ * Zero-copy shared bytes for process workers.
120
+ *
121
+ * Use this when the boundary is a separate process, container, or sandbox.
122
+ * For thread workers, `SharedArrayBuffer` or `BufferReference` can be cheaper.
123
+ */
124
+ export declare class ProcessSharedBuffer {
125
+ readonly [PROCESS_SHARED_BUFFER_BRAND] = true;
126
+ readonly [EXTERNAL_PAYLOAD_BRAND] = "knitting.processSharedBuffer";
127
+ readonly descriptor: FileDescriptor;
128
+ readonly byteOffset: number;
129
+ readonly byteLength: number;
130
+ constructor(descriptor: FileDescriptor, range?: ProcessSharedBufferRange);
131
+ static create(options: number | CreateSharedMemoryOptions, creator?: ProcessSharedBufferCreator): ProcessSharedBuffer;
132
+ static fromMapping(mapping: SharedMemoryMapping): ProcessSharedBuffer;
133
+ static fromDescriptor(descriptor: FileDescriptor, range?: ProcessSharedBufferRange): ProcessSharedBuffer;
134
+ static fromMetadata(metadata: unknown): ProcessSharedBuffer;
135
+ static parse(serialized: string): ProcessSharedBuffer;
136
+ static [PROCESS_SHARED_BUFFER_NUMERIC_TRANSFER](metadata: ProcessSharedBufferNumericMetadata): ProcessSharedBuffer;
137
+ get fd(): number;
138
+ get size(): number;
139
+ subbuffer(byteOffset: number, byteLength?: number): ProcessSharedBuffer;
140
+ getSharedArrayBuffer(mapper?: ProcessSharedBufferMapper): SharedArrayBuffer;
141
+ getSAB(mapper?: ProcessSharedBufferMapper): SharedArrayBuffer;
142
+ getBuffer(mapper?: ProcessSharedBufferMapper): SharedBuffer;
143
+ getRegion(mapper?: ProcessSharedBufferMapper): SharedBufferRegion;
144
+ view<View extends ProcessSharedBufferView>(constructor: ProcessSharedBufferViewConstructor<View>, mapper?: ProcessSharedBufferMapper): View;
145
+ bytes(mapper?: ProcessSharedBufferMapper): Uint8Array;
146
+ dataView(mapper?: ProcessSharedBufferMapper): DataView;
147
+ toMetadata(): ProcessSharedBufferMetadata;
148
+ toJSON(): ProcessSharedBufferMetadata;
149
+ stringify(): string;
150
+ stringifyMetadata(): string;
151
+ toString(): string;
152
+ }
153
+ export declare const parseProcessSharedBufferMetadata: (input: unknown) => ProcessSharedBufferMetadata;
154
+
155
+ export {};