@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,388 @@
1
+ /**
2
+ * Background flush scheduler with adaptive flushing
3
+ *
4
+ * Per specs/lmao/01b2_buffer_self_tuning.md:
5
+ * - Adaptive flush intervals based on capacity, time, memory pressure
6
+ * - Idle detection for opportunistic flushing
7
+ * - Background processing (cold path)
8
+ */
9
+ import { Column, tableFromColumns } from '@uwdata/flechette';
10
+ import { convertSpanTreeToArrowTable } from './convertToArrow.js';
11
+ /**
12
+ * Number of flushes before logging capacity stats.
13
+ * Capacity stats are logged periodically to avoid overhead on every flush.
14
+ */
15
+ const CAPACITY_STATS_FLUSH_INTERVAL = 100;
16
+ function isSpanBufferConstructor(value) {
17
+ return typeof value === 'function' && typeof Reflect.get(value, 'stats') === 'object';
18
+ }
19
+ function isNodeTimer(value) {
20
+ return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'hasRef') === 'function';
21
+ }
22
+ function mergeTables(first, rest) {
23
+ if (rest.length === 0)
24
+ return first;
25
+ const names = first.names;
26
+ const merged = names.map((name, index) => {
27
+ const batches = [...(first.getChildAt(index)?.data ?? [])];
28
+ for (const table of rest) {
29
+ const col = table.getChild(name);
30
+ if (!col)
31
+ continue;
32
+ batches.push(...col.data);
33
+ }
34
+ return [name, new Column(batches)];
35
+ });
36
+ return tableFromColumns(merged);
37
+ }
38
+ /**
39
+ * Background flush scheduler
40
+ * Manages automatic flushing of span buffers to Arrow tables
41
+ */
42
+ export class FlushScheduler {
43
+ config;
44
+ handler;
45
+ buffers = new Set();
46
+ lastFlushTime = Date.now();
47
+ lastActivityTime = Date.now();
48
+ flushTimer;
49
+ idleTimer;
50
+ memoryTimer;
51
+ isRunning = false;
52
+ /** Flush counter for periodic capacity stats logging */
53
+ _flushCount = 0;
54
+ /**
55
+ * Track unique (SpanBufferConstructor, OpMetadata) pairs that have been flushed since last capacity stats log.
56
+ * We use SpanBufferConstructor as the key (for dedup) and store the OpMetadata for building PreEncodedEntry at conversion time.
57
+ * The constructor has static stats property with the capacity stats we need.
58
+ */
59
+ _bufferClassesSinceLastStatsLog = new Map();
60
+ constructor(handler, config = {}) {
61
+ this.handler = handler;
62
+ // Apply defaults
63
+ this.config = {
64
+ maxFlushInterval: config.maxFlushInterval ?? 10000,
65
+ minFlushInterval: config.minFlushInterval ?? 1000,
66
+ capacityThreshold: config.capacityThreshold ?? 0.8,
67
+ idleDetection: config.idleDetection ?? true,
68
+ idleTimeout: config.idleTimeout ?? 5000,
69
+ memoryPressureDetection: config.memoryPressureDetection ?? true,
70
+ memoryPressureThreshold: config.memoryPressureThreshold ?? 100 * 1024 * 1024, // 100MB
71
+ };
72
+ }
73
+ /**
74
+ * Register a buffer for automatic flushing
75
+ */
76
+ register(buffer) {
77
+ this.buffers.add(buffer);
78
+ this.lastActivityTime = Date.now();
79
+ // Start scheduler if not running
80
+ if (!this.isRunning) {
81
+ this.start();
82
+ }
83
+ }
84
+ /**
85
+ * Start the flush scheduler
86
+ */
87
+ start() {
88
+ if (this.isRunning)
89
+ return;
90
+ this.isRunning = true;
91
+ this.lastFlushTime = Date.now();
92
+ this.lastActivityTime = Date.now();
93
+ // Set up periodic flush timer
94
+ this.flushTimer = setInterval(() => {
95
+ this.checkFlushConditions();
96
+ }, 1000); // Check every second
97
+ // Set up idle detection timer
98
+ if (this.config.idleDetection) {
99
+ this.idleTimer = setInterval(() => {
100
+ this.checkIdleFlush();
101
+ }, this.config.idleTimeout);
102
+ }
103
+ // Set up memory pressure timer (Node.js only)
104
+ if (this.config.memoryPressureDetection && typeof process !== 'undefined') {
105
+ this.memoryTimer = setInterval(() => {
106
+ this.checkMemoryPressure();
107
+ }, 2000); // Check every 2 seconds
108
+ }
109
+ }
110
+ /**
111
+ * Stop the flush scheduler
112
+ */
113
+ stop() {
114
+ if (!this.isRunning)
115
+ return;
116
+ this.isRunning = false;
117
+ if (this.flushTimer) {
118
+ clearInterval(this.flushTimer);
119
+ this.flushTimer = undefined;
120
+ }
121
+ if (this.idleTimer) {
122
+ clearInterval(this.idleTimer);
123
+ this.idleTimer = undefined;
124
+ }
125
+ if (this.memoryTimer) {
126
+ clearInterval(this.memoryTimer);
127
+ this.memoryTimer = undefined;
128
+ }
129
+ }
130
+ /**
131
+ * Manually trigger a flush
132
+ */
133
+ async flush() {
134
+ await this.doFlush('manual');
135
+ }
136
+ /**
137
+ * Check flush conditions and flush if needed
138
+ */
139
+ checkFlushConditions() {
140
+ const now = Date.now();
141
+ const timeSinceLastFlush = now - this.lastFlushTime;
142
+ // Check max flush interval
143
+ if (timeSinceLastFlush >= this.config.maxFlushInterval) {
144
+ this.doFlush('time').catch(console.error);
145
+ return;
146
+ }
147
+ // Check capacity threshold
148
+ if (this.shouldFlushByCapacity()) {
149
+ this.doFlush('capacity').catch(console.error);
150
+ return;
151
+ }
152
+ }
153
+ /**
154
+ * Check if should flush based on capacity
155
+ */
156
+ shouldFlushByCapacity() {
157
+ for (const buffer of this.buffers) {
158
+ const utilizationRatio = buffer._writeIndex / buffer._capacity;
159
+ if (utilizationRatio >= this.config.capacityThreshold) {
160
+ return true;
161
+ }
162
+ }
163
+ return false;
164
+ }
165
+ /**
166
+ * Check idle state and flush if idle
167
+ */
168
+ checkIdleFlush() {
169
+ const now = Date.now();
170
+ const timeSinceActivity = now - this.lastActivityTime;
171
+ if (timeSinceActivity >= this.config.idleTimeout) {
172
+ // Only flush if there's data and min interval has passed
173
+ const timeSinceLastFlush = now - this.lastFlushTime;
174
+ if (this.buffers.size > 0 && timeSinceLastFlush >= this.config.minFlushInterval) {
175
+ this.doFlush('idle').catch(console.error);
176
+ }
177
+ }
178
+ }
179
+ /**
180
+ * Check memory pressure and flush if needed
181
+ * Node.js only
182
+ */
183
+ checkMemoryPressure() {
184
+ if (typeof process === 'undefined')
185
+ return;
186
+ try {
187
+ const memUsage = process.memoryUsage();
188
+ const availableMemory = memUsage.heapTotal - memUsage.heapUsed;
189
+ if (availableMemory < this.config.memoryPressureThreshold) {
190
+ this.doFlush('memory').catch(console.error);
191
+ }
192
+ }
193
+ catch {
194
+ // Ignore errors in memory detection
195
+ }
196
+ }
197
+ /**
198
+ * Perform the actual flush operation
199
+ */
200
+ async doFlush(reason) {
201
+ if (this.buffers.size === 0)
202
+ return;
203
+ const now = Date.now();
204
+ const timeSinceLastFlush = now - this.lastFlushTime;
205
+ // Respect minimum flush interval
206
+ if (reason !== 'manual' && timeSinceLastFlush < this.config.minFlushInterval) {
207
+ return;
208
+ }
209
+ // Collect all buffers to flush
210
+ const buffersToFlush = Array.from(this.buffers);
211
+ // Collect unique (SpanBufferConstructor, OpMetadata) pairs from buffers being flushed
212
+ // Use SpanBufferConstructor as the key to dedup - multiple buffers may share the same class
213
+ // We pick the first OpMetadata we see for each class (they should be consistent)
214
+ const bufferClassesInThisFlush = new Map();
215
+ for (const buffer of buffersToFlush) {
216
+ let currentBuffer = buffer;
217
+ while (currentBuffer) {
218
+ const bufferClass = currentBuffer.constructor;
219
+ if (!isSpanBufferConstructor(bufferClass)) {
220
+ throw new TypeError('Expected span buffer constructor with shared stats metadata');
221
+ }
222
+ // Only add if we haven't seen this buffer class before
223
+ if (!bufferClassesInThisFlush.has(bufferClass)) {
224
+ bufferClassesInThisFlush.set(bufferClass, currentBuffer._opMetadata);
225
+ }
226
+ currentBuffer = currentBuffer._overflow;
227
+ }
228
+ }
229
+ // Add to tracking map (for periodic capacity stats logging)
230
+ for (const [bufferClass, metadata] of bufferClassesInThisFlush) {
231
+ // Only set if not already present (preserve first metadata seen)
232
+ if (!this._bufferClassesSinceLastStatsLog.has(bufferClass)) {
233
+ this._bufferClassesSinceLastStatsLog.set(bufferClass, metadata);
234
+ }
235
+ }
236
+ // Increment flush counter
237
+ this._flushCount++;
238
+ // Check if we should log capacity stats
239
+ const shouldLogCapacityStats = this._flushCount >= CAPACITY_STATS_FLUSH_INTERVAL;
240
+ // Convert Map to CapacityStatsEntry[] for the conversion function
241
+ const modulesToLogStatsForConversion = shouldLogCapacityStats
242
+ ? Array.from(this._bufferClassesSinceLastStatsLog.entries()).map(([bufferClass, metadata]) => ({
243
+ bufferClass,
244
+ metadata,
245
+ }))
246
+ : undefined;
247
+ // Count total rows and buffers
248
+ let totalRows = 0;
249
+ let totalBuffers = 0;
250
+ for (const buffer of buffersToFlush) {
251
+ // Count rows in buffer chain
252
+ let currentBuffer = buffer;
253
+ while (currentBuffer) {
254
+ totalRows += currentBuffer._writeIndex;
255
+ totalBuffers++;
256
+ currentBuffer = currentBuffer._overflow;
257
+ }
258
+ }
259
+ if (totalRows === 0 && !shouldLogCapacityStats)
260
+ return;
261
+ // Convert all buffers to Arrow tables and concatenate
262
+ const tables = [];
263
+ for (const buffer of buffersToFlush) {
264
+ try {
265
+ const table = convertSpanTreeToArrowTable(buffer, undefined, modulesToLogStatsForConversion);
266
+ if (table.numRows > 0) {
267
+ tables.push(table);
268
+ }
269
+ }
270
+ catch (error) {
271
+ console.error('Error converting buffer to Arrow table:', error);
272
+ }
273
+ }
274
+ // Concatenate all tables
275
+ if (tables.length === 0) {
276
+ // No tables but might have capacity stats - create empty table
277
+ // Capacity stats will be in the first table if any buffer had data
278
+ // If no buffers had data, we still need to handle capacity stats
279
+ // For now, return early - capacity stats will be logged on next flush with data
280
+ if (!shouldLogCapacityStats)
281
+ return;
282
+ // If we should log stats but have no tables, we need to create a table with just capacity stats
283
+ // This is handled by convertSpanTreeToArrowTable returning a table with capacity stats batch
284
+ // But since we have no buffers, we can't call it. So we skip logging stats this time.
285
+ // Stats will be logged when there's actual data to flush.
286
+ return;
287
+ }
288
+ const [firstTable, ...otherTables] = tables;
289
+ const combinedTable = mergeTables(firstTable, otherTables);
290
+ // Call handler
291
+ const metadata = {
292
+ totalRows,
293
+ totalBuffers,
294
+ flushReason: reason,
295
+ timestamp: now,
296
+ };
297
+ try {
298
+ await this.handler(combinedTable, metadata);
299
+ this.lastFlushTime = now;
300
+ // Reset flush counter and module tracking if we logged capacity stats
301
+ if (shouldLogCapacityStats) {
302
+ this._flushCount = 0;
303
+ this._bufferClassesSinceLastStatsLog.clear();
304
+ }
305
+ // Reset buffers after successful flush to avoid duplicate re-processing
306
+ for (const buffer of buffersToFlush) {
307
+ // Reset writeIndex to 0 for the root buffer
308
+ buffer._writeIndex = 0;
309
+ // Clear any linked/chained buffers
310
+ let nextBuffer = buffer._overflow;
311
+ while (nextBuffer) {
312
+ nextBuffer._writeIndex = 0;
313
+ const temp = nextBuffer._overflow;
314
+ nextBuffer._overflow = undefined; // Unlink chained buffer
315
+ nextBuffer = temp;
316
+ }
317
+ buffer._overflow = undefined; // Clear link from root buffer
318
+ // A flushed root buffer is no longer pending; callers must re-register on future writes.
319
+ this.buffers.delete(buffer);
320
+ }
321
+ }
322
+ catch (error) {
323
+ console.error('Error in flush handler:', error);
324
+ // Do NOT reset buffers on failure to avoid data loss
325
+ }
326
+ }
327
+ /**
328
+ * Record activity (called when buffers are written to)
329
+ */
330
+ recordActivity() {
331
+ this.lastActivityTime = Date.now();
332
+ }
333
+ }
334
+ /**
335
+ * Global flush scheduler instance (optional)
336
+ * Applications can use this or create their own
337
+ */
338
+ let globalScheduler = null;
339
+ /**
340
+ * Get or create global flush scheduler
341
+ */
342
+ export function getGlobalFlushScheduler(handler, config) {
343
+ if (!globalScheduler) {
344
+ globalScheduler = new FlushScheduler(handler, config);
345
+ }
346
+ return globalScheduler;
347
+ }
348
+ /**
349
+ * Reset global flush scheduler (for testing)
350
+ */
351
+ export function resetGlobalFlushScheduler() {
352
+ if (globalScheduler) {
353
+ globalScheduler.stop();
354
+ globalScheduler = null;
355
+ }
356
+ }
357
+ /**
358
+ * Test utilities for accessing FlushScheduler internals
359
+ * @internal
360
+ */
361
+ export const FlushSchedulerTestUtils = {
362
+ /**
363
+ * Get the flush timer for a scheduler instance (for testing)
364
+ */
365
+ getFlushTimer(scheduler) {
366
+ const timer = Reflect.get(scheduler, 'flushTimer');
367
+ return isNodeTimer(timer) ? timer : undefined;
368
+ },
369
+ /**
370
+ * Set the flush timer for a scheduler instance (for testing)
371
+ */
372
+ setFlushTimer(scheduler, timer) {
373
+ Reflect.set(scheduler, 'flushTimer', timer);
374
+ },
375
+ /**
376
+ * Get the last activity time for a scheduler instance (for testing)
377
+ */
378
+ getLastActivityTime(scheduler) {
379
+ const time = Reflect.get(scheduler, 'lastActivityTime');
380
+ return typeof time === 'number' ? time : undefined;
381
+ },
382
+ /**
383
+ * Set the last activity time for a scheduler instance (for testing)
384
+ */
385
+ setLastActivityTime(scheduler, time) {
386
+ Reflect.set(scheduler, 'lastActivityTime', time);
387
+ },
388
+ };
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Library Prefix/Remapping Utilities
3
+ *
4
+ * WHY: Libraries need to write clean, domain-focused code (ctx.tag.status(200))
5
+ * while avoiding naming conflicts when composed with other libraries.
6
+ *
7
+ * HOW: At composition time (cold path), we generate a remapped SpanLogger class
8
+ * that exposes clean method names but writes to prefixed buffer columns.
9
+ *
10
+ * Per specs/lmao/01e_library_integration_pattern.md:
11
+ * - Libraries define clean schemas without prefixes (status, method, url)
12
+ * - Prefixing happens at composition time (http_status, http_method, http_url)
13
+ * - Zero hot path overhead - all remapping done via code generation at module creation
14
+ *
15
+ * WHAT: This module provides:
16
+ * - prefixSchema() - Rename schema fields with prefix
17
+ * - createPrefixMapping() - Build clean→prefixed name mapping
18
+ * - generateRemappedBufferViewClass() - Generate view for Arrow conversion
19
+ * - generateRemappedSpanLoggerClass() - Generate class with clean methods, prefixed writes
20
+ * - createRemappedSpanLoggerClass() - Compile and cache SpanLogger classes
21
+ */
22
+ import type { SpanLoggerImpl } from './codegen/spanLoggerGenerator.js';
23
+ import { LogSchema } from './schema/types.js';
24
+ import type { AnySpanBuffer } from './types.js';
25
+ type RemappedBufferViewConstructor = new (buffer: AnySpanBuffer) => AnySpanBuffer;
26
+ type RemappedSpanLoggerConstructor<T extends LogSchema = LogSchema> = new (buffer: AnySpanBuffer, createOverflowBuffer: (buffer: AnySpanBuffer) => AnySpanBuffer, initialScopedAttributes?: Record<string, unknown>) => SpanLoggerImpl<T>;
27
+ /**
28
+ * Prefix a tag attribute schema
29
+ * Renames all fields with a prefix to avoid conflicts
30
+ *
31
+ * Example:
32
+ * - Input: { status: S.number(), method: S.enum(['GET', 'POST']) }
33
+ * - Prefix: 'http'
34
+ * - Output: { http_status: S.number(), http_method: S.enum(['GET', 'POST']) }
35
+ */
36
+ export declare function prefixSchema(schema: LogSchema, prefix: string): LogSchema & Record<string, unknown>;
37
+ /**
38
+ * Prefix mapping: maps clean names to prefixed column names
39
+ *
40
+ * WHY: Library authors write ctx.tag.status() but buffer column is http_status
41
+ * HOW: At module creation time, we build this mapping once (cold path)
42
+ *
43
+ * @example
44
+ * // Input: schema = { status: S.number(), method: S.enum([...]) }, prefix = 'http'
45
+ * // Output: { status: 'http_status', method: 'http_method' }
46
+ */
47
+ export interface PrefixMapping {
48
+ [cleanName: string]: string;
49
+ }
50
+ /**
51
+ * Create a mapping from clean field names to prefixed column names
52
+ *
53
+ * WHY: This mapping is used by generateRemappedSpanLoggerClass to create methods
54
+ * that write to prefixed columns but expose clean API names.
55
+ *
56
+ * @param schema - Clean schema (LogSchema instance)
57
+ * @param prefix - Prefix to apply (e.g., 'http')
58
+ * @returns Mapping from clean name to prefixed name
59
+ *
60
+ * @example
61
+ * const schema = defineLogSchema({ status: S.number() });
62
+ * const mapping = createPrefixMapping(schema, 'http');
63
+ * // Returns: { status: 'http_status' }
64
+ */
65
+ export declare function createPrefixMapping<T extends LogSchema>(schema: T, prefix: string): PrefixMapping;
66
+ /**
67
+ * Generate a RemappedBufferView class for library prefix support.
68
+ *
69
+ * WHY: Libraries write to unprefixed columns (status, method) but Arrow conversion
70
+ * iterates using prefixed names from the root schema (http_status, http_method).
71
+ * RemappedBufferView bridges this gap for tree traversal during cold-path Arrow conversion.
72
+ *
73
+ * HOW: Uses new Function() to generate a class at library composition time (cold path).
74
+ * The generated class wraps a SpanBuffer and remaps getColumnIfAllocated/getNullsIfAllocated
75
+ * calls from prefixed names to unprefixed names.
76
+ *
77
+ * WHAT: Returns a class constructor that:
78
+ * - Passes through tree traversal properties (children, next)
79
+ * - Passes through system columns (timestamps, operations, message, etc.)
80
+ * - Passes through identity properties (traceId, spanId, etc.)
81
+ * - Remaps getColumnIfAllocated() and getNullsIfAllocated() from prefixed→unprefixed
82
+ *
83
+ * Per specs/lmao/01e_library_integration_pattern.md:
84
+ * - Hot path: Library writes directly to unprefixed columns (zero overhead)
85
+ * - Cold path: Arrow conversion uses RemappedBufferView to access via prefixed names
86
+ *
87
+ * @param prefixToUnprefixedMapping - Maps prefixed names to unprefixed names
88
+ * e.g., { 'http_status': 'status', 'http_method': 'method' }
89
+ * NOTE: The mapping is prefixed→unprefixed (reverse of createPrefixMapping output)
90
+ *
91
+ * @returns Constructor for RemappedBufferView class
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // Create mapping (prefixed → unprefixed)
96
+ * const mapping = { 'http_status': 'status', 'http_method': 'method' };
97
+ * const ViewClass = generateRemappedBufferViewClass(mapping);
98
+ *
99
+ * // Wrap library buffer
100
+ * const view = new ViewClass(libraryBuffer);
101
+ *
102
+ * // Access via prefixed name returns unprefixed column
103
+ * view.getColumnIfAllocated('http_status'); // Returns buffer.getColumnIfAllocated('status')
104
+ * ```
105
+ */
106
+ export declare function generateRemappedBufferViewClass(prefixToUnprefixedMapping: Record<string, string>): RemappedBufferViewConstructor;
107
+ /**
108
+ * Generate a remapped SpanLogger class for library prefix support
109
+ *
110
+ * WHY: Library authors write clean code (ctx.tag.status(200)) but buffers use prefixed
111
+ * columns (http_status). This function generates a class at module creation time
112
+ * (cold path) that exposes clean method names but writes to prefixed columns.
113
+ *
114
+ * HOW: Uses new Function() to generate optimized JavaScript code. The generated class
115
+ * has methods named after clean schema fields but writes to prefixed buffer columns.
116
+ *
117
+ * WHAT: Returns executable JavaScript code string for a SpanLogger class with:
118
+ * - Clean method names (status, method, url)
119
+ * - Writes to prefixed columns (http_status, http_method, http_url)
120
+ * - Full support for enum/category/text type handling
121
+ * - Method chaining support
122
+ *
123
+ * @param cleanSchema - Original clean schema (without prefix)
124
+ * @param prefixMapping - Mapping from clean names to prefixed names
125
+ * @param className - Name for the generated class
126
+ * @returns Executable JavaScript code string
127
+ *
128
+ * @example
129
+ * const code = generateRemappedSpanLoggerClass(
130
+ * { status: S.number(), method: S.enum(['GET', 'POST']) },
131
+ * { status: 'http_status', method: 'http_method' },
132
+ * 'HttpSpanLogger'
133
+ * );
134
+ * // Generated class has .status() method that writes to http_status
135
+ */
136
+ export declare function generateRemappedSpanLoggerClass<T extends LogSchema>(cleanSchema: T, prefixMapping: PrefixMapping, className?: string): string;
137
+ /**
138
+ * Create a remapped SpanLogger class constructor from clean schema and prefix mapping
139
+ *
140
+ * WHY: This is the cold-path function called at module creation time. It compiles
141
+ * the generated class code once and caches the constructor.
142
+ *
143
+ * @param cleanSchema - Clean schema (without prefix)
144
+ * @param prefixMapping - Mapping from clean names to prefixed names
145
+ * @returns Constructor for the remapped SpanLogger class
146
+ */
147
+ export declare function createRemappedSpanLoggerClass<T extends LogSchema>(cleanSchema: T, prefixMapping: PrefixMapping): RemappedSpanLoggerConstructor<T>;
148
+ export {};
149
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/lib/library.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASvE,OAAO,EAAE,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,KAAK,6BAA6B,GAAG,KAAK,MAAM,EAAE,aAAa,KAAK,aAAa,CAAC;AAClF,KAAK,6BAA6B,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,KACpE,MAAM,EAAE,aAAa,EACrB,oBAAoB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,EAC9D,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9C,cAAc,CAAC,CAAC,CAAC,CAAC;AAiCvB;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAenG;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CASjG;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,+BAA+B,CAC7C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChD,6BAA6B,CA0F/B;AAkHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,+BAA+B,CAAC,CAAC,SAAS,SAAS,EACjE,WAAW,EAAE,CAAC,EACd,aAAa,EAAE,aAAa,EAC5B,SAAS,SAAuB,GAC/B,MAAM,CAkMR;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,SAAS,EAC/D,WAAW,EAAE,CAAC,EACd,aAAa,EAAE,aAAa,GAC3B,6BAA6B,CAAC,CAAC,CAAC,CAkBlC"}