@smoothbricks/lmao 0.1.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 (447) hide show
  1. package/README.md +269 -0
  2. package/dist/allocator.wasm +0 -0
  3. package/dist/bun/preload.d.ts +11 -0
  4. package/dist/bun/preload.d.ts.map +1 -0
  5. package/dist/bun/preload.js +10 -0
  6. package/dist/bun/trace-preload.d.ts +8 -0
  7. package/dist/bun/trace-preload.d.ts.map +1 -0
  8. package/dist/bun/trace-preload.js +12 -0
  9. package/dist/es.d.ts +8 -0
  10. package/dist/es.d.ts.map +1 -0
  11. package/dist/es.js +9 -0
  12. package/dist/index.d.ts +41 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +84 -0
  15. package/dist/lib/JsBufferStrategy.d.ts +49 -0
  16. package/dist/lib/JsBufferStrategy.d.ts.map +1 -0
  17. package/dist/lib/JsBufferStrategy.js +60 -0
  18. package/dist/lib/archive/chunkCompaction.d.ts +15 -0
  19. package/dist/lib/archive/chunkCompaction.d.ts.map +1 -0
  20. package/dist/lib/archive/chunkCompaction.js +24 -0
  21. package/dist/lib/archive/chunkEnvelope.d.ts +21 -0
  22. package/dist/lib/archive/chunkEnvelope.d.ts.map +1 -0
  23. package/dist/lib/archive/chunkEnvelope.js +55 -0
  24. package/dist/lib/archive/chunkRouting.d.ts +10 -0
  25. package/dist/lib/archive/chunkRouting.d.ts.map +1 -0
  26. package/dist/lib/archive/chunkRouting.js +47 -0
  27. package/dist/lib/archive/chunkStats.d.ts +12 -0
  28. package/dist/lib/archive/chunkStats.d.ts.map +1 -0
  29. package/dist/lib/archive/chunkStats.js +10 -0
  30. package/dist/lib/archive/index.d.ts +5 -0
  31. package/dist/lib/archive/index.d.ts.map +1 -0
  32. package/dist/lib/archive/index.js +4 -0
  33. package/dist/lib/arrow/capacityStats.d.ts +9 -0
  34. package/dist/lib/arrow/capacityStats.d.ts.map +1 -0
  35. package/dist/lib/arrow/capacityStats.js +231 -0
  36. package/dist/lib/arrow/dictionaries.d.ts +27 -0
  37. package/dist/lib/arrow/dictionaries.d.ts.map +1 -0
  38. package/dist/lib/arrow/dictionaries.js +135 -0
  39. package/dist/lib/arrow/flechette.d.ts +40 -0
  40. package/dist/lib/arrow/flechette.d.ts.map +1 -0
  41. package/dist/lib/arrow/flechette.js +67 -0
  42. package/dist/lib/arrow/utils.d.ts +38 -0
  43. package/dist/lib/arrow/utils.d.ts.map +1 -0
  44. package/dist/lib/arrow/utils.js +112 -0
  45. package/dist/lib/buffer/Nanoseconds.d.ts +109 -0
  46. package/dist/lib/buffer/Nanoseconds.d.ts.map +1 -0
  47. package/dist/lib/buffer/Nanoseconds.js +86 -0
  48. package/dist/lib/bufferStrategy.d.ts +95 -0
  49. package/dist/lib/bufferStrategy.d.ts.map +1 -0
  50. package/dist/lib/bufferStrategy.js +1 -0
  51. package/dist/lib/capacityTuning.d.ts +50 -0
  52. package/dist/lib/capacityTuning.d.ts.map +1 -0
  53. package/dist/lib/capacityTuning.js +65 -0
  54. package/dist/lib/codegen/evaluatorGenerator.d.ts +35 -0
  55. package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -0
  56. package/dist/lib/codegen/evaluatorGenerator.js +199 -0
  57. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +139 -0
  58. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -0
  59. package/dist/lib/codegen/fixedPositionWriterGenerator.js +289 -0
  60. package/dist/lib/codegen/spanLoggerGenerator.d.ts +115 -0
  61. package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -0
  62. package/dist/lib/codegen/spanLoggerGenerator.js +575 -0
  63. package/dist/lib/convertToArrow.d.ts +40 -0
  64. package/dist/lib/convertToArrow.d.ts.map +1 -0
  65. package/dist/lib/convertToArrow.js +1467 -0
  66. package/dist/lib/defineOpContext.d.ts +96 -0
  67. package/dist/lib/defineOpContext.d.ts.map +1 -0
  68. package/dist/lib/defineOpContext.js +227 -0
  69. package/dist/lib/errors/Blocked.d.ts +113 -0
  70. package/dist/lib/errors/Blocked.d.ts.map +1 -0
  71. package/dist/lib/errors/Blocked.js +68 -0
  72. package/dist/lib/errors/CodeError.d.ts +101 -0
  73. package/dist/lib/errors/CodeError.d.ts.map +1 -0
  74. package/dist/lib/errors/CodeError.js +42 -0
  75. package/dist/lib/errors/RetriesExhausted.d.ts +67 -0
  76. package/dist/lib/errors/RetriesExhausted.d.ts.map +1 -0
  77. package/dist/lib/errors/RetriesExhausted.js +31 -0
  78. package/dist/lib/errors/Transient.d.ts +115 -0
  79. package/dist/lib/errors/Transient.d.ts.map +1 -0
  80. package/dist/lib/errors/Transient.js +54 -0
  81. package/dist/lib/errors/index.d.ts +14 -0
  82. package/dist/lib/errors/index.d.ts.map +1 -0
  83. package/dist/lib/errors/index.js +16 -0
  84. package/dist/lib/errors/retry-policy.d.ts +60 -0
  85. package/dist/lib/errors/retry-policy.d.ts.map +1 -0
  86. package/dist/lib/errors/retry-policy.js +54 -0
  87. package/dist/lib/flushScheduler.d.ts +162 -0
  88. package/dist/lib/flushScheduler.d.ts.map +1 -0
  89. package/dist/lib/flushScheduler.js +388 -0
  90. package/dist/lib/library.d.ts +149 -0
  91. package/dist/lib/library.d.ts.map +1 -0
  92. package/dist/lib/library.js +588 -0
  93. package/dist/lib/logApi.d.ts +61 -0
  94. package/dist/lib/logApi.d.ts.map +1 -0
  95. package/dist/lib/logApi.js +12 -0
  96. package/dist/lib/logBinding.d.ts +63 -0
  97. package/dist/lib/logBinding.d.ts.map +1 -0
  98. package/dist/lib/logBinding.js +1 -0
  99. package/dist/lib/op.d.ts +105 -0
  100. package/dist/lib/op.d.ts.map +1 -0
  101. package/dist/lib/op.js +59 -0
  102. package/dist/lib/opContext/contextTypes.d.ts +88 -0
  103. package/dist/lib/opContext/contextTypes.d.ts.map +1 -0
  104. package/dist/lib/opContext/contextTypes.js +34 -0
  105. package/dist/lib/opContext/createOpGroup.d.ts +57 -0
  106. package/dist/lib/opContext/createOpGroup.d.ts.map +1 -0
  107. package/dist/lib/opContext/createOpGroup.js +341 -0
  108. package/dist/lib/opContext/defineOp.d.ts +83 -0
  109. package/dist/lib/opContext/defineOp.d.ts.map +1 -0
  110. package/dist/lib/opContext/defineOp.js +197 -0
  111. package/dist/lib/opContext/featureFlagTypes.d.ts +58 -0
  112. package/dist/lib/opContext/featureFlagTypes.d.ts.map +1 -0
  113. package/dist/lib/opContext/featureFlagTypes.js +1 -0
  114. package/dist/lib/opContext/index.d.ts +13 -0
  115. package/dist/lib/opContext/index.d.ts.map +1 -0
  116. package/dist/lib/opContext/index.js +15 -0
  117. package/dist/lib/opContext/opGroupTypes.d.ts +250 -0
  118. package/dist/lib/opContext/opGroupTypes.d.ts.map +1 -0
  119. package/dist/lib/opContext/opGroupTypes.js +31 -0
  120. package/dist/lib/opContext/opTypes.d.ts +48 -0
  121. package/dist/lib/opContext/opTypes.d.ts.map +1 -0
  122. package/dist/lib/opContext/opTypes.js +7 -0
  123. package/dist/lib/opContext/spanContextTypes.d.ts +347 -0
  124. package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -0
  125. package/dist/lib/opContext/spanContextTypes.js +1 -0
  126. package/dist/lib/opContext/types.d.ts +297 -0
  127. package/dist/lib/opContext/types.d.ts.map +1 -0
  128. package/dist/lib/opContext/types.js +16 -0
  129. package/dist/lib/result.d.ts +308 -0
  130. package/dist/lib/result.d.ts.map +1 -0
  131. package/dist/lib/result.js +359 -0
  132. package/dist/lib/schema/LogSchema.d.ts +62 -0
  133. package/dist/lib/schema/LogSchema.d.ts.map +1 -0
  134. package/dist/lib/schema/LogSchema.js +134 -0
  135. package/dist/lib/schema/builder.d.ts +12 -0
  136. package/dist/lib/schema/builder.d.ts.map +1 -0
  137. package/dist/lib/schema/builder.js +169 -0
  138. package/dist/lib/schema/defineFeatureFlags.d.ts +60 -0
  139. package/dist/lib/schema/defineFeatureFlags.d.ts.map +1 -0
  140. package/dist/lib/schema/defineFeatureFlags.js +29 -0
  141. package/dist/lib/schema/defineLogSchema.d.ts +87 -0
  142. package/dist/lib/schema/defineLogSchema.d.ts.map +1 -0
  143. package/dist/lib/schema/defineLogSchema.js +171 -0
  144. package/dist/lib/schema/evaluator.d.ts +267 -0
  145. package/dist/lib/schema/evaluator.d.ts.map +1 -0
  146. package/dist/lib/schema/evaluator.js +169 -0
  147. package/dist/lib/schema/extend.d.ts +14 -0
  148. package/dist/lib/schema/extend.d.ts.map +1 -0
  149. package/dist/lib/schema/extend.js +51 -0
  150. package/dist/lib/schema/systemSchema.d.ts +112 -0
  151. package/dist/lib/schema/systemSchema.d.ts.map +1 -0
  152. package/dist/lib/schema/systemSchema.js +260 -0
  153. package/dist/lib/schema/typeGuards.d.ts +52 -0
  154. package/dist/lib/schema/typeGuards.d.ts.map +1 -0
  155. package/dist/lib/schema/typeGuards.js +127 -0
  156. package/dist/lib/schema/types.d.ts +156 -0
  157. package/dist/lib/schema/types.d.ts.map +1 -0
  158. package/dist/lib/schema/types.js +4 -0
  159. package/dist/lib/spanBuffer.d.ts +133 -0
  160. package/dist/lib/spanBuffer.d.ts.map +1 -0
  161. package/dist/lib/spanBuffer.js +442 -0
  162. package/dist/lib/spanBufferHelpers.d.ts +53 -0
  163. package/dist/lib/spanBufferHelpers.d.ts.map +1 -0
  164. package/dist/lib/spanBufferHelpers.js +65 -0
  165. package/dist/lib/spanBufferStats.d.ts +38 -0
  166. package/dist/lib/spanBufferStats.d.ts.map +1 -0
  167. package/dist/lib/spanBufferStats.js +1 -0
  168. package/dist/lib/spanContext.d.ts +141 -0
  169. package/dist/lib/spanContext.d.ts.map +1 -0
  170. package/dist/lib/spanContext.js +763 -0
  171. package/dist/lib/sqlite/index.d.ts +14 -0
  172. package/dist/lib/sqlite/index.d.ts.map +1 -0
  173. package/dist/lib/sqlite/index.js +12 -0
  174. package/dist/lib/sqlite/sqlite-async-writer.d.ts +24 -0
  175. package/dist/lib/sqlite/sqlite-async-writer.d.ts.map +1 -0
  176. package/dist/lib/sqlite/sqlite-async-writer.js +65 -0
  177. package/dist/lib/sqlite/sqlite-common.d.ts +37 -0
  178. package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -0
  179. package/dist/lib/sqlite/sqlite-common.js +207 -0
  180. package/dist/lib/sqlite/sqlite-d1.d.ts +25 -0
  181. package/dist/lib/sqlite/sqlite-d1.d.ts.map +1 -0
  182. package/dist/lib/sqlite/sqlite-d1.js +67 -0
  183. package/dist/lib/sqlite/sqlite-db.d.ts +29 -0
  184. package/dist/lib/sqlite/sqlite-db.d.ts.map +1 -0
  185. package/dist/lib/sqlite/sqlite-db.js +1 -0
  186. package/dist/lib/sqlite/sqlite-node.d.ts +16 -0
  187. package/dist/lib/sqlite/sqlite-node.d.ts.map +1 -0
  188. package/dist/lib/sqlite/sqlite-node.js +68 -0
  189. package/dist/lib/sqlite/sqlite-writer.d.ts +39 -0
  190. package/dist/lib/sqlite/sqlite-writer.d.ts.map +1 -0
  191. package/dist/lib/sqlite/sqlite-writer.js +78 -0
  192. package/dist/lib/testing/bun-harness.d.ts +150 -0
  193. package/dist/lib/testing/bun-harness.d.ts.map +1 -0
  194. package/dist/lib/testing/bun-harness.js +729 -0
  195. package/dist/lib/testing/extractFacts.d.ts +73 -0
  196. package/dist/lib/testing/extractFacts.d.ts.map +1 -0
  197. package/dist/lib/testing/extractFacts.js +237 -0
  198. package/dist/lib/testing/facts.d.ts +235 -0
  199. package/dist/lib/testing/facts.d.ts.map +1 -0
  200. package/dist/lib/testing/facts.js +209 -0
  201. package/dist/lib/testing/index.d.ts +58 -0
  202. package/dist/lib/testing/index.d.ts.map +1 -0
  203. package/dist/lib/testing/index.js +74 -0
  204. package/dist/lib/testing/queryable-span.d.ts +39 -0
  205. package/dist/lib/testing/queryable-span.d.ts.map +1 -0
  206. package/dist/lib/testing/queryable-span.js +58 -0
  207. package/dist/lib/testing/span-query.d.ts +21 -0
  208. package/dist/lib/testing/span-query.d.ts.map +1 -0
  209. package/dist/lib/testing/span-query.js +47 -0
  210. package/dist/lib/testing/stdio-replay.d.ts +4 -0
  211. package/dist/lib/testing/stdio-replay.d.ts.map +1 -0
  212. package/dist/lib/testing/stdio-replay.js +42 -0
  213. package/dist/lib/testing/trace-query.d.ts +59 -0
  214. package/dist/lib/testing/trace-query.d.ts.map +1 -0
  215. package/dist/lib/testing/trace-query.js +462 -0
  216. package/dist/lib/testing/vitest-harness.d.ts +135 -0
  217. package/dist/lib/testing/vitest-harness.d.ts.map +1 -0
  218. package/dist/lib/testing/vitest-harness.js +486 -0
  219. package/dist/lib/threadId.d.ts +58 -0
  220. package/dist/lib/threadId.d.ts.map +1 -0
  221. package/dist/lib/threadId.js +123 -0
  222. package/dist/lib/traceContext.d.ts +116 -0
  223. package/dist/lib/traceContext.d.ts.map +1 -0
  224. package/dist/lib/traceContext.js +37 -0
  225. package/dist/lib/traceId.d.ts +78 -0
  226. package/dist/lib/traceId.d.ts.map +1 -0
  227. package/dist/lib/traceId.js +87 -0
  228. package/dist/lib/traceRoot.d.ts +133 -0
  229. package/dist/lib/traceRoot.d.ts.map +1 -0
  230. package/dist/lib/traceRoot.es.d.ts +75 -0
  231. package/dist/lib/traceRoot.es.d.ts.map +1 -0
  232. package/dist/lib/traceRoot.es.js +129 -0
  233. package/dist/lib/traceRoot.js +19 -0
  234. package/dist/lib/traceRoot.node.d.ts +77 -0
  235. package/dist/lib/traceRoot.node.d.ts.map +1 -0
  236. package/dist/lib/traceRoot.node.js +133 -0
  237. package/dist/lib/traceRoot.universal.d.ts +3 -0
  238. package/dist/lib/traceRoot.universal.d.ts.map +1 -0
  239. package/dist/lib/traceRoot.universal.js +17 -0
  240. package/dist/lib/tracer.d.ts +296 -0
  241. package/dist/lib/tracer.d.ts.map +1 -0
  242. package/dist/lib/tracer.js +346 -0
  243. package/dist/lib/tracers/ArrayQueueTracer.d.ts +56 -0
  244. package/dist/lib/tracers/ArrayQueueTracer.d.ts.map +1 -0
  245. package/dist/lib/tracers/ArrayQueueTracer.js +67 -0
  246. package/dist/lib/tracers/CompositeTracer.d.ts +24 -0
  247. package/dist/lib/tracers/CompositeTracer.d.ts.map +1 -0
  248. package/dist/lib/tracers/CompositeTracer.js +57 -0
  249. package/dist/lib/tracers/NoOpTracer.d.ts +58 -0
  250. package/dist/lib/tracers/NoOpTracer.d.ts.map +1 -0
  251. package/dist/lib/tracers/NoOpTracer.js +41 -0
  252. package/dist/lib/tracers/SQLiteTracer.d.ts +42 -0
  253. package/dist/lib/tracers/SQLiteTracer.d.ts.map +1 -0
  254. package/dist/lib/tracers/SQLiteTracer.js +84 -0
  255. package/dist/lib/tracers/StdioTracer.d.ts +83 -0
  256. package/dist/lib/tracers/StdioTracer.d.ts.map +1 -0
  257. package/dist/lib/tracers/StdioTracer.js +270 -0
  258. package/dist/lib/tracers/TestTracer.d.ts +95 -0
  259. package/dist/lib/tracers/TestTracer.d.ts.map +1 -0
  260. package/dist/lib/tracers/TestTracer.js +87 -0
  261. package/dist/lib/tracers/index.d.ts +12 -0
  262. package/dist/lib/tracers/index.d.ts.map +1 -0
  263. package/dist/lib/tracers/index.js +11 -0
  264. package/dist/lib/types.d.ts +366 -0
  265. package/dist/lib/types.d.ts.map +1 -0
  266. package/dist/lib/types.js +1 -0
  267. package/dist/lib/utf8Cache.d.ts +111 -0
  268. package/dist/lib/utf8Cache.d.ts.map +1 -0
  269. package/dist/lib/utf8Cache.js +177 -0
  270. package/dist/lib/wasm/WasmBufferStrategy.d.ts +88 -0
  271. package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -0
  272. package/dist/lib/wasm/WasmBufferStrategy.js +138 -0
  273. package/dist/lib/wasm/wasmAllocator.d.ts +109 -0
  274. package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -0
  275. package/dist/lib/wasm/wasmAllocator.js +227 -0
  276. package/dist/lib/wasm/wasmSpanBuffer.d.ts +123 -0
  277. package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -0
  278. package/dist/lib/wasm/wasmSpanBuffer.js +772 -0
  279. package/dist/lib/wasm/wasmTraceRoot.d.ts +167 -0
  280. package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -0
  281. package/dist/lib/wasm/wasmTraceRoot.js +264 -0
  282. package/dist/node.d.ts +7 -0
  283. package/dist/node.d.ts.map +1 -0
  284. package/dist/node.js +8 -0
  285. package/dist/testing.d.ts +18 -0
  286. package/dist/testing.d.ts.map +1 -0
  287. package/dist/testing.js +17 -0
  288. package/package.json +193 -0
  289. package/src/bun/preload.ts +11 -0
  290. package/src/bun/trace-preload.ts +14 -0
  291. package/src/es.ts +11 -0
  292. package/src/index.ts +194 -0
  293. package/src/lib/JsBufferStrategy.ts +102 -0
  294. package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +485 -0
  295. package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +390 -0
  296. package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +647 -0
  297. package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +292 -0
  298. package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +354 -0
  299. package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +127 -0
  300. package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +392 -0
  301. package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +389 -0
  302. package/src/lib/__tests__/arrow-conversion-algorithms.test.ts +54 -0
  303. package/src/lib/__tests__/arrow-test-helpers.ts +71 -0
  304. package/src/lib/__tests__/binary-e2e.test.ts +203 -0
  305. package/src/lib/__tests__/buffer-overflow-op-api.test.ts +608 -0
  306. package/src/lib/__tests__/buffer-overflow.test.ts +612 -0
  307. package/src/lib/__tests__/capacity-tuning.test.ts +544 -0
  308. package/src/lib/__tests__/effective-schema.test.ts +439 -0
  309. package/src/lib/__tests__/flechette.test.ts +42 -0
  310. package/src/lib/__tests__/flushScheduler.test.ts +537 -0
  311. package/src/lib/__tests__/integration.test.ts +600 -0
  312. package/src/lib/__tests__/library.test.ts +934 -0
  313. package/src/lib/__tests__/nested-library-tasks.test.ts +849 -0
  314. package/src/lib/__tests__/op-context-binding.test.ts +135 -0
  315. package/src/lib/__tests__/op-metadata.test.ts +198 -0
  316. package/src/lib/__tests__/op-type-safety.test.ts +71 -0
  317. package/src/lib/__tests__/package-exports.test.ts +57 -0
  318. package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +319 -0
  319. package/src/lib/__tests__/remapped-buffer-view.test.ts +635 -0
  320. package/src/lib/__tests__/scope-attributes.test.ts +348 -0
  321. package/src/lib/__tests__/span-lifecycle.test.ts +680 -0
  322. package/src/lib/__tests__/sync-async-trace.test.ts +435 -0
  323. package/src/lib/__tests__/test-helpers.ts +318 -0
  324. package/src/lib/__tests__/timestamp.test.ts +259 -0
  325. package/src/lib/__tests__/trace-archive-primitives.test.ts +98 -0
  326. package/src/lib/__tests__/traceContext-type-enforcement.test.ts +271 -0
  327. package/src/lib/__tests__/tracer.test.ts +211 -0
  328. package/src/lib/__tests__/type-narrowing.test.ts +137 -0
  329. package/src/lib/archive/chunkCompaction.ts +44 -0
  330. package/src/lib/archive/chunkEnvelope.ts +79 -0
  331. package/src/lib/archive/chunkRouting.ts +70 -0
  332. package/src/lib/archive/chunkStats.ts +25 -0
  333. package/src/lib/archive/index.ts +4 -0
  334. package/src/lib/arrow/capacityStats.ts +340 -0
  335. package/src/lib/arrow/dictionaries.ts +159 -0
  336. package/src/lib/arrow/flechette.ts +114 -0
  337. package/src/lib/arrow/utils.ts +126 -0
  338. package/src/lib/buffer/Nanoseconds.ts +131 -0
  339. package/src/lib/bufferStrategy.ts +106 -0
  340. package/src/lib/capacityTuning.ts +102 -0
  341. package/src/lib/codegen/__tests__/__snapshots__/evaluatorGenerator.test.ts.snap +160 -0
  342. package/src/lib/codegen/__tests__/__snapshots__/scopeGenerator.test.ts.snap +196 -0
  343. package/src/lib/codegen/__tests__/__snapshots__/spanLoggerGenerator.test.ts.snap +1965 -0
  344. package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +516 -0
  345. package/src/lib/codegen/__tests__/nullBitmap.test.ts +207 -0
  346. package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +237 -0
  347. package/src/lib/codegen/evaluatorGenerator.ts +309 -0
  348. package/src/lib/codegen/fixedPositionWriterGenerator.ts +444 -0
  349. package/src/lib/codegen/spanLoggerGenerator.ts +715 -0
  350. package/src/lib/convertToArrow.ts +1805 -0
  351. package/src/lib/defineOpContext.ts +398 -0
  352. package/src/lib/errors/Blocked.ts +165 -0
  353. package/src/lib/errors/CodeError.ts +132 -0
  354. package/src/lib/errors/RetriesExhausted.ts +78 -0
  355. package/src/lib/errors/Transient.ts +168 -0
  356. package/src/lib/errors/__tests__/Blocked-config.test.ts +152 -0
  357. package/src/lib/errors/__tests__/Transient.test.ts +129 -0
  358. package/src/lib/errors/__tests__/retry-policy.test.ts +85 -0
  359. package/src/lib/errors/index.ts +24 -0
  360. package/src/lib/errors/retry-policy.ts +87 -0
  361. package/src/lib/flushScheduler.ts +509 -0
  362. package/src/lib/library.ts +682 -0
  363. package/src/lib/logApi.ts +70 -0
  364. package/src/lib/logBinding.ts +67 -0
  365. package/src/lib/op.ts +103 -0
  366. package/src/lib/opContext/__tests__/retry.test.ts +764 -0
  367. package/src/lib/opContext/contextTypes.ts +130 -0
  368. package/src/lib/opContext/createOpGroup.ts +456 -0
  369. package/src/lib/opContext/defineOp.ts +281 -0
  370. package/src/lib/opContext/featureFlagTypes.ts +54 -0
  371. package/src/lib/opContext/index.ts +16 -0
  372. package/src/lib/opContext/opGroupTypes.ts +342 -0
  373. package/src/lib/opContext/opTypes.ts +80 -0
  374. package/src/lib/opContext/spanContextTypes.ts +398 -0
  375. package/src/lib/opContext/types.ts +403 -0
  376. package/src/lib/result.ts +550 -0
  377. package/src/lib/schema/LogSchema.ts +153 -0
  378. package/src/lib/schema/__tests__/defineLogSchema.test.ts +342 -0
  379. package/src/lib/schema/__tests__/featureFlags.test.ts +443 -0
  380. package/src/lib/schema/builder.ts +201 -0
  381. package/src/lib/schema/defineFeatureFlags.ts +91 -0
  382. package/src/lib/schema/defineLogSchema.ts +291 -0
  383. package/src/lib/schema/evaluator.ts +404 -0
  384. package/src/lib/schema/extend.ts +69 -0
  385. package/src/lib/schema/systemSchema.ts +339 -0
  386. package/src/lib/schema/typeGuards.ts +163 -0
  387. package/src/lib/schema/types.ts +265 -0
  388. package/src/lib/spanBuffer.ts +571 -0
  389. package/src/lib/spanBufferHelpers.ts +73 -0
  390. package/src/lib/spanBufferStats.ts +40 -0
  391. package/src/lib/spanContext.ts +1566 -0
  392. package/src/lib/sqlite/__tests__/sqlite-common.test.ts +89 -0
  393. package/src/lib/sqlite/index.ts +26 -0
  394. package/src/lib/sqlite/sqlite-async-writer.ts +101 -0
  395. package/src/lib/sqlite/sqlite-common.ts +309 -0
  396. package/src/lib/sqlite/sqlite-d1.ts +104 -0
  397. package/src/lib/sqlite/sqlite-db.ts +32 -0
  398. package/src/lib/sqlite/sqlite-node.ts +83 -0
  399. package/src/lib/sqlite/sqlite-writer.ts +128 -0
  400. package/src/lib/testing/TRACE-TESTING.md +100 -0
  401. package/src/lib/testing/__tests__/bun-harness.test.ts +108 -0
  402. package/src/lib/testing/__tests__/extractFacts.test.ts +279 -0
  403. package/src/lib/testing/__tests__/facts.test.ts +324 -0
  404. package/src/lib/testing/__tests__/vitest-harness.test.ts +32 -0
  405. package/src/lib/testing/bun-harness.ts +990 -0
  406. package/src/lib/testing/extractFacts.ts +362 -0
  407. package/src/lib/testing/facts.ts +470 -0
  408. package/src/lib/testing/index.ts +141 -0
  409. package/src/lib/testing/queryable-span.ts +108 -0
  410. package/src/lib/testing/span-query.ts +65 -0
  411. package/src/lib/testing/stdio-replay.ts +50 -0
  412. package/src/lib/testing/trace-query.ts +329 -0
  413. package/src/lib/testing/vitest-harness.ts +691 -0
  414. package/src/lib/threadId.ts +135 -0
  415. package/src/lib/traceContext.ts +182 -0
  416. package/src/lib/traceId.ts +142 -0
  417. package/src/lib/traceRoot.es.ts +157 -0
  418. package/src/lib/traceRoot.node.ts +170 -0
  419. package/src/lib/traceRoot.ts +154 -0
  420. package/src/lib/traceRoot.universal.ts +22 -0
  421. package/src/lib/tracer.ts +896 -0
  422. package/src/lib/tracers/ArrayQueueTracer.ts +76 -0
  423. package/src/lib/tracers/CompositeTracer.ts +76 -0
  424. package/src/lib/tracers/NoOpTracer.ts +73 -0
  425. package/src/lib/tracers/SQLiteTracer.ts +115 -0
  426. package/src/lib/tracers/StdioTracer.ts +380 -0
  427. package/src/lib/tracers/TestTracer.ts +146 -0
  428. package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +184 -0
  429. package/src/lib/tracers/__tests__/NoOpTracer.test.ts +204 -0
  430. package/src/lib/tracers/__tests__/StdioTracer.test.ts +313 -0
  431. package/src/lib/tracers/__tests__/TestTracer.test.ts +200 -0
  432. package/src/lib/tracers/index.ts +12 -0
  433. package/src/lib/types.ts +498 -0
  434. package/src/lib/utf8Cache.ts +201 -0
  435. package/src/lib/wasm/WasmBufferStrategy.ts +219 -0
  436. package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +256 -0
  437. package/src/lib/wasm/__tests__/wasm-integration.test.ts +476 -0
  438. package/src/lib/wasm/__tests__/wasmAllocator.test.ts +699 -0
  439. package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +449 -0
  440. package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +390 -0
  441. package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +444 -0
  442. package/src/lib/wasm/allocator.zig +945 -0
  443. package/src/lib/wasm/wasmAllocator.ts +469 -0
  444. package/src/lib/wasm/wasmSpanBuffer.ts +1014 -0
  445. package/src/lib/wasm/wasmTraceRoot.ts +315 -0
  446. package/src/node.ts +10 -0
  447. package/src/testing.ts +18 -0
