@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,67 @@
1
+ import { batchType, bool, Column } from '@uwdata/flechette';
2
+ const EMPTY_VALIDITY = new Uint8Array(0);
3
+ const BOOL_TYPE_ID = bool().typeId;
4
+ export function hasTypeId(value) {
5
+ return typeof value === 'object' && value !== null && 'typeId' in value;
6
+ }
7
+ export function isBoolType(value) {
8
+ return hasTypeId(value) && value.typeId === BOOL_TYPE_ID;
9
+ }
10
+ function isArrowIndexArrayConstructor(value) {
11
+ return value === Uint8Array || value === Uint16Array || value === Uint32Array;
12
+ }
13
+ export function hasArrowIndexType(value) {
14
+ return typeof value === 'object' && value !== null && '__arrow_index_type' in value;
15
+ }
16
+ export function hasArrowIndexMetadata(value) {
17
+ return (hasArrowIndexType(value) && '__index_array_ctor' in value && isArrowIndexArrayConstructor(value.__index_array_ctor));
18
+ }
19
+ export function getArrowIndexTypeOr(value, fallback) {
20
+ return hasArrowIndexType(value) ? value.__arrow_index_type : fallback;
21
+ }
22
+ export function getArrowIndexArrayConstructorOr(value, fallback = Uint8Array) {
23
+ return hasArrowIndexMetadata(value) ? value.__index_array_ctor : fallback;
24
+ }
25
+ export function makeArrowColumn(data) {
26
+ const validity = data.validity ?? EMPTY_VALIDITY;
27
+ if ('dictionary' in data) {
28
+ const batch = new (batchType(data.type))({
29
+ type: data.type,
30
+ length: data.length,
31
+ nullCount: data.nullCount,
32
+ validity,
33
+ values: data.values,
34
+ });
35
+ batch.setDictionary(data.dictionary);
36
+ return new Column([batch]);
37
+ }
38
+ if ('offsets' in data) {
39
+ const batch = new (batchType(data.type))({
40
+ type: data.type,
41
+ length: data.length,
42
+ nullCount: data.nullCount,
43
+ validity,
44
+ offsets: data.offsets,
45
+ values: data.values,
46
+ });
47
+ return new Column([batch]);
48
+ }
49
+ if (isBoolType(data.type)) {
50
+ const batch = new (batchType(data.type))({
51
+ type: data.type,
52
+ length: data.length,
53
+ nullCount: data.nullCount,
54
+ validity,
55
+ values: data.values,
56
+ });
57
+ return new Column([batch]);
58
+ }
59
+ const batch = new (batchType(data.type))({
60
+ type: data.type,
61
+ length: data.length,
62
+ nullCount: data.nullCount,
63
+ validity,
64
+ values: data.values,
65
+ });
66
+ return new Column([batch]);
67
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Utility functions for Arrow conversion
3
+ */
4
+ import type { AnySpanBuffer } from '../types.js';
5
+ type ConcatenatedNullBitmaps = {
6
+ nullBitmap: Uint8Array | undefined;
7
+ nullCount: number;
8
+ };
9
+ /**
10
+ * Encode an array of strings into a single UTF-8 Uint8Array
11
+ */
12
+ export declare function encodeUtf8Strings(strings: readonly string[]): Uint8Array;
13
+ /**
14
+ * Calculate UTF-8 byte offsets for an array of strings
15
+ */
16
+ export declare function calculateUtf8Offsets(strings: readonly string[]): Int32Array;
17
+ /**
18
+ * Concatenate Uint8 arrays without type casting.
19
+ */
20
+ export declare function concatenateUint8Arrays(arrays: Uint8Array[]): Uint8Array;
21
+ /**
22
+ * Concatenate Float64 arrays without type casting.
23
+ */
24
+ export declare function concatenateFloat64Arrays(arrays: Float64Array[]): Float64Array;
25
+ /**
26
+ * Concatenate null bitmaps from multiple buffers
27
+ */
28
+ export declare function concatenateNullBitmaps(buffers: AnySpanBuffer[], columnName: string): ConcatenatedNullBitmaps;
29
+ /**
30
+ * Get Arrow field name from LMAO field name
31
+ */
32
+ export declare function getArrowFieldName(fieldName: string): string;
33
+ /**
34
+ * Walk a SpanBuffer tree (including overflow chains and children)
35
+ */
36
+ export declare function walkSpanTree(root: AnySpanBuffer, visitor: (buffer: AnySpanBuffer) => void): void;
37
+ export {};
38
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/arrow/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,KAAK,uBAAuB,GAAG;IAAE,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAUxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAWvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAW7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,uBAAuB,CA8B5G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAShG"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Utility functions for Arrow conversion
3
+ */
4
+ import { copyBits, countNulls } from '@smoothbricks/arrow-builder';
5
+ const UTF8_ENCODER = new TextEncoder();
6
+ /**
7
+ * Encode an array of strings into a single UTF-8 Uint8Array
8
+ */
9
+ export function encodeUtf8Strings(strings) {
10
+ const encoded = strings.map((s) => UTF8_ENCODER.encode(s));
11
+ const totalLength = encoded.reduce((sum, arr) => sum + arr.length, 0);
12
+ const result = new Uint8Array(totalLength);
13
+ let offset = 0;
14
+ for (const arr of encoded) {
15
+ result.set(arr, offset);
16
+ offset += arr.length;
17
+ }
18
+ return result;
19
+ }
20
+ /**
21
+ * Calculate UTF-8 byte offsets for an array of strings
22
+ */
23
+ export function calculateUtf8Offsets(strings) {
24
+ const offsets = new Int32Array(strings.length + 1);
25
+ offsets[0] = 0;
26
+ for (let i = 0; i < strings.length; i++) {
27
+ const byteLength = UTF8_ENCODER.encode(strings[i]).length;
28
+ offsets[i + 1] = offsets[i] + byteLength;
29
+ }
30
+ return offsets;
31
+ }
32
+ /**
33
+ * Concatenate Uint8 arrays without type casting.
34
+ */
35
+ export function concatenateUint8Arrays(arrays) {
36
+ if (arrays.length === 0)
37
+ throw new Error('Cannot concatenate empty array list');
38
+ if (arrays.length === 1)
39
+ return arrays[0];
40
+ const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
41
+ const result = new Uint8Array(totalLength);
42
+ let offset = 0;
43
+ for (const arr of arrays) {
44
+ result.set(arr, offset);
45
+ offset += arr.length;
46
+ }
47
+ return result;
48
+ }
49
+ /**
50
+ * Concatenate Float64 arrays without type casting.
51
+ */
52
+ export function concatenateFloat64Arrays(arrays) {
53
+ if (arrays.length === 0)
54
+ throw new Error('Cannot concatenate empty array list');
55
+ if (arrays.length === 1)
56
+ return arrays[0];
57
+ const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
58
+ const result = new Float64Array(totalLength);
59
+ let offset = 0;
60
+ for (const arr of arrays) {
61
+ result.set(arr, offset);
62
+ offset += arr.length;
63
+ }
64
+ return result;
65
+ }
66
+ /**
67
+ * Concatenate null bitmaps from multiple buffers
68
+ */
69
+ export function concatenateNullBitmaps(buffers, columnName) {
70
+ const hasAnyNulls = buffers.some((buf) => buf.getNullsIfAllocated(columnName) !== undefined);
71
+ if (!hasAnyNulls)
72
+ return { nullBitmap: undefined, nullCount: 0 };
73
+ const totalRows = buffers.reduce((sum, buf) => sum + buf._writeIndex, 0);
74
+ const bitmapBytes = Math.ceil(totalRows / 8);
75
+ const nullBitmap = new Uint8Array(bitmapBytes);
76
+ nullBitmap.fill(0xff); // Default all valid
77
+ // Buffer chains: all buffers except the last are full (writeIndex == capacity).
78
+ // If capacity is a multiple of 8, each buffer starts at a byte boundary.
79
+ let rowOffset = 0;
80
+ let nullCount = 0;
81
+ for (const buf of buffers) {
82
+ const sourceBitmap = buf.getNullsIfAllocated(columnName);
83
+ const rowCount = buf._writeIndex;
84
+ if (sourceBitmap) {
85
+ copyBits(nullBitmap, rowOffset, sourceBitmap, 0, rowCount);
86
+ // Count nulls using countNulls from arrow-builder
87
+ nullCount += countNulls(sourceBitmap, rowCount);
88
+ }
89
+ // If no sourceBitmap, leave as 0xff (all valid)
90
+ rowOffset += rowCount;
91
+ }
92
+ return { nullBitmap, nullCount };
93
+ }
94
+ /**
95
+ * Get Arrow field name from LMAO field name
96
+ */
97
+ export function getArrowFieldName(fieldName) {
98
+ return fieldName;
99
+ }
100
+ /**
101
+ * Walk a SpanBuffer tree (including overflow chains and children)
102
+ */
103
+ export function walkSpanTree(root, visitor) {
104
+ let current = root;
105
+ while (current) {
106
+ visitor(current);
107
+ current = current._overflow;
108
+ }
109
+ for (const child of root._children) {
110
+ walkSpanTree(child, visitor);
111
+ }
112
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Nanoseconds branded type for type-safe timestamp handling
3
+ *
4
+ * Prevents accidental unit mixing (milliseconds vs nanoseconds) and provides
5
+ * a centralized location for timestamp conversion utilities.
6
+ *
7
+ * This is a generic buffer concept used for high-precision time-series data.
8
+ *
9
+ * **Benefits:**
10
+ * - Type safety prevents mixing time units
11
+ * - Self-documenting code - units clear from type
12
+ * - Zero runtime overhead on hot path (BigInt operations are fast)
13
+ * - Conversion functions centralized and tested
14
+ * - Works with Arrow's TimestampNanosecond type
15
+ *
16
+ * **Precision:**
17
+ * - BigInt can represent arbitrarily large integers
18
+ * - Nanoseconds since epoch will never overflow
19
+ * - Node.js: Native nanosecond precision via process.hrtime.bigint()
20
+ * - Browser: Microsecond precision via performance.now() (last 3 digits are 000)
21
+ *
22
+ * @module nanoseconds
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * import { Nanoseconds } from '@smoothbricks/arrow-builder';
27
+ *
28
+ * // Node.js: Native nanoseconds
29
+ * const timestamp = Nanoseconds.now();
30
+ *
31
+ * // Store in buffer (BigInt64Array)
32
+ * buffer.timestamps[idx] = timestamp; // Type-safe!
33
+ * ```
34
+ */
35
+ /**
36
+ * Nanoseconds branded type
37
+ *
38
+ * A `bigint` with a compile-time brand that prevents accidental mixing of time units.
39
+ * The brand is erased at runtime, so there is zero overhead.
40
+ */
41
+ declare const nanosecondsBrand: unique symbol;
42
+ export type Nanoseconds = bigint & {
43
+ readonly [nanosecondsBrand]: 'Nanoseconds';
44
+ };
45
+ /**
46
+ * Utility functions for working with Nanoseconds
47
+ */
48
+ export declare namespace Nanoseconds {
49
+ /**
50
+ * Get current timestamp in nanoseconds since Unix epoch.
51
+ *
52
+ * Uses the most efficient method available:
53
+ * - Browser/generic: performance.timeOrigin + performance.now() (microsecond precision)
54
+ * - Browsers typically provide 5-20 microsecond precision
55
+ *
56
+ * For Node.js with true nanosecond precision, use the /node entry point.
57
+ *
58
+ * **Precision handling:**
59
+ * - Epoch milliseconds (~1.7 trillion) is safe as Number
60
+ * - Multiply by 1000 to get microseconds (~1.7 quadrillion) - still safe
61
+ * - Convert to BigInt, then multiply by 1000n for nanoseconds
62
+ *
63
+ * @returns Current timestamp in nanoseconds since Unix epoch
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * buffer.timestamps[idx] = Nanoseconds.now();
68
+ * ```
69
+ */
70
+ function now(): Nanoseconds;
71
+ /**
72
+ * Convert milliseconds to nanoseconds.
73
+ *
74
+ * @param millis - Time in milliseconds (e.g., from Date.now())
75
+ * @returns Time in nanoseconds
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const epochNanos = Nanoseconds.fromMillis(Date.now());
80
+ * ```
81
+ */
82
+ function fromMillis(millis: number): Nanoseconds;
83
+ /**
84
+ * Cast a raw bigint to Nanoseconds (use with caution).
85
+ *
86
+ * **Warning:** This bypasses type safety. Only use when you're certain
87
+ * the value is already in nanoseconds.
88
+ *
89
+ * @param value - Raw bigint value in nanoseconds
90
+ * @returns Branded Nanoseconds value
91
+ */
92
+ function unsafe(value: bigint): Nanoseconds;
93
+ /**
94
+ * Convert nanoseconds to milliseconds.
95
+ *
96
+ * @param nanos - Time in nanoseconds
97
+ * @returns Time in milliseconds (as number)
98
+ */
99
+ function toMillis(nanos: Nanoseconds): number;
100
+ /**
101
+ * Convert nanoseconds to microseconds.
102
+ *
103
+ * @param nanos - Time in nanoseconds
104
+ * @returns Time in microseconds (as bigint)
105
+ */
106
+ function toMicros(nanos: Nanoseconds): bigint;
107
+ }
108
+ export {};
109
+ //# sourceMappingURL=Nanoseconds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nanoseconds.d.ts","sourceRoot":"","sources":["../../../src/lib/buffer/Nanoseconds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;GAKG;AACH,OAAO,CAAC,MAAM,gBAAgB,EAAE,OAAO,MAAM,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAOlF;;GAEG;AACH,yBAAiB,WAAW,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAgB,GAAG,IAAI,WAAW,CAMjC;IAED;;;;;;;;;;OAUG;IACH,SAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAEtD;IAED;;;;;;;;OAQG;IACH,SAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAEjD;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEnD;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEnD;CACF"}
@@ -0,0 +1,86 @@
1
+ function toNanoseconds(value) {
2
+ return value;
3
+ }
4
+ /**
5
+ * Utility functions for working with Nanoseconds
6
+ */
7
+ export var Nanoseconds;
8
+ (function (Nanoseconds) {
9
+ /**
10
+ * Get current timestamp in nanoseconds since Unix epoch.
11
+ *
12
+ * Uses the most efficient method available:
13
+ * - Browser/generic: performance.timeOrigin + performance.now() (microsecond precision)
14
+ * - Browsers typically provide 5-20 microsecond precision
15
+ *
16
+ * For Node.js with true nanosecond precision, use the /node entry point.
17
+ *
18
+ * **Precision handling:**
19
+ * - Epoch milliseconds (~1.7 trillion) is safe as Number
20
+ * - Multiply by 1000 to get microseconds (~1.7 quadrillion) - still safe
21
+ * - Convert to BigInt, then multiply by 1000n for nanoseconds
22
+ *
23
+ * @returns Current timestamp in nanoseconds since Unix epoch
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * buffer.timestamps[idx] = Nanoseconds.now();
28
+ * ```
29
+ */
30
+ function now() {
31
+ // performance.timeOrigin + performance.now() gives epoch time in milliseconds
32
+ // with sub-millisecond precision (e.g., 1702789123456.789)
33
+ // Convert to microseconds first (safe as Number), then to nanoseconds as BigInt
34
+ const epochMicros = Math.round((performance.timeOrigin + performance.now()) * 1000);
35
+ return toNanoseconds(BigInt(epochMicros) * 1000n);
36
+ }
37
+ Nanoseconds.now = now;
38
+ /**
39
+ * Convert milliseconds to nanoseconds.
40
+ *
41
+ * @param millis - Time in milliseconds (e.g., from Date.now())
42
+ * @returns Time in nanoseconds
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const epochNanos = Nanoseconds.fromMillis(Date.now());
47
+ * ```
48
+ */
49
+ function fromMillis(millis) {
50
+ return toNanoseconds(BigInt(Math.trunc(millis)) * 1000000n);
51
+ }
52
+ Nanoseconds.fromMillis = fromMillis;
53
+ /**
54
+ * Cast a raw bigint to Nanoseconds (use with caution).
55
+ *
56
+ * **Warning:** This bypasses type safety. Only use when you're certain
57
+ * the value is already in nanoseconds.
58
+ *
59
+ * @param value - Raw bigint value in nanoseconds
60
+ * @returns Branded Nanoseconds value
61
+ */
62
+ function unsafe(value) {
63
+ return toNanoseconds(value);
64
+ }
65
+ Nanoseconds.unsafe = unsafe;
66
+ /**
67
+ * Convert nanoseconds to milliseconds.
68
+ *
69
+ * @param nanos - Time in nanoseconds
70
+ * @returns Time in milliseconds (as number)
71
+ */
72
+ function toMillis(nanos) {
73
+ return Number(nanos / 1000000n);
74
+ }
75
+ Nanoseconds.toMillis = toMillis;
76
+ /**
77
+ * Convert nanoseconds to microseconds.
78
+ *
79
+ * @param nanos - Time in nanoseconds
80
+ * @returns Time in microseconds (as bigint)
81
+ */
82
+ function toMicros(nanos) {
83
+ return nanos / 1000n;
84
+ }
85
+ Nanoseconds.toMicros = toMicros;
86
+ })(Nanoseconds || (Nanoseconds = {}));
@@ -0,0 +1,95 @@
1
+ /**
2
+ * BufferStrategy - Abstraction for SpanBuffer memory management and Arrow conversion.
3
+ *
4
+ * This interface separates memory management concerns from sink concerns (Tracer):
5
+ * - BufferStrategy: HOW buffers are allocated and converted (JS TypedArrays vs WASM)
6
+ * - Tracer (sink): WHAT happens with completed buffers (stdio, queue, test accumulation)
7
+ *
8
+ * Key responsibilities:
9
+ * 1. Buffer creation (root, child, overflow)
10
+ * 2. Arrow conversion (strategy knows optimal path)
11
+ * 3. Buffer release (GC for JS, freelist for WASM)
12
+ *
13
+ * The sink (Tracer subclass) controls WHEN to convert and release:
14
+ * - StdioTracer: prints then releases immediately
15
+ * - TestTracer: holds buffers until clear()
16
+ * - SqsTracer: accumulates, converts on flush(), then releases
17
+ *
18
+ * @module bufferStrategy
19
+ */
20
+ import type { Table } from '@uwdata/flechette';
21
+ import type { OpMetadata } from './opContext/opTypes.js';
22
+ import type { LogSchema } from './schema/LogSchema.js';
23
+ import type { ITraceRoot } from './traceRoot.js';
24
+ import type { AnySpanBuffer, SpanBuffer } from './types.js';
25
+ /**
26
+ * BufferStrategy interface for memory management and Arrow conversion.
27
+ *
28
+ * Implementations:
29
+ * - JsBufferStrategy: GC-managed JS TypedArrays, zero-copy Arrow via flechette
30
+ * - WasmBufferStrategy: WASM memory with freelist, Arrow built in WASM
31
+ * - (future) NapiBufferStrategy: Native code with SharedArrayBuffer
32
+ *
33
+ * @typeParam T - LogSchema type for type-safe buffer access
34
+ */
35
+ export interface BufferStrategy<T extends LogSchema = LogSchema> {
36
+ /**
37
+ * Create a root SpanBuffer for a new trace.
38
+ *
39
+ * @param schema - LogSchema defining column types
40
+ * @param traceRoot - Platform-specific trace root with timestamp anchors
41
+ * @param opMetadata - Metadata for the executing op
42
+ * @param capacity - Optional capacity override
43
+ * @returns New SpanBuffer for the root span
44
+ */
45
+ createSpanBuffer(schema: T, traceRoot: ITraceRoot, opMetadata: OpMetadata, capacity?: number): SpanBuffer<T>;
46
+ /**
47
+ * Create a child span buffer linked to a parent.
48
+ *
49
+ * @param parentBuffer - Parent buffer for tree linkage
50
+ * Note: Caller must call writeSpanStart() after this to set span name in message_values[0].
51
+ *
52
+ * @param callsiteMetadata - Metadata for WHERE span() was called (row 0)
53
+ * @param opMetadata - Metadata for WHAT op is executing (rows 1+)
54
+ * @param capacity - Optional capacity override
55
+ * @param schema - Optional schema for the child (if different from parent, e.g., library ops)
56
+ * @returns New SpanBuffer linked to parent
57
+ */
58
+ createChildSpanBuffer(parentBuffer: SpanBuffer<T>, callsiteMetadata: OpMetadata, opMetadata: OpMetadata, capacity?: number, schema?: T): SpanBuffer<T>;
59
+ /**
60
+ * Create an overflow buffer when current buffer is full.
61
+ *
62
+ * @param buffer - Full buffer that needs overflow storage
63
+ * @returns New SpanBuffer linked via buffer._overflow
64
+ */
65
+ createOverflowBuffer(buffer: SpanBuffer<T>): SpanBuffer<T>;
66
+ /**
67
+ * Convert a SpanBuffer tree to Arrow Table.
68
+ *
69
+ * Each strategy knows the optimal conversion path:
70
+ * - JS: Zero-copy wrap TypedArrays via flechette
71
+ * - WASM: Build Arrow in WASM memory, return table
72
+ * - NAPI: Call into native code for parallel conversion
73
+ *
74
+ * @param buffer - Root buffer to convert (includes children and overflow chain)
75
+ * @returns Arrow Table (sync) or Promise<Table> (async)
76
+ */
77
+ toArrowTable(buffer: AnySpanBuffer): Table | Promise<Table>;
78
+ /**
79
+ * Release a SpanBuffer's memory resources.
80
+ *
81
+ * Called by the sink when it's done with a buffer.
82
+ *
83
+ * - JsBufferStrategy: No-op (GC handles it)
84
+ * - WasmBufferStrategy: Returns blocks to freelist
85
+ *
86
+ * The sink decides WHEN to release:
87
+ * - After printing (StdioTracer)
88
+ * - On clear() (TestTracer)
89
+ * - After Arrow conversion (SqsTracer)
90
+ *
91
+ * @param buffer - Buffer to release (and its entire tree)
92
+ */
93
+ releaseBuffer(buffer: AnySpanBuffer): void;
94
+ }
95
+ //# sourceMappingURL=bufferStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferStrategy.d.ts","sourceRoot":"","sources":["../../src/lib/bufferStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE7G;;;;;;;;;;;OAWG;IACH,qBAAqB,CACnB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,EAC3B,gBAAgB,EAAE,UAAU,EAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,CAAC,GACT,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE5D;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC5C"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Capacity Tuning - Self-tuning buffer capacity based on utilization
3
+ *
4
+ * Per specs/lmao/01b2_buffer_self_tuning.md:
5
+ * - Track row utilization = totalWrites / (spansCreated * usableRowsPerSpan)
6
+ * - Increase capacity if utilization > 150% (regularly overflowing)
7
+ * - Decrease capacity if utilization < 50% (wasting space)
8
+ * - Maintain power-of-2 capacities between 8 and 1024
9
+ *
10
+ * ## Utilization Model
11
+ *
12
+ * - 100% = exactly filling first buffer per span (ideal)
13
+ * - 150% = filling 1.5x first buffer (some spans overflow)
14
+ * - 200% = filling 2x first buffer (every span overflows once)
15
+ * - 50% = only using half the first buffer (wasting space)
16
+ *
17
+ * The 3x gap between shrink (50%) and grow (150%) thresholds prevents flip-flopping:
18
+ * - After grow: utilization halves → lands in stable zone
19
+ * - After shrink: utilization doubles → lands in stable zone
20
+ *
21
+ * ## Architecture Note
22
+ *
23
+ * Stats are on SpanBufferClass.stats (static property), NOT on LogBinding.
24
+ * This reduces per-instance memory and avoids sync bugs from having two stat objects.
25
+ */
26
+ import type { SpanBufferStats } from './spanBufferStats.js';
27
+ /**
28
+ * Check if capacity should be tuned after an overflow event.
29
+ *
30
+ * Called when a buffer overflows and needs to chain to a new buffer.
31
+ *
32
+ * @param stats - SpanBufferStats from SpanBufferClass.stats
33
+ * @internal
34
+ */
35
+ export declare function checkCapacityTuning(stats: SpanBufferStats): void;
36
+ /**
37
+ * Check if capacity should be tuned based on utilization.
38
+ *
39
+ * Algorithm:
40
+ * - Requires minimum 10 spans before tuning
41
+ * - Compute utilization = totalWrites / (spansCreated * usableRowsPerSpan)
42
+ * - Increase capacity (×2, max 1024) if utilization > 150%
43
+ * - Decrease capacity (÷2, min 8) if utilization < 50%
44
+ * - Reset stats after tuning to start fresh measurement window
45
+ *
46
+ * @param stats - SpanBufferStats from SpanBufferClass.stats
47
+ * @internal Exported for testing
48
+ */
49
+ export declare function shouldTuneCapacity(stats: SpanBufferStats): void;
50
+ //# sourceMappingURL=capacityTuning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacityTuning.d.ts","sourceRoot":"","sources":["../../src/lib/capacityTuning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiB5D;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEhE;AAgBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAmB/D"}
@@ -0,0 +1,65 @@
1
+ /** Minimum spans needed before tuning decisions */
2
+ const MIN_SPANS_FOR_TUNING = 10;
3
+ /** Grow capacity when utilization exceeds this (150% = regularly overflowing) */
4
+ const GROW_THRESHOLD = 1.5;
5
+ /** Shrink capacity when utilization falls below this (50% = wasting space) */
6
+ const SHRINK_THRESHOLD = 0.5;
7
+ /** Minimum capacity (must be power of 2, >= 8 for alignment) */
8
+ const MIN_CAPACITY = 8;
9
+ /** Maximum capacity (must be power of 2) */
10
+ const MAX_CAPACITY = 1024;
11
+ /**
12
+ * Check if capacity should be tuned after an overflow event.
13
+ *
14
+ * Called when a buffer overflows and needs to chain to a new buffer.
15
+ *
16
+ * @param stats - SpanBufferStats from SpanBufferClass.stats
17
+ * @internal
18
+ */
19
+ export function checkCapacityTuning(stats) {
20
+ shouldTuneCapacity(stats);
21
+ }
22
+ /**
23
+ * Reset stats after capacity tuning.
24
+ *
25
+ * Called after a tuning decision to start fresh measurement window.
26
+ * This ensures the tuning algorithm responds to recent behavior, not cumulative history.
27
+ *
28
+ * Note: Tracer.onStatsWillResetFor() is called BEFORE this reset (in spanLoggerGenerator's
29
+ * _getNextBuffer method) to capture stats for observability before they're lost.
30
+ */
31
+ function resetStats(stats) {
32
+ stats.totalWrites = 0;
33
+ stats.spansCreated = 0;
34
+ }
35
+ /**
36
+ * Check if capacity should be tuned based on utilization.
37
+ *
38
+ * Algorithm:
39
+ * - Requires minimum 10 spans before tuning
40
+ * - Compute utilization = totalWrites / (spansCreated * usableRowsPerSpan)
41
+ * - Increase capacity (×2, max 1024) if utilization > 150%
42
+ * - Decrease capacity (÷2, min 8) if utilization < 50%
43
+ * - Reset stats after tuning to start fresh measurement window
44
+ *
45
+ * @param stats - SpanBufferStats from SpanBufferClass.stats
46
+ * @internal Exported for testing
47
+ */
48
+ export function shouldTuneCapacity(stats) {
49
+ if (stats.spansCreated < MIN_SPANS_FOR_TUNING)
50
+ return;
51
+ // Usable rows per span = capacity - 2 (rows 0-1 reserved for span-start/end)
52
+ const usableRowsPerSpan = stats.capacity - 2;
53
+ const utilization = stats.totalWrites / (stats.spansCreated * usableRowsPerSpan);
54
+ // Grow if utilization > 150% (regularly overflowing)
55
+ if (utilization > GROW_THRESHOLD && stats.capacity < MAX_CAPACITY) {
56
+ stats.capacity = Math.min(stats.capacity * 2, MAX_CAPACITY);
57
+ resetStats(stats);
58
+ return;
59
+ }
60
+ // Shrink if utilization < 50% (wasting space)
61
+ if (utilization < SHRINK_THRESHOLD && stats.capacity > MIN_CAPACITY) {
62
+ stats.capacity = Math.max(MIN_CAPACITY, stats.capacity / 2);
63
+ resetStats(stats);
64
+ }
65
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Worker-safe feature-flag evaluator generation.
3
+ *
4
+ * Getter descriptors still live on the prototype, but the class is assembled with
5
+ * normal closures and `Object.defineProperties()` instead of `new Function(...)`.
6
+ */
7
+ import type { OpContext } from '../opContext/types.js';
8
+ import type { FeatureFlagSchema } from '../schema/defineFeatureFlags.js';
9
+ import type { FlagEvaluator, InferFeatureFlagsWithContext, SpanContextWithoutFf } from '../schema/evaluator.js';
10
+ import type { Schema } from '../schema/types.js';
11
+ /**
12
+ * Base interface for generated evaluator classes.
13
+ */
14
+ export interface GeneratedEvaluatorBase<Ctx extends OpContext> {
15
+ get<K extends keyof InferFeatureFlagsWithContext<Ctx> & string>(flag: K): Promise<InferFeatureFlagsWithContext<Ctx>[K]>;
16
+ get(flag: string): Promise<unknown>;
17
+ forContext(ctx: SpanContextWithoutFf<Ctx>): GeneratedEvaluatorInstance<Ctx>;
18
+ readonly evaluator: FlagEvaluator<Ctx>;
19
+ }
20
+ export type GeneratedEvaluatorInstance<Ctx extends OpContext> = GeneratedEvaluatorBase<Ctx> & InferFeatureFlagsWithContext<Ctx>;
21
+ type GeneratedEvaluatorConstructor<Ctx extends OpContext> = new (spanContext: SpanContextWithoutFf<Ctx>, evaluator: FlagEvaluator<Ctx>) => GeneratedEvaluatorInstance<Ctx>;
22
+ type ValidateFlagValue = (value: unknown, schema: Schema<unknown, unknown>, defaultValue: unknown) => unknown;
23
+ /**
24
+ * Render a debug view of the worker-safe generated class.
25
+ *
26
+ * This exists for snapshots/tests only; runtime assembly happens without eval.
27
+ */
28
+ export declare function generateEvaluatorClass<T extends FeatureFlagSchema>(schema: T, className?: string): string;
29
+ /**
30
+ * Create evaluator class constructor from schema.
31
+ * This is the cold-path function called at schema definition time.
32
+ */
33
+ export declare function createEvaluatorClass<Ctx extends OpContext>(schema: Ctx['flags'], validateFlagValue: ValidateFlagValue, ENTRY_TYPE_FF_ACCESS: number): GeneratedEvaluatorConstructor<Ctx>;
34
+ export {};
35
+ //# sourceMappingURL=evaluatorGenerator.d.ts.map