@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
@@ -11,53 +11,101 @@ import { Nanoseconds } from '@smoothbricks/arrow-builder';
11
11
  import { ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_START } from './schema/systemSchema.js';
12
12
  import { createTraceId } from './traceId.js';
13
13
  import { TRACE_ROOT_ANCHOR_EPOCH_OFFSET, TRACE_ROOT_ANCHOR_PERF_OFFSET, TRACE_ROOT_TRACE_ID_LEN_OFFSET, TRACE_ROOT_TRACE_ID_OFFSET, } from './traceRoot.js';
14
+ import { TraceTopology } from './traceTopology.js';
14
15
  /** Shared TextEncoder for trace_id encoding (stateless, reusable) */
15
16
  const textEncoder = new TextEncoder();
16
- /** Shared TextDecoder for trace_id decoding (stateless, reusable) */
17
- const textDecoder = new TextDecoder();
18
17
  //#region smoo/lmao!n/trace-root-timestamps #node
19
18
  /**
20
19
  * TraceRoot - Node.js implementation.
21
20
  *
22
21
  * Stores anchor data in _system ArrayBuffer and writes timestamps directly from JS.
23
22
  */
23
+ function nextTimestamp(root) {
24
+ let timestamp = root._epochHrtimeOffset + process.hrtime.bigint();
25
+ if (timestamp <= root._lastTimestampNanos)
26
+ timestamp = root._lastTimestampNanos + 1n;
27
+ root._lastTimestampNanos = timestamp;
28
+ return Nanoseconds.unsafe(timestamp);
29
+ }
30
+ const timestampNow = (traceRoot) => {
31
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Node primitive table is only installed on TraceRoot.node instances.
32
+ return nextTimestamp(traceRoot);
33
+ };
34
+ const appendLogEntry = (traceRoot, buffer, entryType) => {
35
+ const entryTypes = buffer.entry_type;
36
+ if (entryTypes === undefined)
37
+ throw new TypeError('Split timestamp appender requires entry_type storage');
38
+ const idx = buffer._writeIndex;
39
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Node primitive table is only installed on TraceRoot.node instances.
40
+ buffer.timestamp[idx] = nextTimestamp(traceRoot);
41
+ entryTypes[idx] = entryType;
42
+ buffer._writeIndex = idx + 1;
43
+ return idx;
44
+ };
45
+ const writeSpanStartPrimitive = (traceRoot, buffer, spanName) => {
46
+ const entryTypes = buffer.entry_type;
47
+ if (entryTypes === undefined)
48
+ throw new TypeError('Split span-start appender requires entry_type storage');
49
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Node primitive table is only installed on TraceRoot.node instances.
50
+ buffer.timestamp[0] = nextTimestamp(traceRoot);
51
+ entryTypes[0] = ENTRY_TYPE_SPAN_START;
52
+ if (buffer.message_values)
53
+ buffer.message(0, spanName);
54
+ entryTypes[1] = ENTRY_TYPE_SPAN_EXCEPTION;
55
+ buffer.timestamp[1] = 0n;
56
+ buffer._writeIndex = 2;
57
+ };
58
+ const writeSpanEndPrimitive = (traceRoot, buffer, entryType) => {
59
+ const entryTypes = buffer.entry_type;
60
+ if (entryTypes === undefined)
61
+ throw new TypeError('Split span-end appender requires entry_type storage');
62
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Node primitive table is only installed on TraceRoot.node instances.
63
+ buffer.timestamp[1] = nextTimestamp(traceRoot);
64
+ entryTypes[1] = entryType;
65
+ buffer._sealStatsChain();
66
+ };
24
67
  export class TraceRoot {
25
68
  /**
26
69
  * Raw backing buffer containing anchor timestamps and trace_id.
27
70
  */
28
71
  _system;
72
+ _traceIdBytes;
73
+ trace_id;
29
74
  /**
30
75
  * Tracer reference for lifecycle hooks and event callbacks.
31
76
  */
32
77
  tracer;
78
+ _topology;
79
+ _timestampNow = timestampNow;
80
+ _appendLogEntry = appendLogEntry;
81
+ _writeSpanStart = writeSpanStartPrimitive;
82
+ _writeSpanEnd = writeSpanEndPrimitive;
33
83
  /**
34
84
  * Cached TypedArray views for fast JS access.
35
85
  */
36
86
  _epochView;
37
87
  _perfView;
38
- /**
39
- * Cached anchor hrtime as the exact BigInt, so the JS timestamp delta stays
40
- * correct after the f64 `anchorPerfNow` loses integer precision (~104 days uptime).
41
- */
42
- _anchorHrtimeBigInt;
88
+ /** Epoch offset makes each exact timestamp one clock read plus one BigInt addition. */
89
+ _epochHrtimeOffset;
90
+ _lastTimestampNanos = 0n;
43
91
  constructor(trace_id, anchorEpochNanos, anchorPerfNow, anchorHrtimeBigInt, tracer) {
44
92
  // Allocate buffer: 17 bytes header + trace_id length
45
93
  // trace_id is validated to be ASCII (1 byte per char) so length === byte length
46
94
  this._system = new ArrayBuffer(TRACE_ROOT_TRACE_ID_OFFSET + trace_id.length);
95
+ this._traceIdBytes = new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_OFFSET, trace_id.length);
96
+ this.trace_id = trace_id;
47
97
  this.tracer = tracer;
98
+ this._topology = new TraceTopology();
48
99
  // Create cached views (one-time allocation)
49
100
  this._epochView = new BigInt64Array(this._system, TRACE_ROOT_ANCHOR_EPOCH_OFFSET, 1);
50
101
  this._perfView = new Float64Array(this._system, TRACE_ROOT_ANCHOR_PERF_OFFSET, 1);
51
102
  // Write anchor data directly
52
103
  this._epochView[0] = anchorEpochNanos;
53
104
  this._perfView[0] = anchorPerfNow;
54
- // Keep exact monotonic anchor for JS fallback (avoid Number precision loss after ~104 days uptime)
55
- this._anchorHrtimeBigInt = anchorHrtimeBigInt;
56
- // Encode trace_id directly into buffer (no intermediate allocation)
57
- const u8View = new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_LEN_OFFSET);
58
- const traceIdDest = new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_OFFSET, trace_id.length);
59
- const { written } = textEncoder.encodeInto(trace_id, traceIdDest);
60
- u8View[0] = written;
105
+ this._epochHrtimeOffset = anchorEpochNanos - anchorHrtimeBigInt;
106
+ // Encode once into the canonical trace-owned view used by root span identities.
107
+ const { written } = textEncoder.encodeInto(trace_id, this._traceIdBytes);
108
+ new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_LEN_OFFSET, 1)[0] = written;
61
109
  }