@@ -0,0 +1,449 @@
1
+ import { beforeEach, describe, expect, it } from 'bun:test';
2
+ import { S as ArrowS, Nanoseconds } from '@smoothbricks/arrow-builder';
3
+ import { createTestOpMetadata, TEST_TRACER } from '../../__tests__/test-helpers.js';
4
+ import { S } from '../../schema/builder.js';
5
+ import { defineLogSchema } from '../../schema/defineLogSchema.js';
6
+ import { EMPTY_SCOPE } from '../../spanBuffer.js';
7
+ import { createTraceId } from '../../traceId.js';
8
+ import { createWasmAllocator, type WasmAllocator } from '../wasmAllocator.js';
9
+ import {
10
+ createWasmChildSpanBuffer,
11
+ createWasmOverflowBuffer,
12
+ createWasmSpanBuffer,
13
+ getWasmSpanBufferClass,
14
+ type WasmSpanBufferInstance,
15
+ } from '../wasmSpanBuffer.js';
16
+ import { WasmTraceRoot } from '../wasmTraceRoot.js';
17
+
18
+ function testTraceId(value: string) {
19
+ return createTraceId(value);
20
+ }
21
+
22
+ function getMethod<TArgs extends unknown[], TResult>(target: object, name: string): (...args: TArgs) => TResult {
23
+ const value = Reflect.get(target, name);
24
+ if (typeof value !== 'function') {
25
+ throw new Error(`expected method '${name}' to exist on test buffer`);
26
+ }
27
+ return (...args: TArgs) => value.call(target, ...args);
28
+ }
29
+
30
+ function getColumn<T>(target: object, name: string): T {
31
+ return Reflect.get(target, name);
32
+ }
33
+
34
+ describe('WasmSpanBuffer', () => {
35
+ let allocator: WasmAllocator;
36
+ const CAPACITY = 64;
37
+ let traceRoot: WasmTraceRoot;
38
+
39
+ beforeEach(async () => {
40
+ allocator = await createWasmAllocator({ capacity: CAPACITY });
41
+ allocator.reset();
42
+ allocator.setThreadId(0, 42); // high=0, low=42 -> thread_id = 42n
43
+ traceRoot = new WasmTraceRoot(allocator, testTraceId('test-trace'), TEST_TRACER);
44
+ });
45
+
46
+ function createTestWasmBuffer(overrides: { trace_id?: string; thread_id?: bigint; span_id?: number } = {}) {
47
+ return createWasmSpanBuffer(
48
+ testSchema,
49
+ {
50
+ allocator,
51
+ capacity: CAPACITY,
52
+ trace_id: overrides.trace_id ? testTraceId(overrides.trace_id) : testTraceId('trace-123'),
53
+ thread_id: overrides.thread_id ?? 42n,
54
+ span_id: overrides.span_id ?? 1,
55
+ },
56
+ traceRoot,
57
+ EMPTY_SCOPE,
58
+ createTestOpMetadata(),
59
+ createTestOpMetadata({ name: 'span', line: 0 }),
60
+ );
61
+ }
62
+
63
+ // Test schema with various column types
64
+ // Use ArrowS for types not exposed in lmao's S (bigUint64, eager)
65
+ const testSchema = defineLogSchema({
66
+ userId: S.category(),
67
+ requestId: S.category(),
68
+ count: S.number(),
69
+ statusCode: ArrowS.number().eager(),
70
+ isAdmin: S.boolean(),
71
+ operation: S.enum(['CREATE', 'READ', 'UPDATE', 'DELETE']),
72
+ duration: ArrowS.bigUint64(),
73
+ errorMessage: S.text(),
74
+ });
75
+
76
+ describe('getWasmSpanBufferClass', () => {
77
+ it('generates a class constructor', () => {
78
+ const WasmSpanBufferClass = getWasmSpanBufferClass(testSchema);
79
+ expect(typeof WasmSpanBufferClass).toBe('function');
80
+ expect(WasmSpanBufferClass.schema).toBe(testSchema);
81
+ });
82
+
83
+ it('caches classes per schema', () => {
84
+ const class1 = getWasmSpanBufferClass(testSchema);
85
+ const class2 = getWasmSpanBufferClass(testSchema);
86
+ expect(class1).toBe(class2);
87
+ });
88
+
89
+ it('creates different classes for different schemas', () => {
90
+ const schema2 = defineLogSchema({ otherField: S.number() });
91
+ const class1 = getWasmSpanBufferClass(testSchema);
92
+ const class2 = getWasmSpanBufferClass(schema2);
93
+ expect(class1).not.toBe(class2);
94
+ });
95
+ });
96
+
97
+ describe('instance creation', () => {
98
+ it('creates instance with correct identity', () => {
99
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 42n, span_id: 1 });
100
+
101
+ expect(buffer.trace_id).toBe(testTraceId('trace-123'));
102
+ expect(buffer.thread_id).toBe(42n);
103
+ expect(buffer.span_id).toBe(1);
104
+ expect(buffer.parent_thread_id).toBe(0n);
105
+ expect(buffer.parent_span_id).toBe(0);
106
+ expect(buffer._hasParent).toBe(false);
107
+ });
108
+
109
+ it('creates instance with parent identity via child buffer', () => {
110
+ // Parent identity is now set by linking buffers, not via opts
111
+ // Create parent first, then create child that references it
112
+ const parent = createTestWasmBuffer({ trace_id: 'trace-456', thread_id: 100n, span_id: 2 });
113
+
114
+ const child = createWasmChildSpanBuffer(
115
+ parent,
116
+ { allocator, capacity: CAPACITY, thread_id: 100n, span_id: 5 },
117
+ traceRoot,
118
+ EMPTY_SCOPE,
119
+ createTestOpMetadata(),
120
+ createTestOpMetadata({ name: 'child-span', line: 0 }),
121
+ );
122
+
123
+ // Child should have parent's identity accessible
124
+ expect(child.parent_thread_id).toBe(parent.thread_id);
125
+ expect(child.parent_span_id).toBe(parent.span_id);
126
+ expect(child._hasParent).toBe(true);
127
+ });
128
+
129
+ it('allocates system block from WASM', () => {
130
+ const beforeAllocs = allocator.getAllocCount();
131
+
132
+ createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
133
+
134
+ // Should have allocated at least the system block
135
+ expect(allocator.getAllocCount()).toBeGreaterThan(beforeAllocs);
136
+ });
137
+
138
+ it('initializes tree structure', () => {
139
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
140
+
141
+ expect(buffer._parent).toBeNull();
142
+ expect(buffer._children).toEqual([]);
143
+ expect(buffer._overflow).toBeNull();
144
+ });
145
+ });
146
+
147
+ describe('system columns', () => {
148
+ let buffer: WasmSpanBufferInstance;
149
+
150
+ beforeEach(() => {
151
+ buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
152
+ });
153
+
154
+ it('provides timestamp view into WASM memory', () => {
155
+ const timestamp = buffer.timestamp;
156
+ expect(timestamp).toBeInstanceOf(BigInt64Array);
157
+ expect(timestamp.length).toBe(CAPACITY);
158
+ });
159
+
160
+ it('provides entry_type view into WASM memory', () => {
161
+ const entryType = buffer.entry_type;
162
+ expect(entryType).toBeInstanceOf(Uint8Array);
163
+ expect(entryType.length).toBe(CAPACITY);
164
+ });
165
+
166
+ it('can write to timestamp array', () => {
167
+ const timestamp = buffer.timestamp;
168
+ timestamp[0] = 123456789n;
169
+ expect(buffer.timestamp[0]).toBe(123456789n);
170
+ });
171
+
172
+ it('can write to entry_type array', () => {
173
+ const entryType = buffer.entry_type;
174
+ entryType[0] = 1; // SPAN_START
175
+ entryType[1] = 2; // SPAN_OK
176
+ expect(buffer.entry_type[0]).toBe(1);
177
+ expect(buffer.entry_type[1]).toBe(2);
178
+ });
179
+
180
+ it('views reflect same WASM memory', () => {
181
+ buffer.timestamp[5] = 999n;
182
+ // Get a new view and verify it sees the same data
183
+ const newView = buffer.timestamp;
184
+ expect(newView[5]).toBe(999n);
185
+ });
186
+
187
+ it('exposes _spanStartTime from row 0', () => {
188
+ buffer.timestamp[0] = 123n;
189
+ expect(buffer._spanStartTime).toBe(Nanoseconds.unsafe(123n));
190
+ });
191
+
192
+ it('exposes _lastLoggedTime across overflow chain', () => {
193
+ buffer._writeIndex = 4;
194
+ buffer.timestamp[0] = 100n;
195
+ buffer.timestamp[1] = 200n;
196
+ buffer.timestamp[2] = 300n;
197
+ buffer.timestamp[3] = 400n;
198
+
199
+ const overflow = createWasmOverflowBuffer(
200
+ buffer,
201
+ traceRoot,
202
+ EMPTY_SCOPE,
203
+ createTestOpMetadata(),
204
+ createTestOpMetadata({ name: 'overflow', line: 0 }),
205
+ );
206
+ overflow._writeIndex = 2;
207
+ overflow.timestamp[0] = 500n;
208
+ overflow.timestamp[1] = 600n;
209
+
210
+ expect(buffer._lastLoggedTime).toBe(Nanoseconds.unsafe(600n));
211
+ });
212
+ });
213
+
214
+ describe('message column (eager string)', () => {
215
+ let buffer: WasmSpanBufferInstance;
216
+
217
+ beforeEach(() => {
218
+ buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
219
+ });
220
+
221
+ it('can write message values', () => {
222
+ buffer.message(0, 'span-start message');
223
+ buffer.message(1, 'span-end message');
224
+ buffer.message(2, 'log entry');
225
+
226
+ expect(buffer._message[0]).toBe('span-start message');
227
+ expect(buffer._message[1]).toBe('span-end message');
228
+ expect(buffer._message[2]).toBe('log entry');
229
+ });
230
+
231
+ it('returns this for chaining', () => {
232
+ const result = buffer.message(0, 'test');
233
+ expect(result).toBe(buffer);
234
+ });
235
+ });
236
+
237
+ describe('lazy string columns (category/text)', () => {
238
+ let buffer: WasmSpanBufferInstance;
239
+
240
+ beforeEach(() => {
241
+ buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
242
+ });
243
+
244
+ it('userId column starts undefined', () => {
245
+ expect(buffer.getColumnIfAllocated('userId')).toBeUndefined();
246
+ expect(buffer.getNullsIfAllocated('userId')).toBeUndefined();
247
+ });
248
+
249
+ it('allocates userId column on first write', () => {
250
+ const userId = getMethod<[idx: number, val: string], void>(buffer, 'userId');
251
+ userId(0, 'user-123');
252
+
253
+ expect(buffer.getColumnIfAllocated('userId')).toBeDefined();
254
+ expect(buffer.getNullsIfAllocated('userId')).toBeDefined();
255
+ });
256
+
257
+ it('writes values to category column', () => {
258
+ const userId = getMethod<[idx: number, val: string], WasmSpanBufferInstance>(buffer, 'userId');
259
+
260
+ userId(0, 'user-001');
261
+ userId(5, 'user-002');
262
+
263
+ const userIdValues = getColumn<string[]>(buffer, 'userId_values');
264
+
265
+ expect(userIdValues[0]).toBe('user-001');
266
+ expect(userIdValues[5]).toBe('user-002');
267
+ });
268
+
269
+ it('sets validity bits on write', () => {
270
+ const userId = getMethod<[idx: number, val: string | null], WasmSpanBufferInstance>(buffer, 'userId');
271
+
272
+ userId(0, 'user-001');
273
+ userId(5, 'user-002');
274
+
275
+ const userIdNulls = getColumn<Uint8Array>(buffer, 'userId_nulls');
276
+
277
+ // Check validity bits are set
278
+ // Bit 0 in byte 0 should be 1
279
+ expect(userIdNulls[0] & 0b00000001).toBe(1);
280
+ // Bit 5 in byte 0 should be 1
281
+ expect(userIdNulls[0] & 0b00100000).toBe(0b00100000);
282
+ });
283
+
284
+ it('clears validity bit for null', () => {
285
+ const userId = getMethod<[idx: number, val: string | null], WasmSpanBufferInstance>(buffer, 'userId');
286
+
287
+ userId(0, 'user-001');
288
+ userId(0, null);
289
+
290
+ const userIdNulls = getColumn<Uint8Array>(buffer, 'userId_nulls');
291
+
292
+ // Bit 0 should be cleared
293
+ expect(userIdNulls[0] & 0b00000001).toBe(0);
294
+ });
295
+
296
+ it('returns this for chaining', () => {
297
+ const userId = getMethod<[idx: number, val: string], WasmSpanBufferInstance>(buffer, 'userId');
298
+ const result = userId(0, 'test');
299
+ expect(result).toBe(buffer);
300
+ });
301
+ });
302
+
303
+ describe('lazy numeric columns (stored in WASM)', () => {
304
+ let buffer: WasmSpanBufferInstance;
305
+
306
+ beforeEach(() => {
307
+ buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
308
+ });
309
+
310
+ it('count column starts unallocated', () => {
311
+ expect(buffer.isColumnAllocated(2)).toBe(false); // count is at index 2
312
+ });
313
+
314
+ it('allocates count column on first write', () => {
315
+ const count = getMethod<[idx: number, val: number], WasmSpanBufferInstance>(buffer, 'count');
316
+ count(0, 42);
317
+
318
+ expect(buffer.isColumnAllocated(2)).toBe(true);
319
+ });
320
+
321
+ it('writes to numeric column', () => {
322
+ const count = getMethod<[idx: number, val: number], WasmSpanBufferInstance>(buffer, 'count');
323
+
324
+ count(0, 42);
325
+ count(5, 100);
326
+
327
+ const countValues = getColumn<Float64Array | null>(buffer, 'count_values');
328
+
329
+ // Values should be readable (note: WASM memory layout may vary)
330
+ expect(countValues).toBeDefined();
331
+ });
332
+
333
+ it('returns this for chaining', () => {
334
+ const count = getMethod<[idx: number, val: number], WasmSpanBufferInstance>(buffer, 'count');
335
+ const result = count(0, 42);
336
+ expect(result).toBe(buffer);
337
+ });
338
+ });
339
+
340
+ describe('eager numeric columns', () => {
341
+ it('statusCode column is pre-allocated', () => {
342
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
343
+
344
+ // statusCode is at index 3 and marked eager
345
+ expect(buffer.isColumnAllocated(3)).toBe(true);
346
+ });
347
+ });
348
+
349
+ describe('free()', () => {
350
+ it('frees system block', () => {
351
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
352
+
353
+ const freesBefore = allocator.getFreeCount();
354
+ buffer.free();
355
+
356
+ expect(allocator.getFreeCount()).toBeGreaterThan(freesBefore);
357
+ });
358
+
359
+ it('frees allocated column blocks', () => {
360
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
361
+
362
+ // Write to lazy columns to allocate them
363
+ const count = getMethod<[idx: number, val: number], WasmSpanBufferInstance>(buffer, 'count');
364
+ const isAdmin = getMethod<[idx: number, val: boolean], WasmSpanBufferInstance>(buffer, 'isAdmin');
365
+ count(0, 42);
366
+ isAdmin(0, true);
367
+
368
+ const freesBefore = allocator.getFreeCount();
369
+ buffer.free();
370
+
371
+ // Should free system block + statusCode (eager) + count + isAdmin
372
+ expect(allocator.getFreeCount()).toBeGreaterThan(freesBefore + 1);
373
+ });
374
+ });
375
+
376
+ describe('createWasmChildSpanBuffer', () => {
377
+ it('creates child linked to parent', () => {
378
+ // thread_id is global in WASM header, shared by parent and child
379
+ allocator.setThreadId(0, 1); // thread_id = 1n
380
+
381
+ const parent = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
382
+
383
+ const child = createWasmChildSpanBuffer(
384
+ parent,
385
+ { allocator, capacity: CAPACITY, thread_id: 2n, span_id: 2 },
386
+ traceRoot,
387
+ EMPTY_SCOPE,
388
+ createTestOpMetadata(),
389
+ createTestOpMetadata({ name: 'child-span', line: 0 }),
390
+ );
391
+
392
+ // Manually push to _children - SpanContext does this with possible RemappedBufferView wrapper
393
+ parent._children.push(child);
394
+
395
+ expect(child._parent).toBe(parent);
396
+ expect(parent._children).toContain(child);
397
+ expect(child.trace_id).toBe(testTraceId('trace-123'));
398
+ // Parent and child share thread_id from global header
399
+ expect(child.parent_thread_id).toBe(1n);
400
+ expect(child.parent_span_id).toBe(1);
401
+ });
402
+ });
403
+
404
+ describe('createWasmOverflowBuffer', () => {
405
+ it('creates overflow linked to original', () => {
406
+ // thread_id is global in WASM header
407
+ allocator.setThreadId(0, 1); // thread_id = 1n
408
+
409
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
410
+
411
+ const overflow = createWasmOverflowBuffer(
412
+ buffer,
413
+ traceRoot,
414
+ EMPTY_SCOPE,
415
+ createTestOpMetadata(),
416
+ createTestOpMetadata(),
417
+ );
418
+
419
+ expect(buffer._overflow).toBe(overflow);
420
+ expect(overflow._parent).toBe(buffer._parent); // Same parent (null for root)
421
+ expect(overflow.trace_id).toBe(testTraceId('trace-123'));
422
+ expect(overflow.thread_id).toBe(1n);
423
+ // Note: span_id is unique per identity block, not shared with original
424
+ // overflow has its own span_id from allocIdentityChild
425
+ expect(overflow.span_id).toBeGreaterThan(0);
426
+ });
427
+ });
428
+
429
+ describe('custom inspect', () => {
430
+ it('provides useful inspect output', () => {
431
+ // thread_id is global in WASM header
432
+ allocator.setThreadId(0, 1); // thread_id = 1n
433
+
434
+ const buffer = createTestWasmBuffer({ trace_id: 'trace-123', thread_id: 1n, span_id: 1 });
435
+
436
+ // Get custom inspect
437
+ const inspectSymbol = Symbol.for('nodejs.util.inspect.custom');
438
+ const inspectFn = Reflect.get(buffer, inspectSymbol);
439
+ if (typeof inspectFn !== 'function') {
440
+ throw new Error('expected custom inspect function on WasmSpanBuffer');
441
+ }
442
+ const result = inspectFn.call(buffer);
443
+
444
+ expect(result).toContain('WasmSpanBuffer');
445
+ expect(result).toContain('trace_id: trace-123');
446
+ expect(result).toContain('_systemPtr:');
447
+ });
448
+ });
449
+ });