@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,115 @@
1
+ /**
2
+ * Runtime code generation for SpanLogger classes
3
+ *
4
+ * Per specs/lmao/01g_trace_context_api_codegen.md and 01j_module_context_and_spanlogger_generation.md:
5
+ * - SpanLogger extends ColumnWriter from arrow-builder via codegen extension
6
+ * - Handles log entries (rows 2+) - tag writing is in TagWriter (row 0)
7
+ * - Uses _nextRow() to advance position, then fluent setters write at _writeIndex
8
+ * - Compile-time enum mapping for 1-byte storage
9
+ * - Direct buffer writes without intermediate objects
10
+ *
11
+ * Row layout in SpanBuffer:
12
+ * - Row 0: tag attributes (written by TagWriter)
13
+ * - Row 1: result (ok/err) entry
14
+ * - Rows 2+: log entries (info/debug/warn/error)
15
+ *
16
+ * SpanLogger starts with _writeIndex = 1, so first _nextRow() makes it 2.
17
+ */
18
+ import { type ColumnWriter } from '@smoothbricks/arrow-builder';
19
+ import type { InferSchema, LogSchema } from '../schema/types.js';
20
+ import type { AnySpanBuffer, SpanBuffer } from '../types.js';
21
+ /**
22
+ * Helper functions injected into generated SpanLogger code.
23
+ * Singleton - same object shared by all generated SpanLogger classes.
24
+ */
25
+ export declare const SPAN_LOGGER_HELPERS: {
26
+ setNullBit: (bitmap: Uint8Array, idx: number) => void;
27
+ fillNullBitmapRange: (bitmap: Uint8Array, startIdx: number, endIdx: number) => void;
28
+ fillBooleanBitmapRange: (bitmap: Uint8Array, startIdx: number, endIdx: number, value: boolean) => void;
29
+ };
30
+ /**
31
+ * Base SpanLogger interface - core logging methods.
32
+ * Extended by generated implementations with schema-specific methods.
33
+ */
34
+ export interface BaseSpanLogger<T extends LogSchema> {
35
+ /** Log info-level message */
36
+ info(message: string): FluentLogEntry<T>;
37
+ /** Log debug-level message */
38
+ debug(message: string): FluentLogEntry<T>;
39
+ /** Log warning message */
40
+ warn(message: string): FluentLogEntry<T>;
41
+ /** Log error message */
42
+ error(message: string): FluentLogEntry<T>;
43
+ }
44
+ /**
45
+ * Fluent interface returned by log methods (info, debug, warn, error, trace).
46
+ * Includes system columns (line) plus all schema fields from T.
47
+ * Also includes logging methods for continued chaining (e.g., ctx.log.info('x').info('y'))
48
+ */
49
+ export type FluentLogEntry<T extends LogSchema> = {
50
+ /** Set multiple attributes for this entry */
51
+ with(attributes: Partial<InferSchema<T>>): FluentLogEntry<T>;
52
+ /**
53
+ * Set the source code line number for this log entry.
54
+ * Injected by the LMAO transformer.
55
+ */
56
+ line(lineNumber: number): FluentLogEntry<T>;
57
+ /** Set error code for this entry */
58
+ error_code(code: string): FluentLogEntry<T>;
59
+ /** Set exception stack for this entry */
60
+ exception_stack(stack: string): FluentLogEntry<T>;
61
+ /** Set feature flag value for this entry */
62
+ ff_value(value: string): FluentLogEntry<T>;
63
+ /** Set uint64 value for this entry */
64
+ uint64_value(value: bigint): FluentLogEntry<T>;
65
+ info(message: string): FluentLogEntry<T>;
66
+ debug(message: string): FluentLogEntry<T>;
67
+ warn(message: string): FluentLogEntry<T>;
68
+ error(message: string): FluentLogEntry<T>;
69
+ trace(message: string): FluentLogEntry<T>;
70
+ } & {
71
+ [K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => FluentLogEntry<T>;
72
+ };
73
+ /**
74
+ * Complete SpanLogger implementation type (runtime-generated class).
75
+ *
76
+ * Includes:
77
+ * - Core methods (info/debug/warn/error) from BaseSpanLogger
78
+ * - Schema-specific methods from ColumnWriter<T>
79
+ * - Internal methods (_setScope, _writeEntry, etc.)
80
+ *
81
+ * This is the FULL type returned by createSpanLogger().
82
+ * Users see SpanLogger<T> which hides internal methods.
83
+ */
84
+ export type SpanLoggerImpl<T extends LogSchema> = ColumnWriter<T> & {
85
+ info(message: string): FluentLogEntry<T>;
86
+ debug(message: string): FluentLogEntry<T>;
87
+ warn(message: string): FluentLogEntry<T>;
88
+ error(message: string): FluentLogEntry<T>;
89
+ trace(message: string): FluentLogEntry<T>;
90
+ readonly scope: Readonly<Record<string, unknown>>;
91
+ _setScope(attributes: ScopeUpdate<T>): void;
92
+ };
93
+ export type ScopeUpdate<T extends LogSchema> = {
94
+ [K in keyof InferSchema<T>]?: InferSchema<T>[K] | null;
95
+ };
96
+ /**
97
+ * Create SpanLogger class constructor from schema.
98
+ * This is the cold-path function called at module creation time.
99
+ *
100
+ * SpanLogger extends ColumnWriter and adds:
101
+ * - info(), debug(), warn(), error() methods for log entries
102
+ * - _setScope() for setting scoped attributes
103
+ * - _getNextBuffer() override for SpanBuffer creation on overflow
104
+ *
105
+ * Note: Fluent attribute setters are inherited from ColumnWriter and write at _writeIndex.
106
+ */
107
+ export declare function createSpanLoggerClass<T extends LogSchema>(schema: T): new (buffer: AnySpanBuffer) => SpanLoggerImpl<T>;
108
+ /**
109
+ * Create a SpanLogger instance for the given buffer.
110
+ *
111
+ * @param schema - Tag attribute schema
112
+ * @param buffer - SpanBuffer to write to
113
+ */
114
+ export declare function createSpanLogger<T extends LogSchema>(schema: T, buffer: SpanBuffer<T>): SpanLoggerImpl<T>;
115
+ //# sourceMappingURL=spanLoggerGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spanLoggerGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/spanLoggerGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,575 @@
1
+ /**
2
+ * Runtime code generation for SpanLogger classes
3
+ *
4
+ * Per specs/lmao/01g_trace_context_api_codegen.md and 01j_module_context_and_spanlogger_generation.md:
5
+ * - SpanLogger extends ColumnWriter from arrow-builder via codegen extension
6
+ * - Handles log entries (rows 2+) - tag writing is in TagWriter (row 0)
7
+ * - Uses _nextRow() to advance position, then fluent setters write at _writeIndex
8
+ * - Compile-time enum mapping for 1-byte storage
9
+ * - Direct buffer writes without intermediate objects
10
+ *
11
+ * Row layout in SpanBuffer:
12
+ * - Row 0: tag attributes (written by TagWriter)
13
+ * - Row 1: result (ok/err) entry
14
+ * - Rows 2+: log entries (info/debug/warn/error)
15
+ *
16
+ * SpanLogger starts with _writeIndex = 1, so first _nextRow() makes it 2.
17
+ */
18
+ import { getColumnWriterClass, } from '@smoothbricks/arrow-builder';
19
+ import { ENTRY_TYPE_DEBUG, ENTRY_TYPE_ERROR, ENTRY_TYPE_FF_ACCESS, ENTRY_TYPE_FF_USAGE, ENTRY_TYPE_INFO, ENTRY_TYPE_TRACE, ENTRY_TYPE_WARN, } from '../schema/systemSchema.js';
20
+ import { getEnumValues, getSchemaType } from '../schema/typeGuards.js';
21
+ // =============================================================================
22
+ // SINGLETON HELPERS OBJECT
23
+ // =============================================================================
24
+ // Created once at module load, closed over by all generated SpanLogger classes.
25
+ // This avoids recreating the helpers object for each schema.
26
+ /**
27
+ * Helper functions injected into generated SpanLogger code.
28
+ * Singleton - same object shared by all generated SpanLogger classes.
29
+ */
30
+ export const SPAN_LOGGER_HELPERS = {
31
+ setNullBit: (bitmap, idx) => {
32
+ bitmap[idx >>> 3] |= 1 << (idx & 7);
33
+ },
34
+ fillNullBitmapRange: (bitmap, startIdx, endIdx) => {
35
+ // Fill null bitmap for range [startIdx, endIdx)
36
+ const startByte = startIdx >>> 3;
37
+ const endByte = (endIdx - 1) >>> 3;
38
+ if (startByte === endByte) {
39
+ // All bits in same byte
40
+ for (let i = startIdx; i < endIdx; i++) {
41
+ bitmap[i >>> 3] |= 1 << (i & 7);
42
+ }
43
+ }
44
+ else {
45
+ // Handle first partial byte
46
+ const startBit = startIdx & 7;
47
+ if (startBit !== 0) {
48
+ bitmap[startByte] |= 0xff << startBit;
49
+ }
50
+ else {
51
+ bitmap[startByte] = 0xff;
52
+ }
53
+ // Fill middle bytes
54
+ for (let b = startByte + 1; b < endByte; b++) {
55
+ bitmap[b] = 0xff;
56
+ }
57
+ // Handle last partial byte
58
+ const endBit = endIdx & 7;
59
+ if (endBit !== 0) {
60
+ bitmap[endByte] |= (1 << endBit) - 1;
61
+ }
62
+ else {
63
+ bitmap[endByte] = 0xff;
64
+ }
65
+ }
66
+ },
67
+ fillBooleanBitmapRange: (bitmap, startIdx, endIdx, value) => {
68
+ // Fill boolean bitmap for range with value
69
+ if (value) {
70
+ // Same as fillNullBitmapRange - set bits to 1
71
+ const startByte = startIdx >>> 3;
72
+ const endByte = (endIdx - 1) >>> 3;
73
+ if (startByte === endByte) {
74
+ for (let i = startIdx; i < endIdx; i++) {
75
+ bitmap[i >>> 3] |= 1 << (i & 7);
76
+ }
77
+ }
78
+ else {
79
+ const startBit = startIdx & 7;
80
+ if (startBit !== 0) {
81
+ bitmap[startByte] |= 0xff << startBit;
82
+ }
83
+ else {
84
+ bitmap[startByte] = 0xff;
85
+ }
86
+ for (let b = startByte + 1; b < endByte; b++) {
87
+ bitmap[b] = 0xff;
88
+ }
89
+ const endBit = endIdx & 7;
90
+ if (endBit !== 0) {
91
+ bitmap[endByte] |= (1 << endBit) - 1;
92
+ }
93
+ else {
94
+ bitmap[endByte] = 0xff;
95
+ }
96
+ }
97
+ }
98
+ else {
99
+ // Clear bits to 0
100
+ const startByte = startIdx >>> 3;
101
+ const endByte = (endIdx - 1) >>> 3;
102
+ if (startByte === endByte) {
103
+ for (let i = startIdx; i < endIdx; i++) {
104
+ bitmap[i >>> 3] &= ~(1 << (i & 7));
105
+ }
106
+ }
107
+ else {
108
+ const startBit = startIdx & 7;
109
+ if (startBit !== 0) {
110
+ bitmap[startByte] &= ~(0xff << startBit);
111
+ }
112
+ else {
113
+ bitmap[startByte] = 0;
114
+ }
115
+ for (let b = startByte + 1; b < endByte; b++) {
116
+ bitmap[b] = 0;
117
+ }
118
+ const endBit = endIdx & 7;
119
+ if (endBit !== 0) {
120
+ bitmap[endByte] &= ~((1 << endBit) - 1);
121
+ }
122
+ else {
123
+ bitmap[endByte] = 0;
124
+ }
125
+ }
126
+ }
127
+ },
128
+ };
129
+ /**
130
+ * Generate enum value mapping code
131
+ * Creates a switch-case statement for compile-time enum mapping
132
+ */
133
+ function generateEnumMapping(fieldName, enumValues) {
134
+ const cases = enumValues.map((value, index) => ` case ${JSON.stringify(value)}: return ${index};`).join('\n');
135
+ return `
136
+ function getEnumIndex_${fieldName}(value) {
137
+ switch(value) {
138
+ ${cases}
139
+ default: return 0;
140
+ }
141
+ }`;
142
+ }
143
+ /**
144
+ * Generate override fluent setters for enum fields.
145
+ * These convert string values to numeric indices before writing to the buffer.
146
+ * The buffer expects numeric indices (after the enum map removal change).
147
+ */
148
+ function generateEnumFluentSetters(enumFieldNames) {
149
+ const setters = [];
150
+ for (const fieldName of enumFieldNames) {
151
+ setters.push(`
152
+ /**
153
+ * Override fluent setter for ${fieldName} to convert string → index.
154
+ * Buffer expects numeric index, not string value.
155
+ */
156
+ ${fieldName}(value) {
157
+ const idx = getEnumIndex_${fieldName}(value);
158
+ this._buffer.${fieldName}(this._writeIndex, idx);
159
+ return this;
160
+ }`);
161
+ }
162
+ return setters.join('\n');
163
+ }
164
+ /**
165
+ * Generate _setScope() method code - IMMUTABLE scope semantics
166
+ *
167
+ * Per specs/lmao/01i_span_scope_attributes.md:
168
+ * - Creates NEW frozen object (never mutates existing)
169
+ * - Merge semantics: new values merge with existing
170
+ * - null clears a key, undefined is ignored
171
+ * - Child spans inherit parent scope by reference (safe because immutable)
172
+ * - Scope filling happens at Arrow conversion time, NOT during span execution
173
+ */
174
+ function generateSetScopeMethod() {
175
+ // Immutable scope: create new frozen object with merge semantics and null clearing
176
+ // No buffer pre-filling - scope values are filled at Arrow conversion time via SIMD
177
+ return `
178
+ _setScope(attributes) {
179
+ const current = this._buffer._scopeValues || {};
180
+ const next = { ...current };
181
+
182
+ for (const key of Object.keys(attributes)) {
183
+ const value = attributes[key];
184
+ if (value === null) {
185
+ delete next[key];
186
+ } else if (value !== undefined) {
187
+ next[key] = value;
188
+ }
189
+ }
190
+
191
+ this._buffer._scopeValues = Object.freeze(next);
192
+ }`;
193
+ }
194
+ /**
195
+ * Generate _prefillScopedAttributesOn(buffer) method - UNROLLED per-column with BULK null bitmap fill
196
+ *
197
+ * Takes buffer as argument instead of using this._buffer. This avoids the convoluted
198
+ * pattern of temporarily switching this._buffer for prefill then switching back.
199
+ * Called by _checkOverflow after getting overflow buffer.
200
+ */
201
+ function generatePrefillScopedAttributesMethod(schemaFields, enumFieldNames) {
202
+ const columnFills = schemaFields.map(([fieldName, fieldSchema]) => {
203
+ const columnName = fieldName;
204
+ const lmaoType = getSchemaType(fieldSchema);
205
+ // Binary columns are not scope-fillable (object payloads can't be bulk-filled)
206
+ if (lmaoType === 'binary') {
207
+ return '';
208
+ }
209
+ // Boolean uses bit-packed storage - bulk fill using helper
210
+ if (lmaoType === 'boolean') {
211
+ return `
212
+ {
213
+ const scopeValue = buffer._scopeValues?.${fieldName};
214
+ if (scopeValue !== null && scopeValue !== undefined && buffer._${columnName}_values !== undefined) {
215
+ helpers.fillBooleanBitmapRange(buffer.${columnName}_values, startIdx, endIdx, scopeValue);
216
+ helpers.fillNullBitmapRange(buffer.${columnName}_nulls, startIdx, endIdx);
217
+ }
218
+ }`;
219
+ }
220
+ // Value processing based on type
221
+ let valueExpr = 'scopeValue';
222
+ if (lmaoType === 'enum' && enumFieldNames.has(fieldName)) {
223
+ valueExpr = `getEnumIndex_${fieldName}(scopeValue)`;
224
+ }
225
+ // For string arrays (category/text), use manual loop instead of fill()
226
+ if (lmaoType === 'category' || lmaoType === 'text') {
227
+ return `
228
+ {
229
+ const scopeValue = buffer._scopeValues?.${fieldName};
230
+ if (scopeValue !== null && scopeValue !== undefined && buffer._${columnName}_values !== undefined) {
231
+ const values = buffer.${columnName}_values;
232
+ for (let i = startIdx; i < endIdx; i++) {
233
+ values[i] = scopeValue;
234
+ }
235
+ helpers.fillNullBitmapRange(buffer.${columnName}_nulls, startIdx, endIdx);
236
+ }
237
+ }`;
238
+ }
239
+ return `
240
+ {
241
+ const scopeValue = buffer._scopeValues?.${fieldName};
242
+ if (scopeValue !== null && scopeValue !== undefined && buffer._${columnName}_values !== undefined) {
243
+ buffer.${columnName}_values.fill(${valueExpr}, startIdx, endIdx);
244
+ helpers.fillNullBitmapRange(buffer.${columnName}_nulls, startIdx, endIdx);
245
+ }
246
+ }`;
247
+ });
248
+ // Initial buffer: rows 0-1 reserved for span-start/end, data starts at _writeIndex=2
249
+ // Overflow buffer: no reserved rows, data starts at _writeIndex=0
250
+ // Use buffer._writeIndex as startIdx to handle both cases correctly
251
+ return `
252
+ _prefillScopedAttributesOn(buffer) {
253
+ const startIdx = buffer._writeIndex;
254
+ const endIdx = buffer._capacity;
255
+ ${columnFills.join('\n')}
256
+ }`;
257
+ }
258
+ /**
259
+ * Build the extension for SpanLogger that extends ColumnWriter
260
+ */
261
+ function buildSpanLoggerExtension(schema) {
262
+ const schemaFields = schema._columns;
263
+ // Collect enum mappings
264
+ const enumMappings = [];
265
+ const enumFieldNames = new Set();
266
+ for (const [fieldName, fieldSchema] of schemaFields) {
267
+ const lmaoType = getSchemaType(fieldSchema);
268
+ const enumValues = getEnumValues(fieldSchema);
269
+ if (lmaoType === 'enum' && enumValues) {
270
+ enumMappings.push(generateEnumMapping(fieldName, enumValues));
271
+ enumFieldNames.add(fieldName);
272
+ }
273
+ }
274
+ // Generate methods
275
+ const setScopeMethod = generateSetScopeMethod();
276
+ const prefillMethod = generatePrefillScopedAttributesMethod(schemaFields, enumFieldNames);
277
+ const enumFluentSetters = generateEnumFluentSetters(enumFieldNames);
278
+ return {
279
+ constructorParams: '',
280
+ // Entry type constants (inlined from lmao.ts)
281
+ classPreamble: `
282
+ const ENTRY_TYPE_INFO = ${ENTRY_TYPE_INFO};
283
+ const ENTRY_TYPE_DEBUG = ${ENTRY_TYPE_DEBUG};
284
+ const ENTRY_TYPE_WARN = ${ENTRY_TYPE_WARN};
285
+ const ENTRY_TYPE_ERROR = ${ENTRY_TYPE_ERROR};
286
+ const ENTRY_TYPE_TRACE = ${ENTRY_TYPE_TRACE};
287
+ const ENTRY_TYPE_FF_ACCESS = ${ENTRY_TYPE_FF_ACCESS};
288
+ const ENTRY_TYPE_FF_USAGE = ${ENTRY_TYPE_FF_USAGE};
289
+
290
+ ${enumMappings.join('\n')}
291
+ `,
292
+ // SpanLogger starts at writeIndex 1, so first nextRow() makes it 2
293
+ // (Rows 0 and 1 are reserved for span-start and span-end)
294
+ // Sync buffer's writeIndex - needed for Arrow conversion
295
+ constructorCode: `
296
+ this._writeIndex = 1;
297
+ this._buffer._writeIndex = 2;
298
+ `,
299
+ // Check for overflow before writing, switch to overflow buffer if needed.
300
+ // Overflow when _writeIndex >= capacity (buffer is full, no room for this write).
301
+ // Buffer.getOrCreateOverflow() handles: stats notification, capacity tuning, buffer creation.
302
+ // We just need to switch this._buffer and prefill scope on the new buffer.
303
+ methods: `_checkOverflow() {
304
+ if (this._buffer._writeIndex >= this._buffer._capacity) {
305
+ this._buffer = this._buffer.getOrCreateOverflow();
306
+ this._prefillScopedAttributesOn(this._buffer);
307
+ }
308
+ }
309
+
310
+ ` +
311
+ // Write an info log entry.
312
+ // writeLogEntry bumps buffer._writeIndex, writes timestamp+entry_type, returns idx.
313
+ // We sync this._writeIndex so fluent setters write at correct row.
314
+ `info(message) {
315
+ this._checkOverflow();
316
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_INFO);
317
+ this._writeIndex = idx;
318
+ if (this._buffer.message_values) {
319
+ this._buffer.message_values[idx] = message;
320
+ if (this._buffer.message_nulls) {
321
+ helpers.setNullBit(this._buffer.message_nulls, idx);
322
+ }
323
+ }
324
+ this._buffer.constructor.stats.totalWrites++;
325
+ return this;
326
+ }
327
+
328
+ ` +
329
+ // Write a debug log entry.
330
+ `debug(message) {
331
+ this._checkOverflow();
332
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_DEBUG);
333
+ this._writeIndex = idx;
334
+ if (this._buffer.message_values) {
335
+ this._buffer.message_values[idx] = message;
336
+ if (this._buffer.message_nulls) {
337
+ helpers.setNullBit(this._buffer.message_nulls, idx);
338
+ }
339
+ }
340
+ this._buffer.constructor.stats.totalWrites++;
341
+ return this;
342
+ }
343
+
344
+ ` +
345
+ // Write a warn log entry.
346
+ `warn(message) {
347
+ this._checkOverflow();
348
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_WARN);
349
+ this._writeIndex = idx;
350
+ if (this._buffer.message_values) {
351
+ this._buffer.message_values[idx] = message;
352
+ if (this._buffer.message_nulls) {
353
+ helpers.setNullBit(this._buffer.message_nulls, idx);
354
+ }
355
+ }
356
+ this._buffer.constructor.stats.totalWrites++;
357
+ return this;
358
+ }
359
+
360
+ ` +
361
+ // Write an error log entry.
362
+ `error(message) {
363
+ this._checkOverflow();
364
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_ERROR);
365
+ this._writeIndex = idx;
366
+ if (this._buffer.message_values) {
367
+ this._buffer.message_values[idx] = message;
368
+ if (this._buffer.message_nulls) {
369
+ helpers.setNullBit(this._buffer.message_nulls, idx);
370
+ }
371
+ }
372
+ this._buffer.constructor.stats.totalWrites++;
373
+ return this;
374
+ }
375
+
376
+ ` +
377
+ // Write a trace log entry.
378
+ `trace(message) {
379
+ this._checkOverflow();
380
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_TRACE);
381
+ this._writeIndex = idx;
382
+ if (this._buffer.message_values) {
383
+ this._buffer.message_values[idx] = message;
384
+ if (this._buffer.message_nulls) {
385
+ helpers.setNullBit(this._buffer.message_nulls, idx);
386
+ }
387
+ }
388
+ this._buffer.constructor.stats.totalWrites++;
389
+ return this;
390
+ }
391
+
392
+ ` +
393
+ // Set multiple attributes on the current log entry.
394
+ `with(attributes) {
395
+ for (const key in attributes) {
396
+ const value = attributes[key];
397
+ if (value === null || value === undefined) {
398
+ continue;
399
+ }
400
+ const setter = this[key];
401
+ if (typeof setter === 'function') {
402
+ setter.call(this, value);
403
+ }
404
+ }
405
+ return this;
406
+ }
407
+
408
+ ` +
409
+ // Write a feature flag access entry (internal method, not on public type).
410
+ // Called by FeatureFlagEvaluator to log flag access.
411
+ `ffAccess(flagName, value) {
412
+ this._checkOverflow();
413
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_FF_ACCESS);
414
+ this._writeIndex = idx;
415
+ if (this._buffer.message_values) {
416
+ this._buffer.message_values[idx] = flagName;
417
+ if (this._buffer.message_nulls) {
418
+ helpers.setNullBit(this._buffer.message_nulls, idx);
419
+ }
420
+ }
421
+ if (this._buffer.ff_value_values) {
422
+ const strValue = value === null || value === undefined ? 'null' : String(value);
423
+ this._buffer.ff_value_values[idx] = strValue;
424
+ if (this._buffer.ff_value_nulls) {
425
+ helpers.setNullBit(this._buffer.ff_value_nulls, idx);
426
+ }
427
+ }
428
+ this._buffer.constructor.stats.totalWrites++;
429
+ }
430
+
431
+ ` +
432
+ // Write a feature flag usage entry (internal method, not on public type).
433
+ // Called by FeatureFlagEvaluator to log flag usage.
434
+ `ffUsage(flagName, context) {
435
+ this._checkOverflow();
436
+ const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_FF_USAGE);
437
+ this._writeIndex = idx;
438
+ if (this._buffer.message_values) {
439
+ this._buffer.message_values[idx] = flagName;
440
+ if (this._buffer.message_nulls) {
441
+ helpers.setNullBit(this._buffer.message_nulls, idx);
442
+ }
443
+ }
444
+ this._buffer.constructor.stats.totalWrites++;
445
+ if (context) {
446
+ this.with(context);
447
+ }
448
+ return this;
449
+ }
450
+
451
+ ` +
452
+ // Set the source code line number for the current log entry.
453
+ // Injected by the LMAO transformer after info/debug/warn/error/trace calls.
454
+ // Writes to _writeIndex (the current row).
455
+ `line(lineNumber) {
456
+ const idx = this._writeIndex;
457
+ if (this._buffer.line_values) {
458
+ this._buffer.line_values[idx] = lineNumber;
459
+ if (this._buffer.line_nulls) {
460
+ helpers.setNullBit(this._buffer.line_nulls, idx);
461
+ }
462
+ }
463
+ return this;
464
+ }
465
+
466
+ error_code(code) {
467
+ const idx = this._writeIndex;
468
+ if (this._buffer.error_code_values) {
469
+ this._buffer.error_code_values[idx] = code;
470
+ if (this._buffer.error_code_nulls) {
471
+ helpers.setNullBit(this._buffer.error_code_nulls, idx);
472
+ }
473
+ }
474
+ return this;
475
+ }
476
+
477
+ exception_stack(stack) {
478
+ const idx = this._writeIndex;
479
+ if (this._buffer.exception_stack_values) {
480
+ this._buffer.exception_stack_values[idx] = stack;
481
+ if (this._buffer.exception_stack_nulls) {
482
+ helpers.setNullBit(this._buffer.exception_stack_nulls, idx);
483
+ }
484
+ }
485
+ return this;
486
+ }
487
+
488
+ ff_value(value) {
489
+ const idx = this._writeIndex;
490
+ if (this._buffer.ff_value_values) {
491
+ this._buffer.ff_value_values[idx] = value;
492
+ if (this._buffer.ff_value_nulls) {
493
+ helpers.setNullBit(this._buffer.ff_value_nulls, idx);
494
+ }
495
+ }
496
+ return this;
497
+ }
498
+
499
+ uint64_value(value) {
500
+ const idx = this._writeIndex;
501
+ if (this._buffer.uint64_value_values) {
502
+ this._buffer.uint64_value_values[idx] = value;
503
+ if (this._buffer.uint64_value_nulls) {
504
+ helpers.setNullBit(this._buffer.uint64_value_nulls, idx);
505
+ }
506
+ }
507
+ return this;
508
+ }
509
+
510
+ ` +
511
+ // Get the scope values from buffer directly.
512
+ `get scope() {
513
+ return this._buffer._scopeValues;
514
+ }
515
+
516
+ ${setScopeMethod}
517
+
518
+ ${prefillMethod}
519
+
520
+ ` +
521
+ // Override fluent setters for enum fields to convert string → index
522
+ `${enumFluentSetters}
523
+ `,
524
+ // Use singleton helpers object (created once at module load)
525
+ dependencies: {
526
+ helpers: SPAN_LOGGER_HELPERS,
527
+ },
528
+ };
529
+ }
530
+ /**
531
+ * Cache for generated SpanLogger classes per schema.
532
+ */
533
+ const spanLoggerClassCache = new WeakMap();
534
+ function isSpanLoggerConstructor(value) {
535
+ return typeof value === 'function';
536
+ }
537
+ /**
538
+ * Create SpanLogger class constructor from schema.
539
+ * This is the cold-path function called at module creation time.
540
+ *
541
+ * SpanLogger extends ColumnWriter and adds:
542
+ * - info(), debug(), warn(), error() methods for log entries
543
+ * - _setScope() for setting scoped attributes
544
+ * - _getNextBuffer() override for SpanBuffer creation on overflow
545
+ *
546
+ * Note: Fluent attribute setters are inherited from ColumnWriter and write at _writeIndex.
547
+ */
548
+ export function createSpanLoggerClass(schema) {
549
+ // Check cache first
550
+ let SpanLoggerClass = spanLoggerClassCache.get(schema);
551
+ if (!SpanLoggerClass) {
552
+ const extension = buildSpanLoggerExtension(schema);
553
+ // Use arrow-builder's getColumnWriterClass with our extension
554
+ const WriterClass = getColumnWriterClass(schema, extension);
555
+ SpanLoggerClass = WriterClass;
556
+ if (!isSpanLoggerConstructor(SpanLoggerClass)) {
557
+ throw new Error('Failed to generate SpanLogger constructor');
558
+ }
559
+ spanLoggerClassCache.set(schema, SpanLoggerClass);
560
+ }
561
+ if (!isSpanLoggerConstructor(SpanLoggerClass)) {
562
+ throw new Error('Invalid cached SpanLogger constructor');
563
+ }
564
+ return SpanLoggerClass;
565
+ }
566
+ /**
567
+ * Create a SpanLogger instance for the given buffer.
568
+ *
569
+ * @param schema - Tag attribute schema
570
+ * @param buffer - SpanBuffer to write to
571
+ */
572
+ export function createSpanLogger(schema, buffer) {
573
+ const SpanLoggerClass = createSpanLoggerClass(schema);
574
+ return new SpanLoggerClass(buffer);
575
+ }