@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,135 @@
1
+ /**
2
+ * Op._opContextBinding Tests
3
+ *
4
+ * Tests that the full context wiring pipeline works:
5
+ * - defineOpContext().defineOp() produces Ops with _opContextBinding set
6
+ * - The binding's logBinding.logSchema.fields contains the schema fields
7
+ * - .prefix() on an OpGroup preserves _opContextBinding on resulting Ops
8
+ * - .mapColumns() preserves _opContextBinding
9
+ * - Two Ops from the same defineOpContext share the same binding reference (identity dedup)
10
+ */
11
+
12
+ import { describe, expect, it } from 'bun:test';
13
+ import { defineOpContext } from '../defineOpContext.js';
14
+ import { Op } from '../op.js';
15
+ import type { OpContextBinding } from '../opContext/types.js';
16
+ import { S } from '../schema/builder.js';
17
+ import { defineLogSchema } from '../schema/defineLogSchema.js';
18
+
19
+ const testSchema = defineLogSchema({
20
+ userId: S.category(),
21
+ endpoint: S.text(),
22
+ });
23
+
24
+ function requireBinding(binding: OpContextBinding | undefined, label: string): OpContextBinding {
25
+ if (!binding) {
26
+ throw new Error(`Expected ${label} to have an _opContextBinding`);
27
+ }
28
+ return binding;
29
+ }
30
+
31
+ describe('Op._opContextBinding', () => {
32
+ it('defineOp produces an Op with _opContextBinding set', () => {
33
+ const ctx = defineOpContext({ logSchema: testSchema });
34
+ const op = ctx.defineOp('test-op', (ctx) => ctx.ok('done'));
35
+
36
+ expect(op).toBeInstanceOf(Op);
37
+ expect(op._opContextBinding).toBeDefined();
38
+ });
39
+
40
+ it('binding logBinding.logSchema.fields contains the schema fields', () => {
41
+ const ctx = defineOpContext({ logSchema: testSchema });
42
+ const op = ctx.defineOp('test-op', (ctx) => ctx.ok('done'));
43
+
44
+ const binding = requireBinding(op._opContextBinding, 'op');
45
+ const fields = binding.logBinding.logSchema.fields;
46
+
47
+ // WHY: user-defined fields should be present in the schema
48
+ expect(fields).toHaveProperty('userId');
49
+ expect(fields).toHaveProperty('endpoint');
50
+ });
51
+
52
+ it('.prefix() on an OpGroup preserves _opContextBinding on resulting Ops', () => {
53
+ const ctx = defineOpContext({ logSchema: testSchema });
54
+ const ops = ctx.defineOps({
55
+ fetch: (ctx) => ctx.ok('fetched'),
56
+ save: (ctx) => ctx.ok('saved'),
57
+ });
58
+
59
+ const prefixed = ops.prefix('http');
60
+
61
+ const fetchOp = prefixed.fetch;
62
+ const saveOp = prefixed.save;
63
+
64
+ expect(fetchOp._opContextBinding).toBeDefined();
65
+ expect(saveOp._opContextBinding).toBeDefined();
66
+
67
+ // Binding should still reference the original schema fields
68
+ expect(requireBinding(fetchOp._opContextBinding, 'prefixed.fetch').logBinding.logSchema.fields).toHaveProperty(
69
+ 'userId',
70
+ );
71
+ });
72
+
73
+ it('.mapColumns() preserves _opContextBinding', () => {
74
+ const ctx = defineOpContext({ logSchema: testSchema });
75
+ const ops = ctx.defineOps({
76
+ fetch: (ctx) => ctx.ok('fetched'),
77
+ });
78
+
79
+ const mapped = ops.mapColumns({ userId: 'mapped_user' });
80
+
81
+ const fetchOp = mapped.fetch;
82
+ expect(fetchOp._opContextBinding).toBeDefined();
83
+ expect(requireBinding(fetchOp._opContextBinding, 'mapped.fetch').logBinding.logSchema.fields).toHaveProperty(
84
+ 'userId',
85
+ );
86
+ });
87
+
88
+ it('two Ops from the same defineOpContext share the same binding reference', () => {
89
+ const ctx = defineOpContext({ logSchema: testSchema });
90
+ const opA = ctx.defineOp('op-a', (ctx) => ctx.ok('a'));
91
+ const opB = ctx.defineOp('op-b', (ctx) => ctx.ok('b'));
92
+
93
+ // WHY: identity dedup — same defineOpContext produces one binding object
94
+ expect(opA._opContextBinding).toBe(opB._opContextBinding);
95
+ });
96
+
97
+ it('two Ops from different defineOpContext have different bindings', () => {
98
+ const ctxA = defineOpContext({ logSchema: testSchema });
99
+ const ctxB = defineOpContext({ logSchema: testSchema });
100
+
101
+ const opA = ctxA.defineOp('op-a', (ctx) => ctx.ok('a'));
102
+ const opB = ctxB.defineOp('op-b', (ctx) => ctx.ok('b'));
103
+
104
+ // WHY: different factories produce different binding objects
105
+ expect(opA._opContextBinding).not.toBe(opB._opContextBinding);
106
+ });
107
+
108
+ it('Ops from defineOps share the same binding as defineOp from same context', () => {
109
+ const ctx = defineOpContext({ logSchema: testSchema });
110
+ const singleOp = ctx.defineOp('single', (ctx) => ctx.ok('single'));
111
+ const group = ctx.defineOps({
112
+ grouped: (ctx) => ctx.ok('grouped'),
113
+ });
114
+
115
+ const groupedOp = group.grouped;
116
+
117
+ // WHY: all Ops from one defineOpContext share the same binding reference
118
+ expect(singleOp._opContextBinding).toBe(groupedOp._opContextBinding);
119
+ });
120
+
121
+ it('prefixed Ops from different groups share binding when from same context', () => {
122
+ const ctx = defineOpContext({ logSchema: testSchema });
123
+ const group = ctx.defineOps({
124
+ fetch: (ctx) => ctx.ok('fetched'),
125
+ save: (ctx) => ctx.ok('saved'),
126
+ });
127
+
128
+ const prefixed = group.prefix('http');
129
+ const fetchOp = prefixed.fetch;
130
+ const saveOp = prefixed.save;
131
+
132
+ // WHY: prefix creates new Op instances but preserves the binding reference
133
+ expect(fetchOp._opContextBinding).toBe(saveOp._opContextBinding);
134
+ });
135
+ });
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Op Metadata Tests
3
+ *
4
+ * Tests that OpMetadata is correctly set when using defineOp and defineOps.
5
+ * Verifies that:
6
+ * - Op name is correctly captured from defineOp('name', fn)
7
+ * - Metadata flows through to the Op instance
8
+ * - Stack extraction provides file/line info when transformer not installed
9
+ * - Transformer-injected metadata takes precedence
10
+ */
11
+
12
+ import { describe, expect, it } from 'bun:test';
13
+ import { defineOpContext } from '../defineOpContext.js';
14
+ import { Op } from '../op.js';
15
+ import { createOpMetadata } from '../opContext/defineOp.js';
16
+ import { S } from '../schema/builder.js';
17
+ import { defineLogSchema } from '../schema/defineLogSchema.js';
18
+ import { TestTracer } from '../tracers/TestTracer.js';
19
+ import { createTestTracerOptions } from './test-helpers.js';
20
+
21
+ // Test schema
22
+ const testSchema = defineLogSchema({
23
+ userId: S.category(),
24
+ });
25
+
26
+ describe('Op Metadata', () => {
27
+ describe('defineOp name parameter', () => {
28
+ it('should use the name parameter as Op metadata name', () => {
29
+ const ctx = defineOpContext({ logSchema: testSchema });
30
+ const { defineOp } = ctx;
31
+
32
+ const myOp = defineOp('my-operation', (ctx) => ctx.ok('done'));
33
+
34
+ // Op should have the name from defineOp
35
+ expect(myOp.metadata.name).toBe('my-operation');
36
+ });
37
+
38
+ it('should use different names for different ops', () => {
39
+ const ctx = defineOpContext({ logSchema: testSchema });
40
+ const { defineOp } = ctx;
41
+
42
+ const fetchOp = defineOp('fetch-user', (ctx) => ctx.ok('user'));
43
+ const saveOp = defineOp('save-user', (ctx) => ctx.ok('saved'));
44
+
45
+ expect(fetchOp.metadata.name).toBe('fetch-user');
46
+ expect(saveOp.metadata.name).toBe('save-user');
47
+ });
48
+
49
+ it('should have some metadata even without transformer', () => {
50
+ const ctx = defineOpContext({ logSchema: testSchema });
51
+ const { defineOp } = ctx;
52
+
53
+ const myOp = defineOp('test-op', (ctx) => ctx.ok('done'));
54
+
55
+ // Metadata should exist (either from stack extraction or defaults)
56
+ expect(myOp.metadata.package_file).toBeDefined();
57
+ expect(typeof myOp.metadata.line).toBe('number');
58
+ // Most importantly, the name should be correct
59
+ expect(myOp.metadata.name).toBe('test-op');
60
+ });
61
+ });
62
+
63
+ describe('defineOps with inline functions', () => {
64
+ it('should use the key name as Op metadata name', () => {
65
+ const ctx = defineOpContext({ logSchema: testSchema });
66
+ const { defineOps } = ctx;
67
+
68
+ const ops = defineOps({
69
+ fetchUser: (ctx) => ctx.ok('user'),
70
+ saveUser: (ctx) => ctx.ok('saved'),
71
+ });
72
+
73
+ expect(ops.fetchUser.metadata.name).toBe('fetchUser');
74
+ expect(ops.saveUser.metadata.name).toBe('saveUser');
75
+ });
76
+
77
+ it('should preserve name when using pre-defined Op', () => {
78
+ const ctx = defineOpContext({ logSchema: testSchema });
79
+ const { defineOp, defineOps } = ctx;
80
+
81
+ // Pre-define an op with explicit name
82
+ const customOp = defineOp('custom-name', (ctx) => ctx.ok('done'));
83
+
84
+ const ops = defineOps({
85
+ differentKey: customOp,
86
+ });
87
+
88
+ // Should keep the original Op name, not the key name
89
+ expect(ops.differentKey.metadata.name).toBe('custom-name');
90
+ });
91
+ });
92
+
93
+ describe('transformer-injected metadata', () => {
94
+ it('should use explicit metadata when provided', () => {
95
+ const ctx = defineOpContext({ logSchema: testSchema });
96
+ const { defineOp } = ctx;
97
+
98
+ const injectedMetadata = createOpMetadata('transformer-name', '@my/package', 'src/ops.ts', 'abc123', 42);
99
+
100
+ const myOp = defineOp('runtime-name', (ctx) => ctx.ok('done'), injectedMetadata);
101
+
102
+ // Transformer-injected name should take precedence
103
+ expect(myOp.metadata.name).toBe('transformer-name');
104
+ expect(myOp.metadata.package_name).toBe('@my/package');
105
+ expect(myOp.metadata.package_file).toBe('src/ops.ts');
106
+ expect(myOp.metadata.git_sha).toBe('abc123');
107
+ expect(myOp.metadata.line).toBe(42);
108
+ });
109
+
110
+ it('should use runtime name if transformer metadata has no name', () => {
111
+ const ctx = defineOpContext({ logSchema: testSchema });
112
+ const { defineOp } = ctx;
113
+
114
+ // Partial metadata without name - simulating transformer that doesn't inject name
115
+ const partialMetadata: Partial<ReturnType<typeof createOpMetadata>> = {
116
+ package_name: '@my/package',
117
+ package_file: 'src/ops.ts',
118
+ git_sha: 'abc123',
119
+ line: 42,
120
+ };
121
+
122
+ const myOp = defineOp('runtime-name', (ctx) => ctx.ok('done'), partialMetadata);
123
+
124
+ // Runtime name should be used since metadata.name wasn't provided
125
+ expect(myOp.metadata.name).toBe('runtime-name');
126
+ expect(myOp.metadata.package_name).toBe('@my/package');
127
+ });
128
+ });
129
+
130
+ describe('metadata flows to SpanBuffer', () => {
131
+ it('should have metadata accessible on buffer._opMetadata during trace', async () => {
132
+ const ctx = defineOpContext({ logSchema: testSchema });
133
+ const { defineOp } = ctx;
134
+
135
+ let capturedMetadata: ReturnType<typeof createOpMetadata> | undefined;
136
+ const myOp = defineOp('traced-op', (ctx) => {
137
+ capturedMetadata = ctx.buffer._opMetadata;
138
+ return ctx.ok('done');
139
+ });
140
+
141
+ const tracer = new TestTracer(ctx, createTestTracerOptions());
142
+ await tracer.trace('test-trace', myOp);
143
+
144
+ expect(capturedMetadata).toBeDefined();
145
+ expect(capturedMetadata?.name).toBe('traced-op');
146
+ });
147
+
148
+ it('should distinguish callsite vs op metadata', async () => {
149
+ const ctx = defineOpContext({ logSchema: testSchema });
150
+ const { defineOp } = ctx;
151
+
152
+ let innerCallsiteMetadata: ReturnType<typeof createOpMetadata> | undefined;
153
+ let innerOpMetadata: ReturnType<typeof createOpMetadata> | undefined;
154
+
155
+ const innerOp = defineOp('inner-op', (ctx) => {
156
+ innerCallsiteMetadata = ctx.buffer._callsiteMetadata;
157
+ innerOpMetadata = ctx.buffer._opMetadata;
158
+ return ctx.ok('inner-done');
159
+ });
160
+
161
+ const outerOp = defineOp('outer-op', async (ctx) => {
162
+ await ctx.span('call-inner', innerOp);
163
+ return ctx.ok('outer-done');
164
+ });
165
+
166
+ const tracer = new TestTracer(ctx, createTestTracerOptions());
167
+ await tracer.trace('test-trace', outerOp);
168
+
169
+ // Inner op should have:
170
+ // - _callsiteMetadata from outer-op (where span() was called)
171
+ // - _opMetadata from inner-op (the op being executed)
172
+ expect(innerOpMetadata?.name).toBe('inner-op');
173
+ expect(innerCallsiteMetadata?.name).toBe('outer-op');
174
+ });
175
+ });
176
+
177
+ describe('Op instance type', () => {
178
+ it('should create Op instances', () => {
179
+ const ctx = defineOpContext({ logSchema: testSchema });
180
+ const { defineOp } = ctx;
181
+
182
+ const myOp = defineOp('test-op', (ctx) => ctx.ok('done'));
183
+
184
+ expect(myOp).toBeInstanceOf(Op);
185
+ });
186
+
187
+ it('should have required Op properties', () => {
188
+ const ctx = defineOpContext({ logSchema: testSchema });
189
+ const { defineOp } = ctx;
190
+
191
+ const myOp = defineOp('test-op', (ctx) => ctx.ok('done'));
192
+
193
+ expect(myOp.metadata).toBeDefined();
194
+ expect(myOp.fn).toBeInstanceOf(Function);
195
+ expect(myOp.SpanBufferClass).toBeDefined();
196
+ });
197
+ });
198
+ });
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Type safety test - verify Ops with incompatible schemas cause compile errors
3
+ */
4
+
5
+ import { describe, expect, it } from 'bun:test';
6
+ import { defineOpContext } from '../defineOpContext.js';
7
+ import { S } from '../schema/builder.js';
8
+ import { defineLogSchema } from '../schema/defineLogSchema.js';
9
+ import { TestTracer } from '../tracers/TestTracer.js';
10
+ import { createTestTracerOptions } from './test-helpers.js';
11
+
12
+ // Two different schemas
13
+ const schemaA = defineLogSchema({
14
+ userId: S.category(),
15
+ });
16
+
17
+ const schemaB = defineLogSchema({
18
+ orderId: S.category(),
19
+ });
20
+
21
+ // Two different op contexts
22
+ const opContextA = defineOpContext({
23
+ logSchema: schemaA,
24
+ });
25
+ const { defineOp: defineOpA } = opContextA;
26
+
27
+ const opContextB = defineOpContext({
28
+ logSchema: schemaB,
29
+ });
30
+ const { defineOp: defineOpB } = opContextB;
31
+
32
+ // Ops from each context
33
+ const opA = defineOpA('op-a', (ctx) => {
34
+ ctx.tag.userId('user-123'); // Should work - userId is in schemaA
35
+ return ctx.ok({ a: 1 });
36
+ });
37
+
38
+ const opB = defineOpB('op-b', (ctx) => {
39
+ ctx.tag.orderId('order-456'); // Should work - orderId is in schemaB
40
+ return ctx.ok({ b: 2 });
41
+ });
42
+
43
+ describe('Op type safety', () => {
44
+ it('should allow Op with matching schema', async () => {
45
+ // New API: pass opContext directly, no explicit type parameter needed
46
+ const { trace } = new TestTracer(opContextA, { ...createTestTracerOptions() });
47
+
48
+ // This SHOULD work - opA was created with opContextA's schema
49
+ await trace('test-a', opA);
50
+ });
51
+
52
+ it('should ERROR when passing Op with incompatible schema', async () => {
53
+ // New API: pass opContext directly
54
+ const { trace } = new TestTracer(opContextA, { ...createTestTracerOptions() });
55
+
56
+ // This SHOULD cause a type error - opB has different schema than tracer
57
+ // The @ts-expect-error verifies the type system catches this at compile time
58
+ // At runtime, calling an op with incompatible schema will throw because
59
+ // the tag methods don't exist on the buffer
60
+ let threw = false;
61
+ try {
62
+ // @ts-expect-error - opB has schemaB but tracer expects schemaA
63
+ await trace('test-b', opB);
64
+ } catch (e) {
65
+ threw = true;
66
+ // Expected: ctx.tag.orderId is not a function because schemaA doesn't have orderId
67
+ expect(e).toBeInstanceOf(TypeError);
68
+ }
69
+ expect(threw).toBe(true);
70
+ });
71
+ });
@@ -0,0 +1,57 @@
1
+ import { describe, expect, it } from 'bun:test';
2
+ import { isRecord } from '@smoothbricks/validation';
3
+
4
+ type ExportConditions = {
5
+ development?: string;
6
+ types?: string;
7
+ import?: string;
8
+ default?: string;
9
+ };
10
+
11
+ function requireRecord(value: unknown, label: string): Record<string, unknown> {
12
+ if (!isRecord(value)) {
13
+ throw new Error(`Expected ${label} to be an object`);
14
+ }
15
+ return value;
16
+ }
17
+
18
+ function requireStringProperty(entry: Record<string, unknown>, key: keyof ExportConditions): string {
19
+ const value = entry[key];
20
+ if (typeof value !== 'string') {
21
+ throw new Error(`Expected export condition '${key}' to be a string`);
22
+ }
23
+ return value;
24
+ }
25
+
26
+ function expectCoreConditions(entry: unknown): asserts entry is ExportConditions {
27
+ const record = requireRecord(entry, 'export conditions');
28
+ expect(requireStringProperty(record, 'development')).toBeString();
29
+ expect(requireStringProperty(record, 'types')).toBeString();
30
+ expect(requireStringProperty(record, 'import')).toBeString();
31
+ expect(requireStringProperty(record, 'default')).toBeString();
32
+ }
33
+
34
+ async function readPackageExports(packageUrl: URL): Promise<Record<string, unknown>> {
35
+ const pkg = await Bun.file(packageUrl).json();
36
+ const pkgRecord = requireRecord(pkg, 'package.json');
37
+ return requireRecord(pkgRecord.exports, 'package.json exports');
38
+ }
39
+
40
+ describe('package export conditions', () => {
41
+ it('lmao package exposes root + platform entry points with expected conditions', async () => {
42
+ const exports = await readPackageExports(new URL('../../../package.json', import.meta.url));
43
+
44
+ expectCoreConditions(exports['.']);
45
+ expectCoreConditions(exports['./node']);
46
+ expectCoreConditions(exports['./es']);
47
+
48
+ expect(exports['./package.json']).toBe('./package.json');
49
+ });
50
+
51
+ it('arrow-builder package root export has expected conditions', async () => {
52
+ const exports = await readPackageExports(new URL('../../../../arrow-builder/package.json', import.meta.url));
53
+
54
+ expectCoreConditions(exports['.']);
55
+ expect(exports['./package.json']).toBe('./package.json');
56
+ });
57
+ });