@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,462 @@
1
+ import * as __typia_transform__accessExpressionAsString from "typia/lib/internal/_accessExpressionAsString";
2
+ import * as __typia_transform__validateReport from "typia/lib/internal/_validateReport";
3
+ import * as __typia_transform__createStandardSchema from "typia/lib/internal/_createStandardSchema";
4
+ /**
5
+ * TraceQuery - Post-run query API for the SQLite trace database.
6
+ *
7
+ * Queries a single flat `spans` table where each row is a buffer entry.
8
+ * Status and duration are derived from entry_type and timestamps via self-joins.
9
+ * Tree structure uses span_id / parent_span_id (no depth column).
10
+ *
11
+ * Platform-agnostic: accepts a SyncSQLiteDatabase instance from either
12
+ * bun:sqlite or better-sqlite3.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { Database } from 'bun:sqlite';
17
+ * import { TraceQuery } from '@smoothbricks/lmao/testing';
18
+ *
19
+ * const query = new TraceQuery(new Database('.trace-results.db'));
20
+ * console.log(query.failures());
21
+ * console.log(query.slowest(undefined, 10));
22
+ * query.close();
23
+ * ```
24
+ *
25
+ * @module trace-query
26
+ */
27
+ import typia from 'typia';
28
+ let validateTraceRunRow;
29
+ let validateLatestTraceRunRow;
30
+ let validateRootSpanRow;
31
+ let validateTraceQueryResultRow;
32
+ function getValidateTraceRunRow() {
33
+ validateTraceRunRow ??= (() => { const _io0 = (input, _exceptionable = true) => "string" === typeof input.traceId && "string" === typeof input.spanName && "number" === typeof input.startedAt && (3 === Object.keys(input).length || Object.keys(input).every(key => {
34
+ if (["traceId", "spanName", "startedAt"].some(prop => key === prop))
35
+ return true;
36
+ const value = input[key];
37
+ if (undefined === value)
38
+ return true;
39
+ return false;
40
+ })); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.traceId || _report(_exceptionable, {
41
+ path: _path + ".traceId",
42
+ expected: "string",
43
+ value: input.traceId
44
+ }), "string" === typeof input.spanName || _report(_exceptionable, {
45
+ path: _path + ".spanName",
46
+ expected: "string",
47
+ value: input.spanName
48
+ }), "number" === typeof input.startedAt || _report(_exceptionable, {
49
+ path: _path + ".startedAt",
50
+ expected: "number",
51
+ value: input.startedAt
52
+ }), 3 === Object.keys(input).length || (false === _exceptionable || Object.keys(input).map(key => {
53
+ if (["traceId", "spanName", "startedAt"].some(prop => key === prop))
54
+ return true;
55
+ const value = input[key];
56
+ if (undefined === value)
57
+ return true;
58
+ return _report(_exceptionable, {
59
+ path: _path + __typia_transform__accessExpressionAsString._accessExpressionAsString(key),
60
+ expected: "undefined",
61
+ value: value,
62
+ description: [
63
+ `The property \`${key}\` is not defined in the object type.`,
64
+ "",
65
+ "Please remove the property next time."
66
+ ].join("\n")
67
+ });
68
+ }).every(flag => flag))].every(flag => flag); const __is = (input, _exceptionable = true) => "object" === typeof input && null !== input && _io0(input, true); let errors; let _report; return __typia_transform__createStandardSchema._createStandardSchema(input => {
69
+ if (false === __is(input)) {
70
+ errors = [];
71
+ _report = __typia_transform__validateReport._validateReport(errors);
72
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
73
+ path: _path + "",
74
+ expected: "TraceRunRow",
75
+ value: input
76
+ })) && _vo0(input, _path + "", true) || _report(true, {
77
+ path: _path + "",
78
+ expected: "TraceRunRow",
79
+ value: input
80
+ }))(input, "$input", true);
81
+ const success = 0 === errors.length;
82
+ return success ? {
83
+ success,
84
+ data: input
85
+ } : {
86
+ success,
87
+ errors,
88
+ data: input
89
+ };
90
+ }
91
+ return {
92
+ success: true,
93
+ data: input
94
+ };
95
+ }); })();
96
+ return validateTraceRunRow;
97
+ }
98
+ function getValidateLatestTraceRunRow() {
99
+ validateLatestTraceRunRow ??= (() => { const _io0 = (input, _exceptionable = true) => "string" === typeof input.traceId && (1 === Object.keys(input).length || Object.keys(input).every(key => {
100
+ if (["traceId"].some(prop => key === prop))
101
+ return true;
102
+ const value = input[key];
103
+ if (undefined === value)
104
+ return true;
105
+ return false;
106
+ })); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.traceId || _report(_exceptionable, {
107
+ path: _path + ".traceId",
108
+ expected: "string",
109
+ value: input.traceId
110
+ }), 1 === Object.keys(input).length || (false === _exceptionable || Object.keys(input).map(key => {
111
+ if (["traceId"].some(prop => key === prop))
112
+ return true;
113
+ const value = input[key];
114
+ if (undefined === value)
115
+ return true;
116
+ return _report(_exceptionable, {
117
+ path: _path + __typia_transform__accessExpressionAsString._accessExpressionAsString(key),
118
+ expected: "undefined",
119
+ value: value,
120
+ description: [
121
+ `The property \`${key}\` is not defined in the object type.`,
122
+ "",
123
+ "Please remove the property next time."
124
+ ].join("\n")
125
+ });
126
+ }).every(flag => flag))].every(flag => flag); const __is = (input, _exceptionable = true) => "object" === typeof input && null !== input && _io0(input, true); let errors; let _report; return __typia_transform__createStandardSchema._createStandardSchema(input => {
127
+ if (false === __is(input)) {
128
+ errors = [];
129
+ _report = __typia_transform__validateReport._validateReport(errors);
130
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
131
+ path: _path + "",
132
+ expected: "LatestTraceRunRow",
133
+ value: input
134
+ })) && _vo0(input, _path + "", true) || _report(true, {
135
+ path: _path + "",
136
+ expected: "LatestTraceRunRow",
137
+ value: input
138
+ }))(input, "$input", true);
139
+ const success = 0 === errors.length;
140
+ return success ? {
141
+ success,
142
+ data: input
143
+ } : {
144
+ success,
145
+ errors,
146
+ data: input
147
+ };
148
+ }
149
+ return {
150
+ success: true,
151
+ data: input
152
+ };
153
+ }); })();
154
+ return validateLatestTraceRunRow;
155
+ }
156
+ function getValidateRootSpanRow() {
157
+ validateRootSpanRow ??= (() => { const _io0 = (input, _exceptionable = true) => "number" === typeof input.span_id && (1 === Object.keys(input).length || Object.keys(input).every(key => {
158
+ if (["span_id"].some(prop => key === prop))
159
+ return true;
160
+ const value = input[key];
161
+ if (undefined === value)
162
+ return true;
163
+ return false;
164
+ })); const _vo0 = (input, _path, _exceptionable = true) => ["number" === typeof input.span_id || _report(_exceptionable, {
165
+ path: _path + ".span_id",
166
+ expected: "number",
167
+ value: input.span_id
168
+ }), 1 === Object.keys(input).length || (false === _exceptionable || Object.keys(input).map(key => {
169
+ if (["span_id"].some(prop => key === prop))
170
+ return true;
171
+ const value = input[key];
172
+ if (undefined === value)
173
+ return true;
174
+ return _report(_exceptionable, {
175
+ path: _path + __typia_transform__accessExpressionAsString._accessExpressionAsString(key),
176
+ expected: "undefined",
177
+ value: value,
178
+ description: [
179
+ `The property \`${key}\` is not defined in the object type.`,
180
+ "",
181
+ "Please remove the property next time."
182
+ ].join("\n")
183
+ });
184
+ }).every(flag => flag))].every(flag => flag); const __is = (input, _exceptionable = true) => "object" === typeof input && null !== input && _io0(input, true); let errors; let _report; return __typia_transform__createStandardSchema._createStandardSchema(input => {
185
+ if (false === __is(input)) {
186
+ errors = [];
187
+ _report = __typia_transform__validateReport._validateReport(errors);
188
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
189
+ path: _path + "",
190
+ expected: "RootSpanRow",
191
+ value: input
192
+ })) && _vo0(input, _path + "", true) || _report(true, {
193
+ path: _path + "",
194
+ expected: "RootSpanRow",
195
+ value: input
196
+ }))(input, "$input", true);
197
+ const success = 0 === errors.length;
198
+ return success ? {
199
+ success,
200
+ data: input
201
+ } : {
202
+ success,
203
+ errors,
204
+ data: input
205
+ };
206
+ }
207
+ return {
208
+ success: true,
209
+ data: input
210
+ };
211
+ }); })();
212
+ return validateRootSpanRow;
213
+ }
214
+ function getValidateTraceQueryResultRow() {
215
+ validateTraceQueryResultRow ??= (() => { const _io0 = (input, _exceptionable = true) => "string" === typeof input.spanName && ("ok" === input.status || "err" === input.status || "exception" === input.status || "running" === input.status) && (null === input.durationNs || "number" === typeof input.durationNs) && (null === input.describe || "string" === typeof input.describe) && "number" === typeof input.parentSpanId && (5 === Object.keys(input).length || Object.keys(input).every(key => {
216
+ if (["spanName", "status", "durationNs", "describe", "parentSpanId"].some(prop => key === prop))
217
+ return true;
218
+ const value = input[key];
219
+ if (undefined === value)
220
+ return true;
221
+ return false;
222
+ })); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.spanName || _report(_exceptionable, {
223
+ path: _path + ".spanName",
224
+ expected: "string",
225
+ value: input.spanName
226
+ }), "ok" === input.status || "err" === input.status || "exception" === input.status || "running" === input.status || _report(_exceptionable, {
227
+ path: _path + ".status",
228
+ expected: "(\"err\" | \"exception\" | \"ok\" | \"running\")",
229
+ value: input.status
230
+ }), null === input.durationNs || "number" === typeof input.durationNs || _report(_exceptionable, {
231
+ path: _path + ".durationNs",
232
+ expected: "(null | number)",
233
+ value: input.durationNs
234
+ }), null === input.describe || "string" === typeof input.describe || _report(_exceptionable, {
235
+ path: _path + ".describe",
236
+ expected: "(null | string)",
237
+ value: input.describe
238
+ }), "number" === typeof input.parentSpanId || _report(_exceptionable, {
239
+ path: _path + ".parentSpanId",
240
+ expected: "number",
241
+ value: input.parentSpanId
242
+ }), 5 === Object.keys(input).length || (false === _exceptionable || Object.keys(input).map(key => {
243
+ if (["spanName", "status", "durationNs", "describe", "parentSpanId"].some(prop => key === prop))
244
+ return true;
245
+ const value = input[key];
246
+ if (undefined === value)
247
+ return true;
248
+ return _report(_exceptionable, {
249
+ path: _path + __typia_transform__accessExpressionAsString._accessExpressionAsString(key),
250
+ expected: "undefined",
251
+ value: value,
252
+ description: [
253
+ `The property \`${key}\` is not defined in the object type.`,
254
+ "",
255
+ "Please remove the property next time."
256
+ ].join("\n")
257
+ });
258
+ }).every(flag => flag))].every(flag => flag); const __is = (input, _exceptionable = true) => "object" === typeof input && null !== input && _io0(input, true); let errors; let _report; return __typia_transform__createStandardSchema._createStandardSchema(input => {
259
+ if (false === __is(input)) {
260
+ errors = [];
261
+ _report = __typia_transform__validateReport._validateReport(errors);
262
+ ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
263
+ path: _path + "",
264
+ expected: "TraceQueryResultRow",
265
+ value: input
266
+ })) && _vo0(input, _path + "", true) || _report(true, {
267
+ path: _path + "",
268
+ expected: "TraceQueryResultRow",
269
+ value: input
270
+ }))(input, "$input", true);
271
+ const success = 0 === errors.length;
272
+ return success ? {
273
+ success,
274
+ data: input
275
+ } : {
276
+ success,
277
+ errors,
278
+ data: input
279
+ };
280
+ }
281
+ return {
282
+ success: true,
283
+ data: input
284
+ };
285
+ }); })();
286
+ return validateTraceQueryResultRow;
287
+ }
288
+ function describeSqliteBoundaryError(boundary, errors, rowIndex) {
289
+ const firstError = errors[0];
290
+ const rowDetail = rowIndex === undefined ? '' : ` row ${rowIndex}`;
291
+ if (!firstError) {
292
+ return `${boundary} returned an invalid SQLite${rowDetail} result`;
293
+ }
294
+ return `${boundary} returned an invalid SQLite${rowDetail} result at ${firstError.path}: expected ${firstError.expected}`;
295
+ }
296
+ function parseOptionalSqliteRow(boundary, row, validate) {
297
+ if (row == null) {
298
+ return undefined;
299
+ }
300
+ const validation = validate(row);
301
+ if (!validation.success) {
302
+ throw new Error(describeSqliteBoundaryError(boundary, validation.errors));
303
+ }
304
+ return validation.data;
305
+ }
306
+ function parseSqliteRows(boundary, rows, validate) {
307
+ return rows.map((row, rowIndex) => {
308
+ const validation = validate(row);
309
+ if (!validation.success) {
310
+ throw new Error(describeSqliteBoundaryError(boundary, validation.errors, rowIndex));
311
+ }
312
+ return validation.data;
313
+ });
314
+ }
315
+ function toTraceQueryResult(row) {
316
+ return {
317
+ spanName: row.spanName,
318
+ status: row.status,
319
+ durationNs: row.durationNs ?? undefined,
320
+ describe: row.describe ?? undefined,
321
+ parentSpanId: row.parentSpanId,
322
+ };
323
+ }
324
+ export class TraceQuery {
325
+ db;
326
+ constructor(db) {
327
+ this.db = db;
328
+ }
329
+ /** Get all trace runs (root spans), most recent first */
330
+ runs() {
331
+ return parseSqliteRows('TraceQuery.runs', this.db
332
+ .prepare(`SELECT trace_id AS traceId, message AS spanName, timestamp_ns AS startedAt
333
+ FROM spans
334
+ WHERE parent_span_id = 0 AND row_index = 0
335
+ ORDER BY timestamp_ns DESC`)
336
+ .all(), getValidateTraceRunRow());
337
+ }
338
+ /** Get the most recent trace_id (= run_id) */
339
+ latestRun() {
340
+ return parseOptionalSqliteRow('TraceQuery.latestRun', this.db
341
+ .prepare(`SELECT trace_id AS traceId
342
+ FROM spans
343
+ WHERE parent_span_id = 0 AND row_index = 0
344
+ ORDER BY timestamp_ns DESC LIMIT 1`)
345
+ .get(), getValidateLatestTraceRunRow());
346
+ }
347
+ /** Get all failed tests in a run (defaults to latest run) */
348
+ failures(traceId) {
349
+ const id = traceId ?? this.latestRun()?.traceId;
350
+ if (!id)
351
+ return [];
352
+ // Find the root span_id for this trace
353
+ const root = parseOptionalSqliteRow('TraceQuery.failures root span', this.db.prepare('SELECT span_id FROM spans WHERE trace_id = ? AND parent_span_id = 0 AND row_index = 0').get(id), getValidateRootSpanRow());
354
+ if (!root)
355
+ return [];
356
+ // Self-join: row_index=0 for name, row_index=1 for status/duration
357
+ return parseSqliteRows('TraceQuery.failures rows', this.db
358
+ .prepare(`SELECT
359
+ s0.message AS spanName,
360
+ CASE WHEN s1.entry_type = 2 THEN 'ok'
361
+ WHEN s1.entry_type = 3 THEN 'err'
362
+ WHEN s1.entry_type = 4 THEN 'exception'
363
+ ELSE 'running' END AS status,
364
+ s1.timestamp_ns - s0.timestamp_ns AS durationNs,
365
+ s0.describe,
366
+ s0.parent_span_id AS parentSpanId
367
+ FROM spans s0
368
+ LEFT JOIN spans s1 ON s1.trace_id = s0.trace_id AND s1.span_id = s0.span_id AND s1.row_index = 1
369
+ WHERE s0.trace_id = ? AND s0.parent_span_id = ? AND s0.row_index = 0
370
+ AND s1.entry_type IN (3, 4)
371
+ ORDER BY s0.timestamp_ns ASC`)
372
+ .all(id, root.span_id), getValidateTraceQueryResultRow()).map(toTraceQueryResult);
373
+ }
374
+ /** Get slowest tests in a run (defaults to latest run) */
375
+ slowest(traceId, limit = 20) {
376
+ const id = traceId ?? this.latestRun()?.traceId;
377
+ if (!id)
378
+ return [];
379
+ // Find the root span_id for this trace
380
+ const root = parseOptionalSqliteRow('TraceQuery.slowest root span', this.db.prepare('SELECT span_id FROM spans WHERE trace_id = ? AND parent_span_id = 0 AND row_index = 0').get(id), getValidateRootSpanRow());
381
+ if (!root)
382
+ return [];
383
+ return parseSqliteRows('TraceQuery.slowest rows', this.db
384
+ .prepare(`SELECT
385
+ s0.message AS spanName,
386
+ CASE WHEN s1.entry_type = 2 THEN 'ok'
387
+ WHEN s1.entry_type = 3 THEN 'err'
388
+ WHEN s1.entry_type = 4 THEN 'exception'
389
+ ELSE 'running' END AS status,
390
+ s1.timestamp_ns - s0.timestamp_ns AS durationNs,
391
+ s0.describe,
392
+ s0.parent_span_id AS parentSpanId
393
+ FROM spans s0
394
+ LEFT JOIN spans s1 ON s1.trace_id = s0.trace_id AND s1.span_id = s0.span_id AND s1.row_index = 1
395
+ WHERE s0.trace_id = ? AND s0.parent_span_id = ? AND s0.row_index = 0
396
+ AND s1.entry_type IS NOT NULL
397
+ ORDER BY durationNs DESC
398
+ LIMIT ?`)
399
+ .all(id, root.span_id, limit), getValidateTraceQueryResultRow()).map(toTraceQueryResult);
400
+ }
401
+ /** Find spans by name pattern (SQL LIKE, defaults to latest run) */
402
+ findSpans(pattern, traceId) {
403
+ const id = traceId ?? this.latestRun()?.traceId;
404
+ if (!id)
405
+ return [];
406
+ return parseSqliteRows('TraceQuery.findSpans', this.db
407
+ .prepare(`SELECT
408
+ s0.message AS spanName,
409
+ CASE WHEN s1.entry_type = 2 THEN 'ok'
410
+ WHEN s1.entry_type = 3 THEN 'err'
411
+ WHEN s1.entry_type = 4 THEN 'exception'
412
+ ELSE 'running' END AS status,
413
+ s1.timestamp_ns - s0.timestamp_ns AS durationNs,
414
+ s0.describe,
415
+ s0.parent_span_id AS parentSpanId
416
+ FROM spans s0
417
+ LEFT JOIN spans s1 ON s1.trace_id = s0.trace_id AND s1.span_id = s0.span_id AND s1.row_index = 1
418
+ WHERE s0.trace_id = ? AND s0.row_index = 0 AND s0.message LIKE ?
419
+ ORDER BY s0.timestamp_ns ASC`)
420
+ .all(id, pattern), getValidateTraceQueryResultRow()).map(toTraceQueryResult);
421
+ }
422
+ /** Get full span tree for a specific test (all descendants, defaults to latest run) */
423
+ testTree(testName, traceId) {
424
+ const id = traceId ?? this.latestRun()?.traceId;
425
+ if (!id)
426
+ return [];
427
+ // Recursive CTE on span_id/parent_span_id
428
+ return parseSqliteRows('TraceQuery.testTree', this.db
429
+ .prepare(`WITH RECURSIVE tree AS (
430
+ -- Anchor: find the span by name
431
+ SELECT span_id
432
+ FROM spans
433
+ WHERE trace_id = ? AND row_index = 0 AND message = ?
434
+ LIMIT 1
435
+
436
+ UNION ALL
437
+
438
+ -- Recurse: find children by parent_span_id
439
+ SELECT s.span_id
440
+ FROM spans s
441
+ INNER JOIN tree t ON s.parent_span_id = t.span_id
442
+ WHERE s.trace_id = ? AND s.row_index = 0
443
+ )
444
+ SELECT
445
+ s0.message AS spanName,
446
+ CASE WHEN s1.entry_type = 2 THEN 'ok'
447
+ WHEN s1.entry_type = 3 THEN 'err'
448
+ WHEN s1.entry_type = 4 THEN 'exception'
449
+ ELSE 'running' END AS status,
450
+ s1.timestamp_ns - s0.timestamp_ns AS durationNs,
451
+ s0.describe,
452
+ s0.parent_span_id AS parentSpanId
453
+ FROM tree
454
+ JOIN spans s0 ON s0.trace_id = ? AND s0.span_id = tree.span_id AND s0.row_index = 0
455
+ LEFT JOIN spans s1 ON s1.trace_id = s0.trace_id AND s1.span_id = s0.span_id AND s1.row_index = 1
456
+ ORDER BY s0.timestamp_ns ASC`)
457
+ .all(id, testName, id, id), getValidateTraceQueryResultRow()).map(toTraceQueryResult);
458
+ }
459
+ close() {
460
+ this.db.close();
461
+ }
462
+ }
@@ -0,0 +1,135 @@
1
+ /**
2
+ * vitest integration for LMAO trace-testing.
3
+ *
4
+ * Same architecture as bun-harness: one root trace per test run,
5
+ * each it() creates a child span, describe path written to `describe` schema column.
6
+ *
7
+ * Supports lifecycle tracer outputs (SQLite, stdio, or both via CompositeTracer).
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // vitest.config.ts
12
+ * export default defineConfig({
13
+ * test: { setupFiles: ['./test-setup.ts'] },
14
+ * });
15
+ *
16
+ * // test-setup.ts
17
+ * import { initTraceTestRun } from '@smoothbricks/lmao/testing/vitest';
18
+ * initTraceTestRun(myOpContext, { sqlite: { dbPath: '.trace-results.db' } });
19
+ *
20
+ * // my-test.test.ts
21
+ * import { describe, it, expect, useTestSpan } from '@smoothbricks/lmao/testing/vitest';
22
+ * ```
23
+ *
24
+ * @module testing/vitest
25
+ */
26
+ import { afterAll as _afterAll, afterEach as _afterEach, beforeAll as _beforeAll, beforeEach as _beforeEach, expect as _expect } from 'vitest';
27
+ import type { SpanContext } from '../opContext/spanContextTypes.js';
28
+ import type { OpContextBinding, OpContextOf } from '../opContext/types.js';
29
+ import type { AsyncSQLiteDatabase, SyncSQLiteDatabase } from '../sqlite/sqlite-db.js';
30
+ import type { SQLiteWriterConfig } from '../sqlite/sqlite-writer.js';
31
+ import { Tracer } from '../tracer.js';
32
+ type TestBody = () => unknown | Promise<unknown>;
33
+ type SpanCtx<B extends OpContextBinding> = SpanContext<OpContextOf<B>>;
34
+ type VitestDescribeCallback = () => void;
35
+ type VitestDescribeBranch = (name: string, fn: VitestDescribeCallback) => unknown;
36
+ type VitestPublicTestCallback = () => void | Promise<void>;
37
+ type VitestPublicTestBranch = (name: string, fn: VitestPublicTestCallback) => unknown;
38
+ type VitestModuleIt = ((name: string, fn: TestBody) => unknown) & {
39
+ skip: (name: string, fn: VitestPublicTestCallback) => unknown;
40
+ only: (name: string, fn: VitestPublicTestCallback) => unknown;
41
+ todo: (name: string, fn: VitestPublicTestCallback) => unknown;
42
+ each: VitestEach;
43
+ skipIf: (condition: boolean) => (name: string, fn: VitestPublicTestCallback) => unknown;
44
+ };
45
+ type VitestEach = (...args: unknown[]) => unknown;
46
+ export type VitestDescribe = VitestDescribeBranch & {
47
+ skip: VitestDescribeBranch;
48
+ only: VitestDescribeBranch;
49
+ todo: VitestDescribeBranch;
50
+ each: VitestEach;
51
+ skipIf: (condition: boolean) => VitestDescribeBranch;
52
+ };
53
+ export type VitestIt = VitestPublicTestBranch & {
54
+ skip: VitestPublicTestBranch;
55
+ only: VitestPublicTestBranch;
56
+ todo: VitestPublicTestBranch;
57
+ each: VitestEach;
58
+ skipIf: (condition: boolean) => VitestPublicTestBranch;
59
+ };
60
+ export interface VitestModuleShape {
61
+ describe: VitestDescribe;
62
+ it: VitestModuleIt;
63
+ test: VitestModuleIt;
64
+ [key: string]: unknown;
65
+ }
66
+ type SpanContextStore<Ctx> = {
67
+ run<R>(ctx: Ctx, fn: () => R): R;
68
+ getStore(): Ctx | undefined;
69
+ };
70
+ type SQLiteRuntimeConfig = SQLiteWriterConfig & ({
71
+ /** Node/bun style synchronous SQLite driver (for example better-sqlite3). */
72
+ createDatabase: (path: string) => SyncSQLiteDatabase;
73
+ createAsyncDatabase?: never;
74
+ } | {
75
+ /** Async SQLite driver (for example Cloudflare D1 adapter). */
76
+ createAsyncDatabase: (path: string) => AsyncSQLiteDatabase | Promise<AsyncSQLiteDatabase>;
77
+ createDatabase?: never;
78
+ });
79
+ type InitTraceTestRunOptions = {
80
+ /**
81
+ * Optional SQLite persistence target.
82
+ *
83
+ * Omit this to run traced tests without DB persistence.
84
+ */
85
+ sqlite?: SQLiteRuntimeConfig;
86
+ /** Optional verbose stdout tracing; defaults to env flag detection. */
87
+ verbose?: boolean;
88
+ };
89
+ type VitestHarnessConfig<B extends OpContextBinding> = {
90
+ binding: B;
91
+ createSpanContextStore?: () => SpanContextStore<SpanCtx<B>>;
92
+ };
93
+ export type VitestTestTracer<B extends OpContextBinding> = {
94
+ initTraceTestRun(options?: InitTraceTestRunOptions): void;
95
+ useTestSpan(): SpanCtx<B>;
96
+ getTracer(): Tracer<B>;
97
+ createVitestMock<T extends VitestModuleShape>(vitestModule: T): T;
98
+ describe(name: string, fn: () => void): unknown;
99
+ it(name: string, fn: () => void | Promise<void>): void;
100
+ };
101
+ export type VitestTestSuiteTracer<B extends OpContextBinding> = {
102
+ useTestTracer: VitestTestTracer<B>;
103
+ useTestSpan(): SpanCtx<B>;
104
+ setupVitestTestSuiteTracing(): void;
105
+ };
106
+ export declare function installVitestTestTracing<B extends OpContextBinding>(tracer: VitestTestTracer<B>, options?: InitTraceTestRunOptions): void;
107
+ export declare function makeVitestTestSuiteTracer<B extends OpContextBinding>(config: VitestHarnessConfig<B>, options?: InitTraceTestRunOptions): VitestTestSuiteTracer<B>;
108
+ export declare function makeVitestTestTracer<B extends OpContextBinding>(config: VitestHarnessConfig<B>): VitestTestTracer<B>;
109
+ /** Initialize the root tracer for the entire vitest run. Call once in setupFiles. */
110
+ export declare function initTraceTestRun<B extends OpContextBinding>(opContext: B, options?: InitTraceTestRunOptions): void;
111
+ /** Get the current span context from AsyncLocalStorage (inside an it() block) */
112
+ export declare function useTestSpan(): SpanContext<OpContextOf<OpContextBinding>>;
113
+ /** Get the root tracer instance */
114
+ export declare function getTracer(): Tracer<OpContextBinding>;
115
+ /**
116
+ * Create a vitest mock replacement that wraps it()/test()/describe() with trace spans.
117
+ *
118
+ * Call this from a vitest setupFile via vi.mock:
119
+ * ```typescript
120
+ * vi.mock('vitest', async (importOriginal) => {
121
+ * const [mod, { createVitestMock }] = await Promise.all([
122
+ * importOriginal(),
123
+ * import('@smoothbricks/lmao/testing/vitest'),
124
+ * ]);
125
+ * return createVitestMock(mod);
126
+ * });
127
+ * ```
128
+ *
129
+ * @param vitestModule - The original vitest namespace from importOriginal()
130
+ */
131
+ export declare function createVitestMock<T extends VitestModuleShape>(vitestModule: T): T;
132
+ export declare const describe: VitestDescribe;
133
+ export declare const it: VitestIt;
134
+ export { _afterAll as afterAll, _afterEach as afterEach, _beforeAll as beforeAll, _beforeEach as beforeEach, _expect as expect, };
135
+ //# sourceMappingURL=vitest-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-harness.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/vitest-harness.ts"],"names":[],"mappings":"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"}