@smoothbricks/lmao 0.2.2 → 0.3.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.
Files changed (285) hide show
  1. package/README.md +206 -206
  2. package/dist/allocator.wasm +0 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -0
  6. package/dist/lib/JsBufferStrategy.d.ts +4 -3
  7. package/dist/lib/JsBufferStrategy.d.ts.map +1 -1
  8. package/dist/lib/JsBufferStrategy.js +18 -11
  9. package/dist/lib/arrow/lease.d.ts +10 -0
  10. package/dist/lib/arrow/lease.d.ts.map +1 -0
  11. package/dist/lib/arrow/lease.js +33 -0
  12. package/dist/lib/arrow/utils.d.ts +3 -4
  13. package/dist/lib/arrow/utils.d.ts.map +1 -1
  14. package/dist/lib/arrow/utils.js +12 -13
  15. package/dist/lib/arrow/vocabularyDictionary.d.ts +21 -0
  16. package/dist/lib/arrow/vocabularyDictionary.d.ts.map +1 -0
  17. package/dist/lib/arrow/vocabularyDictionary.js +95 -0
  18. package/dist/lib/bufferStrategy.d.ts +3 -2
  19. package/dist/lib/bufferStrategy.d.ts.map +1 -1
  20. package/dist/lib/cloudflare/traceRows.d.ts.map +1 -1
  21. package/dist/lib/cloudflare/traceRows.js +3 -2
  22. package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -1
  23. package/dist/lib/codegen/evaluatorGenerator.js +12 -11
  24. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +44 -82
  25. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -1
  26. package/dist/lib/codegen/fixedPositionWriterGenerator.js +223 -162
  27. package/dist/lib/codegen/spanLoggerClosureMaterializer.d.ts +63 -0
  28. package/dist/lib/codegen/spanLoggerClosureMaterializer.d.ts.map +1 -0
  29. package/dist/lib/codegen/spanLoggerClosureMaterializer.js +447 -0
  30. package/dist/lib/codegen/spanLoggerGenerator.d.ts +36 -19
  31. package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -1
  32. package/dist/lib/codegen/spanLoggerGenerator.js +164 -158
  33. package/dist/lib/convertToArrow.d.ts +7 -2
  34. package/dist/lib/convertToArrow.d.ts.map +1 -1
  35. package/dist/lib/convertToArrow.js +499 -285
  36. package/dist/lib/defineOpContext.js +1 -1
  37. package/dist/lib/enumMetadata.d.ts +19 -0
  38. package/dist/lib/enumMetadata.d.ts.map +1 -0
  39. package/dist/lib/enumMetadata.js +86 -0
  40. package/dist/lib/flushScheduler.d.ts.map +1 -1
  41. package/dist/lib/flushScheduler.js +13 -4
  42. package/dist/lib/library.d.ts +16 -98
  43. package/dist/lib/library.d.ts.map +1 -1
  44. package/dist/lib/library.js +32 -525
  45. package/dist/lib/logBinding.d.ts +21 -27
  46. package/dist/lib/logBinding.d.ts.map +1 -1
  47. package/dist/lib/op.d.ts +30 -30
  48. package/dist/lib/op.d.ts.map +1 -1
  49. package/dist/lib/op.js +15 -22
  50. package/dist/lib/opContext/createOpGroup.d.ts +1 -1
  51. package/dist/lib/opContext/createOpGroup.d.ts.map +1 -1
  52. package/dist/lib/opContext/createOpGroup.js +22 -29
  53. package/dist/lib/opContext/defineOp.d.ts +4 -4
  54. package/dist/lib/opContext/defineOp.d.ts.map +1 -1
  55. package/dist/lib/opContext/defineOp.js +53 -10
  56. package/dist/lib/opContext/opGroupTypes.d.ts +2 -2
  57. package/dist/lib/opContext/opTypes.d.ts +1 -1
  58. package/dist/lib/opContext/opTypes.d.ts.map +1 -1
  59. package/dist/lib/opContext/spanContextTypes.d.ts +33 -18
  60. package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -1
  61. package/dist/lib/opContext/types.d.ts +4 -4
  62. package/dist/lib/opContext/types.d.ts.map +1 -1
  63. package/dist/lib/physicalLayoutPlan.d.ts +89 -0
  64. package/dist/lib/physicalLayoutPlan.d.ts.map +1 -0
  65. package/dist/lib/physicalLayoutPlan.js +442 -0
  66. package/dist/lib/resolveMessage.d.ts +9 -0
  67. package/dist/lib/resolveMessage.d.ts.map +1 -0
  68. package/dist/lib/resolveMessage.js +63 -0
  69. package/dist/lib/result.d.ts +5 -7
  70. package/dist/lib/result.d.ts.map +1 -1
  71. package/dist/lib/result.js +19 -26
  72. package/dist/lib/runtimeHint.d.ts +35 -0
  73. package/dist/lib/runtimeHint.d.ts.map +1 -0
  74. package/dist/lib/runtimeHint.js +79 -0
  75. package/dist/lib/schema/typeGuards.d.ts +7 -47
  76. package/dist/lib/schema/typeGuards.d.ts.map +1 -1
  77. package/dist/lib/schema/typeGuards.js +7 -123
  78. package/dist/lib/schema/types.d.ts +1 -1
  79. package/dist/lib/schema/types.d.ts.map +1 -1
  80. package/dist/lib/span-buffer/aot/v1.d.ts +2 -0
  81. package/dist/lib/span-buffer/aot/v1.d.ts.map +1 -0
  82. package/dist/lib/span-buffer/aot/v1.js +24 -0
  83. package/dist/lib/spanBuffer.d.ts +33 -4
  84. package/dist/lib/spanBuffer.d.ts.map +1 -1
  85. package/dist/lib/spanBuffer.js +583 -91
  86. package/dist/lib/spanBufferStats.d.ts +1 -1
  87. package/dist/lib/spanBufferStats.d.ts.map +1 -1
  88. package/dist/lib/spanContext.d.ts +27 -51
  89. package/dist/lib/spanContext.d.ts.map +1 -1
  90. package/dist/lib/spanContext.js +822 -344
  91. package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -1
  92. package/dist/lib/sqlite/sqlite-common.js +20 -21
  93. package/dist/lib/testing/bun-harness.d.ts +8 -3
  94. package/dist/lib/testing/bun-harness.d.ts.map +1 -1
  95. package/dist/lib/testing/bun-harness.js +30 -18
  96. package/dist/lib/testing/extractFacts.d.ts +1 -1
  97. package/dist/lib/testing/extractFacts.d.ts.map +1 -1
  98. package/dist/lib/testing/extractFacts.js +55 -63
  99. package/dist/lib/testing/facts.d.ts +1 -1
  100. package/dist/lib/testing/facts.d.ts.map +1 -1
  101. package/dist/lib/testing/queryable-span.d.ts +1 -1
  102. package/dist/lib/testing/queryable-span.d.ts.map +1 -1
  103. package/dist/lib/testing/queryable-span.js +26 -28
  104. package/dist/lib/testing/span-query.d.ts.map +1 -1
  105. package/dist/lib/testing/span-query.js +19 -22
  106. package/dist/lib/testing/stdio-replay.d.ts.map +1 -1
  107. package/dist/lib/testing/stdio-replay.js +19 -8
  108. package/dist/lib/threadId.d.ts.map +1 -1
  109. package/dist/lib/threadId.js +6 -3
  110. package/dist/lib/traceContext.d.ts.map +1 -1
  111. package/dist/lib/traceContext.js +1 -4
  112. package/dist/lib/traceRoot.d.ts +30 -8
  113. package/dist/lib/traceRoot.d.ts.map +1 -1
  114. package/dist/lib/traceRoot.es.d.ts +17 -15
  115. package/dist/lib/traceRoot.es.d.ts.map +1 -1
  116. package/dist/lib/traceRoot.es.js +68 -34
  117. package/dist/lib/traceRoot.js +11 -0
  118. package/dist/lib/traceRoot.node.d.ts +17 -19
  119. package/dist/lib/traceRoot.node.d.ts.map +1 -1
  120. package/dist/lib/traceRoot.node.js +66 -38
  121. package/dist/lib/traceTopology.d.ts +42 -0
  122. package/dist/lib/traceTopology.d.ts.map +1 -0
  123. package/dist/lib/traceTopology.js +260 -0
  124. package/dist/lib/tracer.d.ts +9 -5
  125. package/dist/lib/tracer.d.ts.map +1 -1
  126. package/dist/lib/tracer.js +65 -71
  127. package/dist/lib/tracers/ArrayQueueTracer.d.ts +1 -1
  128. package/dist/lib/tracers/ArrayQueueTracer.js +1 -1
  129. package/dist/lib/tracers/StdioTracer.d.ts.map +1 -1
  130. package/dist/lib/tracers/StdioTracer.js +15 -13
  131. package/dist/lib/tracers/TestTracer.d.ts +4 -6
  132. package/dist/lib/tracers/TestTracer.d.ts.map +1 -1
  133. package/dist/lib/tracers/TestTracer.js +6 -8
  134. package/dist/lib/types.d.ts +49 -32
  135. package/dist/lib/types.d.ts.map +1 -1
  136. package/dist/lib/vocabularyRegistry.d.ts +25 -0
  137. package/dist/lib/vocabularyRegistry.d.ts.map +1 -0
  138. package/dist/lib/vocabularyRegistry.js +372 -0
  139. package/dist/lib/wasm/WasmBufferStrategy.d.ts +6 -10
  140. package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -1
  141. package/dist/lib/wasm/WasmBufferStrategy.js +44 -37
  142. package/dist/lib/wasm/wasmAllocator.d.ts +27 -22
  143. package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -1
  144. package/dist/lib/wasm/wasmAllocator.js +66 -44
  145. package/dist/lib/wasm/wasmPhysicalLayout.d.ts +67 -0
  146. package/dist/lib/wasm/wasmPhysicalLayout.d.ts.map +1 -0
  147. package/dist/lib/wasm/wasmPhysicalLayout.js +179 -0
  148. package/dist/lib/wasm/wasmSpanBuffer.d.ts +79 -31
  149. package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -1
  150. package/dist/lib/wasm/wasmSpanBuffer.js +442 -272
  151. package/dist/lib/wasm/wasmTraceRoot.d.ts +24 -22
  152. package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -1
  153. package/dist/lib/wasm/wasmTraceRoot.js +110 -71
  154. package/dist/vocabulary/register/v1.d.ts +2 -0
  155. package/dist/vocabulary/register/v1.d.ts.map +1 -0
  156. package/dist/vocabulary/register/v1.js +1 -0
  157. package/dist/wasm.d.ts +5 -0
  158. package/dist/wasm.d.ts.map +1 -0
  159. package/dist/wasm.js +4 -0
  160. package/package.json +54 -6
  161. package/src/index.ts +1 -0
  162. package/src/lib/JsBufferStrategy.ts +27 -9
  163. package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +335 -37
  164. package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +97 -26
  165. package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +75 -15
  166. package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +30 -6
  167. package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +18 -21
  168. package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +5 -2
  169. package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +25 -7
  170. package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +3 -2
  171. package/src/lib/__tests__/buffer-overflow.test.ts +24 -18
  172. package/src/lib/__tests__/capability-span-context.test.ts +505 -0
  173. package/src/lib/__tests__/capacity-tuning.test.ts +5 -3
  174. package/src/lib/__tests__/eager-columns.test.ts +345 -0
  175. package/src/lib/__tests__/enum-metadata-aot.test.ts +153 -0
  176. package/src/lib/__tests__/enum-metadata.test.ts +177 -0
  177. package/src/lib/__tests__/fixtures/empty-vocabulary-runtime.fixture.ts +15 -0
  178. package/src/lib/__tests__/flushScheduler.test.ts +5 -1
  179. package/src/lib/__tests__/identity-view.property.test.ts +179 -0
  180. package/src/lib/__tests__/library.test.ts +19 -235
  181. package/src/lib/__tests__/message-buffer-families.test.ts +878 -0
  182. package/src/lib/__tests__/nested-library-tasks.test.ts +14 -15
  183. package/src/lib/__tests__/op-metadata.test.ts +1 -1
  184. package/src/lib/__tests__/op-type-safety.test.ts +5 -16
  185. package/src/lib/__tests__/physical-layout-plan.test.ts +333 -0
  186. package/src/lib/__tests__/remap-descriptor-integration.test.ts +381 -0
  187. package/src/lib/__tests__/root-context-construction.test.ts +414 -0
  188. package/src/lib/__tests__/span-auto-runtime.test.ts +386 -0
  189. package/src/lib/__tests__/span-buffer-segment-stats.test.ts +221 -0
  190. package/src/lib/__tests__/span-lifecycle.test.ts +53 -25
  191. package/src/lib/__tests__/spanbuffer-materializer-parity.test.ts +266 -0
  192. package/src/lib/__tests__/sync-async-trace.test.ts +24 -23
  193. package/src/lib/__tests__/tag-writer-aot.test.ts +214 -0
  194. package/src/lib/__tests__/test-helpers.ts +67 -12
  195. package/src/lib/__tests__/threadId.test.ts +62 -0
  196. package/src/lib/__tests__/timestamp.test.ts +221 -93
  197. package/src/lib/__tests__/traceTopology.property.test.ts +383 -0
  198. package/src/lib/__tests__/type-narrowing.test.ts +63 -0
  199. package/src/lib/__tests__/vocabulary-dense-decoding.test.ts +405 -0
  200. package/src/lib/__tests__/vocabularyRegistry.test.ts +313 -0
  201. package/src/lib/arrow/lease.ts +43 -0
  202. package/src/lib/arrow/utils.ts +10 -14
  203. package/src/lib/arrow/vocabularyDictionary.ts +123 -0
  204. package/src/lib/bufferStrategy.ts +9 -1
  205. package/src/lib/cloudflare/traceRows.ts +3 -2
  206. package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +21 -141
  207. package/src/lib/codegen/__tests__/fixedPositionWriter-parity.test.ts +273 -0
  208. package/src/lib/codegen/__tests__/fixedPositionWriter-uint64.test.ts +61 -34
  209. package/src/lib/codegen/__tests__/nullBitmap.test.ts +33 -37
  210. package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +34 -18
  211. package/src/lib/codegen/__tests__/spanLoggerMaterializerParity.test.ts +503 -0
  212. package/src/lib/codegen/evaluatorGenerator.ts +18 -13
  213. package/src/lib/codegen/fixedPositionWriterGenerator.ts +329 -245
  214. package/src/lib/codegen/spanLoggerClosureMaterializer.ts +598 -0
  215. package/src/lib/codegen/spanLoggerGenerator.ts +241 -177
  216. package/src/lib/convertToArrow.ts +598 -311
  217. package/src/lib/defineOpContext.ts +1 -1
  218. package/src/lib/enumMetadata.ts +121 -0
  219. package/src/lib/flushScheduler.ts +11 -5
  220. package/src/lib/library.ts +37 -595
  221. package/src/lib/logBinding.ts +21 -27
  222. package/src/lib/op.ts +75 -18
  223. package/src/lib/opContext/__tests__/retry.test.ts +27 -21
  224. package/src/lib/opContext/createOpGroup.ts +33 -31
  225. package/src/lib/opContext/defineOp.ts +88 -11
  226. package/src/lib/opContext/opGroupTypes.ts +2 -2
  227. package/src/lib/opContext/opTypes.ts +1 -1
  228. package/src/lib/opContext/spanContextTypes.ts +122 -24
  229. package/src/lib/opContext/types.ts +7 -3
  230. package/src/lib/physicalLayoutPlan.ts +598 -0
  231. package/src/lib/resolveMessage.ts +67 -0
  232. package/src/lib/result.ts +20 -33
  233. package/src/lib/runtimeHint.ts +98 -0
  234. package/src/lib/schema/__tests__/featureFlags.test.ts +2 -1
  235. package/src/lib/schema/builder.ts +1 -1
  236. package/src/lib/schema/typeGuards.ts +7 -151
  237. package/src/lib/schema/types.ts +1 -1
  238. package/src/lib/span-buffer/aot/v1.ts +26 -0
  239. package/src/lib/spanBuffer.ts +658 -92
  240. package/src/lib/spanBufferStats.ts +1 -1
  241. package/src/lib/spanContext.ts +1350 -861
  242. package/src/lib/sqlite/sqlite-common.ts +20 -31
  243. package/src/lib/testing/__tests__/topology-traversal.test.ts +174 -0
  244. package/src/lib/testing/__tests__/vitest-harness.test.ts +2 -1
  245. package/src/lib/testing/bun-harness.ts +94 -43
  246. package/src/lib/testing/extractFacts.ts +64 -78
  247. package/src/lib/testing/facts.ts +1 -1
  248. package/src/lib/testing/queryable-span.ts +23 -30
  249. package/src/lib/testing/span-query.ts +16 -20
  250. package/src/lib/testing/stdio-replay.ts +25 -8
  251. package/src/lib/testing/vitest-harness.ts +1 -1
  252. package/src/lib/threadId.ts +6 -3
  253. package/src/lib/traceContext.ts +1 -6
  254. package/src/lib/traceRoot.es.ts +77 -42
  255. package/src/lib/traceRoot.node.ts +75 -46
  256. package/src/lib/traceRoot.ts +41 -14
  257. package/src/lib/traceTopology.ts +279 -0
  258. package/src/lib/tracer.ts +109 -98
  259. package/src/lib/tracers/ArrayQueueTracer.ts +1 -1
  260. package/src/lib/tracers/StdioTracer.ts +15 -13
  261. package/src/lib/tracers/TestTracer.ts +6 -8
  262. package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +15 -10
  263. package/src/lib/tracers/__tests__/CompositeTracer.test.ts +150 -0
  264. package/src/lib/tracers/__tests__/TestTracer.test.ts +23 -13
  265. package/src/lib/types.ts +64 -33
  266. package/src/lib/vocabularyRegistry.ts +439 -0
  267. package/src/lib/wasm/WasmBufferStrategy.ts +56 -48
  268. package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +215 -11
  269. package/src/lib/wasm/__tests__/allocatorFreeBlockClamp.test.ts +86 -0
  270. package/src/lib/wasm/__tests__/wasm-identity-view.test.ts +311 -0
  271. package/src/lib/wasm/__tests__/wasm-integration.test.ts +417 -44
  272. package/src/lib/wasm/__tests__/wasm-message-buffer-families.test.ts +588 -0
  273. package/src/lib/wasm/__tests__/wasmAllocator.test.ts +100 -668
  274. package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +419 -63
  275. package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +24 -29
  276. package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +2 -2
  277. package/src/lib/wasm/wasmAllocator.ts +131 -96
  278. package/src/lib/wasm/wasmPhysicalLayout.ts +309 -0
  279. package/src/lib/wasm/wasmSpanBuffer.ts +597 -341
  280. package/src/lib/wasm/wasmTraceRoot.ts +140 -78
  281. package/src/vocabulary/register/v1.ts +1 -0
  282. package/src/wasm.ts +19 -0
  283. package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +0 -319
  284. package/src/lib/__tests__/remapped-buffer-view.test.ts +0 -635
  285. package/src/lib/wasm/allocator.zig +0 -948
