@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,470 @@
1
+ /**
2
+ * Strongly-typed trace facts using TypeScript template literal types.
3
+ *
4
+ * Instead of `facts: string[]`, we use branded template literal types that
5
+ * ensure facts follow a consistent format and enable autocomplete.
6
+ *
7
+ * Format: `${namespace}:${name}: ${content}`
8
+ *
9
+ * Examples:
10
+ * - `span:fetch-user: started`
11
+ * - `span:fetch-user: ok`
12
+ * - `span:fetch-user: err(NOT_FOUND)`
13
+ * - `log:info: Processing order`
14
+ * - `tag:userId: 123`
15
+ * - `scope:requestId: req-abc`
16
+ * - `ff:darkMode: true`
17
+ *
18
+ * @module testing/facts
19
+ */
20
+
21
+ // =============================================================================
22
+ // FACT NAMESPACES
23
+ // =============================================================================
24
+
25
+ /**
26
+ * All valid fact namespaces.
27
+ */
28
+ export type FactNamespace = 'span' | 'log' | 'tag' | 'scope' | 'ff' | 'metric';
29
+
30
+ // =============================================================================
31
+ // SPAN FACTS
32
+ // =============================================================================
33
+
34
+ /**
35
+ * Span lifecycle states.
36
+ */
37
+ export type SpanState = 'started' | 'ok' | `err(${string})` | `exception(${string})`;
38
+
39
+ /**
40
+ * A span fact: `span:${name}: ${state}`
41
+ *
42
+ * @example
43
+ * type F1 = SpanFact<'fetch-user', 'started'>; // "span:fetch-user: started"
44
+ * type F2 = SpanFact<'fetch-user', 'ok'>; // "span:fetch-user: ok"
45
+ * type F3 = SpanFact<'fetch-user', 'err(NOT_FOUND)'>; // "span:fetch-user: err(NOT_FOUND)"
46
+ */
47
+ export type SpanFact<Name extends string = string, State extends SpanState = SpanState> = `span:${Name}: ${State}`;
48
+
49
+ /**
50
+ * Type guard for span facts.
51
+ */
52
+ export function isSpanFact(fact: TraceFact): fact is SpanFact {
53
+ return fact.startsWith('span:');
54
+ }
55
+
56
+ /**
57
+ * Create a span:started fact.
58
+ */
59
+ export function spanStarted<N extends string>(name: N): SpanFact<N, 'started'> {
60
+ return `span:${name}: started` as SpanFact<N, 'started'>;
61
+ }
62
+
63
+ /**
64
+ * Create a span:ok fact.
65
+ */
66
+ export function spanOk<N extends string>(name: N): SpanFact<N, 'ok'> {
67
+ return `span:${name}: ok` as SpanFact<N, 'ok'>;
68
+ }
69
+
70
+ /**
71
+ * Create a span:err fact.
72
+ */
73
+ export function spanErr<N extends string, C extends string>(name: N, code: C): SpanFact<N, `err(${C})`> {
74
+ return `span:${name}: err(${code})` as SpanFact<N, `err(${C})`>;
75
+ }
76
+
77
+ /**
78
+ * Create a span:exception fact.
79
+ */
80
+ export function spanException<N extends string, M extends string>(name: N, message: M): SpanFact<N, `exception(${M})`> {
81
+ return `span:${name}: exception(${message})` as SpanFact<N, `exception(${M})`>;
82
+ }
83
+
84
+ // =============================================================================
85
+ // LOG FACTS
86
+ // =============================================================================
87
+
88
+ /**
89
+ * Log levels.
90
+ */
91
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
92
+
93
+ /**
94
+ * A log fact: `log:${level}: ${message}`
95
+ *
96
+ * @example
97
+ * type F = LogFact<'info', 'Processing order'>; // "log:info: Processing order"
98
+ */
99
+ export type LogFact<Level extends LogLevel = LogLevel, Message extends string = string> = `log:${Level}: ${Message}`;
100
+
101
+ /**
102
+ * Type guard for log facts.
103
+ */
104
+ export function isLogFact(fact: TraceFact): fact is LogFact {
105
+ return fact.startsWith('log:');
106
+ }
107
+
108
+ /**
109
+ * Create a log fact.
110
+ */
111
+ export function logFact<L extends LogLevel, M extends string>(level: L, message: M): LogFact<L, M> {
112
+ return `log:${level}: ${message}` as LogFact<L, M>;
113
+ }
114
+
115
+ // Convenience functions
116
+ export const logDebug = <M extends string>(msg: M) => logFact('debug', msg);
117
+ export const logInfo = <M extends string>(msg: M) => logFact('info', msg);
118
+ export const logWarn = <M extends string>(msg: M) => logFact('warn', msg);
119
+ export const logError = <M extends string>(msg: M) => logFact('error', msg);
120
+
121
+ // =============================================================================
122
+ // TAG FACTS
123
+ // =============================================================================
124
+
125
+ /**
126
+ * A tag fact: `tag:${key}: ${value}`
127
+ *
128
+ * @example
129
+ * type F = TagFact<'userId', '123'>; // "tag:userId: 123"
130
+ */
131
+ export type TagFact<Key extends string = string, Value extends string = string> = `tag:${Key}: ${Value}`;
132
+
133
+ /**
134
+ * Type guard for tag facts.
135
+ */
136
+ export function isTagFact(fact: TraceFact): fact is TagFact {
137
+ return fact.startsWith('tag:');
138
+ }
139
+
140
+ /**
141
+ * Create a tag fact.
142
+ */
143
+ export function tagFact<K extends string, V extends string | number | boolean>(key: K, value: V): TagFact<K, `${V}`> {
144
+ return `tag:${key}: ${value}` as TagFact<K, `${V}`>;
145
+ }
146
+
147
+ // =============================================================================
148
+ // SCOPE FACTS
149
+ // =============================================================================
150
+
151
+ /**
152
+ * A scope fact: `scope:${key}: ${value}`
153
+ *
154
+ * Scope facts represent values propagated through the span tree.
155
+ *
156
+ * @example
157
+ * type F = ScopeFact<'requestId', 'req-abc'>; // "scope:requestId: req-abc"
158
+ */
159
+ export type ScopeFact<Key extends string = string, Value extends string = string> = `scope:${Key}: ${Value}`;
160
+
161
+ /**
162
+ * Type guard for scope facts.
163
+ */
164
+ export function isScopeFact(fact: TraceFact): fact is ScopeFact {
165
+ return fact.startsWith('scope:');
166
+ }
167
+
168
+ /**
169
+ * Create a scope fact.
170
+ */
171
+ export function scopeFact<K extends string, V extends string | number | boolean>(
172
+ key: K,
173
+ value: V,
174
+ ): ScopeFact<K, `${V}`> {
175
+ return `scope:${key}: ${value}` as ScopeFact<K, `${V}`>;
176
+ }
177
+
178
+ // =============================================================================
179
+ // FEATURE FLAG FACTS
180
+ // =============================================================================
181
+
182
+ /**
183
+ * A feature flag fact: `ff:${flag}: ${value}`
184
+ *
185
+ * @example
186
+ * type F = FFFact<'darkMode', 'true'>; // "ff:darkMode: true"
187
+ */
188
+ export type FFFact<Flag extends string = string, Value extends string = string> = `ff:${Flag}: ${Value}`;
189
+
190
+ /**
191
+ * Type guard for feature flag facts.
192
+ */
193
+ export function isFFFact(fact: TraceFact): fact is FFFact {
194
+ return fact.startsWith('ff:');
195
+ }
196
+
197
+ /**
198
+ * Create a feature flag fact.
199
+ */
200
+ export function ffFact<F extends string, V extends string | number | boolean>(flag: F, value: V): FFFact<F, `${V}`> {
201
+ return `ff:${flag}: ${value}` as FFFact<F, `${V}`>;
202
+ }
203
+
204
+ // =============================================================================
205
+ // METRIC FACTS
206
+ // =============================================================================
207
+
208
+ /**
209
+ * A metric fact: `metric:${name}: ${value}`
210
+ *
211
+ * @example
212
+ * type F = MetricFact<'duration_ms', '42'>; // "metric:duration_ms: 42"
213
+ */
214
+ export type MetricFact<Name extends string = string, Value extends string = string> = `metric:${Name}: ${Value}`;
215
+
216
+ /**
217
+ * Type guard for metric facts.
218
+ */
219
+ export function isMetricFact(fact: TraceFact): fact is MetricFact {
220
+ return fact.startsWith('metric:');
221
+ }
222
+
223
+ /**
224
+ * Create a metric fact.
225
+ */
226
+ export function metricFact<N extends string, V extends number>(name: N, value: V): MetricFact<N, `${V}`> {
227
+ return `metric:${name}: ${value}` as MetricFact<N, `${V}`>;
228
+ }
229
+
230
+ // =============================================================================
231
+ // UNION TYPE: TraceFact
232
+ // =============================================================================
233
+
234
+ /**
235
+ * Any valid trace fact.
236
+ *
237
+ * This is a union of all fact types, providing type safety while
238
+ * allowing heterogeneous fact arrays.
239
+ */
240
+ export type TraceFact = SpanFact | LogFact | TagFact | ScopeFact | FFFact | MetricFact;
241
+
242
+ // =============================================================================
243
+ // FACT PARSING
244
+ // =============================================================================
245
+
246
+ /**
247
+ * Parsed fact structure.
248
+ */
249
+ export interface ParsedFact {
250
+ namespace: FactNamespace;
251
+ name: string;
252
+ content: string;
253
+ raw: TraceFact;
254
+ }
255
+
256
+ function parseFactNamespace(value: string): FactNamespace {
257
+ switch (value) {
258
+ case 'span':
259
+ case 'log':
260
+ case 'tag':
261
+ case 'scope':
262
+ case 'ff':
263
+ case 'metric':
264
+ return value;
265
+ default:
266
+ throw new Error(`Unknown fact namespace: ${value}`);
267
+ }
268
+ }
269
+
270
+ /**
271
+ * Parse a fact string into its components.
272
+ */
273
+ export function parseFact(fact: TraceFact): ParsedFact {
274
+ const colonIndex = fact.indexOf(':');
275
+ const secondColonIndex = fact.indexOf(':', colonIndex + 1);
276
+
277
+ const namespace = parseFactNamespace(fact.slice(0, colonIndex));
278
+ const name = fact.slice(colonIndex + 1, secondColonIndex).trim();
279
+ const content = fact.slice(secondColonIndex + 1).trim();
280
+
281
+ return { namespace, name, content, raw: fact };
282
+ }
283
+
284
+ // =============================================================================
285
+ // FACT ARRAY TYPE
286
+ // =============================================================================
287
+
288
+ /**
289
+ * A readonly array of trace facts with helper methods.
290
+ *
291
+ * This is the primary interface for working with collected facts.
292
+ */
293
+ export interface FactArray extends ReadonlyArray<TraceFact> {
294
+ /**
295
+ * Check if a fact exists (exact match).
296
+ */
297
+ has(fact: TraceFact): boolean;
298
+
299
+ /**
300
+ * Check if any fact matches a pattern.
301
+ * Pattern supports * wildcards in any segment.
302
+ *
303
+ * @example
304
+ * facts.hasMatch('span:*: ok') // Any span completed ok
305
+ * facts.hasMatch('span:fetch-*: *') // Any fetch span, any state
306
+ * facts.hasMatch('log:error: *') // Any error log
307
+ */
308
+ hasMatch(pattern: string): boolean;
309
+
310
+ /**
311
+ * Filter to facts of a specific namespace.
312
+ */
313
+ byNamespace<N extends FactNamespace>(namespace: N): FactArray;
314
+
315
+ /**
316
+ * Get all span facts.
317
+ */
318
+ spans(): SpanFact[];
319
+
320
+ /**
321
+ * Get all log facts.
322
+ */
323
+ logs(): LogFact[];
324
+
325
+ /**
326
+ * Get all tag facts.
327
+ */
328
+ tags(): TagFact[];
329
+
330
+ /**
331
+ * Check if facts appear in order (not necessarily adjacent).
332
+ */
333
+ hasInOrder(facts: TraceFact[]): boolean;
334
+
335
+ /**
336
+ * Find the index of a fact (or -1 if not found).
337
+ */
338
+ indexOf(fact: TraceFact): number;
339
+
340
+ /**
341
+ * Get facts matching a pattern.
342
+ */
343
+ match(pattern: string): FactArray;
344
+ }
345
+
346
+ class TraceFactArray extends Array<TraceFact> implements FactArray {
347
+ constructor(facts: readonly TraceFact[] | number = []) {
348
+ if (typeof facts === 'number') {
349
+ super(facts);
350
+ } else {
351
+ super();
352
+ this.push(...facts);
353
+ }
354
+ Object.setPrototypeOf(this, TraceFactArray.prototype);
355
+ }
356
+
357
+ has(fact: TraceFact): boolean {
358
+ return this.includes(fact);
359
+ }
360
+
361
+ hasMatch(pattern: string): boolean {
362
+ const regex = patternToRegex(pattern);
363
+ return this.some((fact) => regex.test(fact));
364
+ }
365
+
366
+ byNamespace<N extends FactNamespace>(namespace: N): FactArray {
367
+ return new TraceFactArray(this.filter((fact) => fact.startsWith(`${namespace}:`)));
368
+ }
369
+
370
+ spans(): SpanFact[] {
371
+ return this.filter(isSpanFact);
372
+ }
373
+
374
+ logs(): LogFact[] {
375
+ return this.filter(isLogFact);
376
+ }
377
+
378
+ tags(): TagFact[] {
379
+ return this.filter(isTagFact);
380
+ }
381
+
382
+ hasInOrder(expected: TraceFact[]): boolean {
383
+ let lastIndex = -1;
384
+ for (const fact of expected) {
385
+ const index = this.indexOf(fact);
386
+ if (index === -1 || index <= lastIndex) {
387
+ return false;
388
+ }
389
+ lastIndex = index;
390
+ }
391
+ return true;
392
+ }
393
+
394
+ match(pattern: string): FactArray {
395
+ const regex = patternToRegex(pattern);
396
+ return new TraceFactArray(this.filter((fact) => regex.test(fact)));
397
+ }
398
+ }
399
+
400
+ /**
401
+ * Create a FactArray from raw facts.
402
+ */
403
+ export function createFactArray(facts: TraceFact[]): FactArray {
404
+ return new TraceFactArray(facts);
405
+ }
406
+
407
+ // =============================================================================
408
+ // PATTERN MATCHING
409
+ // =============================================================================
410
+
411
+ /**
412
+ * Convert a glob-like pattern to a regex.
413
+ *
414
+ * Supports:
415
+ * - `*` matches any characters except `:`
416
+ * - `**` matches any characters including `:`
417
+ */
418
+ function patternToRegex(pattern: string): RegExp {
419
+ let result = '';
420
+ let i = 0;
421
+
422
+ while (i < pattern.length) {
423
+ if (pattern[i] === '*') {
424
+ if (pattern[i + 1] === '*') {
425
+ // ** matches anything
426
+ result += '.*';
427
+ i += 2;
428
+ } else {
429
+ // * matches anything except colon
430
+ result += '[^:]*';
431
+ i += 1;
432
+ }
433
+ } else if (/[.+^${}()|[\]\\]/.test(pattern[i])) {
434
+ // Escape regex special chars
435
+ result += `\\${pattern[i]}`;
436
+ i += 1;
437
+ } else {
438
+ result += pattern[i];
439
+ i += 1;
440
+ }
441
+ }
442
+
443
+ return new RegExp(`^${result}$`);
444
+ }
445
+
446
+ // =============================================================================
447
+ // SCHEMA-AWARE FACT TYPES (for type inference from LogSchema)
448
+ // =============================================================================
449
+
450
+ /**
451
+ * Extract tag fact types from a schema.
452
+ *
453
+ * Given a LogSchema, this produces a union of valid TagFact types
454
+ * for that schema's fields.
455
+ *
456
+ * @example
457
+ * type Schema = { userId: S.category(), count: S.number() };
458
+ * type Tags = SchemaTagFacts<Schema>;
459
+ * // = TagFact<'userId', string> | TagFact<'count', string>
460
+ */
461
+ export type SchemaTagFacts<Schema extends Record<string, unknown>> = {
462
+ [K in keyof Schema & string]: TagFact<K, string>;
463
+ }[keyof Schema & string];
464
+
465
+ /**
466
+ * Extract scope fact types from a schema.
467
+ */
468
+ export type SchemaScopeFacts<Schema extends Record<string, unknown>> = {
469
+ [K in keyof Schema & string]: ScopeFact<K, string>;
470
+ }[keyof Schema & string];
@@ -0,0 +1,141 @@
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
+ // =============================================================================
42
+ // FACT TYPES AND BUILDERS
43
+ // =============================================================================
44
+
45
+ export {
46
+ createFactArray,
47
+ // FactArray
48
+ type FactArray,
49
+ // Namespaces
50
+ type FactNamespace,
51
+ // Feature flag facts
52
+ type FFFact,
53
+ ffFact,
54
+ isFFFact,
55
+ isLogFact,
56
+ isMetricFact,
57
+ isScopeFact,
58
+ isSpanFact,
59
+ isTagFact,
60
+ // Log facts
61
+ type LogFact,
62
+ type LogLevel,
63
+ logDebug,
64
+ logError,
65
+ logFact,
66
+ logInfo,
67
+ logWarn,
68
+ // Metric facts
69
+ type MetricFact,
70
+ metricFact,
71
+ // Parsing
72
+ type ParsedFact,
73
+ parseFact,
74
+ type SchemaScopeFacts,
75
+ // Schema-aware types
76
+ type SchemaTagFacts,
77
+ // Scope facts
78
+ type ScopeFact,
79
+ // Span facts
80
+ type SpanFact,
81
+ type SpanState,
82
+ scopeFact,
83
+ spanErr,
84
+ spanException,
85
+ spanOk,
86
+ spanStarted,
87
+ // Tag facts
88
+ type TagFact,
89
+ // Union type
90
+ type TraceFact,
91
+ tagFact,
92
+ } from './facts.js';
93
+
94
+ // =============================================================================
95
+ // TRACER RE-EXPORTS
96
+ // =============================================================================
97
+
98
+ export { JsBufferStrategy } from '../JsBufferStrategy.js';
99
+ export type { OpContextBinding, OpContextOf } from '../opContext/types.js';
100
+ export type { TraceRootFactory } from '../traceRoot.js';
101
+ // Universal createTraceRoot — picks Node (hrtime.bigint) or ES (performance.now) at runtime
102
+ export { createTraceRoot } from '../traceRoot.universal.js';
103
+ export { CompositeTracer } from '../tracers/CompositeTracer.js';
104
+ export { NoOpTracer } from '../tracers/NoOpTracer.js';
105
+ export { SQLiteAsyncTracer, SQLiteTracer } from '../tracers/SQLiteTracer.js';
106
+ export { StdioTracer } from '../tracers/StdioTracer.js';
107
+ // Re-export TestTracer for convenience
108
+ export { type StatsSnapshot, TestTracer } from '../tracers/TestTracer.js';
109
+
110
+ // =============================================================================
111
+ // FACT EXTRACTION
112
+ // =============================================================================
113
+
114
+ export { type ExtractFactsOptions, extractFacts } from './extractFacts.js';
115
+ export { replayTraceToStdio } from './stdio-replay.js';
116
+
117
+ // =============================================================================
118
+ // SPAN QUERY API
119
+ // =============================================================================
120
+
121
+ export { type QueryableSpan, querySpan } from './queryable-span.js';
122
+ export { extractFactsFor, findAllSpans, findSpan, spanNames } from './span-query.js';
123
+
124
+ // =============================================================================
125
+ // SQLITE PERSISTENCE
126
+ // =============================================================================
127
+
128
+ export { SQLiteAsyncTraceWriter, SQLiteTraceWriter, type SQLiteWriterConfig } from '../sqlite/index.js';
129
+ export { createD1SQLiteDatabase, type D1LikeDatabase, type D1LikePreparedStatement } from '../sqlite/sqlite-d1.js';
130
+ export type {
131
+ AsyncSQLiteDatabase,
132
+ AsyncSQLiteStatement,
133
+ SyncSQLiteDatabase,
134
+ SyncSQLiteStatement,
135
+ } from '../sqlite/sqlite-db.js';
136
+
137
+ // =============================================================================
138
+ // TEST HARNESS WIRING
139
+ // =============================================================================
140
+
141
+ export { makeBunTestSuiteTracer, type TestTracer as BunHarnessTestTracer } from './bun-harness.js';