@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
@@ -0,0 +1,33 @@
1
+ /** Internal constructor for a lease over borrowed Arrow source chunks. */
2
+ export function createArrowLease(table, pinned, releases) {
3
+ let released = false;
4
+ // Retained by the closures for the full lease lifetime. Clearing this array on
5
+ // release makes the backing epochs and dictionary generation collectible.
6
+ const retained = [...pinned];
7
+ return Object.freeze({
8
+ table,
9
+ get released() {
10
+ return released;
11
+ },
12
+ release() {
13
+ if (released)
14
+ return;
15
+ released = true;
16
+ let failure;
17
+ for (let index = releases.length - 1; index >= 0; index--) {
18
+ try {
19
+ releases[index]();
20
+ }
21
+ catch (error) {
22
+ failure ??= error;
23
+ }
24
+ }
25
+ retained.length = 0;
26
+ if (failure !== undefined)
27
+ throw failure;
28
+ },
29
+ [Symbol.dispose]() {
30
+ this.release();
31
+ },
32
+ });
33
+ }
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Utility functions for Arrow conversion
3
3
  */
4
+ import { Column } from '@uwdata/flechette';
4
5
  import type { AnySpanBuffer } from '../types.js';
5
6
  type ConcatenatedNullBitmaps = {
6
7
  nullBitmap: Uint8Array | undefined;
@@ -26,13 +27,11 @@ export declare function concatenateFloat64Arrays(arrays: Float64Array[]): Float6
26
27
  * Concatenate null bitmaps from multiple buffers
27
28
  */
28
29
  export declare function concatenateNullBitmaps(buffers: AnySpanBuffer[], columnName: string): ConcatenatedNullBitmaps;
30
+ /** Combine Arrow-native batches by copying only batch references, never values. */
31
+ export declare function combineColumnChunks(chunks: readonly Column<unknown>[]): Column<unknown>;
29
32
  /**
30
33
  * Get Arrow field name from LMAO field name
31
34
  */
32
35
  export declare function getArrowFieldName(fieldName: string): string;
33
- /**
34
- * Walk a SpanBuffer tree (including overflow chains and children)
35
- */
36
- export declare function walkSpanTree(root: AnySpanBuffer, visitor: (buffer: AnySpanBuffer) => void): void;
37
36
  export {};
38
37
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/arrow/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,KAAK,uBAAuB,GAAG;IAAE,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAUxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAWvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAW7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,uBAAuB,CA8B5G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAShG"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/arrow/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,KAAK,uBAAuB,GAAG;IAAE,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAUxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAWvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAW7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,uBAAuB,CA8B5G;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAMvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -2,6 +2,7 @@
2
2
  * Utility functions for Arrow conversion
3
3
  */
4
4
  import { copyBits, countNulls } from '@smoothbricks/arrow-builder';
5
+ import { Column } from '@uwdata/flechette';
5
6
  const UTF8_ENCODER = new TextEncoder();
6
7
  /**
7
8
  * Encode an array of strings into a single UTF-8 Uint8Array
@@ -91,22 +92,20 @@ export function concatenateNullBitmaps(buffers, columnName) {
91
92
  }
92
93
  return { nullBitmap, nullCount };
93
94
  }
95
+ /** Combine Arrow-native batches by copying only batch references, never values. */
96
+ export function combineColumnChunks(chunks) {
97
+ if (chunks.length === 0)
98
+ throw new Error('Cannot combine an empty Arrow chunk list');
99
+ if (chunks.length === 1)
100
+ return chunks[0];
101
+ const batches = [];
102
+ for (const chunk of chunks)
103
+ batches.push(...chunk.data);
104
+ return new Column(batches);
105
+ }
94
106
  /**
95
107
  * Get Arrow field name from LMAO field name
96
108
  */
97
109
  export function getArrowFieldName(fieldName) {
98
110
  return fieldName;
99
111
  }
100
- /**
101
- * Walk a SpanBuffer tree (including overflow chains and children)
102
- */
103
- export function walkSpanTree(root, visitor) {
104
- let current = root;
105
- while (current) {
106
- visitor(current);
107
- current = current._overflow;
108
- }
109
- for (const child of root._children) {
110
- walkSpanTree(child, visitor);
111
- }
112
- }
@@ -0,0 +1,21 @@
1
+ import { Column } from '@uwdata/flechette';
2
+ import type { VocabularyGeneration } from '../vocabularyRegistry.js';
3
+ export interface VocabularyDictionaryPrefix {
4
+ readonly column: Column<unknown>;
5
+ readonly length: number;
6
+ readonly valueToDenseIndex: ReadonlyMap<string, number>;
7
+ }
8
+ /**
9
+ * Return the immutable Arrow dictionary prefix for one pinned vocabulary generation.
10
+ * Record text is decoded and copied into Arrow UTF-8 buffers once per generation;
11
+ * every flush thereafter reuses the same column and backing buffers.
12
+ */
13
+ export declare function getVocabularyDictionaryPrefix(generation: VocabularyGeneration): VocabularyDictionaryPrefix;
14
+ /**
15
+ * Append one UTF-8 dictionary batch without copying the prefix buffers or
16
+ * scanning its cached strings. Flechette serializes later dictionary batches
17
+ * as Arrow dictionary deltas.
18
+ */
19
+ export declare function appendVocabularyDictionarySuffix(prefix: VocabularyDictionaryPrefix, suffix: Column<unknown>, suffixValues: readonly string[]): Column<unknown>;
20
+ export declare const PREBUILT_ENTRY_TYPE_DICTIONARY: Column<unknown>;
21
+ //# sourceMappingURL=vocabularyDictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vocabularyDictionary.d.ts","sourceRoot":"","sources":["../../../src/lib/arrow/vocabularyDictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAyBrE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzD;AAID;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,oBAAoB,GAAG,0BAA0B,CAiD1G;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,0BAA0B,EAClC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EACvB,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,MAAM,CAAC,OAAO,CAAC,CAgBjB;AAED,eAAO,MAAM,8BAA8B,iBAI1C,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { Column, utf8 } from '@uwdata/flechette';
2
+ import { ENTRY_TYPE_NAMES } from '../schema/systemSchema.js';
3
+ import { makeArrowColumn } from './flechette.js';
4
+ const ENTRY_TYPE_UTF8 = new TextEncoder().encode(ENTRY_TYPE_NAMES.join(''));
5
+ const ENTRY_TYPE_OFFSETS = new Int32Array(ENTRY_TYPE_NAMES.length + 1);
6
+ for (let index = 0, offset = 0; index < ENTRY_TYPE_NAMES.length; index++) {
7
+ ENTRY_TYPE_OFFSETS[index] = offset;
8
+ offset += ENTRY_TYPE_NAMES[index].length;
9
+ ENTRY_TYPE_OFFSETS[index + 1] = offset;
10
+ }
11
+ function makeUtf8Dictionary(length, offsets, values) {
12
+ return makeArrowColumn({
13
+ type: utf8(),
14
+ length,
15
+ nullCount: 0,
16
+ offsets,
17
+ values,
18
+ });
19
+ }
20
+ const EMPTY_DICTIONARY_BYTES = new Uint8Array(0);
21
+ const EMPTY_DICTIONARY_OFFSETS = new Int32Array([0, 0]);
22
+ const decoder = new TextDecoder('utf-8', { fatal: true });
23
+ const vocabularyDictionaries = new WeakMap();
24
+ /**
25
+ * Return the immutable Arrow dictionary prefix for one pinned vocabulary generation.
26
+ * Record text is decoded and copied into Arrow UTF-8 buffers once per generation;
27
+ * every flush thereafter reuses the same column and backing buffers.
28
+ */
29
+ export function getVocabularyDictionaryPrefix(generation) {
30
+ const cached = vocabularyDictionaries.get(generation);
31
+ if (cached !== undefined)
32
+ return cached;
33
+ if (generation.ids.length === 0) {
34
+ const emptyPrefix = Object.freeze({
35
+ column: makeUtf8Dictionary(1, EMPTY_DICTIONARY_OFFSETS, EMPTY_DICTIONARY_BYTES),
36
+ length: 1,
37
+ valueToDenseIndex: new Map([['', 0]]),
38
+ });
39
+ emptyPrefix.column.cache();
40
+ vocabularyDictionaries.set(generation, emptyPrefix);
41
+ return emptyPrefix;
42
+ }
43
+ const count = generation.ids.length;
44
+ const offsets = new Int32Array(count + 1);
45
+ const textLengths = new Uint32Array(count);
46
+ let byteLength = 0;
47
+ for (let denseIndex = 0; denseIndex < count; denseIndex++) {
48
+ const recordOffset = generation.offsets[denseIndex];
49
+ const textLength = new DataView(generation.records.buffer, generation.records.byteOffset + recordOffset, 4).getUint32(0, true);
50
+ textLengths[denseIndex] = textLength;
51
+ byteLength += textLength;
52
+ offsets[denseIndex + 1] = byteLength;
53
+ }
54
+ const values = new Uint8Array(byteLength);
55
+ const valueToDenseIndex = new Map();
56
+ for (let denseIndex = 0; denseIndex < count; denseIndex++) {
57
+ const textStart = generation.offsets[denseIndex] + 4;
58
+ const text = generation.records.subarray(textStart, textStart + textLengths[denseIndex]);
59
+ values.set(text, offsets[denseIndex]);
60
+ const value = decoder.decode(text);
61
+ if (!valueToDenseIndex.has(value))
62
+ valueToDenseIndex.set(value, denseIndex);
63
+ }
64
+ const prefix = Object.freeze({
65
+ column: makeUtf8Dictionary(count, offsets, values),
66
+ length: count,
67
+ valueToDenseIndex,
68
+ });
69
+ prefix.column.cache();
70
+ vocabularyDictionaries.set(generation, prefix);
71
+ return prefix;
72
+ }
73
+ /**
74
+ * Append one UTF-8 dictionary batch without copying the prefix buffers or
75
+ * scanning its cached strings. Flechette serializes later dictionary batches
76
+ * as Arrow dictionary deltas.
77
+ */
78
+ export function appendVocabularyDictionarySuffix(prefix, suffix, suffixValues) {
79
+ const dictionary = new Column([...prefix.column.data, ...suffix.data]);
80
+ const prefixCache = prefix.column.cache();
81
+ const cacheTarget = new Array(prefix.length + suffixValues.length);
82
+ dictionary._cache = new Proxy(cacheTarget, {
83
+ get(target, property, receiver) {
84
+ if (typeof property === 'string') {
85
+ const index = Number(property);
86
+ if (Number.isInteger(index) && index >= 0 && index < target.length && String(index) === property) {
87
+ return index < prefix.length ? prefixCache[index] : suffixValues[index - prefix.length];
88
+ }
89
+ }
90
+ return Reflect.get(target, property, receiver);
91
+ },
92
+ });
93
+ return dictionary;
94
+ }
95
+ export const PREBUILT_ENTRY_TYPE_DICTIONARY = makeUtf8Dictionary(ENTRY_TYPE_NAMES.length, ENTRY_TYPE_OFFSETS, ENTRY_TYPE_UTF8);
@@ -20,6 +20,7 @@
20
20
  import type { Table } from '@uwdata/flechette';
21
21
  import type { OpMetadata } from './opContext/opTypes.js';
22
22
  import type { LogSchema } from './schema/LogSchema.js';
23
+ import type { SpanBufferConstructor } from './spanBuffer.js';
23
24
  import type { ITraceRoot } from './traceRoot.js';
24
25
  import type { AnySpanBuffer, SpanBuffer } from './types.js';
25
26
  /**
@@ -42,7 +43,7 @@ export interface BufferStrategy<T extends LogSchema = LogSchema> {
42
43
  * @param capacity - Optional capacity override
43
44
  * @returns New SpanBuffer for the root span
44
45
  */
45
- createSpanBuffer(schema: T, traceRoot: ITraceRoot, opMetadata: OpMetadata, capacity?: number): SpanBuffer<T>;
46
+ createSpanBuffer(schema: T, traceRoot: ITraceRoot, opMetadata: OpMetadata, capacity?: number, SpanBufferClass?: SpanBufferConstructor<T>): SpanBuffer<T>;
46
47
  /**
47
48
  * Create a child span buffer linked to a parent.
48
49
  *
@@ -55,7 +56,7 @@ export interface BufferStrategy<T extends LogSchema = LogSchema> {
55
56
  * @param schema - Optional schema for the child (if different from parent, e.g., library ops)
56
57
  * @returns New SpanBuffer linked to parent
57
58
  */
58
- createChildSpanBuffer(parentBuffer: SpanBuffer<T>, callsiteMetadata: OpMetadata, opMetadata: OpMetadata, capacity?: number, schema?: T): SpanBuffer<T>;
59
+ createChildSpanBuffer(parentBuffer: SpanBuffer<T>, callsiteMetadata: OpMetadata, opMetadata: OpMetadata, capacity?: number, schema?: T, SpanBufferClass?: SpanBufferConstructor<T>): SpanBuffer<T>;
59
60
  /**
60
61
  * Create an overflow buffer when current buffer is full.
61
62
  *
@@ -1 +1 @@
1
- {"version":3,"file":"bufferStrategy.d.ts","sourceRoot":"","sources":["../../src/lib/bufferStrategy.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE7G;;;;;;;;;;;OAWG;IACH,qBAAqB,CACnB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,EAC3B,gBAAgB,EAAE,UAAU,EAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,CAAC,GACT,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE5D;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC5C"}
1
+ {"version":3,"file":"bufferStrategy.d.ts","sourceRoot":"","sources":["../../src/lib/bufferStrategy.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;;OAQG;IACH,gBAAgB,CACd,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,GACzC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,qBAAqB,CACnB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,EAC3B,gBAAgB,EAAE,UAAU,EAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,CAAC,EACV,eAAe,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,GACzC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE5D;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"traceRows.d.ts","sourceRoot":"","sources":["../../../src/lib/cloudflare/traceRows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,sGAAsG;AACtG,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAiBrD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,aAAa,GAAG,QAAQ,EAAE,CAsB3E"}
1
+ {"version":3,"file":"traceRows.d.ts","sourceRoot":"","sources":["../../../src/lib/cloudflare/traceRows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,sGAAsG;AACtG,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAiBrD,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,aAAa,GAAG,QAAQ,EAAE,CAsB3E"}
@@ -9,6 +9,7 @@
9
9
  * (trace_id, span_id, parent_span_id, row_index, entry_type, timestamp_ns, message) plus the
10
10
  * buffer's user schema columns, flattened so downstream SQL transforms need no unnesting.
11
11
  */
12
+ import { resolveEntryType, resolveMessage } from '../resolveMessage.js';
12
13
  import { readSpanFieldValue, walkSpanSegments } from '../sqlite/sqlite-common.js';
13
14
  function toTraceRowValue(value) {
14
15
  if (value === undefined || value === null)
@@ -37,9 +38,9 @@ export function spanBufferToTraceRows(rootBuffer) {
37
38
  span_id: spanId,
38
39
  parent_span_id: parentSpanId,
39
40
  row_index: rowOffset + row,
40
- entry_type: buffer.entry_type[row],
41
+ entry_type: resolveEntryType(buffer, row),
41
42
  timestamp_ns: Number(buffer.timestamp[row]),
42
- message: buffer.message_values[row] ?? null,
43
+ message: toTraceRowValue(resolveMessage(buffer, row)),
43
44
  };
44
45
  for (const fieldName of fieldNames) {
45
46
  record[fieldName] = toTraceRowValue(readSpanFieldValue(buffer, fieldName, row));
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatorGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/evaluatorGenerator.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EACV,aAAa,EAEb,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,GAAG,SAAS,SAAS;IAC3D,GAAG,CAAC,CAAC,SAAS,MAAM,4BAA4B,CAAC,GAAG,CAAC,GAAG,MAAM,EAC5D,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC5E,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,0BAA0B,CAAC,GAAG,SAAS,SAAS,IAAI,sBAAsB,CAAC,GAAG,CAAC,GACzF,4BAA4B,CAAC,GAAG,CAAC,CAAC;AAEpC,KAAK,6BAA6B,CAAC,GAAG,SAAS,SAAS,IAAI,KAC1D,WAAW,EAAE,oBAAoB,CAAC,GAAG,CAAC,EACtC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,KAC1B,0BAA0B,CAAC,GAAG,CAAC,CAAC;AAErC,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC;AA4E9G;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,MAAM,EAAE,CAAC,EACT,SAAS,SAAuB,GAC/B,MAAM,CA2BR;AAwHD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,SAAS,SAAS,EACxD,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,oBAAoB,EAAE,MAAM,GAC3B,6BAA6B,CAAC,GAAG,CAAC,CA6BpC"}
1
+ {"version":3,"file":"evaluatorGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/evaluatorGenerator.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EACV,aAAa,EAEb,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,GAAG,SAAS,SAAS;IAC3D,GAAG,CAAC,CAAC,SAAS,MAAM,4BAA4B,CAAC,GAAG,CAAC,GAAG,MAAM,EAC5D,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC5E,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,0BAA0B,CAAC,GAAG,SAAS,SAAS,IAAI,sBAAsB,CAAC,GAAG,CAAC,GACzF,4BAA4B,CAAC,GAAG,CAAC,CAAC;AAEpC,KAAK,6BAA6B,CAAC,GAAG,SAAS,SAAS,IAAI,KAC1D,WAAW,EAAE,oBAAoB,CAAC,GAAG,CAAC,EACtC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,KAC1B,0BAA0B,CAAC,GAAG,CAAC,CAAC;AAErC,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC;AAgF9G;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,MAAM,EAAE,CAAC,EACT,SAAS,SAAuB,GAC/B,MAAM,CA2BR;AAwHD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,SAAS,SAAS,EACxD,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,oBAAoB,EAAE,MAAM,GAC3B,6BAA6B,CAAC,GAAG,CAAC,CA6BpC"}
@@ -6,6 +6,7 @@
6
6
  * normal closures and `Object.defineProperties()` instead of `new Function(...)`.
7
7
  */
8
8
  import { isRecord } from '@smoothbricks/validation';
9
+ import { resolveEntryType, resolveMessage } from '../resolveMessage.js';
9
10
  /**
10
11
  * Cache for generated evaluator classes by schema reference.
11
12
  */
@@ -22,18 +23,18 @@ function isAnySpanBuffer(value) {
22
23
  function isInternalSpanLogger(value) {
23
24
  return isRecord(value) && 'ffAccess' in value && 'ffUsage' in value;
24
25
  }
26
+ function isEvaluatorRuntimeContext(value) {
27
+ return (isRecord(value) &&
28
+ '_buffer' in value &&
29
+ '_spanLogger' in value &&
30
+ isAnySpanBuffer(value._buffer) &&
31
+ isInternalSpanLogger(value._spanLogger));
32
+ }
25
33
  function getEvaluatorRuntimeContext(ctx) {
26
- if (!isRecord(ctx) || !('_buffer' in ctx) || !('log' in ctx)) {
27
- throw new Error('Feature-flag evaluator requires an internal span context');
28
- }
29
- if (!isAnySpanBuffer(ctx._buffer) || !isInternalSpanLogger(ctx.log)) {
34
+ if (!isEvaluatorRuntimeContext(ctx)) {
30
35
  throw new Error('Feature-flag evaluator requires runtime span buffer and logger internals');
31
36
  }
32
- return {
33
- ...ctx,
34
- _buffer: ctx._buffer,
35
- log: ctx.log,
36
- };
37
+ return ctx;
37
38
  }
38
39
  function createFlagGetter(flagName) {
39
40
  return function generatedFlagGetter() {
@@ -105,7 +106,7 @@ class WorkerSafeGeneratedEvaluator {
105
106
  while (buf) {
106
107
  const limit = buf._writeIndex;
107
108
  for (let i = limit - 1; i >= 0; i--) {
108
- if (buf.entry_type[i] === this.#entryTypeFfAccess && buf.message_values && buf.message_values[i] === flagName) {
109
+ if (resolveEntryType(buf, i) === this.#entryTypeFfAccess && resolveMessage(buf, i) === flagName) {
109
110
  return true;
110
111
  }
111
112
  }
@@ -163,7 +164,7 @@ class WorkerSafeGeneratedEvaluator {
163
164
  return { value, track };
164
165
  }
165
166
  getLogger() {
166
- return this.#spanContext.log;
167
+ return this.#spanContext._spanLogger;
167
168
  }
168
169
  logUsage(flagName, context) {
169
170
  return this.getLogger().ffUsage(flagName, context ? { ...context } : undefined);
@@ -1,44 +1,30 @@
1
1
  /**
2
- * Runtime code generation for TagWriter and ResultWriter classes
2
+ * Fixed-position TagWriter and ResultWriter classes.
3
+ *
4
+ * TagWriter uses source-authored constructors and schema-driven prototype methods so
5
+ * Hermes can compile the implementation ahead of time. ResultWriter selects between a
6
+ * compiled renderer (new Function, string-codegen runtimes) and a closure-composed
7
+ * materializer (workerd-safe, no eval) via activeMaterializerMode().
3
8
  *
4
9
  * These classes provide fluent setter methods that write to a fixed position in a SpanBuffer:
5
10
  * - TagWriter: writes to position 0 (span-start row) via ctx.tag.userId("123")
6
11
  * - ResultWriter: writes to position 1 (result row) via ctx.ok(data).userId("123")
7
12
  *
8
- * Both share the same codegen since they only differ in:
9
- * 1. The fixed position (0 vs 1)
10
- * 2. ResultWriter has additional _result/_error properties
11
- *
12
13
  * WHY Fixed Positions:
13
14
  * - Row 0: span-start entry (written at span creation, attributes set via ctx.tag)
14
15
  * - Row 1: span-end entry (written at ctx.ok()/ctx.err(), attributes set via fluent API)
15
16
  *
16
- * Pattern:
17
- * - Each setter calls this._buffer.columnName(this._pos, value) and returns this
18
- * - Fluent chaining: ctx.tag.userId("123").requestId("abc")
19
- * - Zero allocation: returns same object reference
17
+ * Each wrapper stores only the SpanContext state identity. Setters write through
18
+ * `state._spanBuffer` to their embedded row and return the same wrapper for fluent chaining.
20
19
  */
20
+ import { type SchemaEnumLookupDescriptor } from '../enumMetadata.js';
21
+ import type { MessageLayoutFamily, MessagePhysicalLayout } from '../runtimeHint.js';
21
22
  import type { InferSchema, LogSchema } from '../schema/types.js';
23
+ import type { TimestampAppendPrimitive } from '../traceRoot.js';
22
24
  import type { AnySpanBuffer } from '../types.js';
23
- /**
24
- * Extension options for injecting custom code into generated writer classes.
25
- */
25
+ /** Extension methods injected into a generated fixed-position writer class. */
26
26
  export interface FixedPositionWriterExtension {
27
- /**
28
- * Additional code to add to the constructor (after buffer assignment).
29
- * Has access to `this` and constructorParams.
30
- */
31
- constructorCode?: string;
32
- /**
33
- * Additional methods to add to the class body.
34
- */
35
27
  methods?: string;
36
- /**
37
- * Constructor parameters beyond buffer.
38
- * Added AFTER buffer in the constructor signature.
39
- * @example "result, isError"
40
- */
41
- constructorParams?: string;
42
28
  }
43
29
  /**
44
30
  * TagWriter interface - fluent setter API for span-start attributes (row 0)
@@ -55,43 +41,35 @@ export type TagWriter<T extends LogSchema> = {
55
41
  } & {
56
42
  [K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => TagWriter<T>;
57
43
  };
58
- /**
59
- * ResultWriter interface - fluent setter API for result attributes (row 1)
60
- *
61
- * Includes _result and _error properties for accessing the return value or error.
62
- */
44
+ /** SpanContext-owned hot writer state shared by logger, tag, and result writers. */
45
+ export interface WriterState {
46
+ /** Immutable span root used by fixed row 0/1 writers. */
47
+ readonly _spanBuffer: AnySpanBuffer;
48
+ /** Mutable active buffer used by append writers and updated on overflow. */
49
+ _buffer: AnySpanBuffer;
50
+ /** Plan-bound timestamp append operand retained by the SpanContext. */
51
+ readonly _appendLogEntry: TimestampAppendPrimitive;
52
+ readonly _physicalLayoutPlan: {
53
+ readonly ResultWriterClass: ResultWriterConstructor;
54
+ readonly enumLookup: SchemaEnumLookupDescriptor;
55
+ };
56
+ /** Append one dynamic row, centralizing overflow and active-buffer updates. */
57
+ _appendWriterEntry(entryType: number): number;
58
+ }
59
+ /** Result-row writer with schema-specific fluent setters. */
63
60
  export type ResultWriter<T extends LogSchema, R = unknown, E = unknown> = {
64
- /**
65
- * The successful result value (set by ctx.ok(data))
66
- */
67
- readonly _result: R | undefined;
68
- /**
69
- * The error value (set by ctx.err(error))
70
- */
71
- readonly _error: E | undefined;
72
- /**
73
- * Whether this is an error result
74
- */
75
- readonly _isError: boolean;
76
- /**
77
- * Bulk set multiple attributes at once.
78
- */
61
+ /** Phantom parameters preserve the public generic contract without duplicating result values. */
62
+ readonly _resultType?: R;
63
+ readonly _errorType?: E;
79
64
  with(attributes: Partial<InferSchema<T>>): ResultWriter<T, R, E>;
80
- /**
81
- * Set the result-row message (row 1).
82
- */
83
65
  message(text: string): ResultWriter<T, R, E>;
84
- /**
85
- * Set the result-row source line (row 1).
86
- */
87
66
  line(lineNumber: number): ResultWriter<T, R, E>;
88
- /**
89
- * Set the reserved `uint64_value` column for this result row.
90
- */
91
67
  uint64_value(value: bigint): ResultWriter<T, R, E>;
92
68
  } & {
93
69
  [K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => ResultWriter<T, R, E>;
94
70
  };
71
+ export type TagWriterConstructor<T extends LogSchema> = new (state: WriterState) => TagWriter<T>;
72
+ export type ResultWriterConstructor = new <T extends LogSchema = LogSchema, R = unknown, E = unknown>(state: WriterState) => ResultWriter<T, R, E>;
95
73
  /**
96
74
  * Generate the complete fixed-position writer class code.
97
75
  *
@@ -101,47 +79,31 @@ export type ResultWriter<T extends LogSchema, R = unknown, E = unknown> = {
101
79
  * @param extension - Optional extension for constructor code, methods, params
102
80
  * @returns JavaScript code string for the class
103
81
  */
104
- export declare function generateFixedPositionWriterClass(schema: LogSchema, position: number, className: string, extension?: FixedPositionWriterExtension): string;
105
- /**
106
- * Generate TagWriter class code for a schema.
107
- * TagWriter writes to position 0 (span-start row).
108
- */
109
- export declare function generateTagWriterClass(schema: LogSchema): string;
82
+ export declare function generateFixedPositionWriterClass(schema: LogSchema, position: number, className: string, extension?: FixedPositionWriterExtension, eagerColumns?: readonly string[], enumLookup?: SchemaEnumLookupDescriptor): string;
110
83
  /**
111
84
  * Get or create a cached TagWriter class for a schema.
112
85
  *
113
86
  * @param schema - Tag attribute schema
114
87
  * @returns TagWriter class constructor
115
88
  */
116
- export declare function getTagWriterClass<T extends LogSchema>(schema: T): new (buffer: AnySpanBuffer) => TagWriter<T>;
117
- /**
118
- * Create a TagWriter instance for a buffer.
119
- *
120
- * @param schema - Tag attribute schema
121
- * @param buffer - SpanBuffer to write to
122
- * @returns TagWriter instance bound to position 0
123
- */
124
- export declare function createTagWriter<T extends LogSchema>(schema: T, buffer: AnySpanBuffer): TagWriter<T>;
89
+ export declare function getTagWriterClass<T extends LogSchema>(schema: T, eagerColumns?: readonly string[], enumLookup?: SchemaEnumLookupDescriptor): TagWriterConstructor<T>;
90
+ /** Create a TagWriter bound to an existing SpanContext writer state. */
91
+ export declare function createTagWriter<T extends LogSchema>(schema: T, state: WriterState): TagWriter<T>;
125
92
  /**
126
93
  * Generate ResultWriter class code for a schema.
127
94
  * ResultWriter writes to position 1 (result row).
128
95
  */
129
- export declare function generateResultWriterClass(schema: LogSchema): string;
96
+ export declare function generateResultWriterClass(schema: LogSchema, messageLayoutFamily?: MessageLayoutFamily, _messagePhysicalLayout?: MessagePhysicalLayout, eagerColumns?: readonly string[], enumLookup?: SchemaEnumLookupDescriptor): string;
130
97
  /**
131
98
  * Get or create a cached ResultWriter class for a schema.
132
99
  *
133
- * @param schema - Tag attribute schema
134
- * @returns ResultWriter class constructor
135
- */
136
- export declare function getResultWriterClass<T extends LogSchema>(schema: T): new <R = unknown, E = unknown>(buffer: AnySpanBuffer, resultOrError: unknown, isError: boolean) => ResultWriter<T, R, E>;
137
- /**
138
- * Create a ResultWriter instance for a buffer.
100
+ * Selects the compiled or closure-composed materializer via activeMaterializerMode();
101
+ * cache keys are mode-prefixed so an override flip never returns the wrong kind.
139
102
  *
140
103
  * @param schema - Tag attribute schema
141
- * @param buffer - SpanBuffer to write to
142
- * @param resultOrError - The result value or error
143
- * @param isError - Whether this is an error result
144
- * @returns ResultWriter instance bound to position 1
104
+ * @returns ResultWriter class constructor
145
105
  */
146
- export declare function createResultWriter<T extends LogSchema, R = unknown, E = unknown>(schema: T, buffer: AnySpanBuffer, resultOrError: R | E, isError: boolean): ResultWriter<T, R, E>;
106
+ export declare function getResultWriterClass<T extends LogSchema>(schema: T, messageLayoutFamily?: MessageLayoutFamily, messagePhysicalLayout?: MessagePhysicalLayout, eagerColumns?: readonly string[], enumLookup?: SchemaEnumLookupDescriptor): ResultWriterConstructor;
107
+ /** Create a ResultWriter bound to an existing SpanContext writer state. */
108
+ export declare function createResultWriter<T extends LogSchema, R = unknown, E = unknown>(schema: T, state: WriterState): ResultWriter<T, R, E>;
147
109
  //# sourceMappingURL=fixedPositionWriterGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixedPositionWriterGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/fixedPositionWriterGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixedPositionWriterGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/fixedPositionWriterGenerator.ts"],"names":[],"mappings":"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"}