@@ -13,16 +13,24 @@
13
13
  *
14
14
  * Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (TS allocator wrapper).
15
15
  */
16
+ export interface WasmMemoryEpochPin {
17
+ readonly buffer: ArrayBuffer;
18
+ readonly version: number;
19
+ readonly released: boolean;
20
+ release(): void;
21
+ }
22
+ export declare const WASM_SPAN_IDENTITY_ROOT = 0;
23
+ export declare const WASM_SPAN_IDENTITY_CHILD = 1;
24
+ export declare const WASM_NO_LAYOUT_OFFSET = 4294967295;
16
25
  export interface WasmAllocator {
17
26
  /** The underlying WASM memory */
18
27
  readonly memory: WebAssembly.Memory;
19
- /** WASM exports for direct function calls (hot path optimization) */
20
- readonly exports: {
21
- write_col_f64: (colOffset: number, rowIdx: number, value: number, capacity: number) => number;
22
- write_col_u32: (colOffset: number, rowIdx: number, value: number, capacity: number) => number;
23
- write_col_u8: (colOffset: number, rowIdx: number, value: number, capacity: number) => number;
24
- write_log_entry: (systemPtr: number, identityPtr: number, traceRootPtr: number, entryType: number, capacity: number) => number;
25
- };
28
+ /** Monotonic version of the current linear-memory ArrayBuffer. */
29
+ readonly memoryVersion: number;
30
+ /** Refresh canonical allocator views after growth and return memoryVersion. */
31
+ refreshViews(): number;
32
+ /** Pin the current linear-memory backing epoch for borrowed Arrow views. */
33
+ pinMemoryEpoch(): WasmMemoryEpochPin;
26
34
  /** Cached views (recreated after grow, but pre-sized to avoid grow for benchmarks) */
27
35
  readonly u8: Uint8Array;
28
36
  readonly u32: Uint32Array;
@@ -34,30 +42,27 @@ export interface WasmAllocator {
34
42
  init(): void;
35
43
  /** Reset all freelists (for testing/benchmarking) */
36
44
  reset(): void;
37
- allocSpanSystem(capacity?: number): number;
38
- alloc1B(capacity?: number): number;
39
- alloc4B(capacity?: number): number;
40
- alloc8B(capacity?: number): number;
41
- freeSpanSystem(offset: number, capacity?: number): void;
42
- free1B(offset: number, capacity?: number): void;
43
- free4B(offset: number, capacity?: number): void;
44
- free8B(offset: number, capacity?: number): void;
45
+ /** Allocate and release an exact logical byte extent with explicit alignment. */
46
+ allocExact(byteLength: number, alignment: number): number;
47
+ freeExact(offset: number, byteLength: number, alignment: number): void;
48
+ /**
49
+ * Allocate one root/child superblock and pre-arm its lifecycle rows in one
50
+ * WASM call. All offsets are immutable compile/startup layout constants.
51
+ */
52
+ createAndStartSpan(identityMode: typeof WASM_SPAN_IDENTITY_ROOT | typeof WASM_SPAN_IDENTITY_CHILD, traceIdLength: number, superblockByteLength: number, systemOffset: number, entryTypeOffset: number, rowHeaderOffset: number, traceRootPtr: number): number;
53
+ /** Allocate one storage-only overflow superblock in one WASM call. */
54
+ createOverflowSpan(superblockByteLength: number): number;
55
+ /** Release one root, child, or overflow superblock. */
56
+ freeSpanSuperblock(offset: number, byteLength: number): void;
45
57
  spanStart(systemPtr: number, identityPtr: number, traceRootPtr: number, capacity?: number): void;
46
58
  spanEndOk(systemPtr: number, traceRootPtr: number, capacity?: number): void;
47
59
  spanEndErr(systemPtr: number, traceRootPtr: number, capacity?: number): void;
48
60
  /** Write log entry, bump writeIndex, return idx written to */
49
61
  writeLogEntry(systemPtr: number, identityPtr: number, traceRootPtr: number, entryType: number, capacity?: number): number;
50
- writeColF64(colOffset: number, rowIdx: number, value: number, capacity?: number): number;
51
- writeColU32(colOffset: number, rowIdx: number, value: number, capacity?: number): number;
52
- writeColU8(colOffset: number, rowIdx: number, value: number, capacity?: number): number;
53
62
  initTraceRoot(traceRootPtr: number): void;
54
63
  getBumpPtr(): number;
55
64
  getAllocCount(): number;
56
65
  getFreeCount(): number;
57
- getSpanSystemSize(capacity?: number): number;
58
- getCol1BSize(capacity?: number): number;
59
- getCol4BSize(capacity?: number): number;
60
- getCol8BSize(capacity?: number): number;
61
66
  readTimestamp(systemPtr: number, rowIdx: number): bigint;
62
67
  readEntryType(systemPtr: number, rowIdx: number, capacity?: number): number;
63
68
  readWriteIndex(identityPtr: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"wasmAllocator.d.ts","sourceRoot":"","sources":["../../../src/lib/wasm/wasmAllocator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAEpC,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE;QAChB,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;QAC9F,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;QAC9F,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;QAC7F,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC;KACb,CAAC;IAEF,sFAAsF;IACtF,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAE3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,8CAA8C;IAC9C,IAAI,IAAI,IAAI,CAAC;IAEb,qDAAqD;IACrD,KAAK,IAAI,IAAI,CAAC;IAGd,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGnC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5E,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7E,8DAA8D;IAC9D,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC;IAGV,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGxF,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1C,UAAU,IAAI,MAAM,CAAC;IACrB,aAAa,IAAI,MAAM,CAAC;IACxB,YAAY,IAAI,MAAM,CAAC;IACvB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGxC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACzD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5E,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAG1D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,eAAe,IAAI,MAAM,CAAC;IAC1B,cAAc,IAAI,MAAM,CAAC;IACzB,aAAa,IAAI,MAAM,CAAC;IACxB,gBAAgB,IAAI,MAAM,CAAC;IAG3B,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,kBAAkB,IAAI,MAAM,CAAC;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACpD,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAGnD,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChE,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvE,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvE,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxE;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,IAAI;IACd,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,QAAQ,IAAI;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA0RD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmBhG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAgBrH"}
1
+ {"version":3,"file":"wasmAllocator.d.ts","sourceRoot":"","sources":["../../../src/lib/wasm/wasmAllocator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IACpC,kEAAkE;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,+EAA+E;IAC/E,YAAY,IAAI,MAAM,CAAC;IACvB,4EAA4E;IAC5E,cAAc,IAAI,kBAAkB,CAAC;IAErC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAE3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,8CAA8C;IAC9C,IAAI,IAAI,IAAI,CAAC;IAEb,qDAAqD;IACrD,KAAK,IAAI,IAAI,CAAC;IAEd,iFAAiF;IACjF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE;;;OAGG;IACH,kBAAkB,CAChB,YAAY,EAAE,OAAO,uBAAuB,GAAG,OAAO,wBAAwB,EAC9E,aAAa,EAAE,MAAM,EACrB,oBAAoB,EAAE,MAAM,EAC5B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC;IACV,sEAAsE;IACtE,kBAAkB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IACzD,uDAAuD;IACvD,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAG7D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5E,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7E,8DAA8D;IAC9D,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC;IAGV,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1C,UAAU,IAAI,MAAM,CAAC;IACrB,aAAa,IAAI,MAAM,CAAC;IACxB,YAAY,IAAI,MAAM,CAAC;IAGvB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACzD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5E,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAG1D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,eAAe,IAAI,MAAM,CAAC;IAC1B,cAAc,IAAI,MAAM,CAAC;IACzB,aAAa,IAAI,MAAM,CAAC;IACxB,gBAAgB,IAAI,MAAM,CAAC;IAG3B,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,kBAAkB,IAAI,MAAM,CAAC;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACpD,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAGnD,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChE,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvE,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvE,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxE;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,IAAI;IACd,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,QAAQ,IAAI;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA0TD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmBhG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAgBrH"}
@@ -13,6 +13,9 @@
13
13
  *
14
14
  * Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (TS allocator wrapper).
15
15
  */
16
+ export const WASM_SPAN_IDENTITY_ROOT = 0;
17
+ export const WASM_SPAN_IDENTITY_CHILD = 1;
18
+ export const WASM_NO_LAYOUT_OFFSET = 0xffffffff;
16
19
  /**
17
20
  * Size class enum matching Zig's SizeClass
18
21
  */
@@ -28,7 +31,11 @@ function isWasmExports(value) {
28
31
  if (typeof value !== 'object' || value === null) {
29
32
  return false;
30
33
  }
31
- return (typeof Reflect.get(value, 'init') === 'function' && typeof Reflect.get(value, 'alloc_span_system') === 'function');
34
+ return (typeof Reflect.get(value, 'init') === 'function' &&
35
+ typeof Reflect.get(value, 'alloc_exact') === 'function' &&
36
+ typeof Reflect.get(value, 'create_and_start_span') === 'function' &&
37
+ typeof Reflect.get(value, 'create_overflow_span') === 'function' &&
38
+ typeof Reflect.get(value, 'free_span_superblock') === 'function');
32
39
  }
33
40
  // =============================================================================
34
41
  // Implementation
@@ -58,75 +65,87 @@ function wrapWasmInstance(instance, memory, capacity) {
58
65
  const exports = instance.exports;
59
66
  let views = createViews(memory);
60
67
  let currentBuffer = memory.buffer;
68
+ let memoryVersion = 1;
69
+ let memoryEpochPins = 0;
70
+ const refreshViews = () => {
71
+ if (memory.buffer !== currentBuffer) {
72
+ if (memoryEpochPins !== 0) {
73
+ throw new Error('WASM memory grew while an Arrow lease pinned the previous epoch');
74
+ }
75
+ currentBuffer = memory.buffer;
76
+ views = createViews(memory);
77
+ memoryVersion++;
78
+ }
79
+ return memoryVersion;
80
+ };
61
81
  // Initialize the allocator header
62
82
  exports.init();
63
83
  return {
64
84
  memory,
65
85
  capacity,
66
- exports: {
67
- write_col_f64: exports.write_col_f64,
68
- write_col_u32: exports.write_col_u32,
69
- write_col_u8: exports.write_col_u8,
70
- write_log_entry: exports.write_log_entry,
86
+ get memoryVersion() {
87
+ return refreshViews();
88
+ },
89
+ refreshViews,
90
+ pinMemoryEpoch() {
91
+ const version = refreshViews();
92
+ const buffer = currentBuffer;
93
+ memoryEpochPins++;
94
+ let released = false;
95
+ return {
96
+ buffer,
97
+ version,
98
+ get released() {
99
+ return released;
100
+ },
101
+ release() {
102
+ if (released)
103
+ return;
104
+ released = true;
105
+ memoryEpochPins--;
106
+ },
107
+ };
71
108
  },
72
109
  get u8() {
73
- // Check if memory grew since last access
74
- if (memory.buffer !== currentBuffer) {
75
- currentBuffer = memory.buffer;
76
- views = createViews(memory);
77
- }
110
+ refreshViews();
78
111
  return views.u8;
79
112
  },
80
113
  get u32() {
81
- if (memory.buffer !== currentBuffer) {
82
- currentBuffer = memory.buffer;
83
- views = createViews(memory);
84
- }
114
+ refreshViews();
85
115
  return views.u32;
86
116
  },
87
117
  get i64() {
88
- if (memory.buffer !== currentBuffer) {
89
- currentBuffer = memory.buffer;
90
- views = createViews(memory);
91
- }
118
+ refreshViews();
92
119
  return views.i64;
93
120
  },
94
121
  get f64() {
95
- if (memory.buffer !== currentBuffer) {
96
- currentBuffer = memory.buffer;
97
- views = createViews(memory);
98
- }
122
+ refreshViews();
99
123
  return views.f64;
100
124
  },
101
125
  init: exports.init,
102
126
  reset: exports.reset,
103
- // Allocation with optional capacity (defaults to instance capacity)
104
- allocSpanSystem: (cap = capacity) => exports.alloc_span_system(cap),
105
- alloc1B: (cap = capacity) => exports.alloc_col_1b(cap),
106
- alloc4B: (cap = capacity) => exports.alloc_col_4b(cap),
107
- alloc8B: (cap = capacity) => exports.alloc_col_8b(cap),
108
- // Deallocation with optional capacity
109
- freeSpanSystem: (offset, cap = capacity) => exports.free_span_system(offset, cap),
110
- free1B: (offset, cap = capacity) => exports.free_col_1b(offset, cap),
111
- free4B: (offset, cap = capacity) => exports.free_col_4b(offset, cap),
112
- free8B: (offset, cap = capacity) => exports.free_col_8b(offset, cap),
127
+ allocExact: exports.alloc_exact,
128
+ freeExact: exports.free_exact,
129
+ createAndStartSpan: (identityMode, traceIdLength, superblockByteLength, systemOffset, entryTypeOffset, rowHeaderOffset, traceRootPtr) => {
130
+ const offset = exports.create_and_start_span(identityMode, traceIdLength, superblockByteLength, systemOffset, entryTypeOffset, rowHeaderOffset, traceRootPtr);
131
+ refreshViews();
132
+ return offset;
133
+ },
134
+ createOverflowSpan: (superblockByteLength) => {
135
+ const offset = exports.create_overflow_span(superblockByteLength);
136
+ refreshViews();
137
+ return offset;
138
+ },
139
+ freeSpanSuperblock: exports.free_span_superblock,
113
140
  // Span lifecycle with optional capacity
114
141
  spanStart: (systemPtr, identityPtr, traceRootPtr, cap = capacity) => exports.span_start(systemPtr, identityPtr, traceRootPtr, cap),
115
142
  spanEndOk: (systemPtr, traceRootPtr, cap = capacity) => exports.span_end_ok(systemPtr, traceRootPtr, cap),
116
143
  spanEndErr: (systemPtr, traceRootPtr, cap = capacity) => exports.span_end_err(systemPtr, traceRootPtr, cap),
117
- writeLogEntry: (systemPtr, traceRootPtr, idx, entryType, cap = capacity) => exports.write_log_entry(systemPtr, traceRootPtr, idx, entryType, cap),
118
- // Column writes with optional capacity
119
- writeColF64: (colOffset, rowIdx, value, cap = capacity) => exports.write_col_f64(colOffset, rowIdx, value, cap),
120
- writeColU32: (colOffset, rowIdx, value, cap = capacity) => exports.write_col_u32(colOffset, rowIdx, value, cap),
121
- writeColU8: (colOffset, rowIdx, value, cap = capacity) => exports.write_col_u8(colOffset, rowIdx, value, cap),
144
+ writeLogEntry: (systemPtr, identityPtr, traceRootPtr, entryType, cap = capacity) => exports.write_log_entry(systemPtr, identityPtr, traceRootPtr, entryType, cap),
122
145
  initTraceRoot: exports.init_trace_root,
123
146
  getBumpPtr: exports.get_bump_ptr,
124
147
  getAllocCount: exports.get_alloc_count,
125
148
  getFreeCount: exports.get_free_count,
126
- getSpanSystemSize: (cap = capacity) => exports.get_span_system_size(cap),
127
- getCol1BSize: (cap = capacity) => exports.get_col_1b_size(cap),
128
- getCol4BSize: (cap = capacity) => exports.get_col_4b_size(cap),
129
- getCol8BSize: (cap = capacity) => exports.get_col_8b_size(cap),
130
149
  readTimestamp: exports.read_timestamp,
131
150
  readEntryType: (systemPtr, rowIdx, cap = capacity) => exports.read_entry_type(systemPtr, rowIdx, cap),
132
151
  readWriteIndex: exports.read_write_index,
@@ -167,6 +186,9 @@ function createImports(memory) {
167
186
  // Cache for compiled WASM module (shared across all allocators)
168
187
  // This eliminates recompilation cost in benchmarks and production
169
188
  let cachedWasmModule = null;
189
+ // The shipped Rust allocator is the only supported artifact. Node and browser loading
190
+ // deliberately share this fixed path so runtime selection cannot drift by environment.
191
+ const WASM_ARTIFACT_NAME = 'allocator.wasm';
170
192
  /**
171
193
  * Load WASM bytes - handles both Node.js and browser environments.
172
194
  */
@@ -179,7 +201,7 @@ async function loadWasmBytes() {
179
201
  // __dirname equivalent for ESM
180
202
  const currentFile = fileURLToPath(import.meta.url);
181
203
  const currentDir = dirname(currentFile);
182
- const wasmPath = join(currentDir, '../../../dist/allocator.wasm');
204
+ const wasmPath = join(currentDir, '../../../dist', WASM_ARTIFACT_NAME);
183
205
  const buffer = await readFile(wasmPath);
184
206
  // Create a proper ArrayBuffer from the Node.js Buffer
185
207
  const arrayBuffer = new ArrayBuffer(buffer.byteLength);
@@ -187,7 +209,7 @@ async function loadWasmBytes() {
187
209
  return arrayBuffer;
188
210
  }
189
211
  // Browser: fetch from relative path
190
- const response = await fetch(new URL('../../../dist/allocator.wasm', import.meta.url));
212
+ const response = await fetch(new URL(`../../../dist/${WASM_ARTIFACT_NAME}`, import.meta.url));
191
213
  return response.arrayBuffer();
192
214
  }
193
215
  /**
@@ -0,0 +1,67 @@
1
+ import type { EagerColumnDescriptor } from '../physicalLayoutPlan.js';
2
+ import type { MessageLayoutFamily, MessagePhysicalLayout } from '../runtimeHint.js';
3
+ import type { LogSchema } from '../schema/LogSchema.js';
4
+ export type WasmNumericFamily = 'u8' | 'u32' | 'f64';
5
+ export type WasmArrayType = 'Uint8Array' | 'Uint32Array' | 'Float64Array' | 'BigUint64Array';
6
+ export interface WasmColumnLayoutTemplate {
7
+ readonly name: string;
8
+ readonly columnIndex: number;
9
+ readonly family: WasmNumericFamily;
10
+ readonly arrayType: WasmArrayType;
11
+ readonly byteWidth: 1 | 4 | 8;
12
+ readonly alignment: 1 | 4 | 8;
13
+ readonly eager: boolean;
14
+ }
15
+ export interface WasmColumnLayoutDescriptor extends WasmColumnLayoutTemplate {
16
+ readonly nullOffset: number;
17
+ readonly nullByteLength: number;
18
+ readonly valueOffset: number;
19
+ readonly valueLength: number;
20
+ }
21
+ export interface WasmNumericSlabLayoutDescriptor {
22
+ readonly family: WasmNumericFamily;
23
+ readonly byteLength: number;
24
+ readonly alignment: 1 | 4 | 8;
25
+ }
26
+ export interface WasmSystemSlabLayoutDescriptor {
27
+ readonly family: 'system';
28
+ readonly byteLength: number;
29
+ readonly alignment: 8;
30
+ readonly timestampOffset: 0;
31
+ readonly entryTypeOffset: number | null;
32
+ readonly messageIdOffset: number | null;
33
+ readonly messageDenseIndexOffset: number | null;
34
+ readonly rowHeaderOffset: number | null;
35
+ /** Logical row offset into the JS raw-message sidecar; contributes no WASM bytes. */
36
+ readonly messageValueOffset: 0 | null;
37
+ }
38
+ export type WasmSlabLayoutDescriptor = WasmSystemSlabLayoutDescriptor | WasmNumericSlabLayoutDescriptor;
39
+ export interface WasmSuperblockLayoutDescriptor {
40
+ readonly byteLength: number;
41
+ /** Bytes consumed by the previous separate-allocation shape from an 8-byte-aligned start. */
42
+ readonly legacyByteLength: number;
43
+ readonly identityOffset: 0 | null;
44
+ readonly systemOffset: number;
45
+ readonly familyOffsets: Readonly<Record<WasmNumericFamily, number>>;
46
+ }
47
+ export interface WasmPhysicalLayoutDescriptor {
48
+ readonly capacity: number;
49
+ readonly messageLayoutFamily: MessageLayoutFamily;
50
+ readonly messagePhysicalLayout: MessagePhysicalLayout;
51
+ readonly eagerColumns: EagerColumnDescriptor;
52
+ readonly system: WasmSystemSlabLayoutDescriptor;
53
+ readonly slabs: Readonly<Record<WasmNumericFamily, WasmNumericSlabLayoutDescriptor | null>>;
54
+ readonly columns: readonly WasmColumnLayoutDescriptor[];
55
+ readonly spanSuperblock: WasmSuperblockLayoutDescriptor;
56
+ readonly overflowSuperblock: WasmSuperblockLayoutDescriptor;
57
+ }
58
+ export interface WasmLayoutTemplate {
59
+ readonly messageLayoutFamily: MessageLayoutFamily;
60
+ readonly messagePhysicalLayout: MessagePhysicalLayout;
61
+ readonly eagerColumns: EagerColumnDescriptor;
62
+ readonly columns: readonly WasmColumnLayoutTemplate[];
63
+ forCapacity(capacity: number): WasmPhysicalLayoutDescriptor;
64
+ }
65
+ export declare function createWasmLayoutTemplate(schema: LogSchema, messageLayoutFamily?: MessageLayoutFamily, messagePhysicalLayout?: MessagePhysicalLayout, eagerColumns?: EagerColumnDescriptor): WasmLayoutTemplate;
66
+ export declare function getWasmPhysicalLayout(schema: LogSchema, capacity: number, messageLayoutFamily?: MessageLayoutFamily, messagePhysicalLayout?: MessagePhysicalLayout, eagerColumns?: EagerColumnDescriptor): WasmPhysicalLayoutDescriptor;
67
+ //# sourceMappingURL=wasmPhysicalLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmPhysicalLayout.d.ts","sourceRoot":"","sources":["../../../src/lib/wasm/wasmPhysicalLayout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ import { getSchemaType } from '@smoothbricks/arrow-builder';
2
+ const WASM_IDENTITY_BYTE_LENGTH = 128;
3
+ const EXACT_FREELIST_METADATA_BYTE_LENGTH = 16;
4
+ const EMPTY_EAGER_COLUMNS = Object.freeze({
5
+ names: Object.freeze([]),
6
+ words: Object.freeze([]),
7
+ key: '',
8
+ });
9
+ function align(value, alignment) {
10
+ return (value + alignment - 1) & ~(alignment - 1);
11
+ }
12
+ function freezeSuperblockLayout(system, slabs, includesIdentity) {
13
+ let byteLength = includesIdentity ? WASM_IDENTITY_BYTE_LENGTH : 0;
14
+ let legacyByteLength = byteLength;
15
+ const systemAlignment = Math.max(system.alignment, 4);
16
+ const systemOffset = align(byteLength, systemAlignment);
17
+ byteLength = systemOffset + system.byteLength;
18
+ legacyByteLength =
19
+ align(legacyByteLength, systemAlignment) + Math.max(system.byteLength, EXACT_FREELIST_METADATA_BYTE_LENGTH);
20
+ const familyOffsets = { u8: 0, u32: 0, f64: 0 };
21
+ for (const family of ['u8', 'u32', 'f64']) {
22
+ const slab = slabs[family];
23
+ if (slab === null)
24
+ continue;
25
+ const storageAlignment = Math.max(slab.alignment, 4);
26
+ const offset = align(byteLength, storageAlignment);
27
+ familyOffsets[family] = offset;
28
+ byteLength = offset + slab.byteLength;
29
+ legacyByteLength =
30
+ align(legacyByteLength, storageAlignment) + Math.max(slab.byteLength, EXACT_FREELIST_METADATA_BYTE_LENGTH);
31
+ }
32
+ if (byteLength > legacyByteLength) {
33
+ throw new Error('WASM superblock exceeded its separate-allocation footprint');
34
+ }
35
+ return Object.freeze({
36
+ byteLength,
37
+ legacyByteLength,
38
+ identityOffset: includesIdentity ? 0 : null,
39
+ systemOffset,
40
+ familyOffsets: Object.freeze(familyOffsets),
41
+ });
42
+ }
43
+ function freezeExactLayout(capacity, messageLayoutFamily, messagePhysicalLayout, templates, eagerColumns) {
44
+ if (!Number.isSafeInteger(capacity) || capacity <= 0) {
45
+ throw new RangeError(`WASM layout capacity must be a positive safe integer, received ${capacity}`);
46
+ }
47
+ const nullByteLength = Math.ceil(capacity / 8);
48
+ const familyOffsets = { u8: 0, u32: 0, f64: 0 };
49
+ const columns = [];
50
+ for (const template of templates) {
51
+ const nullOffset = familyOffsets[template.family];
52
+ const valueOffset = align(nullOffset + nullByteLength, template.alignment);
53
+ const valueLength = capacity * template.byteWidth;
54
+ familyOffsets[template.family] = valueOffset + valueLength;
55
+ columns.push(Object.freeze({
56
+ ...template,
57
+ nullOffset,
58
+ nullByteLength,
59
+ valueOffset,
60
+ valueLength,
61
+ }));
62
+ }
63
+ const slab = (family, alignment) => {
64
+ const byteLength = familyOffsets[family];
65
+ return byteLength === 0 ? null : Object.freeze({ family, byteLength, alignment });
66
+ };
67
+ const hasStaticMessages = messageLayoutFamily !== 'dynamic-only';
68
+ const messageValueOffset = messageLayoutFamily === 'static-only' ? null : 0;
69
+ let systemByteLength = capacity * 8;
70
+ let entryTypeOffset = null;
71
+ let messageIdOffset = null;
72
+ let messageDenseIndexOffset = null;
73
+ let rowHeaderOffset = null;
74
+ if (messagePhysicalLayout === 'packed') {
75
+ rowHeaderOffset = align(systemByteLength, 4);
76
+ systemByteLength = rowHeaderOffset + capacity * 4;
77
+ }
78
+ else {
79
+ entryTypeOffset = systemByteLength;
80
+ systemByteLength = entryTypeOffset + capacity;
81
+ if (hasStaticMessages) {
82
+ if (messagePhysicalLayout === 'current') {
83
+ messageIdOffset = align(systemByteLength, 2);
84
+ systemByteLength = messageIdOffset + capacity * 2;
85
+ }
86
+ else {
87
+ messageDenseIndexOffset = align(systemByteLength, 4);
88
+ systemByteLength = messageDenseIndexOffset + capacity * 4;
89
+ }
90
+ }
91
+ }
92
+ const system = Object.freeze({
93
+ family: 'system',
94
+ byteLength: align(systemByteLength, 8),
95
+ alignment: 8,
96
+ timestampOffset: 0,
97
+ entryTypeOffset,
98
+ messageIdOffset,
99
+ messageDenseIndexOffset,
100
+ rowHeaderOffset,
101
+ messageValueOffset,
102
+ });
103
+ const slabs = Object.freeze({
104
+ u8: slab('u8', 1),
105
+ u32: slab('u32', 4),
106
+ f64: slab('f64', 8),
107
+ });
108
+ return Object.freeze({
109
+ capacity,
110
+ messageLayoutFamily,
111
+ messagePhysicalLayout,
112
+ eagerColumns,
113
+ system,
114
+ slabs,
115
+ spanSuperblock: freezeSuperblockLayout(system, slabs, true),
116
+ overflowSuperblock: freezeSuperblockLayout(system, slabs, false),
117
+ columns: Object.freeze(columns),
118
+ });
119
+ }
120
+ function buildWasmLayoutTemplate(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns) {
121
+ const columns = [];
122
+ const preallocatedColumns = new Set(eagerColumns.names);
123
+ let columnIndex = 0;
124
+ for (const name of schema._columnNames) {
125
+ const field = schema.fields[name];
126
+ const schemaType = getSchemaType(field);
127
+ const eager = preallocatedColumns.has(name) ||
128
+ (typeof field === 'object' && field !== null && Reflect.get(field, '__eager') === true);
129
+ let storage = null;
130
+ switch (schemaType) {
131
+ case 'enum':
132
+ case 'boolean':
133
+ storage = { family: 'u8', arrayType: 'Uint8Array', byteWidth: 1, alignment: 1 };
134
+ break;
135
+ case 'number':
136
+ storage = { family: 'f64', arrayType: 'Float64Array', byteWidth: 8, alignment: 8 };
137
+ break;
138
+ case 'bigUint64':
139
+ storage = { family: 'f64', arrayType: 'BigUint64Array', byteWidth: 8, alignment: 8 };
140
+ break;
141
+ }
142
+ if (storage !== null && name !== 'message') {
143
+ columns.push(Object.freeze({ name, columnIndex, eager, ...storage }));
144
+ }
145
+ columnIndex++;
146
+ }
147
+ const frozenColumns = Object.freeze(columns);
148
+ const descriptors = new Map();
149
+ return Object.freeze({
150
+ messageLayoutFamily,
151
+ messagePhysicalLayout,
152
+ eagerColumns,
153
+ columns: frozenColumns,
154
+ forCapacity(capacity) {
155
+ let descriptor = descriptors.get(capacity);
156
+ if (descriptor === undefined) {
157
+ descriptor = freezeExactLayout(capacity, messageLayoutFamily, messagePhysicalLayout, frozenColumns, eagerColumns);
158
+ descriptors.set(capacity, descriptor);
159
+ }
160
+ return descriptor;
161
+ },
162
+ });
163
+ }
164
+ const templates = new WeakMap();
165
+ export function createWasmLayoutTemplate(schema, messageLayoutFamily = 'mixed', messagePhysicalLayout = 'current', eagerColumns = EMPTY_EAGER_COLUMNS) {
166
+ const cacheKey = `${messageLayoutFamily}:${messagePhysicalLayout}:${eagerColumns.key}`;
167
+ let familyTemplates = templates.get(schema);
168
+ let template = familyTemplates?.get(cacheKey);
169
+ if (template === undefined) {
170
+ template = buildWasmLayoutTemplate(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns);
171
+ familyTemplates ??= new Map();
172
+ familyTemplates.set(cacheKey, template);
173
+ templates.set(schema, familyTemplates);
174
+ }
175
+ return template;
176
+ }
177
+ export function getWasmPhysicalLayout(schema, capacity, messageLayoutFamily = 'mixed', messagePhysicalLayout = 'current', eagerColumns = EMPTY_EAGER_COLUMNS) {
178
+ return createWasmLayoutTemplate(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns).forCapacity(capacity);
179
+ }