@smoothbricks/lmao 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/README.md +269 -0
  2. package/dist/allocator.wasm +0 -0
  3. package/dist/bun/preload.d.ts +11 -0
  4. package/dist/bun/preload.d.ts.map +1 -0
  5. package/dist/bun/preload.js +10 -0
  6. package/dist/bun/trace-preload.d.ts +8 -0
  7. package/dist/bun/trace-preload.d.ts.map +1 -0
  8. package/dist/bun/trace-preload.js +12 -0
  9. package/dist/es.d.ts +8 -0
  10. package/dist/es.d.ts.map +1 -0
  11. package/dist/es.js +9 -0
  12. package/dist/index.d.ts +41 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +84 -0
  15. package/dist/lib/JsBufferStrategy.d.ts +49 -0
  16. package/dist/lib/JsBufferStrategy.d.ts.map +1 -0
  17. package/dist/lib/JsBufferStrategy.js +60 -0
  18. package/dist/lib/archive/chunkCompaction.d.ts +15 -0
  19. package/dist/lib/archive/chunkCompaction.d.ts.map +1 -0
  20. package/dist/lib/archive/chunkCompaction.js +24 -0
  21. package/dist/lib/archive/chunkEnvelope.d.ts +21 -0
  22. package/dist/lib/archive/chunkEnvelope.d.ts.map +1 -0
  23. package/dist/lib/archive/chunkEnvelope.js +55 -0
  24. package/dist/lib/archive/chunkRouting.d.ts +10 -0
  25. package/dist/lib/archive/chunkRouting.d.ts.map +1 -0
  26. package/dist/lib/archive/chunkRouting.js +47 -0
  27. package/dist/lib/archive/chunkStats.d.ts +12 -0
  28. package/dist/lib/archive/chunkStats.d.ts.map +1 -0
  29. package/dist/lib/archive/chunkStats.js +10 -0
  30. package/dist/lib/archive/index.d.ts +5 -0
  31. package/dist/lib/archive/index.d.ts.map +1 -0
  32. package/dist/lib/archive/index.js +4 -0
  33. package/dist/lib/arrow/capacityStats.d.ts +9 -0
  34. package/dist/lib/arrow/capacityStats.d.ts.map +1 -0
  35. package/dist/lib/arrow/capacityStats.js +231 -0
  36. package/dist/lib/arrow/dictionaries.d.ts +27 -0
  37. package/dist/lib/arrow/dictionaries.d.ts.map +1 -0
  38. package/dist/lib/arrow/dictionaries.js +135 -0
  39. package/dist/lib/arrow/flechette.d.ts +40 -0
  40. package/dist/lib/arrow/flechette.d.ts.map +1 -0
  41. package/dist/lib/arrow/flechette.js +67 -0
  42. package/dist/lib/arrow/utils.d.ts +38 -0
  43. package/dist/lib/arrow/utils.d.ts.map +1 -0
  44. package/dist/lib/arrow/utils.js +112 -0
  45. package/dist/lib/buffer/Nanoseconds.d.ts +109 -0
  46. package/dist/lib/buffer/Nanoseconds.d.ts.map +1 -0
  47. package/dist/lib/buffer/Nanoseconds.js +86 -0
  48. package/dist/lib/bufferStrategy.d.ts +95 -0
  49. package/dist/lib/bufferStrategy.d.ts.map +1 -0
  50. package/dist/lib/bufferStrategy.js +1 -0
  51. package/dist/lib/capacityTuning.d.ts +50 -0
  52. package/dist/lib/capacityTuning.d.ts.map +1 -0
  53. package/dist/lib/capacityTuning.js +65 -0
  54. package/dist/lib/codegen/evaluatorGenerator.d.ts +35 -0
  55. package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -0
  56. package/dist/lib/codegen/evaluatorGenerator.js +199 -0
  57. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +139 -0
  58. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -0
  59. package/dist/lib/codegen/fixedPositionWriterGenerator.js +289 -0
  60. package/dist/lib/codegen/spanLoggerGenerator.d.ts +115 -0
  61. package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -0
  62. package/dist/lib/codegen/spanLoggerGenerator.js +575 -0
  63. package/dist/lib/convertToArrow.d.ts +40 -0
  64. package/dist/lib/convertToArrow.d.ts.map +1 -0
  65. package/dist/lib/convertToArrow.js +1467 -0
  66. package/dist/lib/defineOpContext.d.ts +96 -0
  67. package/dist/lib/defineOpContext.d.ts.map +1 -0
  68. package/dist/lib/defineOpContext.js +227 -0
  69. package/dist/lib/errors/Blocked.d.ts +113 -0
  70. package/dist/lib/errors/Blocked.d.ts.map +1 -0
  71. package/dist/lib/errors/Blocked.js +68 -0
  72. package/dist/lib/errors/CodeError.d.ts +101 -0
  73. package/dist/lib/errors/CodeError.d.ts.map +1 -0
  74. package/dist/lib/errors/CodeError.js +42 -0
  75. package/dist/lib/errors/RetriesExhausted.d.ts +67 -0
  76. package/dist/lib/errors/RetriesExhausted.d.ts.map +1 -0
  77. package/dist/lib/errors/RetriesExhausted.js +31 -0
  78. package/dist/lib/errors/Transient.d.ts +115 -0
  79. package/dist/lib/errors/Transient.d.ts.map +1 -0
  80. package/dist/lib/errors/Transient.js +54 -0
  81. package/dist/lib/errors/index.d.ts +14 -0
  82. package/dist/lib/errors/index.d.ts.map +1 -0
  83. package/dist/lib/errors/index.js +16 -0
  84. package/dist/lib/errors/retry-policy.d.ts +60 -0
  85. package/dist/lib/errors/retry-policy.d.ts.map +1 -0
  86. package/dist/lib/errors/retry-policy.js +54 -0
  87. package/dist/lib/flushScheduler.d.ts +162 -0
  88. package/dist/lib/flushScheduler.d.ts.map +1 -0
  89. package/dist/lib/flushScheduler.js +388 -0
  90. package/dist/lib/library.d.ts +149 -0
  91. package/dist/lib/library.d.ts.map +1 -0
  92. package/dist/lib/library.js +588 -0
  93. package/dist/lib/logApi.d.ts +61 -0
  94. package/dist/lib/logApi.d.ts.map +1 -0
  95. package/dist/lib/logApi.js +12 -0
  96. package/dist/lib/logBinding.d.ts +63 -0
  97. package/dist/lib/logBinding.d.ts.map +1 -0
  98. package/dist/lib/logBinding.js +1 -0
  99. package/dist/lib/op.d.ts +105 -0
  100. package/dist/lib/op.d.ts.map +1 -0
  101. package/dist/lib/op.js +59 -0
  102. package/dist/lib/opContext/contextTypes.d.ts +88 -0
  103. package/dist/lib/opContext/contextTypes.d.ts.map +1 -0
  104. package/dist/lib/opContext/contextTypes.js +34 -0
  105. package/dist/lib/opContext/createOpGroup.d.ts +57 -0
  106. package/dist/lib/opContext/createOpGroup.d.ts.map +1 -0
  107. package/dist/lib/opContext/createOpGroup.js +341 -0
  108. package/dist/lib/opContext/defineOp.d.ts +83 -0
  109. package/dist/lib/opContext/defineOp.d.ts.map +1 -0
  110. package/dist/lib/opContext/defineOp.js +197 -0
  111. package/dist/lib/opContext/featureFlagTypes.d.ts +58 -0
  112. package/dist/lib/opContext/featureFlagTypes.d.ts.map +1 -0
  113. package/dist/lib/opContext/featureFlagTypes.js +1 -0
  114. package/dist/lib/opContext/index.d.ts +13 -0
  115. package/dist/lib/opContext/index.d.ts.map +1 -0
  116. package/dist/lib/opContext/index.js +15 -0
  117. package/dist/lib/opContext/opGroupTypes.d.ts +250 -0
  118. package/dist/lib/opContext/opGroupTypes.d.ts.map +1 -0
  119. package/dist/lib/opContext/opGroupTypes.js +31 -0
  120. package/dist/lib/opContext/opTypes.d.ts +48 -0
  121. package/dist/lib/opContext/opTypes.d.ts.map +1 -0
  122. package/dist/lib/opContext/opTypes.js +7 -0
  123. package/dist/lib/opContext/spanContextTypes.d.ts +347 -0
  124. package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -0
  125. package/dist/lib/opContext/spanContextTypes.js +1 -0
  126. package/dist/lib/opContext/types.d.ts +297 -0
  127. package/dist/lib/opContext/types.d.ts.map +1 -0
  128. package/dist/lib/opContext/types.js +16 -0
  129. package/dist/lib/result.d.ts +308 -0
  130. package/dist/lib/result.d.ts.map +1 -0
  131. package/dist/lib/result.js +359 -0
  132. package/dist/lib/schema/LogSchema.d.ts +62 -0
  133. package/dist/lib/schema/LogSchema.d.ts.map +1 -0
  134. package/dist/lib/schema/LogSchema.js +134 -0
  135. package/dist/lib/schema/builder.d.ts +12 -0
  136. package/dist/lib/schema/builder.d.ts.map +1 -0
  137. package/dist/lib/schema/builder.js +169 -0
  138. package/dist/lib/schema/defineFeatureFlags.d.ts +60 -0
  139. package/dist/lib/schema/defineFeatureFlags.d.ts.map +1 -0
  140. package/dist/lib/schema/defineFeatureFlags.js +29 -0
  141. package/dist/lib/schema/defineLogSchema.d.ts +87 -0
  142. package/dist/lib/schema/defineLogSchema.d.ts.map +1 -0
  143. package/dist/lib/schema/defineLogSchema.js +171 -0
  144. package/dist/lib/schema/evaluator.d.ts +267 -0
  145. package/dist/lib/schema/evaluator.d.ts.map +1 -0
  146. package/dist/lib/schema/evaluator.js +169 -0
  147. package/dist/lib/schema/extend.d.ts +14 -0
  148. package/dist/lib/schema/extend.d.ts.map +1 -0
  149. package/dist/lib/schema/extend.js +51 -0
  150. package/dist/lib/schema/systemSchema.d.ts +112 -0
  151. package/dist/lib/schema/systemSchema.d.ts.map +1 -0
  152. package/dist/lib/schema/systemSchema.js +260 -0
  153. package/dist/lib/schema/typeGuards.d.ts +52 -0
  154. package/dist/lib/schema/typeGuards.d.ts.map +1 -0
  155. package/dist/lib/schema/typeGuards.js +127 -0
  156. package/dist/lib/schema/types.d.ts +156 -0
  157. package/dist/lib/schema/types.d.ts.map +1 -0
  158. package/dist/lib/schema/types.js +4 -0
  159. package/dist/lib/spanBuffer.d.ts +133 -0
  160. package/dist/lib/spanBuffer.d.ts.map +1 -0
  161. package/dist/lib/spanBuffer.js +442 -0
  162. package/dist/lib/spanBufferHelpers.d.ts +53 -0
  163. package/dist/lib/spanBufferHelpers.d.ts.map +1 -0
  164. package/dist/lib/spanBufferHelpers.js +65 -0
  165. package/dist/lib/spanBufferStats.d.ts +38 -0
  166. package/dist/lib/spanBufferStats.d.ts.map +1 -0
  167. package/dist/lib/spanBufferStats.js +1 -0
  168. package/dist/lib/spanContext.d.ts +141 -0
  169. package/dist/lib/spanContext.d.ts.map +1 -0
  170. package/dist/lib/spanContext.js +763 -0
  171. package/dist/lib/sqlite/index.d.ts +14 -0
  172. package/dist/lib/sqlite/index.d.ts.map +1 -0
  173. package/dist/lib/sqlite/index.js +12 -0
  174. package/dist/lib/sqlite/sqlite-async-writer.d.ts +24 -0
  175. package/dist/lib/sqlite/sqlite-async-writer.d.ts.map +1 -0
  176. package/dist/lib/sqlite/sqlite-async-writer.js +65 -0
  177. package/dist/lib/sqlite/sqlite-common.d.ts +37 -0
  178. package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -0
  179. package/dist/lib/sqlite/sqlite-common.js +207 -0
  180. package/dist/lib/sqlite/sqlite-d1.d.ts +25 -0
  181. package/dist/lib/sqlite/sqlite-d1.d.ts.map +1 -0
  182. package/dist/lib/sqlite/sqlite-d1.js +67 -0
  183. package/dist/lib/sqlite/sqlite-db.d.ts +29 -0
  184. package/dist/lib/sqlite/sqlite-db.d.ts.map +1 -0
  185. package/dist/lib/sqlite/sqlite-db.js +1 -0
  186. package/dist/lib/sqlite/sqlite-node.d.ts +16 -0
  187. package/dist/lib/sqlite/sqlite-node.d.ts.map +1 -0
  188. package/dist/lib/sqlite/sqlite-node.js +68 -0
  189. package/dist/lib/sqlite/sqlite-writer.d.ts +39 -0
  190. package/dist/lib/sqlite/sqlite-writer.d.ts.map +1 -0
  191. package/dist/lib/sqlite/sqlite-writer.js +78 -0
  192. package/dist/lib/testing/bun-harness.d.ts +150 -0
  193. package/dist/lib/testing/bun-harness.d.ts.map +1 -0
  194. package/dist/lib/testing/bun-harness.js +729 -0
  195. package/dist/lib/testing/extractFacts.d.ts +73 -0
  196. package/dist/lib/testing/extractFacts.d.ts.map +1 -0
  197. package/dist/lib/testing/extractFacts.js +237 -0
  198. package/dist/lib/testing/facts.d.ts +235 -0
  199. package/dist/lib/testing/facts.d.ts.map +1 -0
  200. package/dist/lib/testing/facts.js +209 -0
  201. package/dist/lib/testing/index.d.ts +58 -0
  202. package/dist/lib/testing/index.d.ts.map +1 -0
  203. package/dist/lib/testing/index.js +74 -0
  204. package/dist/lib/testing/queryable-span.d.ts +39 -0
  205. package/dist/lib/testing/queryable-span.d.ts.map +1 -0
  206. package/dist/lib/testing/queryable-span.js +58 -0
  207. package/dist/lib/testing/span-query.d.ts +21 -0
  208. package/dist/lib/testing/span-query.d.ts.map +1 -0
  209. package/dist/lib/testing/span-query.js +47 -0
  210. package/dist/lib/testing/stdio-replay.d.ts +4 -0
  211. package/dist/lib/testing/stdio-replay.d.ts.map +1 -0
  212. package/dist/lib/testing/stdio-replay.js +42 -0
  213. package/dist/lib/testing/trace-query.d.ts +59 -0
  214. package/dist/lib/testing/trace-query.d.ts.map +1 -0
  215. package/dist/lib/testing/trace-query.js +462 -0
  216. package/dist/lib/testing/vitest-harness.d.ts +135 -0
  217. package/dist/lib/testing/vitest-harness.d.ts.map +1 -0
  218. package/dist/lib/testing/vitest-harness.js +486 -0
  219. package/dist/lib/threadId.d.ts +58 -0
  220. package/dist/lib/threadId.d.ts.map +1 -0
  221. package/dist/lib/threadId.js +123 -0
  222. package/dist/lib/traceContext.d.ts +116 -0
  223. package/dist/lib/traceContext.d.ts.map +1 -0
  224. package/dist/lib/traceContext.js +37 -0
  225. package/dist/lib/traceId.d.ts +78 -0
  226. package/dist/lib/traceId.d.ts.map +1 -0
  227. package/dist/lib/traceId.js +87 -0
  228. package/dist/lib/traceRoot.d.ts +133 -0
  229. package/dist/lib/traceRoot.d.ts.map +1 -0
  230. package/dist/lib/traceRoot.es.d.ts +75 -0
  231. package/dist/lib/traceRoot.es.d.ts.map +1 -0
  232. package/dist/lib/traceRoot.es.js +129 -0
  233. package/dist/lib/traceRoot.js +19 -0
  234. package/dist/lib/traceRoot.node.d.ts +77 -0
  235. package/dist/lib/traceRoot.node.d.ts.map +1 -0
  236. package/dist/lib/traceRoot.node.js +133 -0
  237. package/dist/lib/traceRoot.universal.d.ts +3 -0
  238. package/dist/lib/traceRoot.universal.d.ts.map +1 -0
  239. package/dist/lib/traceRoot.universal.js +17 -0
  240. package/dist/lib/tracer.d.ts +296 -0
  241. package/dist/lib/tracer.d.ts.map +1 -0
  242. package/dist/lib/tracer.js +346 -0
  243. package/dist/lib/tracers/ArrayQueueTracer.d.ts +56 -0
  244. package/dist/lib/tracers/ArrayQueueTracer.d.ts.map +1 -0
  245. package/dist/lib/tracers/ArrayQueueTracer.js +67 -0
  246. package/dist/lib/tracers/CompositeTracer.d.ts +24 -0
  247. package/dist/lib/tracers/CompositeTracer.d.ts.map +1 -0
  248. package/dist/lib/tracers/CompositeTracer.js +57 -0
  249. package/dist/lib/tracers/NoOpTracer.d.ts +58 -0
  250. package/dist/lib/tracers/NoOpTracer.d.ts.map +1 -0
  251. package/dist/lib/tracers/NoOpTracer.js +41 -0
  252. package/dist/lib/tracers/SQLiteTracer.d.ts +42 -0
  253. package/dist/lib/tracers/SQLiteTracer.d.ts.map +1 -0
  254. package/dist/lib/tracers/SQLiteTracer.js +84 -0
  255. package/dist/lib/tracers/StdioTracer.d.ts +83 -0
  256. package/dist/lib/tracers/StdioTracer.d.ts.map +1 -0
  257. package/dist/lib/tracers/StdioTracer.js +270 -0
  258. package/dist/lib/tracers/TestTracer.d.ts +95 -0
  259. package/dist/lib/tracers/TestTracer.d.ts.map +1 -0
  260. package/dist/lib/tracers/TestTracer.js +87 -0
  261. package/dist/lib/tracers/index.d.ts +12 -0
  262. package/dist/lib/tracers/index.d.ts.map +1 -0
  263. package/dist/lib/tracers/index.js +11 -0
  264. package/dist/lib/types.d.ts +366 -0
  265. package/dist/lib/types.d.ts.map +1 -0
  266. package/dist/lib/types.js +1 -0
  267. package/dist/lib/utf8Cache.d.ts +111 -0
  268. package/dist/lib/utf8Cache.d.ts.map +1 -0
  269. package/dist/lib/utf8Cache.js +177 -0
  270. package/dist/lib/wasm/WasmBufferStrategy.d.ts +88 -0
  271. package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -0
  272. package/dist/lib/wasm/WasmBufferStrategy.js +138 -0
  273. package/dist/lib/wasm/wasmAllocator.d.ts +109 -0
  274. package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -0
  275. package/dist/lib/wasm/wasmAllocator.js +227 -0
  276. package/dist/lib/wasm/wasmSpanBuffer.d.ts +123 -0
  277. package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -0
  278. package/dist/lib/wasm/wasmSpanBuffer.js +772 -0
  279. package/dist/lib/wasm/wasmTraceRoot.d.ts +167 -0
  280. package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -0
  281. package/dist/lib/wasm/wasmTraceRoot.js +264 -0
  282. package/dist/node.d.ts +7 -0
  283. package/dist/node.d.ts.map +1 -0
  284. package/dist/node.js +8 -0
  285. package/dist/testing.d.ts +18 -0
  286. package/dist/testing.d.ts.map +1 -0
  287. package/dist/testing.js +17 -0
  288. package/package.json +193 -0
  289. package/src/bun/preload.ts +11 -0
  290. package/src/bun/trace-preload.ts +14 -0
  291. package/src/es.ts +11 -0
  292. package/src/index.ts +194 -0
  293. package/src/lib/JsBufferStrategy.ts +102 -0
  294. package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +485 -0
  295. package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +390 -0
  296. package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +647 -0
  297. package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +292 -0
  298. package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +354 -0
  299. package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +127 -0
  300. package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +392 -0
  301. package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +389 -0
  302. package/src/lib/__tests__/arrow-conversion-algorithms.test.ts +54 -0
  303. package/src/lib/__tests__/arrow-test-helpers.ts +71 -0
  304. package/src/lib/__tests__/binary-e2e.test.ts +203 -0
  305. package/src/lib/__tests__/buffer-overflow-op-api.test.ts +608 -0
  306. package/src/lib/__tests__/buffer-overflow.test.ts +612 -0
  307. package/src/lib/__tests__/capacity-tuning.test.ts +544 -0
  308. package/src/lib/__tests__/effective-schema.test.ts +439 -0
  309. package/src/lib/__tests__/flechette.test.ts +42 -0
  310. package/src/lib/__tests__/flushScheduler.test.ts +537 -0
  311. package/src/lib/__tests__/integration.test.ts +600 -0
  312. package/src/lib/__tests__/library.test.ts +934 -0
  313. package/src/lib/__tests__/nested-library-tasks.test.ts +849 -0
  314. package/src/lib/__tests__/op-context-binding.test.ts +135 -0
  315. package/src/lib/__tests__/op-metadata.test.ts +198 -0
  316. package/src/lib/__tests__/op-type-safety.test.ts +71 -0
  317. package/src/lib/__tests__/package-exports.test.ts +57 -0
  318. package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +319 -0
  319. package/src/lib/__tests__/remapped-buffer-view.test.ts +635 -0
  320. package/src/lib/__tests__/scope-attributes.test.ts +348 -0
  321. package/src/lib/__tests__/span-lifecycle.test.ts +680 -0
  322. package/src/lib/__tests__/sync-async-trace.test.ts +435 -0
  323. package/src/lib/__tests__/test-helpers.ts +318 -0
  324. package/src/lib/__tests__/timestamp.test.ts +259 -0
  325. package/src/lib/__tests__/trace-archive-primitives.test.ts +98 -0
  326. package/src/lib/__tests__/traceContext-type-enforcement.test.ts +271 -0
  327. package/src/lib/__tests__/tracer.test.ts +211 -0
  328. package/src/lib/__tests__/type-narrowing.test.ts +137 -0
  329. package/src/lib/archive/chunkCompaction.ts +44 -0
  330. package/src/lib/archive/chunkEnvelope.ts +79 -0
  331. package/src/lib/archive/chunkRouting.ts +70 -0
  332. package/src/lib/archive/chunkStats.ts +25 -0
  333. package/src/lib/archive/index.ts +4 -0
  334. package/src/lib/arrow/capacityStats.ts +340 -0
  335. package/src/lib/arrow/dictionaries.ts +159 -0
  336. package/src/lib/arrow/flechette.ts +114 -0
  337. package/src/lib/arrow/utils.ts +126 -0
  338. package/src/lib/buffer/Nanoseconds.ts +131 -0
  339. package/src/lib/bufferStrategy.ts +106 -0
  340. package/src/lib/capacityTuning.ts +102 -0
  341. package/src/lib/codegen/__tests__/__snapshots__/evaluatorGenerator.test.ts.snap +160 -0
  342. package/src/lib/codegen/__tests__/__snapshots__/scopeGenerator.test.ts.snap +196 -0
  343. package/src/lib/codegen/__tests__/__snapshots__/spanLoggerGenerator.test.ts.snap +1965 -0
  344. package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +516 -0
  345. package/src/lib/codegen/__tests__/nullBitmap.test.ts +207 -0
  346. package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +237 -0
  347. package/src/lib/codegen/evaluatorGenerator.ts +309 -0
  348. package/src/lib/codegen/fixedPositionWriterGenerator.ts +444 -0
  349. package/src/lib/codegen/spanLoggerGenerator.ts +715 -0
  350. package/src/lib/convertToArrow.ts +1805 -0
  351. package/src/lib/defineOpContext.ts +398 -0
  352. package/src/lib/errors/Blocked.ts +165 -0
  353. package/src/lib/errors/CodeError.ts +132 -0
  354. package/src/lib/errors/RetriesExhausted.ts +78 -0
  355. package/src/lib/errors/Transient.ts +168 -0
  356. package/src/lib/errors/__tests__/Blocked-config.test.ts +152 -0
  357. package/src/lib/errors/__tests__/Transient.test.ts +129 -0
  358. package/src/lib/errors/__tests__/retry-policy.test.ts +85 -0
  359. package/src/lib/errors/index.ts +24 -0
  360. package/src/lib/errors/retry-policy.ts +87 -0
  361. package/src/lib/flushScheduler.ts +509 -0
  362. package/src/lib/library.ts +682 -0
  363. package/src/lib/logApi.ts +70 -0
  364. package/src/lib/logBinding.ts +67 -0
  365. package/src/lib/op.ts +103 -0
  366. package/src/lib/opContext/__tests__/retry.test.ts +764 -0
  367. package/src/lib/opContext/contextTypes.ts +130 -0
  368. package/src/lib/opContext/createOpGroup.ts +456 -0
  369. package/src/lib/opContext/defineOp.ts +281 -0
  370. package/src/lib/opContext/featureFlagTypes.ts +54 -0
  371. package/src/lib/opContext/index.ts +16 -0
  372. package/src/lib/opContext/opGroupTypes.ts +342 -0
  373. package/src/lib/opContext/opTypes.ts +80 -0
  374. package/src/lib/opContext/spanContextTypes.ts +398 -0
  375. package/src/lib/opContext/types.ts +403 -0
  376. package/src/lib/result.ts +550 -0
  377. package/src/lib/schema/LogSchema.ts +153 -0
  378. package/src/lib/schema/__tests__/defineLogSchema.test.ts +342 -0
  379. package/src/lib/schema/__tests__/featureFlags.test.ts +443 -0
  380. package/src/lib/schema/builder.ts +201 -0
  381. package/src/lib/schema/defineFeatureFlags.ts +91 -0
  382. package/src/lib/schema/defineLogSchema.ts +291 -0
  383. package/src/lib/schema/evaluator.ts +404 -0
  384. package/src/lib/schema/extend.ts +69 -0
  385. package/src/lib/schema/systemSchema.ts +339 -0
  386. package/src/lib/schema/typeGuards.ts +163 -0
  387. package/src/lib/schema/types.ts +265 -0
  388. package/src/lib/spanBuffer.ts +571 -0
  389. package/src/lib/spanBufferHelpers.ts +73 -0
  390. package/src/lib/spanBufferStats.ts +40 -0
  391. package/src/lib/spanContext.ts +1566 -0
  392. package/src/lib/sqlite/__tests__/sqlite-common.test.ts +89 -0
  393. package/src/lib/sqlite/index.ts +26 -0
  394. package/src/lib/sqlite/sqlite-async-writer.ts +101 -0
  395. package/src/lib/sqlite/sqlite-common.ts +309 -0
  396. package/src/lib/sqlite/sqlite-d1.ts +104 -0
  397. package/src/lib/sqlite/sqlite-db.ts +32 -0
  398. package/src/lib/sqlite/sqlite-node.ts +83 -0
  399. package/src/lib/sqlite/sqlite-writer.ts +128 -0
  400. package/src/lib/testing/TRACE-TESTING.md +100 -0
  401. package/src/lib/testing/__tests__/bun-harness.test.ts +108 -0
  402. package/src/lib/testing/__tests__/extractFacts.test.ts +279 -0
  403. package/src/lib/testing/__tests__/facts.test.ts +324 -0
  404. package/src/lib/testing/__tests__/vitest-harness.test.ts +32 -0
  405. package/src/lib/testing/bun-harness.ts +990 -0
  406. package/src/lib/testing/extractFacts.ts +362 -0
  407. package/src/lib/testing/facts.ts +470 -0
  408. package/src/lib/testing/index.ts +141 -0
  409. package/src/lib/testing/queryable-span.ts +108 -0
  410. package/src/lib/testing/span-query.ts +65 -0
  411. package/src/lib/testing/stdio-replay.ts +50 -0
  412. package/src/lib/testing/trace-query.ts +329 -0
  413. package/src/lib/testing/vitest-harness.ts +691 -0
  414. package/src/lib/threadId.ts +135 -0
  415. package/src/lib/traceContext.ts +182 -0
  416. package/src/lib/traceId.ts +142 -0
  417. package/src/lib/traceRoot.es.ts +157 -0
  418. package/src/lib/traceRoot.node.ts +170 -0
  419. package/src/lib/traceRoot.ts +154 -0
  420. package/src/lib/traceRoot.universal.ts +22 -0
  421. package/src/lib/tracer.ts +896 -0
  422. package/src/lib/tracers/ArrayQueueTracer.ts +76 -0
  423. package/src/lib/tracers/CompositeTracer.ts +76 -0
  424. package/src/lib/tracers/NoOpTracer.ts +73 -0
  425. package/src/lib/tracers/SQLiteTracer.ts +115 -0
  426. package/src/lib/tracers/StdioTracer.ts +380 -0
  427. package/src/lib/tracers/TestTracer.ts +146 -0
  428. package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +184 -0
  429. package/src/lib/tracers/__tests__/NoOpTracer.test.ts +204 -0
  430. package/src/lib/tracers/__tests__/StdioTracer.test.ts +313 -0
  431. package/src/lib/tracers/__tests__/TestTracer.test.ts +200 -0
  432. package/src/lib/tracers/index.ts +12 -0
  433. package/src/lib/types.ts +498 -0
  434. package/src/lib/utf8Cache.ts +201 -0
  435. package/src/lib/wasm/WasmBufferStrategy.ts +219 -0
  436. package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +256 -0
  437. package/src/lib/wasm/__tests__/wasm-integration.test.ts +476 -0
  438. package/src/lib/wasm/__tests__/wasmAllocator.test.ts +699 -0
  439. package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +449 -0
  440. package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +390 -0
  441. package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +444 -0
  442. package/src/lib/wasm/allocator.zig +945 -0
  443. package/src/lib/wasm/wasmAllocator.ts +469 -0
  444. package/src/lib/wasm/wasmSpanBuffer.ts +1014 -0
  445. package/src/lib/wasm/wasmTraceRoot.ts +315 -0
  446. package/src/node.ts +10 -0
  447. package/src/testing.ts +18 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Retries exhausted error - returned when a Blocked error has exceeded max attempts.