62
110
  /**
63
111
  * Epoch time in nanoseconds when trace was created.
@@ -71,34 +119,19 @@ export class TraceRoot {
71
119
  get anchorPerfNow() {
72
120
  return this._perfView[0];
73
121
  }
74
- /**
75
- * Trace ID for this trace.
76
- */
77
- get trace_id() {
78
- const len = new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_LEN_OFFSET, 1)[0];
79
- return createTraceId(textDecoder.decode(new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_OFFSET, len)));
80
- }
81
122
  /**
82
123
  * Get current timestamp in nanoseconds since Unix epoch.
83
124
  * Uses process.hrtime.bigint() for true nanosecond precision.
84
125
  */
85
126
  getTimestampNanos() {
86
- const currentHrtime = process.hrtime.bigint();
87
- const elapsedNanos = currentHrtime - this._anchorHrtimeBigInt;
88
- return Nanoseconds.unsafe(this._epochView[0] + elapsedNanos);
127
+ return this._timestampNow(this);
89
128
  }
90
129
  /**
91
130
  * Write span-start entry to buffer at row 0.
92
131
  *
93
132
  */
94
133
  writeSpanStart(buffer, spanName) {
95
- buffer.timestamp[0] = this.getTimestampNanos();
96
- buffer.entry_type[0] = ENTRY_TYPE_SPAN_START;
97
- buffer.message(0, spanName);
98
- // Pre-initialize row 1 as span-exception
99
- buffer.entry_type[1] = ENTRY_TYPE_SPAN_EXCEPTION;
100
- buffer.timestamp[1] = 0n;
101
- buffer._writeIndex = 2;
134
+ this._writeSpanStart(this, buffer, spanName);
102
135
  }
