@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,209 @@
1
+ /**
2
+ * Type guard for span facts.
3
+ */
4
+ export function isSpanFact(fact) {
5
+ return fact.startsWith('span:');
6
+ }
7
+ /**
8
+ * Create a span:started fact.
9
+ */
10
+ export function spanStarted(name) {
11
+ return `span:${name}: started`;
12
+ }
13
+ /**
14
+ * Create a span:ok fact.
15
+ */
16
+ export function spanOk(name) {
17
+ return `span:${name}: ok`;
18
+ }
19
+ /**
20
+ * Create a span:err fact.
21
+ */
22
+ export function spanErr(name, code) {
23
+ return `span:${name}: err(${code})`;
24
+ }
25
+ /**
26
+ * Create a span:exception fact.
27
+ */
28
+ export function spanException(name, message) {
29
+ return `span:${name}: exception(${message})`;
30
+ }
31
+ /**
32
+ * Type guard for log facts.
33
+ */
34
+ export function isLogFact(fact) {
35
+ return fact.startsWith('log:');
36
+ }
37
+ /**
38
+ * Create a log fact.
39
+ */
40
+ export function logFact(level, message) {
41
+ return `log:${level}: ${message}`;
42
+ }
43
+ // Convenience functions
44
+ export const logDebug = (msg) => logFact('debug', msg);
45
+ export const logInfo = (msg) => logFact('info', msg);
46
+ export const logWarn = (msg) => logFact('warn', msg);
47
+ export const logError = (msg) => logFact('error', msg);
48
+ /**
49
+ * Type guard for tag facts.
50
+ */
51
+ export function isTagFact(fact) {
52
+ return fact.startsWith('tag:');
53
+ }
54
+ /**
55
+ * Create a tag fact.
56
+ */
57
+ export function tagFact(key, value) {
58
+ return `tag:${key}: ${value}`;
59
+ }
60
+ /**
61
+ * Type guard for scope facts.
62
+ */
63
+ export function isScopeFact(fact) {
64
+ return fact.startsWith('scope:');
65
+ }
66
+ /**
67
+ * Create a scope fact.
68
+ */
69
+ export function scopeFact(key, value) {
70
+ return `scope:${key}: ${value}`;
71
+ }
72
+ /**
73
+ * Type guard for feature flag facts.
74
+ */
75
+ export function isFFFact(fact) {
76
+ return fact.startsWith('ff:');
77
+ }
78
+ /**
79
+ * Create a feature flag fact.
80
+ */
81
+ export function ffFact(flag, value) {
82
+ return `ff:${flag}: ${value}`;
83
+ }
84
+ /**
85
+ * Type guard for metric facts.
86
+ */
87
+ export function isMetricFact(fact) {
88
+ return fact.startsWith('metric:');
89
+ }
90
+ /**
91
+ * Create a metric fact.
92
+ */
93
+ export function metricFact(name, value) {
94
+ return `metric:${name}: ${value}`;
95
+ }
96
+ function parseFactNamespace(value) {
97
+ switch (value) {
98
+ case 'span':
99
+ case 'log':
100
+ case 'tag':
101
+ case 'scope':
102
+ case 'ff':
103
+ case 'metric':
104
+ return value;
105
+ default:
106
+ throw new Error(`Unknown fact namespace: ${value}`);
107
+ }
108
+ }
109
+ /**
110
+ * Parse a fact string into its components.
111
+ */
112
+ export function parseFact(fact) {
113
+ const colonIndex = fact.indexOf(':');
114
+ const secondColonIndex = fact.indexOf(':', colonIndex + 1);
115
+ const namespace = parseFactNamespace(fact.slice(0, colonIndex));
116
+ const name = fact.slice(colonIndex + 1, secondColonIndex).trim();
117
+ const content = fact.slice(secondColonIndex + 1).trim();
118
+ return { namespace, name, content, raw: fact };
119
+ }
120
+ class TraceFactArray extends Array {
121
+ constructor(facts = []) {
122
+ if (typeof facts === 'number') {
123
+ super(facts);
124
+ }
125
+ else {
126
+ super();
127
+ this.push(...facts);
128
+ }
129
+ Object.setPrototypeOf(this, TraceFactArray.prototype);
130
+ }
131
+ has(fact) {
132
+ return this.includes(fact);
133
+ }
134
+ hasMatch(pattern) {
135
+ const regex = patternToRegex(pattern);
136
+ return this.some((fact) => regex.test(fact));
137
+ }
138
+ byNamespace(namespace) {
139
+ return new TraceFactArray(this.filter((fact) => fact.startsWith(`${namespace}:`)));
140
+ }
141
+ spans() {
142
+ return this.filter(isSpanFact);
143
+ }
144
+ logs() {
145
+ return this.filter(isLogFact);
146
+ }
147
+ tags() {
148
+ return this.filter(isTagFact);
149
+ }
150
+ hasInOrder(expected) {
151
+ let lastIndex = -1;
152
+ for (const fact of expected) {
153
+ const index = this.indexOf(fact);
154
+ if (index === -1 || index <= lastIndex) {
155
+ return false;
156
+ }
157
+ lastIndex = index;
158
+ }
159
+ return true;
160
+ }
161
+ match(pattern) {
162
+ const regex = patternToRegex(pattern);
163
+ return new TraceFactArray(this.filter((fact) => regex.test(fact)));
164
+ }
165
+ }
166
+ /**
167
+ * Create a FactArray from raw facts.
168
+ */
169
+ export function createFactArray(facts) {
170
+ return new TraceFactArray(facts);
171
+ }
172
+ // =============================================================================
173
+ // PATTERN MATCHING
174
+ // =============================================================================
175
+ /**
176
+ * Convert a glob-like pattern to a regex.
177
+ *
178
+ * Supports:
179
+ * - `*` matches any characters except `:`
180
+ * - `**` matches any characters including `:`
181
+ */
182
+ function patternToRegex(pattern) {
183
+ let result = '';
184
+ let i = 0;
185
+ while (i < pattern.length) {
186
+ if (pattern[i] === '*') {
187
+ if (pattern[i + 1] === '*') {
188
+ // ** matches anything
189
+ result += '.*';
190
+ i += 2;
191
+ }
192
+ else {
193
+ // * matches anything except colon
194
+ result += '[^:]*';
195
+ i += 1;
196
+ }
197
+ }
198
+ else if (/[.+^${}()|[\]\\]/.test(pattern[i])) {
199
+ // Escape regex special chars
200
+ result += `\\${pattern[i]}`;
201
+ i += 1;
202
+ }
203
+ else {
204
+ result += pattern[i];
205
+ i += 1;
206
+ }
207
+ }
208
+ return new RegExp(`^${result}$`);
209
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Testing utilities for LMAO trace-testing.
3
+ *
4
+ * This module provides strongly-typed trace facts and assertion helpers
5
+ * based on Akkartik's "tracing tests" approach:
6
+ * https://akkartik.name/post/tracing-tests
7
+ *
8
+ * Instead of testing return values directly, you:
9
+ * 1. Execute code that emits trace facts
10
+ * 2. Assert on the facts (WHAT happened, not HOW)
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { TestTracer } from '@smoothbricks/lmao';
15
+ * import {
16
+ * createFactArray,
17
+ * spanStarted,
18
+ * spanOk,
19
+ * tagFact,
20
+ * } from '@smoothbricks/lmao/testing';
21
+ *
22
+ * const tracer = new TestTracer(opContext);
23
+ * await tracer.trace('my-op', myOp);
24
+ *
25
+ * const facts = extractFacts(tracer.rootBuffers[0]);
26
+ *
27
+ * // Assert on WHAT happened
28
+ * expect(facts.has(spanOk('my-op'))).toBe(true);
29
+ * expect(facts.hasInOrder([
30
+ * spanStarted('validate'),
31
+ * spanStarted('execute'),
32
+ * spanOk('execute'),
33
+ * spanOk('validate'),
34
+ * ])).toBe(true);
35
+ * expect(facts.has(tagFact('userId', '123'))).toBe(true);
36
+ * ```
37
+ *
38
+ * @module testing
39
+ */
40
+ export { createFactArray, type FactArray, type FactNamespace, type FFFact, ffFact, isFFFact, isLogFact, isMetricFact, isScopeFact, isSpanFact, isTagFact, type LogFact, type LogLevel, logDebug, logError, logFact, logInfo, logWarn, type MetricFact, metricFact, type ParsedFact, parseFact, type SchemaScopeFacts, type SchemaTagFacts, type ScopeFact, type SpanFact, type SpanState, scopeFact, spanErr, spanException, spanOk, spanStarted, type TagFact, type TraceFact, tagFact, } from './facts.js';
41
+ export { JsBufferStrategy } from '../JsBufferStrategy.js';
42
+ export type { OpContextBinding, OpContextOf } from '../opContext/types.js';
43
+ export type { TraceRootFactory } from '../traceRoot.js';
44
+ export { createTraceRoot } from '../traceRoot.universal.js';
45
+ export { CompositeTracer } from '../tracers/CompositeTracer.js';
46
+ export { NoOpTracer } from '../tracers/NoOpTracer.js';
47
+ export { SQLiteAsyncTracer, SQLiteTracer } from '../tracers/SQLiteTracer.js';
48
+ export { StdioTracer } from '../tracers/StdioTracer.js';
49
+ export { type StatsSnapshot, TestTracer } from '../tracers/TestTracer.js';
50
+ export { type ExtractFactsOptions, extractFacts } from './extractFacts.js';
51
+ export { replayTraceToStdio } from './stdio-replay.js';
52
+ export { type QueryableSpan, querySpan } from './queryable-span.js';
53
+ export { extractFactsFor, findAllSpans, findSpan, spanNames } from './span-query.js';
54
+ export { SQLiteAsyncTraceWriter, SQLiteTraceWriter, type SQLiteWriterConfig } from '../sqlite/index.js';
55
+ export { createD1SQLiteDatabase, type D1LikeDatabase, type D1LikePreparedStatement } from '../sqlite/sqlite-d1.js';
56
+ export type { AsyncSQLiteDatabase, AsyncSQLiteStatement, SyncSQLiteDatabase, SyncSQLiteStatement, } from '../sqlite/sqlite-db.js';
57
+ export { makeBunTestSuiteTracer, type TestTracer as BunHarnessTestTracer } from './bun-harness.js';
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAMH,OAAO,EACL,eAAe,EAEf,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,MAAM,EACX,MAAM,EACN,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EAET,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EAEP,KAAK,UAAU,EACf,UAAU,EAEV,KAAK,UAAU,EACf,SAAS,EACT,KAAK,gBAAgB,EAErB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAEd,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,SAAS,EACT,OAAO,EACP,aAAa,EACb,MAAM,EACN,WAAW,EAEX,KAAK,OAAO,EAEZ,KAAK,SAAS,EACd,OAAO,GACR,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,KAAK,aAAa,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM1E,OAAO,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAMvD,OAAO,EAAE,KAAK,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMrF,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnH,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,sBAAsB,EAAE,KAAK,UAAU,IAAI,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Testing utilities for LMAO trace-testing.
3
+ *
4
+ * This module provides strongly-typed trace facts and assertion helpers
5
+ * based on Akkartik's "tracing tests" approach:
6
+ * https://akkartik.name/post/tracing-tests
7
+ *
8
+ * Instead of testing return values directly, you:
9
+ * 1. Execute code that emits trace facts
10
+ * 2. Assert on the facts (WHAT happened, not HOW)
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { TestTracer } from '@smoothbricks/lmao';
15
+ * import {
16
+ * createFactArray,
17
+ * spanStarted,
18
+ * spanOk,
19
+ * tagFact,
20
+ * } from '@smoothbricks/lmao/testing';
21
+ *
22
+ * const tracer = new TestTracer(opContext);
23
+ * await tracer.trace('my-op', myOp);
24
+ *
25
+ * const facts = extractFacts(tracer.rootBuffers[0]);
26
+ *
27
+ * // Assert on WHAT happened
28
+ * expect(facts.has(spanOk('my-op'))).toBe(true);
29
+ * expect(facts.hasInOrder([
30
+ * spanStarted('validate'),
31
+ * spanStarted('execute'),
32
+ * spanOk('execute'),
33
+ * spanOk('validate'),
34
+ * ])).toBe(true);
35
+ * expect(facts.has(tagFact('userId', '123'))).toBe(true);
36
+ * ```
37
+ *
38
+ * @module testing
39
+ */
40
+ // =============================================================================
41
+ // FACT TYPES AND BUILDERS
42
+ // =============================================================================
43
+ export { createFactArray, ffFact, isFFFact, isLogFact, isMetricFact, isScopeFact, isSpanFact, isTagFact, logDebug, logError, logFact, logInfo, logWarn, metricFact, parseFact, scopeFact, spanErr, spanException, spanOk, spanStarted, tagFact, } from './facts.js';
44
+ // =============================================================================
45
+ // TRACER RE-EXPORTS
46
+ // =============================================================================
47
+ export { JsBufferStrategy } from '../JsBufferStrategy.js';
48
+ // Universal createTraceRoot — picks Node (hrtime.bigint) or ES (performance.now) at runtime
49
+ export { createTraceRoot } from '../traceRoot.universal.js';
50
+ export { CompositeTracer } from '../tracers/CompositeTracer.js';
51
+ export { NoOpTracer } from '../tracers/NoOpTracer.js';
52
+ export { SQLiteAsyncTracer, SQLiteTracer } from '../tracers/SQLiteTracer.js';
53
+ export { StdioTracer } from '../tracers/StdioTracer.js';
54
+ // Re-export TestTracer for convenience
55
+ export { TestTracer } from '../tracers/TestTracer.js';
56
+ // =============================================================================
57
+ // FACT EXTRACTION
58
+ // =============================================================================
59
+ export { extractFacts } from './extractFacts.js';
60
+ export { replayTraceToStdio } from './stdio-replay.js';
61
+ // =============================================================================
62
+ // SPAN QUERY API
63
+ // =============================================================================
64
+ export { querySpan } from './queryable-span.js';
65
+ export { extractFactsFor, findAllSpans, findSpan, spanNames } from './span-query.js';
66
+ // =============================================================================
67
+ // SQLITE PERSISTENCE
68
+ // =============================================================================
69
+ export { SQLiteAsyncTraceWriter, SQLiteTraceWriter } from '../sqlite/index.js';
70
+ export { createD1SQLiteDatabase } from '../sqlite/sqlite-d1.js';
71
+ // =============================================================================
72
+ // TEST HARNESS WIRING
73
+ // =============================================================================
74
+ export { makeBunTestSuiteTracer } from './bun-harness.js';
@@ -0,0 +1,39 @@
1
+ /**
2
+ * QueryableSpan - Ergonomic wrapper around SpanBuffer for test assertions.
3
+ *
4
+ * Provides a clean API for navigating the span tree and extracting facts
5
+ * without needing to know SpanBuffer internals.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const q = querySpan(tracer.rootBuffers[0]);
10
+ * expect(q.name).toBe('my-op');
11
+ * expect(q.find('validate')?.facts().has(spanOk('validate'))).toBe(true);
12
+ * expect(q.names()).toContain('save');
13
+ * ```
14
+ *
15
+ * @module queryable-span
16
+ */
17
+ import type { LogSchema } from '../schema/LogSchema.js';
18
+ import type { SpanBuffer } from '../types.js';
19
+ import { type ExtractFactsOptions } from './extractFacts.js';
20
+ import type { FactArray } from './facts.js';
21
+ export interface QueryableSpan<T extends LogSchema = LogSchema> {
22
+ /** Span name (from message_values[0]) */
23
+ readonly name: string;
24
+ /** Extract all facts from this span and its children */
25
+ facts(options?: ExtractFactsOptions): FactArray;
26
+ /** Find first child span by name (depth-first) */
27
+ find(name: string): QueryableSpan<T> | undefined;
28
+ /** Find all spans matching name (depth-first) */
29
+ findAll(name: string): QueryableSpan<T>[];
30
+ /** Direct child spans */
31
+ readonly children: QueryableSpan<T>[];
32
+ /** All descendant span names (flat list, depth-first) */
33
+ names(): string[];
34
+ /** Raw SpanBuffer for advanced use */
35
+ readonly buffer: SpanBuffer<T>;
36
+ }
37
+ /** Wrap a SpanBuffer as a QueryableSpan for ergonomic test assertions */
38
+ export declare function querySpan<T extends LogSchema>(buffer: SpanBuffer<T>): QueryableSpan<T>;
39
+ //# sourceMappingURL=queryable-span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryable-span.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/queryable-span.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC5D,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAEhD,kDAAkD;IAClD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAEjD,iDAAiD;IACjD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtC,yDAAyD;IACzD,KAAK,IAAI,MAAM,EAAE,CAAC;IAElB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CAChC;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEtF"}
@@ -0,0 +1,58 @@
1
+ import { extractFacts } from './extractFacts.js';
2
+ /** Wrap a SpanBuffer as a QueryableSpan for ergonomic test assertions */
3
+ export function querySpan(buffer) {
4
+ return new QueryableSpanImpl(buffer);
5
+ }
6
+ class QueryableSpanImpl {
7
+ buffer;
8
+ constructor(buffer) {
9
+ this.buffer = buffer;
10
+ }
11
+ get name() {
12
+ return this.buffer.message_values[0];
13
+ }
14
+ facts(options) {
15
+ return extractFacts(this.buffer, options);
16
+ }
17
+ find(name) {
18
+ return findInChildren(this.buffer._children, name);
19
+ }
20
+ findAll(name) {
21
+ const results = [];
22
+ collectAll(this.buffer._children, name, results);
23
+ return results;
24
+ }
25
+ get children() {
26
+ return this.buffer._children.map((child) => new QueryableSpanImpl(child));
27
+ }
28
+ names() {
29
+ const result = [];
30
+ collectNames(this.buffer._children, result);
31
+ return result;
32
+ }
33
+ }
34
+ function findInChildren(children, name) {
35
+ for (const child of children) {
36
+ if (child.message_values[0] === name) {
37
+ return new QueryableSpanImpl(child);
38
+ }
39
+ const found = findInChildren(child._children, name);
40
+ if (found)
41
+ return found;
42
+ }
43
+ return undefined;
44
+ }
45
+ function collectAll(children, name, results) {
46
+ for (const child of children) {
47
+ if (child.message_values[0] === name) {
48
+ results.push(new QueryableSpanImpl(child));
49
+ }
50
+ collectAll(child._children, name, results);
51
+ }
52
+ }
53
+ function collectNames(children, result) {
54
+ for (const child of children) {
55
+ result.push(child.message_values[0]);
56
+ collectNames(child._children, result);
57
+ }
58
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Standalone span query functions — tree-shakable alternative to QueryableSpan.
3
+ *
4
+ * These functions operate directly on SpanBuffer instances without wrapping.
5
+ * Prefer these when you only need one or two operations and want minimal overhead.
6
+ *
7
+ * @module span-query
8
+ */
9
+ import type { LogSchema } from '../schema/LogSchema.js';
10
+ import type { SpanBuffer } from '../types.js';
11
+ import { type ExtractFactsOptions } from './extractFacts.js';
12
+ import type { FactArray } from './facts.js';
13
+ /** Find first descendant span by name (depth-first) */
14
+ export declare function findSpan<T extends LogSchema>(root: SpanBuffer<T>, name: string): SpanBuffer<T> | undefined;
15
+ /** Find all descendant spans matching name (depth-first) */
16
+ export declare function findAllSpans<T extends LogSchema>(root: SpanBuffer<T>, name: string): SpanBuffer<T>[];
17
+ /** Extract facts for a specific named span within a root buffer tree */
18
+ export declare function extractFactsFor<T extends LogSchema>(root: SpanBuffer<T>, spanName: string, options?: ExtractFactsOptions): FactArray | undefined;
19
+ /** Collect all descendant span names (flat list, depth-first) */
20
+ export declare function spanNames<T extends LogSchema>(root: SpanBuffer<T>): string[];
21
+ //# sourceMappingURL=span-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span-query.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/span-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,uDAAuD;AACvD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAQ1G;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAIpG;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EACjD,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,SAAS,GAAG,SAAS,CAIvB;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAI5E"}
@@ -0,0 +1,47 @@
1
+ import { extractFacts } from './extractFacts.js';
2
+ /** Find first descendant span by name (depth-first) */
3
+ export function findSpan(root, name) {
4
+ for (const child of root._children) {
5
+ const typed = child;
6
+ if (typed.message_values[0] === name)
7
+ return typed;
8
+ const found = findSpan(typed, name);
9
+ if (found)
10
+ return found;
11
+ }
12
+ return undefined;
13
+ }
14
+ /** Find all descendant spans matching name (depth-first) */
15
+ export function findAllSpans(root, name) {
16
+ const results = [];
17
+ collectSpans(root, name, results);
18
+ return results;
19
+ }
20
+ /** Extract facts for a specific named span within a root buffer tree */
21
+ export function extractFactsFor(root, spanName, options) {
22
+ const span = findSpan(root, spanName);
23
+ if (!span)
24
+ return undefined;
25
+ return extractFacts(span, options);
26
+ }
27
+ /** Collect all descendant span names (flat list, depth-first) */
28
+ export function spanNames(root) {
29
+ const result = [];
30
+ collectNames(root._children, result);
31
+ return result;
32
+ }
33
+ function collectSpans(root, name, results) {
34
+ for (const child of root._children) {
35
+ const typed = child;
36
+ if (typed.message_values[0] === name)
37
+ results.push(typed);
38
+ collectSpans(typed, name, results);
39
+ }
40
+ }
41
+ function collectNames(children, result) {
42
+ for (const child of children) {
43
+ const typed = child;
44
+ result.push(typed.message_values[0]);
45
+ collectNames(typed._children, result);
46
+ }
47
+ }
@@ -0,0 +1,4 @@
1
+ import type { OpContextBinding } from '../opContext/types.js';
2
+ import type { AnySpanBuffer } from '../types.js';
3
+ export declare function replayTraceToStdio(binding: OpContextBinding, rootBuffer: AnySpanBuffer): void;
4
+ //# sourceMappingURL=stdio-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-replay.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/stdio-replay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuBjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,GAAG,IAAI,CAsB7F"}
@@ -0,0 +1,42 @@
1
+ import { JsBufferStrategy } from '../JsBufferStrategy.js';
2
+ import { createTraceRoot } from '../traceRoot.universal.js';
3
+ import { StdioTracer } from '../tracers/StdioTracer.js';
4
+ function isStdioWritable(value) {
5
+ return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'write') === 'function';
6
+ }
7
+ function makeConsoleWriteStream(write) {
8
+ return {
9
+ write(chunk) {
10
+ write(chunk.replace(/\n$/, ''));
11
+ return true;
12
+ },
13
+ };
14
+ }
15
+ function replayChildSpan(tracer, buffer) {
16
+ tracer.onSpanStart(buffer);
17
+ for (const child of buffer._children) {
18
+ replayChildSpan(tracer, child);
19
+ }
20
+ tracer.onSpanEnd(buffer);
21
+ }
22
+ export function replayTraceToStdio(binding, rootBuffer) {
23
+ const processRef = globalThis.process;
24
+ const out = isStdioWritable(processRef?.stdout)
25
+ ? processRef.stdout
26
+ : makeConsoleWriteStream((line) => console.log(line));
27
+ const err = isStdioWritable(processRef?.stderr)
28
+ ? processRef.stderr
29
+ : makeConsoleWriteStream((line) => console.error(line));
30
+ const tracer = new StdioTracer(binding, {
31
+ bufferStrategy: new JsBufferStrategy(),
32
+ createTraceRoot,
33
+ out,
34
+ err,
35
+ colorEnabled: processRef?.stdout !== undefined,
36
+ });
37
+ tracer.onTraceStart(rootBuffer);
38
+ for (const child of rootBuffer._children) {
39
+ replayChildSpan(tracer, child);
40
+ }
41
+ tracer.onTraceEnd(rootBuffer);
42
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * TraceQuery - Post-run query API for the SQLite trace database.
3
+ *
4
+ * Queries a single flat `spans` table where each row is a buffer entry.
5
+ * Status and duration are derived from entry_type and timestamps via self-joins.
6
+ * Tree structure uses span_id / parent_span_id (no depth column).
7
+ *
8
+ * Platform-agnostic: accepts a SyncSQLiteDatabase instance from either
9
+ * bun:sqlite or better-sqlite3.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { Database } from 'bun:sqlite';
14
+ * import { TraceQuery } from '@smoothbricks/lmao/testing';
15
+ *
16
+ * const query = new TraceQuery(new Database('.trace-results.db'));
17
+ * console.log(query.failures());
18
+ * console.log(query.slowest(undefined, 10));
19
+ * query.close();
20
+ * ```
21
+ *
22
+ * @module trace-query
23
+ */
24
+ import type { SyncSQLiteDatabase } from '../sqlite/sqlite-db.js';
25
+ export interface TraceQueryResult {
26
+ spanName: string;
27
+ status: 'ok' | 'err' | 'exception' | 'running';
28
+ errorCode?: string;
29
+ durationNs?: number;
30
+ describe?: string;
31
+ parentSpanId?: number;
32
+ }
33
+ type TraceRun = {
34
+ traceId: string;
35
+ spanName: string;
36
+ startedAt: number;
37
+ };
38
+ type LatestTraceRun = {
39
+ traceId: string;
40
+ };
41
+ export declare class TraceQuery {
42
+ private db;
43
+ constructor(db: SyncSQLiteDatabase);
44
+ /** Get all trace runs (root spans), most recent first */
45
+ runs(): TraceRun[];
46
+ /** Get the most recent trace_id (= run_id) */
47
+ latestRun(): LatestTraceRun | undefined;
48
+ /** Get all failed tests in a run (defaults to latest run) */
49
+ failures(traceId?: string): TraceQueryResult[];
50
+ /** Get slowest tests in a run (defaults to latest run) */
51
+ slowest(traceId?: string, limit?: number): TraceQueryResult[];
52
+ /** Find spans by name pattern (SQL LIKE, defaults to latest run) */
53
+ findSpans(pattern: string, traceId?: string): TraceQueryResult[];
54
+ /** Get full span tree for a specific test (all descendants, defaults to latest run) */
55
+ testTree(testName: string, traceId?: string): TraceQueryResult[];
56
+ close(): void;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=trace-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-query.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/trace-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,KAAK,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACzE,KAAK,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAyG1C,qBAAa,UAAU;IACT,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,kBAAkB;IAE1C,yDAAyD;IACzD,IAAI,IAAI,QAAQ,EAAE;IAelB,8CAA8C;IAC9C,SAAS,IAAI,cAAc,GAAG,SAAS;IAevC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAqC9C,0DAA0D;IAC1D,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,gBAAgB,EAAE;IAqCzD,oEAAoE;IACpE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IA2BhE,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IA2ChE,KAAK,IAAI,IAAI;CAGd"}