3
+ *
4
+ * When an Op repeatedly returns `Blocked` and the retry config's `maxAttempts`
5
+ * is exhausted, the retry layer converts the final failure to `RetriesExhausted`.
6
+ *
7
+ * Unlike `Blocked`, this represents a permanent failure that callers must handle
8
+ * (e.g., compensate, alert, escalate, return error to caller).
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { defineOpContext, S, Err } from '@smoothbricks/lmao';
13
+ * import { Blocked } from '@smoothbricks/lmao/errors/Blocked';
14
+ * import { RetriesExhausted } from '@smoothbricks/lmao/errors/RetriesExhausted';
15
+ *
16
+ * const { defineOp } = defineOpContext({
17
+ * logSchema: { service: S.category() },
18
+ * ctx: { env: null as Env },
19
+ * });
20
+ *
21
+ * // Op that may be blocked by external service
22
+ * const callPaymentApi = defineOp('callPaymentApi', async (ctx, amount: number) => {
23
+ * const health = await checkHealth('payment-api');
24
+ * if (!health.available) {
25
+ * return new Err(Blocked.service('payment-api'));
26
+ * }
27
+ * const result = await ctx.deps.http.post('/pay', { amount });
28
+ * return ctx.ok(result);
29
+ * });
30
+ *
31
+ * // Caller handles permanent failure after retries exhausted
32
+ * const result = await trace('checkout', checkoutOp);
33
+ * if (result.isErr(RetriesExhausted)) {
34
+ * ctx.log.error(`Payment failed after ${result.error.attempts} attempts`);
35
+ * return ctx.err('PAYMENT_UNAVAILABLE', { service: result.error.reason });
36
+ * }
37
+ * ```
38
+ */
39
+ import type { TaggedError } from '../result.js';
40
+ import { type BlockedReason } from './Blocked.js';
41
+ type RetriesExhaustedView = {
42
+ _tag: 'RetriesExhausted';
43
+ reason: BlockedReason;
44
+ attempts: number;
45
+ maxAttempts: number;
46
+ };
47
+ export declare class RetriesExhausted extends Error implements TaggedError<'RetriesExhausted'> {
48
+ /** The original blocked reason */
49
+ readonly reason: BlockedReason;
50
+ /** How many attempts were made */
51
+ readonly attempts: number;
52
+ /** Max attempts that was configured (the limit that was hit) */
53
+ readonly maxAttempts: number;
54
+ static readonly _tag: "RetriesExhausted";
55
+ get _tag(): 'RetriesExhausted';
56
+ constructor(
57
+ /** The original blocked reason */
58
+ reason: BlockedReason,
59
+ /** How many attempts were made */
60
+ attempts: number,
61
+ /** Max attempts that was configured (the limit that was hit) */
62
+ maxAttempts: number);
63
+ /** Clean output for JSON.stringify */
64
+ toJSON(): RetriesExhaustedView;
65
+ }
66
+ export {};
67
+ //# sourceMappingURL=RetriesExhausted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetriesExhausted.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/RetriesExhausted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,cAAc,CAAC;AAExE,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,KAAM,YAAW,WAAW,CAAC,kBAAkB,CAAC;IAQlF,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM;IAZ9B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,kBAAkB,CAAU;IAEnD,IAAI,IAAI,IAAI,kBAAkB,CAE7B;;IAGC,kCAAkC;IACzB,MAAM,EAAE,aAAa;IAC9B,kCAAkC;IACzB,QAAQ,EAAE,MAAM;IACzB,gEAAgE;IACvD,WAAW,EAAE,MAAM;IAW9B,sCAAsC;IACtC,MAAM,IAAI,oBAAoB;CAG/B"}
@@ -0,0 +1,31 @@
1
+ import { getBlockedReasonName } from './Blocked.js';
2
+ export class RetriesExhausted extends Error {
3
+ reason;
4
+ attempts;
5
+ maxAttempts;
6
+ static _tag = 'RetriesExhausted';
7
+ get _tag() {
8
+ return 'RetriesExhausted';
9
+ }
10
+ constructor(
11
+ /** The original blocked reason */
12
+ reason,
13
+ /** How many attempts were made */
14
+ attempts,
15
+ /** Max attempts that was configured (the limit that was hit) */
16
+ maxAttempts) {
17
+ super(`RetriesExhausted: ${getBlockedReasonName(reason)} after ${attempts} attempts`);
18
+ this.reason = reason;
19
+ this.attempts = attempts;
20
+ this.maxAttempts = maxAttempts;
21
+ this.name = 'RetriesExhausted';
22
+ }
23
+ /** Clean output for console.log in Node.js */
24
+ [Symbol.for('nodejs.util.inspect.custom')]() {
25
+ return { _tag: this._tag, reason: this.reason, attempts: this.attempts, maxAttempts: this.maxAttempts };
26
+ }
27
+ /** Clean output for JSON.stringify */
28
+ toJSON() {
29
+ return { _tag: this._tag, reason: this.reason, attempts: this.attempts, maxAttempts: this.maxAttempts };
30
+ }
31
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * TransientError - typed transient error codes with embedded retry policy.
3
+ *
4
+ * Use the `Transient()` factory to define transient error codes WITH default retry policy.
5
+ * Op class checks `instanceof TransientError` and reads `error.policy` for retry config.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { Transient, exponentialBackoff, fixedDelay } from '@smoothbricks/lmao/errors/Transient';
10
+ *
11
+ * // Define error with default exponential backoff (5 attempts)
12
+ * const SERVICE_UNAVAILABLE = Transient<{ service: string }>('SERVICE_UNAVAILABLE', exponentialBackoff(5));
13
+ *
14
+ * // Define error with fixed delay for rate limiting
15
+ * const RATE_LIMITED = Transient<{ retryAfter?: number }>('RATE_LIMITED', fixedDelay(3, 5000));
16
+ *
17
+ * // Usage - data only, uses default policy
18
+ * ctx.err(SERVICE_UNAVAILABLE({ service: 'api' }));
19
+ *
20
+ * // Override policy for this specific call (e.g., use Retry-After header)
21
+ * ctx.err(RATE_LIMITED({ retryAfter: 60000 }, fixedDelay(1, 60000)));
22
+ *
23
+ * // Op class detects transient and reads policy
24
+ * if (result.error instanceof TransientError) {
25
+ * const { maxAttempts, backoff, baseDelayMs } = result.error.policy;
26
+ * // Execute retry loop based on policy
27
+ * }
28
+ * ```
29
+ */
30
+ import type { TaggedErrorConstructor } from '../result.js';
31
+ import { CodeError } from './CodeError.js';
32
+ import { type RetryPolicy } from './retry-policy.js';
33
+ /**
34
+ * Transient error instance - triggers retry in Op class.
35
+ *
36
+ * Extends CodeError to inherit code/data pattern while adding:
37
+ * - `instanceof TransientError` checks for retry classification
38
+ * - `policy` field carrying merged retry configuration
39
+ *
40
+ * @typeParam C - The error code string literal type (also serves as _tag)
41
+ * @typeParam D - The data payload type
42
+ */
43
+ export declare class TransientError<C extends string, D = void> extends CodeError<C, D> {
44
+ /**
45
+ * Merged retry policy (defaultPolicy + per-call override).
46
+ * Op class reads this to configure retry loop.
47
+ */
48
+ readonly policy: RetryPolicy;
49
+ constructor(code: C, data: D, policy: RetryPolicy);
50
+ toJSON(): {
51
+ policy: RetryPolicy;
52
+ code: C;
53
+ data: D;
54
+ };
55
+ }
56
+ /**
57
+ * Constructor function for a specific transient error code.
58
+ * Has static `_tag` for isErr() and `defaultPolicy` for introspection.
59
+ */
60
+ export interface TransientConstructor<C extends string, D = void> extends TaggedErrorConstructor<TransientError<C, D>> {
61
+ /** Create transient error with data and optional policy override */
62
+ (data: D, policyOverride?: Partial<RetryPolicy>): TransientError<C, D>;
63
+ /** Error code (same as _tag) */
64
+ readonly _tag: C;
65
+ /** Default retry policy for this error type */
66
+ readonly defaultPolicy: RetryPolicy;
67
+ }
68
+ /**
69
+ * Constructor function for transient error codes with no data.
70
+ */
71
+ export interface TransientConstructorVoid<C extends string> extends TaggedErrorConstructor<TransientError<C, void>> {
72
+ /** Create transient error with optional policy override */
73
+ (policyOverride?: Partial<RetryPolicy>): TransientError<C, void>;
74
+ /** Error code (same as _tag) */
75
+ readonly _tag: C;
76
+ /** Default retry policy for this error type */
77
+ readonly defaultPolicy: RetryPolicy;
78
+ }
79
+ type TransientFactoryReturn<C extends string, D> = [unknown] extends [D] ? TransientConstructor<C, D> : undefined extends D ? TransientConstructorVoid<C> : TransientConstructor<C, D>;
80
+ /**
81
+ * Define a typed transient error code with default retry policy.
82
+ *
83
+ * Creates errors that extend TransientError, enabling:
84
+ * - `instanceof TransientError` for retry triggering
85
+ * - `result.isErr(CODE)` for specific code discrimination
86
+ * - `error.policy` for retry configuration
87
+ *
88
+ * @param code - The error code string (becomes _tag for discrimination)
89
+ * @param defaultPolicy - Default retry policy for this error type
90
+ * @returns A constructor function that creates TransientError instances
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * // With typed data and exponential backoff
95
+ * const NETWORK_ERROR = Transient<{ service: string }>('NETWORK_ERROR', exponentialBackoff(5));
96
+ * ctx.err(NETWORK_ERROR({ service: 'payment-api' }));
97
+ *
98
+ * // Without data, linear backoff
99
+ * const TIMEOUT = Transient('TIMEOUT', linearBackoff(3));
100
+ * ctx.err(TIMEOUT());
101
+ *
102
+ * // Override policy per-call
103
+ * ctx.err(NETWORK_ERROR({ service: 'api' }, fixedDelay(1, 30000)));
104
+ *
105
+ * // Op class handles retry
106
+ * if (result.error instanceof TransientError) {
107
+ * const { policy } = result.error;
108
+ * // Retry loop using policy.maxAttempts, policy.backoff, etc.
109
+ * }
110
+ * ```
111
+ */
112
+ export declare function Transient<C extends string>(code: C, defaultPolicy: RetryPolicy): TransientConstructorVoid<C>;
113
+ export declare function Transient<D, C extends string = string>(code: C, defaultPolicy: RetryPolicy): TransientFactoryReturn<C, D>;
114
+ export { exponentialBackoff, fixedDelay, linearBackoff, mergePolicy, type RetryPolicy } from './retry-policy.js';
115
+ //# sourceMappingURL=Transient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transient.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/Transient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;;GASG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;gBAEjB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW;IAMxC,MAAM;;;;;CAMhB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAAE,SAAQ,sBAAsB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpH,oEAAoE;IACpE,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,sBAAsB,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjH,2DAA2D;IAC3D,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACjE,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;CACrC;AAED,KAAK,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GACpE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC1B,SAAS,SAAS,CAAC,GACjB,wBAAwB,CAAC,CAAC,CAAC,GAC3B,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,WAAW,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAC9G,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EACpD,IAAI,EAAE,CAAC,EACP,aAAa,EAAE,WAAW,GACzB,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAmChC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { CodeError } from './CodeError.js';
2
+ import { mergePolicy } from './retry-policy.js';
3
+ /**
4
+ * Transient error instance - triggers retry in Op class.
5
+ *
6
+ * Extends CodeError to inherit code/data pattern while adding:
7
+ * - `instanceof TransientError` checks for retry classification
8
+ * - `policy` field carrying merged retry configuration
9
+ *
10
+ * @typeParam C - The error code string literal type (also serves as _tag)
11
+ * @typeParam D - The data payload type
12
+ */
13
+ export class TransientError extends CodeError {
14
+ /**
15
+ * Merged retry policy (defaultPolicy + per-call override).
16
+ * Op class reads this to configure retry loop.
17
+ */
18
+ policy;
19
+ constructor(code, data, policy) {
20
+ super(code, data);
21
+ this.name = 'TransientError';
22
+ this.policy = policy;
23
+ }
24
+ toJSON() {
25
+ return {
26
+ ...super.toJSON(),
27
+ policy: this.policy,
28
+ };
29
+ }
30
+ }
31
+ export function Transient(code, defaultPolicy) {
32
+ function createTransientError(dataOrOverride, maybeOverride) {
33
+ const override = maybeOverride !== undefined ? maybeOverride : isRetryPolicyLike(dataOrOverride) ? dataOrOverride : undefined;
34
+ const data = maybeOverride !== undefined || override !== undefined ? undefined : dataOrOverride;
35
+ const mergedPolicy = mergePolicy(defaultPolicy, override);
36
+ return new TransientError(code, data, mergedPolicy);
37
+ }
38
+ return Object.assign(createTransientError, {
39
+ _tag: code,
40
+ defaultPolicy,
41
+ });
42
+ }
43
+ /**
44
+ * Type guard to check if value looks like a RetryPolicy (partial).
45
+ * Used to disambiguate void data + override from actual data.
46
+ */
47
+ function isRetryPolicyLike(value) {
48
+ if (typeof value !== 'object' || value === null)
49
+ return false;
50
+ // Check for RetryPolicy-specific keys — `in` accepts `object`, no cast needed
51
+ return ('backoff' in value || 'maxAttempts' in value || 'baseDelayMs' in value || 'maxDelayMs' in value || 'jitter' in value);
52
+ }
53
+ // Re-export policy helpers for convenience
54
+ export { exponentialBackoff, fixedDelay, linearBackoff, mergePolicy } from './retry-policy.js';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Error types and utilities for LMAO.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Code, CodeError, Transient, TransientError, Blocked, exponentialBackoff } from '@smoothbricks/lmao/errors';
7
+ * ```
8
+ */
9
+ export * from './Blocked.js';
10
+ export * from './CodeError.js';
11
+ export * from './RetriesExhausted.js';
12
+ export { exponentialBackoff, fixedDelay, linearBackoff, mergePolicy, type RetryPolicy as TransientRetryPolicy, } from './retry-policy.js';
13
+ export { Transient, type TransientConstructor, type TransientConstructorVoid, TransientError } from './Transient.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,cAAc,CAAC;AAE7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AAItC,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,WAAW,EACX,KAAK,WAAW,IAAI,oBAAoB,GACzC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,KAAK,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Error types and utilities for LMAO.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { Code, CodeError, Transient, TransientError, Blocked, exponentialBackoff } from '@smoothbricks/lmao/errors';
7
+ * ```
8
+ */
9
+ export * from './Blocked.js';
10
+ // Existing exports
11
+ export * from './CodeError.js';
12
+ export * from './RetriesExhausted.js';
13
+ // Phase 19 exports - TransientError uses RetryPolicy from retry-policy.ts
14
+ // Export with different name to avoid conflict with other retry configs
15
+ export { exponentialBackoff, fixedDelay, linearBackoff, mergePolicy, } from './retry-policy.js';
16
+ export { Transient, TransientError } from './Transient.js';
@@ -0,0 +1,60 @@
1
+ /**
2
+ * RetryPolicy - configures retry behavior for transient failures.
3
+ *
4
+ * Carried by TransientError instances. Op class (in LMAO) reads policy
5
+ * from transient errors to handle retry loop.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Define error with default policy
10
+ * const RATE_LIMITED = Transient<{ retryAfter?: number }>('RATE_LIMITED', exponentialBackoff(5));
11
+ *
12
+ * // Usage with default policy
13
+ * ctx.err(RATE_LIMITED({ retryAfter: 60000 }));
14
+ *
15
+ * // Override policy for this call
16
+ * ctx.err(RATE_LIMITED({ retryAfter: 60000 }, fixedDelay(1, 60000)));
17
+ * ```
18
+ */
19
+ export interface RetryPolicy {
20
+ /** Backoff strategy */
21
+ backoff: 'exponential' | 'linear' | 'fixed';
22
+ /** Maximum retry attempts (including initial attempt) */
23
+ maxAttempts: number;
24
+ /** Base delay in milliseconds */
25
+ baseDelayMs: number;
26
+ /** Maximum delay cap in milliseconds (optional, defaults to 30000) */
27
+ maxDelayMs?: number;
28
+ /** Add randomness to delay (default: true) */
29
+ jitter?: boolean;
30
+ }
31
+ /**
32
+ * Create linear backoff policy.
33
+ * Delay increases linearly: baseDelay * attempt
34
+ *
35
+ * @example linearBackoff(3) → 100ms, 200ms, 300ms
36
+ * @example linearBackoff(5, 200) → 200ms, 400ms, 600ms, 800ms, 1000ms
37
+ */
38
+ export declare function linearBackoff(maxAttempts: number, baseDelayMs?: number): RetryPolicy;
39
+ /**
40
+ * Create exponential backoff policy.
41
+ * Delay doubles each attempt: baseDelay * 2^(attempt-1)
42
+ *
43
+ * @example exponentialBackoff(3) → 100ms, 200ms, 400ms
44
+ * @example exponentialBackoff(5, 50) → 50ms, 100ms, 200ms, 400ms, 800ms
45
+ */
46
+ export declare function exponentialBackoff(maxAttempts: number, baseDelayMs?: number): RetryPolicy;
47
+ /**
48
+ * Create fixed delay policy.
49
+ * Same delay between each attempt.
50
+ *
51
+ * @example fixedDelay(3, 1000) → 1000ms, 1000ms, 1000ms
52
+ * @example fixedDelay(1, 60000) → single retry after 60s (for rate limit Retry-After)
53
+ */
54
+ export declare function fixedDelay(maxAttempts: number, delayMs?: number): RetryPolicy;
55
+ /**
56
+ * Merge base policy with override.
57
+ * Override fields take precedence.
58
+ */
59
+ export declare function mergePolicy(base: RetryPolicy, override?: Partial<RetryPolicy>): RetryPolicy;
60
+ //# sourceMappingURL=retry-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/retry-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,OAAO,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5C,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,SAAM,GAAG,WAAW,CAOjF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,SAAM,GAAG,WAAW,CAOtF;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,WAAW,CAO3E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAG3F"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Create linear backoff policy.
3
+ * Delay increases linearly: baseDelay * attempt
4
+ *
5
+ * @example linearBackoff(3) → 100ms, 200ms, 300ms
6
+ * @example linearBackoff(5, 200) → 200ms, 400ms, 600ms, 800ms, 1000ms
7
+ */
8
+ export function linearBackoff(maxAttempts, baseDelayMs = 100) {
9
+ return {
10
+ backoff: 'linear',
11
+ maxAttempts,
12
+ baseDelayMs,
13
+ jitter: true,
14
+ };
15
+ }
16
+ /**
17
+ * Create exponential backoff policy.
18
+ * Delay doubles each attempt: baseDelay * 2^(attempt-1)
19
+ *
20
+ * @example exponentialBackoff(3) → 100ms, 200ms, 400ms
21
+ * @example exponentialBackoff(5, 50) → 50ms, 100ms, 200ms, 400ms, 800ms
22
+ */
23
+ export function exponentialBackoff(maxAttempts, baseDelayMs = 100) {
24
+ return {
25
+ backoff: 'exponential',
26
+ maxAttempts,
27
+ baseDelayMs,
28
+ jitter: true,
29
+ };
30
+ }
31
+ /**
32
+ * Create fixed delay policy.
33
+ * Same delay between each attempt.
34
+ *
35
+ * @example fixedDelay(3, 1000) → 1000ms, 1000ms, 1000ms
36
+ * @example fixedDelay(1, 60000) → single retry after 60s (for rate limit Retry-After)
37
+ */
38
+ export function fixedDelay(maxAttempts, delayMs = 1000) {
39
+ return {
40
+ backoff: 'fixed',
41
+ maxAttempts,
42
+ baseDelayMs: delayMs,
43
+ jitter: false, // Fixed delay typically doesn't want jitter
44
+ };
45
+ }
46
+ /**
47
+ * Merge base policy with override.
48
+ * Override fields take precedence.
49
+ */
50
+ export function mergePolicy(base, override) {
51
+ if (!override)
52
+ return base;
53
+ return { ...base, ...override };
54
+ }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Background flush scheduler with adaptive flushing
3
+ *
4
+ * Per specs/lmao/01b2_buffer_self_tuning.md:
5
+ * - Adaptive flush intervals based on capacity, time, memory pressure
6
+ * - Idle detection for opportunistic flushing
7
+ * - Background processing (cold path)
8
+ */
9
+ import { type Table } from '@uwdata/flechette';
10
+ import type { AnySpanBuffer } from './types.js';
11
+ /**
12
+ * Flush handler function type
13
+ * Called when buffers are ready to be flushed
14
+ */
15
+ export type FlushHandler = (table: Table, metadata: FlushMetadata) => Promise<void> | void;
16
+ /**
17
+ * Metadata about the flush operation
18
+ */
19
+ export interface FlushMetadata {
20
+ totalRows: number;
21
+ totalBuffers: number;
22
+ flushReason: 'capacity' | 'time' | 'memory' | 'idle' | 'manual';
23
+ timestamp: number;
24
+ }
25
+ /**
26
+ * Flush scheduler configuration
27
+ */
28
+ export interface FlushSchedulerConfig {
29
+ /**
30
+ * Maximum time between flushes (milliseconds)
31
+ * Default: 10000 (10 seconds)
32
+ */
33
+ maxFlushInterval?: number;
34
+ /**
35
+ * Minimum time between flushes (milliseconds)
36
+ * Default: 1000 (1 second)
37
+ */
38
+ minFlushInterval?: number;
39
+ /**
40
+ * Capacity threshold for automatic flush (0.0 - 1.0)
41
+ * Flush when buffer is X% full
42
+ * Default: 0.8 (80%)
43
+ */
44
+ capacityThreshold?: number;
45
+ /**
46
+ * Enable idle detection for opportunistic flushing
47
+ * Default: true
48
+ */
49
+ idleDetection?: boolean;
50
+ /**
51
+ * Idle timeout (milliseconds) - flush if no activity for this duration
52
+ * Default: 5000 (5 seconds)
53
+ */
54
+ idleTimeout?: number;
55
+ /**
56
+ * Enable memory pressure detection
57
+ * Default: true (Node.js only)
58
+ */
59
+ memoryPressureDetection?: boolean;
60
+ /**
61
+ * Memory pressure threshold (bytes)
62
+ * Flush when available memory drops below this
63
+ * Default: 100MB
64
+ */
65
+ memoryPressureThreshold?: number;
66
+ }
67
+ /**
68
+ * Background flush scheduler
69
+ * Manages automatic flushing of span buffers to Arrow tables
70
+ */
71
+ export declare class FlushScheduler {
72
+ private config;
73
+ private handler;
74
+ private buffers;
75
+ private lastFlushTime;
76
+ private lastActivityTime;
77
+ private flushTimer?;
78
+ private idleTimer?;
79
+ private memoryTimer?;
80
+ private isRunning;
81
+ /** Flush counter for periodic capacity stats logging */
82
+ private _flushCount;
83
+ /**
84
+ * Track unique (SpanBufferConstructor, OpMetadata) pairs that have been flushed since last capacity stats log.
85
+ * We use SpanBufferConstructor as the key (for dedup) and store the OpMetadata for building PreEncodedEntry at conversion time.
86
+ * The constructor has static stats property with the capacity stats we need.
87
+ */
88
+ private _bufferClassesSinceLastStatsLog;
89
+ constructor(handler: FlushHandler, config?: FlushSchedulerConfig);
90
+ /**
91
+ * Register a buffer for automatic flushing
92
+ */
93
+ register(buffer: AnySpanBuffer): void;
94
+ /**
95
+ * Start the flush scheduler
96
+ */
97
+ start(): void;
98
+ /**
99
+ * Stop the flush scheduler
100
+ */
101
+ stop(): void;
102
+ /**
103
+ * Manually trigger a flush
104
+ */
105
+ flush(): Promise<void>;
106
+ /**
107
+ * Check flush conditions and flush if needed
108
+ */
109
+ private checkFlushConditions;
110
+ /**
111
+ * Check if should flush based on capacity
112
+ */
113
+ private shouldFlushByCapacity;
114
+ /**
115
+ * Check idle state and flush if idle
116
+ */
117
+ private checkIdleFlush;
118
+ /**
119
+ * Check memory pressure and flush if needed
120
+ * Node.js only
121
+ */
122
+ private checkMemoryPressure;
123
+ /**
124
+ * Perform the actual flush operation
125
+ */
126
+ private doFlush;
127
+ /**
128
+ * Record activity (called when buffers are written to)
129
+ */
130
+ recordActivity(): void;
131
+ }
132
+ /**
133
+ * Get or create global flush scheduler
134
+ */
135
+ export declare function getGlobalFlushScheduler(handler: FlushHandler, config?: FlushSchedulerConfig): FlushScheduler;
136
+ /**
137
+ * Reset global flush scheduler (for testing)
138
+ */
139
+ export declare function resetGlobalFlushScheduler(): void;
140
+ /**
141
+ * Test utilities for accessing FlushScheduler internals
142
+ * @internal
143
+ */
144
+ export declare const FlushSchedulerTestUtils: {
145
+ /**
146
+ * Get the flush timer for a scheduler instance (for testing)
147
+ */
148
+ getFlushTimer(scheduler: FlushScheduler): NodeJS.Timeout | undefined;
149
+ /**
150
+ * Set the flush timer for a scheduler instance (for testing)
151
+ */
152
+ setFlushTimer(scheduler: FlushScheduler, timer: NodeJS.Timeout | undefined): void;
153
+ /**
154
+ * Get the last activity time for a scheduler instance (for testing)
155
+ */
156
+ getLastActivityTime(scheduler: FlushScheduler): number | undefined;
157
+ /**
158
+ * Set the last activity time for a scheduler instance (for testing)
159
+ */
160
+ setLastActivityTime(scheduler: FlushScheduler, time: number | null | undefined): void;
161
+ };
162
+ //# sourceMappingURL=flushScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flushScheduler.d.ts","sourceRoot":"","sources":["../../src/lib/flushScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAU,KAAK,KAAK,EAAoB,MAAM,mBAAmB,CAAC;AAIzE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAiC5D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,SAAS,CAAS;IAE1B,wDAAwD;IACxD,OAAO,CAAC,WAAW,CAAK;IAExB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B,CAAgD;gBAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,GAAE,oBAAyB;IAepE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAUrC;;OAEG;IACH,KAAK,IAAI,IAAI;IA2Bb;;OAEG;IACH,IAAI,IAAI,IAAI;IAqBZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;YACW,OAAO;IA+IrB;;OAEG;IACH,cAAc,IAAI,IAAI;CAGvB;AAQD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAK5G;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB;IAClC;;OAEG;6BACsB,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,SAAS;IAKpE;;OAEG;6BACsB,cAAc,SAAS,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI;IAIjF;;OAEG;mCAC4B,cAAc,GAAG,MAAM,GAAG,SAAS;IAKlE;;OAEG;mCAC4B,cAAc,QAAQ,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;CAGtF,CAAC"}