103
136
  /**
104
137
  * Write span-end entry to buffer at row 1.
@@ -106,19 +139,14 @@ export class TraceRoot {
106
139
  *
107
140
  */
108
141
  writeSpanEnd(buffer, entryType) {
109
- buffer.timestamp[1] = this.getTimestampNanos();
110
- buffer.entry_type[1] = entryType;
142
+ this._writeSpanEnd(this, buffer, entryType);
111
143
  }
112
144
  /**
113
145
  * Write log entry: bump writeIndex, write timestamp + entry_type, return idx.
114
146
  * SpanLogger uses returned idx for string column writes.
115
147
  */
116
148
  writeLogEntry(buffer, entryType) {
117
- const idx = buffer._writeIndex;
118
- buffer.timestamp[idx] = this.getTimestampNanos();
119
- buffer.entry_type[idx] = entryType;
120
- buffer._writeIndex = idx + 1;
121
- return idx;
149
+ return this._appendLogEntry(this, buffer, entryType);
122
150
  }
123
151
  }
124
152
  /**
@@ -0,0 +1,42 @@
1
+ import type { RemapDescriptor } from './logBinding.js';
2
+ import type { LogSchema } from './schema/LogSchema.js';
3
+ import type { AnySpanBuffer, SpanBuffer } from './types.js';
4
+ export declare const NO_NODE = 4294967295;
5
+ export type SpanTreeVisitor = (buffer: AnySpanBuffer, remapDescriptor: RemapDescriptor | undefined) => void;
6
+ /** Trace-owned O(1) span topology arena. Overflow segments share their logical node. */
7
+ export declare class TraceTopology {
8
+ buffers: Array<AnySpanBuffer | undefined>;
9
+ firstChild: Uint32Array<ArrayBuffer>;
10
+ lastChild: Uint32Array<ArrayBuffer>;
11
+ nextSibling: Uint32Array<ArrayBuffer>;
12
+ count: number;
13
+ root: number;
14
+ generation: number;
15
+ private activeLeases;
16
+ private releasePending;
17
+ private pendingRelease;
18
+ constructor();
19
+ registerRoot(buffer: AnySpanBuffer): number;
20
+ registerChild(parent: AnySpanBuffer, child: AnySpanBuffer): number;
21
+ adoptOverflow(logicalBuffer: AnySpanBuffer, overflow: AnySpanBuffer): void;
22
+ assertLive(buffer: AnySpanBuffer): void;
23
+ /** Pin this topology generation until the returned idempotent release runs. */
24
+ acquireLease(): () => void;
25
+ get leaseCount(): number;
26
+ release(finalizer?: () => void): void;
27
+ private finishRelease;
28
+ private clearReleasedTopology;
29
+ private register;
30
+ private grow;
31
+ }
32
+ /** Allocation-free iterative preorder: logical node overflow chain, then children in insertion order. */
33
+ export declare function walkSpanTree(root: AnySpanBuffer, visitor: SpanTreeVisitor): void;
34
+ /** Allocation-free logical-tree depth-first walk with balanced enter/leave callbacks. */
35
+ export declare function walkLogicalSpanTree(root: AnySpanBuffer, enter: (buffer: AnySpanBuffer) => void, leave: (buffer: AnySpanBuffer) => void): void;
36
+ /** Iterate logical child buffers without materializing a child array. */
37
+ export declare function iterateSpanChildren<T extends LogSchema>(root: SpanBuffer<T>): Generator<SpanBuffer<T>>;
38
+ export declare function iterateSpanChildren(root: AnySpanBuffer): Generator<AnySpanBuffer>;
39
+ /** Iterate physical buffers in canonical preorder without recursion or temporary arrays. */
40
+ export declare function iterateSpanTree<T extends LogSchema>(root: SpanBuffer<T>): Generator<SpanBuffer<T>>;
41
+ export declare function iterateSpanTree(root: AnySpanBuffer): Generator<AnySpanBuffer>;
42
+ //# sourceMappingURL=traceTopology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceTopology.d.ts","sourceRoot":"","sources":["../../src/lib/traceTopology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,eAAO,MAAM,OAAO,aAAc,CAAC;AAInC,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;AAE5G,wFAAwF;AACxF,qBAAa,aAAa;IACxB,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC,CAA+B;IACxE,UAAU,2BAAqC;IAC/C,SAAS,2BAAqC;IAC9C,WAAW,2BAAqC;IAChD,KAAK,SAAK;IACV,IAAI,SAAW;IACf,UAAU,SAAK;IACf,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAA2B;IAEjD,cAIC;IAED,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAM1C;IAED,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAYjE;IAED,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAIzE;IAED,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAUtC;IAED,+EAA+E;IAC/E,YAAY,IAAI,MAAM,IAAI,CAYzB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CASpC;IAED,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,IAAI;CAmBb;AAED,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAiChF;AACD,yFAAyF;AACzF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,EACtC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GACrC,IAAI,CAoCN;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;AAanF,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,260 @@
1
+ export const NO_NODE = 4294967295;
2
+ const INITIAL_CAPACITY = 8;
3
+ const MAX_NODE_COUNT = NO_NODE;
4
+ /** Trace-owned O(1) span topology arena. Overflow segments share their logical node. */
5
+ export class TraceTopology {
6
+ buffers = new Array(INITIAL_CAPACITY);
7
+ firstChild = new Uint32Array(INITIAL_CAPACITY);
8
+ lastChild = new Uint32Array(INITIAL_CAPACITY);
9
+ nextSibling = new Uint32Array(INITIAL_CAPACITY);
10
+ count = 0;
11
+ root = NO_NODE;
12
+ generation = 1;
13
+ activeLeases = 0;
14
+ releasePending = false;
15
+ pendingRelease;
16
+ constructor() {
17
+ this.firstChild.fill(NO_NODE);
18
+ this.lastChild.fill(NO_NODE);
19
+ this.nextSibling.fill(NO_NODE);
20
+ }
21
+ registerRoot(buffer) {
22
+ if (this.count !== 0 || this.root !== NO_NODE)
23
+ throw new Error('Trace topology root is already registered');
24
+ const index = this.register(buffer);
25
+ if (index !== 0)
26
+ throw new Error('Trace topology root must have index 0');
27
+ this.root = index;
28
+ return index;
29
+ }
30
+ registerChild(parent, child) {
31
+ this.assertLive(parent);
32
+ const parentIndex = parent._nodeIndex;
33
+ const childIndex = this.register(child);
34
+ const previous = this.lastChild[parentIndex];
35
+ if (previous === NO_NODE) {
36
+ this.firstChild[parentIndex] = childIndex;
37
+ }
38
+ else {
39
+ this.nextSibling[previous] = childIndex;
40
+ }
41
+ this.lastChild[parentIndex] = childIndex;
42
+ return childIndex;
43
+ }
44
+ adoptOverflow(logicalBuffer, overflow) {
45
+ this.assertLive(logicalBuffer);
46
+ overflow._nodeIndex = logicalBuffer._nodeIndex;
47
+ overflow._topologyGeneration = this.generation;
48
+ }
49
+ assertLive(buffer) {
50
+ if (this.releasePending ||
51
+ buffer._traceRoot._topology !== this ||
52
+ buffer._topologyGeneration !== this.generation ||
53
+ buffer._nodeIndex >= this.count ||
54
+ this.buffers[buffer._nodeIndex] === undefined) {
55
+ throw new Error('Span buffer topology handle is stale');
56
+ }
57
+ }
58
+ /** Pin this topology generation until the returned idempotent release runs. */
59
+ acquireLease() {
60
+ if (this.releasePending || this.count === 0 || this.root === NO_NODE) {
61
+ throw new Error('Cannot lease a released span topology');
62
+ }
63
+ this.activeLeases++;
64
+ let released = false;
65
+ return () => {
66
+ if (released)
67
+ return;
68
+ released = true;
69
+ this.activeLeases--;
70
+ if (this.activeLeases === 0 && this.releasePending)
71
+ this.finishRelease();
72
+ };
73
+ }
74
+ get leaseCount() {
75
+ return this.activeLeases;
76
+ }
77
+ release(finalizer) {
78
+ if (this.releasePending)
79
+ throw new Error('Span buffer topology release is already pending');
80
+ if (this.activeLeases !== 0) {
81
+ this.releasePending = true;
82
+ this.pendingRelease = finalizer;
83
+ return;
84
+ }
85
+ finalizer?.();
86
+ this.clearReleasedTopology();
87
+ }
88
+ finishRelease() {
89
+ const finalizer = this.pendingRelease;
90
+ this.pendingRelease = undefined;
91
+ finalizer?.();
92
+ this.clearReleasedTopology();
93
+ }
94
+ clearReleasedTopology() {
95
+ this.releasePending = false;
96
+ for (let index = 0; index < this.count; index++)
97
+ this.buffers[index] = undefined;
98
+ this.firstChild.fill(NO_NODE);
99
+ this.lastChild.fill(NO_NODE);
100
+ this.nextSibling.fill(NO_NODE);
101
+ this.count = 0;
102
+ this.root = NO_NODE;
103
+ this.generation++;
104
+ if (this.generation === 0)
105
+ this.generation = 1;
106
+ }
107
+ register(buffer) {
108
+ if (this.count === MAX_NODE_COUNT)
109
+ throw new RangeError('Trace topology node limit exceeded');
110
+ if (this.count === this.buffers.length)
111
+ this.grow();
112
+ const index = this.count++;
113
+ this.buffers[index] = buffer;
114
+ buffer._nodeIndex = index;
115
+ buffer._topologyGeneration = this.generation;
116
+ return index;
117
+ }
118
+ grow() {
119
+ const current = this.buffers.length;
120
+ const next = current * 2;
121
+ if (!Number.isSafeInteger(next) || next > MAX_NODE_COUNT)
122
+ throw new RangeError('Trace topology capacity overflow');
123
+ this.buffers.length = next;
124
+ const firstChild = new Uint32Array(next);
125
+ const lastChild = new Uint32Array(next);
126
+ const nextSibling = new Uint32Array(next);
127
+ firstChild.fill(NO_NODE);
128
+ lastChild.fill(NO_NODE);
129
+ nextSibling.fill(NO_NODE);
130
+ firstChild.set(this.firstChild);
131
+ lastChild.set(this.lastChild);
132
+ nextSibling.set(this.nextSibling);
133
+ this.firstChild = firstChild;
134
+ this.lastChild = lastChild;
135
+ this.nextSibling = nextSibling;
136
+ }
137
+ }
138
+ /** Allocation-free iterative preorder: logical node overflow chain, then children in insertion order. */
139
+ export function walkSpanTree(root, visitor) {
140
+ const topology = root._traceRoot._topology;
141
+ topology.assertLive(root);
142
+ const subtreeRoot = root._nodeIndex;
143
+ let nodeIndex = subtreeRoot;
144
+ for (;;) {
145
+ const logical = topology.buffers[nodeIndex];
146
+ if (!logical)
147
+ throw new Error('Trace topology references a released span buffer');
148
+ let segment = logical;
149
+ while (segment) {
150
+ visitor(segment, logical._remapDescriptor);
151
+ segment = segment._overflow;
152
+ }
153
+ const child = topology.firstChild[nodeIndex];
154
+ if (child !== NO_NODE) {
155
+ nodeIndex = child;
156
+ continue;
157
+ }
158
+ for (;;) {
159
+ if (nodeIndex === subtreeRoot)
160
+ return;
161
+ const sibling = topology.nextSibling[nodeIndex];
162
+ if (sibling !== NO_NODE) {
163
+ nodeIndex = sibling;
164
+ break;
165
+ }
166
+ const current = topology.buffers[nodeIndex];
167
+ if (!current?._parent)
168
+ throw new Error('Trace topology parent link is missing');
169
+ nodeIndex = current._parent._nodeIndex;
170
+ }
171
+ }
172
+ }
173
+ /** Allocation-free logical-tree depth-first walk with balanced enter/leave callbacks. */
174
+ export function walkLogicalSpanTree(root, enter, leave) {
175
+ const topology = root._traceRoot._topology;
176
+ topology.assertLive(root);
177
+ const subtreeRoot = root._nodeIndex;
178
+ let nodeIndex = subtreeRoot;
179
+ let logical = topology.buffers[nodeIndex];
180
+ if (!logical)
181
+ throw new Error('Trace topology references a released span buffer');
182
+ enter(logical);
183
+ for (;;) {
184
+ const child = topology.firstChild[nodeIndex];
185
+ if (child !== NO_NODE) {
186
+ nodeIndex = child;
187
+ logical = topology.buffers[nodeIndex];
188
+ if (!logical)
189
+ throw new Error('Trace topology references a released span buffer');
190
+ enter(logical);
191
+ continue;
192
+ }
193
+ for (;;) {
194
+ logical = topology.buffers[nodeIndex];
195
+ if (!logical)
196
+ throw new Error('Trace topology references a released span buffer');
197
+ leave(logical);
198
+ if (nodeIndex === subtreeRoot)
199
+ return;
200
+ const sibling = topology.nextSibling[nodeIndex];
201
+ if (sibling !== NO_NODE) {
202
+ nodeIndex = sibling;
203
+ logical = topology.buffers[nodeIndex];
204
+ if (!logical)
205
+ throw new Error('Trace topology references a released span buffer');
206
+ enter(logical);
207
+ break;
208
+ }
209
+ if (!logical._parent)
210
+ throw new Error('Trace topology parent link is missing');
211
+ nodeIndex = logical._parent._nodeIndex;
212
+ }
213
+ }
214
+ }
215
+ export function* iterateSpanChildren(root) {
216
+ const topology = root._traceRoot._topology;
217
+ topology.assertLive(root);
218
+ let child = topology.firstChild[root._nodeIndex];
219
+ while (child !== NO_NODE) {
220
+ const buffer = topology.buffers[child];
221
+ if (!buffer)
222
+ throw new Error('Trace topology references a released span buffer');
223
+ yield buffer;
224
+ child = topology.nextSibling[child];
225
+ }
226
+ }
227
+ export function* iterateSpanTree(root) {
228
+ const topology = root._traceRoot._topology;
229
+ topology.assertLive(root);
230
+ const subtreeRoot = root._nodeIndex;
231
+ let nodeIndex = subtreeRoot;
232
+ for (;;) {
233
+ const logical = topology.buffers[nodeIndex];
234
+ if (!logical)
235
+ throw new Error('Trace topology references a released span buffer');
236
+ let segment = logical;
237
+ while (segment) {
238
+ yield segment;
239
+ segment = segment._overflow;
240
+ }
241
+ const child = topology.firstChild[nodeIndex];
242
+ if (child !== NO_NODE) {
243
+ nodeIndex = child;
244
+ continue;
245
+ }
246
+ for (;;) {
247
+ if (nodeIndex === subtreeRoot)
248
+ return;
249
+ const sibling = topology.nextSibling[nodeIndex];
250
+ if (sibling !== NO_NODE) {
251
+ nodeIndex = sibling;
252
+ break;
253
+ }
254
+ const current = topology.buffers[nodeIndex];
255
+ if (!current?._parent)
256
+ throw new Error('Trace topology parent link is missing');
257
+ nodeIndex = current._parent._nodeIndex;
258
+ }
259
+ }
260
+ }
@@ -64,7 +64,7 @@ import type { OpContext, OpContextBinding, OpContextOf, SpanContext } from './op
64
64
  import { type Result } from './result.js';
65
65
  import { type FlagEvaluator } from './schema/evaluator.js';
66
66
  import { type TraceId } from './traceId.js';
67
- import type { TraceRootFactory } from './traceRoot.js';
67
+ import type { TraceRootFactory, TracerLifecycleHooks } from './traceRoot.js';
68
68
  import type { SpanBuffer } from './types.js';
69
69
  /**
70
70
  * Base tracer options (can be extended by subclasses)
@@ -86,7 +86,7 @@ export interface TracerOptions<T extends import('./schema/LogSchema.js').LogSche
86
86
  * Factory for creating platform-specific TraceRoot instances.
87
87
  * Import from '@smoothbricks/lmao/node' or '@smoothbricks/lmao/es'.
88
88
  */
89
- createTraceRoot: TraceRootFactory;
89
+ createTraceRoot: TraceRootFactory<T>;
90
90
  /** Feature flag evaluator - provides flag values at runtime */
91
91
  flagEvaluator?: FlagEvaluator<OpContext>;
92
92
  }
@@ -169,11 +169,13 @@ export type TraceFn<Ctx extends OpContext> = {
169
169
  *
170
170
  * @typeParam B - OpContextBinding type (inferred from constructor argument)
171
171
  */
172
- export declare abstract class Tracer<B extends OpContextBinding = OpContextBinding> {
172
+ export declare abstract class Tracer<B extends OpContextBinding = OpContextBinding> implements TracerLifecycleHooks<B['logBinding']['logSchema']> {
173
173
  private readonly logBinding;
174
174
  private readonly SpanContextClass;
175
+ private readonly physicalLayoutPlan;
175
176
  private readonly flagEvaluator;
176
177
  private readonly ctxDefaults;
178
+ private readonly requiredCtxKeys;
177
179
  private readonly deps;
178
180
  private readonly createTraceRoot;
179
181
  /**
@@ -183,6 +185,7 @@ export declare abstract class Tracer<B extends OpContextBinding = OpContextBindi
183
185
  */
184
186
  readonly bufferStrategy: BufferStrategy<B['logBinding']['logSchema']>;
185
187
  constructor(binding: B, options: TracerOptions<B['logBinding']['logSchema']>);
188
+ getFlagEvaluatorForContext(): FlagEvaluator<OpContextOf<B>>;
186
189
  private _createFlagEvaluator;
187
190
  /**
188
191
  * Called when a root trace starts (before fn execution).
@@ -275,14 +278,15 @@ export declare abstract class Tracer<B extends OpContextBinding = OpContextBindi
275
278
  trace_fn<R>(line: number, name: string, overrides: TraceOverrides<OpContextOf<B>['userCtx']>, fn: (ctx: SpanContext<OpContextOf<B>>) => R): R;
276
279
  private _createRootContext;
277
280
  /**
278
- * Validate null-sentinel required fields and merge with provided overrides.
281
+ * Validate null-sentinel required fields without materializing a merged
282
+ * user-context carrier.
279
283
  *
280
284
  * Per the ctx config pattern:
281
285
  * - Properties with null values in ctxDefaults must be provided in overrides
282
286
  * - Properties with default values can optionally be overridden
283
287
  * - undefined is allowed for optional fields
284
288
  */
285
- private _resolveUserContext;
289
+ private _validateRequiredUserContext;
286
290
  /**
287
291
  * Execute function with context and handle span-ok/span-err/span-exception writes
288
292
  * Promise-agnostic: returns sync for sync fn, Promise for async fn
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/lib/tracer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/lib/tracer.ts"],"names":[],"mappings":"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"}