@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.
- package/README.md +269 -0
- package/dist/allocator.wasm +0 -0
- package/dist/bun/preload.d.ts +11 -0
- package/dist/bun/preload.d.ts.map +1 -0
- package/dist/bun/preload.js +10 -0
- package/dist/bun/trace-preload.d.ts +8 -0
- package/dist/bun/trace-preload.d.ts.map +1 -0
- package/dist/bun/trace-preload.js +12 -0
- package/dist/es.d.ts +8 -0
- package/dist/es.d.ts.map +1 -0
- package/dist/es.js +9 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/lib/JsBufferStrategy.d.ts +49 -0
- package/dist/lib/JsBufferStrategy.d.ts.map +1 -0
- package/dist/lib/JsBufferStrategy.js +60 -0
- package/dist/lib/archive/chunkCompaction.d.ts +15 -0
- package/dist/lib/archive/chunkCompaction.d.ts.map +1 -0
- package/dist/lib/archive/chunkCompaction.js +24 -0
- package/dist/lib/archive/chunkEnvelope.d.ts +21 -0
- package/dist/lib/archive/chunkEnvelope.d.ts.map +1 -0
- package/dist/lib/archive/chunkEnvelope.js +55 -0
- package/dist/lib/archive/chunkRouting.d.ts +10 -0
- package/dist/lib/archive/chunkRouting.d.ts.map +1 -0
- package/dist/lib/archive/chunkRouting.js +47 -0
- package/dist/lib/archive/chunkStats.d.ts +12 -0
- package/dist/lib/archive/chunkStats.d.ts.map +1 -0
- package/dist/lib/archive/chunkStats.js +10 -0
- package/dist/lib/archive/index.d.ts +5 -0
- package/dist/lib/archive/index.d.ts.map +1 -0
- package/dist/lib/archive/index.js +4 -0
- package/dist/lib/arrow/capacityStats.d.ts +9 -0
- package/dist/lib/arrow/capacityStats.d.ts.map +1 -0
- package/dist/lib/arrow/capacityStats.js +231 -0
- package/dist/lib/arrow/dictionaries.d.ts +27 -0
- package/dist/lib/arrow/dictionaries.d.ts.map +1 -0
- package/dist/lib/arrow/dictionaries.js +135 -0
- package/dist/lib/arrow/flechette.d.ts +40 -0
- package/dist/lib/arrow/flechette.d.ts.map +1 -0
- package/dist/lib/arrow/flechette.js +67 -0
- package/dist/lib/arrow/utils.d.ts +38 -0
- package/dist/lib/arrow/utils.d.ts.map +1 -0
- package/dist/lib/arrow/utils.js +112 -0
- package/dist/lib/buffer/Nanoseconds.d.ts +109 -0
- package/dist/lib/buffer/Nanoseconds.d.ts.map +1 -0
- package/dist/lib/buffer/Nanoseconds.js +86 -0
- package/dist/lib/bufferStrategy.d.ts +95 -0
- package/dist/lib/bufferStrategy.d.ts.map +1 -0
- package/dist/lib/bufferStrategy.js +1 -0
- package/dist/lib/capacityTuning.d.ts +50 -0
- package/dist/lib/capacityTuning.d.ts.map +1 -0
- package/dist/lib/capacityTuning.js +65 -0
- package/dist/lib/codegen/evaluatorGenerator.d.ts +35 -0
- package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -0
- package/dist/lib/codegen/evaluatorGenerator.js +199 -0
- package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +139 -0
- package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -0
- package/dist/lib/codegen/fixedPositionWriterGenerator.js +289 -0
- package/dist/lib/codegen/spanLoggerGenerator.d.ts +115 -0
- package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -0
- package/dist/lib/codegen/spanLoggerGenerator.js +575 -0
- package/dist/lib/convertToArrow.d.ts +40 -0
- package/dist/lib/convertToArrow.d.ts.map +1 -0
- package/dist/lib/convertToArrow.js +1467 -0
- package/dist/lib/defineOpContext.d.ts +96 -0
- package/dist/lib/defineOpContext.d.ts.map +1 -0
- package/dist/lib/defineOpContext.js +227 -0
- package/dist/lib/errors/Blocked.d.ts +113 -0
- package/dist/lib/errors/Blocked.d.ts.map +1 -0
- package/dist/lib/errors/Blocked.js +68 -0
- package/dist/lib/errors/CodeError.d.ts +101 -0
- package/dist/lib/errors/CodeError.d.ts.map +1 -0
- package/dist/lib/errors/CodeError.js +42 -0
- package/dist/lib/errors/RetriesExhausted.d.ts +67 -0
- package/dist/lib/errors/RetriesExhausted.d.ts.map +1 -0
- package/dist/lib/errors/RetriesExhausted.js +31 -0
- package/dist/lib/errors/Transient.d.ts +115 -0
- package/dist/lib/errors/Transient.d.ts.map +1 -0
- package/dist/lib/errors/Transient.js +54 -0
- package/dist/lib/errors/index.d.ts +14 -0
- package/dist/lib/errors/index.d.ts.map +1 -0
- package/dist/lib/errors/index.js +16 -0
- package/dist/lib/errors/retry-policy.d.ts +60 -0
- package/dist/lib/errors/retry-policy.d.ts.map +1 -0
- package/dist/lib/errors/retry-policy.js +54 -0
- package/dist/lib/flushScheduler.d.ts +162 -0
- package/dist/lib/flushScheduler.d.ts.map +1 -0
- package/dist/lib/flushScheduler.js +388 -0
- package/dist/lib/library.d.ts +149 -0
- package/dist/lib/library.d.ts.map +1 -0
- package/dist/lib/library.js +588 -0
- package/dist/lib/logApi.d.ts +61 -0
- package/dist/lib/logApi.d.ts.map +1 -0
- package/dist/lib/logApi.js +12 -0
- package/dist/lib/logBinding.d.ts +63 -0
- package/dist/lib/logBinding.d.ts.map +1 -0
- package/dist/lib/logBinding.js +1 -0
- package/dist/lib/op.d.ts +105 -0
- package/dist/lib/op.d.ts.map +1 -0
- package/dist/lib/op.js +59 -0
- package/dist/lib/opContext/contextTypes.d.ts +88 -0
- package/dist/lib/opContext/contextTypes.d.ts.map +1 -0
- package/dist/lib/opContext/contextTypes.js +34 -0
- package/dist/lib/opContext/createOpGroup.d.ts +57 -0
- package/dist/lib/opContext/createOpGroup.d.ts.map +1 -0
- package/dist/lib/opContext/createOpGroup.js +341 -0
- package/dist/lib/opContext/defineOp.d.ts +83 -0
- package/dist/lib/opContext/defineOp.d.ts.map +1 -0
- package/dist/lib/opContext/defineOp.js +197 -0
- package/dist/lib/opContext/featureFlagTypes.d.ts +58 -0
- package/dist/lib/opContext/featureFlagTypes.d.ts.map +1 -0
- package/dist/lib/opContext/featureFlagTypes.js +1 -0
- package/dist/lib/opContext/index.d.ts +13 -0
- package/dist/lib/opContext/index.d.ts.map +1 -0
- package/dist/lib/opContext/index.js +15 -0
- package/dist/lib/opContext/opGroupTypes.d.ts +250 -0
- package/dist/lib/opContext/opGroupTypes.d.ts.map +1 -0
- package/dist/lib/opContext/opGroupTypes.js +31 -0
- package/dist/lib/opContext/opTypes.d.ts +48 -0
- package/dist/lib/opContext/opTypes.d.ts.map +1 -0
- package/dist/lib/opContext/opTypes.js +7 -0
- package/dist/lib/opContext/spanContextTypes.d.ts +347 -0
- package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -0
- package/dist/lib/opContext/spanContextTypes.js +1 -0
- package/dist/lib/opContext/types.d.ts +297 -0
- package/dist/lib/opContext/types.d.ts.map +1 -0
- package/dist/lib/opContext/types.js +16 -0
- package/dist/lib/result.d.ts +308 -0
- package/dist/lib/result.d.ts.map +1 -0
- package/dist/lib/result.js +359 -0
- package/dist/lib/schema/LogSchema.d.ts +62 -0
- package/dist/lib/schema/LogSchema.d.ts.map +1 -0
- package/dist/lib/schema/LogSchema.js +134 -0
- package/dist/lib/schema/builder.d.ts +12 -0
- package/dist/lib/schema/builder.d.ts.map +1 -0
- package/dist/lib/schema/builder.js +169 -0
- package/dist/lib/schema/defineFeatureFlags.d.ts +60 -0
- package/dist/lib/schema/defineFeatureFlags.d.ts.map +1 -0
- package/dist/lib/schema/defineFeatureFlags.js +29 -0
- package/dist/lib/schema/defineLogSchema.d.ts +87 -0
- package/dist/lib/schema/defineLogSchema.d.ts.map +1 -0
- package/dist/lib/schema/defineLogSchema.js +171 -0
- package/dist/lib/schema/evaluator.d.ts +267 -0
- package/dist/lib/schema/evaluator.d.ts.map +1 -0
- package/dist/lib/schema/evaluator.js +169 -0
- package/dist/lib/schema/extend.d.ts +14 -0
- package/dist/lib/schema/extend.d.ts.map +1 -0
- package/dist/lib/schema/extend.js +51 -0
- package/dist/lib/schema/systemSchema.d.ts +112 -0
- package/dist/lib/schema/systemSchema.d.ts.map +1 -0
- package/dist/lib/schema/systemSchema.js +260 -0
- package/dist/lib/schema/typeGuards.d.ts +52 -0
- package/dist/lib/schema/typeGuards.d.ts.map +1 -0
- package/dist/lib/schema/typeGuards.js +127 -0
- package/dist/lib/schema/types.d.ts +156 -0
- package/dist/lib/schema/types.d.ts.map +1 -0
- package/dist/lib/schema/types.js +4 -0
- package/dist/lib/spanBuffer.d.ts +133 -0
- package/dist/lib/spanBuffer.d.ts.map +1 -0
- package/dist/lib/spanBuffer.js +442 -0
- package/dist/lib/spanBufferHelpers.d.ts +53 -0
- package/dist/lib/spanBufferHelpers.d.ts.map +1 -0
- package/dist/lib/spanBufferHelpers.js +65 -0
- package/dist/lib/spanBufferStats.d.ts +38 -0
- package/dist/lib/spanBufferStats.d.ts.map +1 -0
- package/dist/lib/spanBufferStats.js +1 -0
- package/dist/lib/spanContext.d.ts +141 -0
- package/dist/lib/spanContext.d.ts.map +1 -0
- package/dist/lib/spanContext.js +763 -0
- package/dist/lib/sqlite/index.d.ts +14 -0
- package/dist/lib/sqlite/index.d.ts.map +1 -0
- package/dist/lib/sqlite/index.js +12 -0
- package/dist/lib/sqlite/sqlite-async-writer.d.ts +24 -0
- package/dist/lib/sqlite/sqlite-async-writer.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-async-writer.js +65 -0
- package/dist/lib/sqlite/sqlite-common.d.ts +37 -0
- package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-common.js +207 -0
- package/dist/lib/sqlite/sqlite-d1.d.ts +25 -0
- package/dist/lib/sqlite/sqlite-d1.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-d1.js +67 -0
- package/dist/lib/sqlite/sqlite-db.d.ts +29 -0
- package/dist/lib/sqlite/sqlite-db.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-db.js +1 -0
- package/dist/lib/sqlite/sqlite-node.d.ts +16 -0
- package/dist/lib/sqlite/sqlite-node.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-node.js +68 -0
- package/dist/lib/sqlite/sqlite-writer.d.ts +39 -0
- package/dist/lib/sqlite/sqlite-writer.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-writer.js +78 -0
- package/dist/lib/testing/bun-harness.d.ts +150 -0
- package/dist/lib/testing/bun-harness.d.ts.map +1 -0
- package/dist/lib/testing/bun-harness.js +729 -0
- package/dist/lib/testing/extractFacts.d.ts +73 -0
- package/dist/lib/testing/extractFacts.d.ts.map +1 -0
- package/dist/lib/testing/extractFacts.js +237 -0
- package/dist/lib/testing/facts.d.ts +235 -0
- package/dist/lib/testing/facts.d.ts.map +1 -0
- package/dist/lib/testing/facts.js +209 -0
- package/dist/lib/testing/index.d.ts +58 -0
- package/dist/lib/testing/index.d.ts.map +1 -0
- package/dist/lib/testing/index.js +74 -0
- package/dist/lib/testing/queryable-span.d.ts +39 -0
- package/dist/lib/testing/queryable-span.d.ts.map +1 -0
- package/dist/lib/testing/queryable-span.js +58 -0
- package/dist/lib/testing/span-query.d.ts +21 -0
- package/dist/lib/testing/span-query.d.ts.map +1 -0
- package/dist/lib/testing/span-query.js +47 -0
- package/dist/lib/testing/stdio-replay.d.ts +4 -0
- package/dist/lib/testing/stdio-replay.d.ts.map +1 -0
- package/dist/lib/testing/stdio-replay.js +42 -0
- package/dist/lib/testing/trace-query.d.ts +59 -0
- package/dist/lib/testing/trace-query.d.ts.map +1 -0
- package/dist/lib/testing/trace-query.js +462 -0
- package/dist/lib/testing/vitest-harness.d.ts +135 -0
- package/dist/lib/testing/vitest-harness.d.ts.map +1 -0
- package/dist/lib/testing/vitest-harness.js +486 -0
- package/dist/lib/threadId.d.ts +58 -0
- package/dist/lib/threadId.d.ts.map +1 -0
- package/dist/lib/threadId.js +123 -0
- package/dist/lib/traceContext.d.ts +116 -0
- package/dist/lib/traceContext.d.ts.map +1 -0
- package/dist/lib/traceContext.js +37 -0
- package/dist/lib/traceId.d.ts +78 -0
- package/dist/lib/traceId.d.ts.map +1 -0
- package/dist/lib/traceId.js +87 -0
- package/dist/lib/traceRoot.d.ts +133 -0
- package/dist/lib/traceRoot.d.ts.map +1 -0
- package/dist/lib/traceRoot.es.d.ts +75 -0
- package/dist/lib/traceRoot.es.d.ts.map +1 -0
- package/dist/lib/traceRoot.es.js +129 -0
- package/dist/lib/traceRoot.js +19 -0
- package/dist/lib/traceRoot.node.d.ts +77 -0
- package/dist/lib/traceRoot.node.d.ts.map +1 -0
- package/dist/lib/traceRoot.node.js +133 -0
- package/dist/lib/traceRoot.universal.d.ts +3 -0
- package/dist/lib/traceRoot.universal.d.ts.map +1 -0
- package/dist/lib/traceRoot.universal.js +17 -0
- package/dist/lib/tracer.d.ts +296 -0
- package/dist/lib/tracer.d.ts.map +1 -0
- package/dist/lib/tracer.js +346 -0
- package/dist/lib/tracers/ArrayQueueTracer.d.ts +56 -0
- package/dist/lib/tracers/ArrayQueueTracer.d.ts.map +1 -0
- package/dist/lib/tracers/ArrayQueueTracer.js +67 -0
- package/dist/lib/tracers/CompositeTracer.d.ts +24 -0
- package/dist/lib/tracers/CompositeTracer.d.ts.map +1 -0
- package/dist/lib/tracers/CompositeTracer.js +57 -0
- package/dist/lib/tracers/NoOpTracer.d.ts +58 -0
- package/dist/lib/tracers/NoOpTracer.d.ts.map +1 -0
- package/dist/lib/tracers/NoOpTracer.js +41 -0
- package/dist/lib/tracers/SQLiteTracer.d.ts +42 -0
- package/dist/lib/tracers/SQLiteTracer.d.ts.map +1 -0
- package/dist/lib/tracers/SQLiteTracer.js +84 -0
- package/dist/lib/tracers/StdioTracer.d.ts +83 -0
- package/dist/lib/tracers/StdioTracer.d.ts.map +1 -0
- package/dist/lib/tracers/StdioTracer.js +270 -0
- package/dist/lib/tracers/TestTracer.d.ts +95 -0
- package/dist/lib/tracers/TestTracer.d.ts.map +1 -0
- package/dist/lib/tracers/TestTracer.js +87 -0
- package/dist/lib/tracers/index.d.ts +12 -0
- package/dist/lib/tracers/index.d.ts.map +1 -0
- package/dist/lib/tracers/index.js +11 -0
- package/dist/lib/types.d.ts +366 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +1 -0
- package/dist/lib/utf8Cache.d.ts +111 -0
- package/dist/lib/utf8Cache.d.ts.map +1 -0
- package/dist/lib/utf8Cache.js +177 -0
- package/dist/lib/wasm/WasmBufferStrategy.d.ts +88 -0
- package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -0
- package/dist/lib/wasm/WasmBufferStrategy.js +138 -0
- package/dist/lib/wasm/wasmAllocator.d.ts +109 -0
- package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -0
- package/dist/lib/wasm/wasmAllocator.js +227 -0
- package/dist/lib/wasm/wasmSpanBuffer.d.ts +123 -0
- package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -0
- package/dist/lib/wasm/wasmSpanBuffer.js +772 -0
- package/dist/lib/wasm/wasmTraceRoot.d.ts +167 -0
- package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -0
- package/dist/lib/wasm/wasmTraceRoot.js +264 -0
- package/dist/node.d.ts +7 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +8 -0
- package/dist/testing.d.ts +18 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +17 -0
- package/package.json +193 -0
- package/src/bun/preload.ts +11 -0
- package/src/bun/trace-preload.ts +14 -0
- package/src/es.ts +11 -0
- package/src/index.ts +194 -0
- package/src/lib/JsBufferStrategy.ts +102 -0
- package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +485 -0
- package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +390 -0
- package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +647 -0
- package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +292 -0
- package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +354 -0
- package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +127 -0
- package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +392 -0
- package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +389 -0
- package/src/lib/__tests__/arrow-conversion-algorithms.test.ts +54 -0
- package/src/lib/__tests__/arrow-test-helpers.ts +71 -0
- package/src/lib/__tests__/binary-e2e.test.ts +203 -0
- package/src/lib/__tests__/buffer-overflow-op-api.test.ts +608 -0
- package/src/lib/__tests__/buffer-overflow.test.ts +612 -0
- package/src/lib/__tests__/capacity-tuning.test.ts +544 -0
- package/src/lib/__tests__/effective-schema.test.ts +439 -0
- package/src/lib/__tests__/flechette.test.ts +42 -0
- package/src/lib/__tests__/flushScheduler.test.ts +537 -0
- package/src/lib/__tests__/integration.test.ts +600 -0
- package/src/lib/__tests__/library.test.ts +934 -0
- package/src/lib/__tests__/nested-library-tasks.test.ts +849 -0
- package/src/lib/__tests__/op-context-binding.test.ts +135 -0
- package/src/lib/__tests__/op-metadata.test.ts +198 -0
- package/src/lib/__tests__/op-type-safety.test.ts +71 -0
- package/src/lib/__tests__/package-exports.test.ts +57 -0
- package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +319 -0
- package/src/lib/__tests__/remapped-buffer-view.test.ts +635 -0
- package/src/lib/__tests__/scope-attributes.test.ts +348 -0
- package/src/lib/__tests__/span-lifecycle.test.ts +680 -0
- package/src/lib/__tests__/sync-async-trace.test.ts +435 -0
- package/src/lib/__tests__/test-helpers.ts +318 -0
- package/src/lib/__tests__/timestamp.test.ts +259 -0
- package/src/lib/__tests__/trace-archive-primitives.test.ts +98 -0
- package/src/lib/__tests__/traceContext-type-enforcement.test.ts +271 -0
- package/src/lib/__tests__/tracer.test.ts +211 -0
- package/src/lib/__tests__/type-narrowing.test.ts +137 -0
- package/src/lib/archive/chunkCompaction.ts +44 -0
- package/src/lib/archive/chunkEnvelope.ts +79 -0
- package/src/lib/archive/chunkRouting.ts +70 -0
- package/src/lib/archive/chunkStats.ts +25 -0
- package/src/lib/archive/index.ts +4 -0
- package/src/lib/arrow/capacityStats.ts +340 -0
- package/src/lib/arrow/dictionaries.ts +159 -0
- package/src/lib/arrow/flechette.ts +114 -0
- package/src/lib/arrow/utils.ts +126 -0
- package/src/lib/buffer/Nanoseconds.ts +131 -0
- package/src/lib/bufferStrategy.ts +106 -0
- package/src/lib/capacityTuning.ts +102 -0
- package/src/lib/codegen/__tests__/__snapshots__/evaluatorGenerator.test.ts.snap +160 -0
- package/src/lib/codegen/__tests__/__snapshots__/scopeGenerator.test.ts.snap +196 -0
- package/src/lib/codegen/__tests__/__snapshots__/spanLoggerGenerator.test.ts.snap +1965 -0
- package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +516 -0
- package/src/lib/codegen/__tests__/nullBitmap.test.ts +207 -0
- package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +237 -0
- package/src/lib/codegen/evaluatorGenerator.ts +309 -0
- package/src/lib/codegen/fixedPositionWriterGenerator.ts +444 -0
- package/src/lib/codegen/spanLoggerGenerator.ts +715 -0
- package/src/lib/convertToArrow.ts +1805 -0
- package/src/lib/defineOpContext.ts +398 -0
- package/src/lib/errors/Blocked.ts +165 -0
- package/src/lib/errors/CodeError.ts +132 -0
- package/src/lib/errors/RetriesExhausted.ts +78 -0
- package/src/lib/errors/Transient.ts +168 -0
- package/src/lib/errors/__tests__/Blocked-config.test.ts +152 -0
- package/src/lib/errors/__tests__/Transient.test.ts +129 -0
- package/src/lib/errors/__tests__/retry-policy.test.ts +85 -0
- package/src/lib/errors/index.ts +24 -0
- package/src/lib/errors/retry-policy.ts +87 -0
- package/src/lib/flushScheduler.ts +509 -0
- package/src/lib/library.ts +682 -0
- package/src/lib/logApi.ts +70 -0
- package/src/lib/logBinding.ts +67 -0
- package/src/lib/op.ts +103 -0
- package/src/lib/opContext/__tests__/retry.test.ts +764 -0
- package/src/lib/opContext/contextTypes.ts +130 -0
- package/src/lib/opContext/createOpGroup.ts +456 -0
- package/src/lib/opContext/defineOp.ts +281 -0
- package/src/lib/opContext/featureFlagTypes.ts +54 -0
- package/src/lib/opContext/index.ts +16 -0
- package/src/lib/opContext/opGroupTypes.ts +342 -0
- package/src/lib/opContext/opTypes.ts +80 -0
- package/src/lib/opContext/spanContextTypes.ts +398 -0
- package/src/lib/opContext/types.ts +403 -0
- package/src/lib/result.ts +550 -0
- package/src/lib/schema/LogSchema.ts +153 -0
- package/src/lib/schema/__tests__/defineLogSchema.test.ts +342 -0
- package/src/lib/schema/__tests__/featureFlags.test.ts +443 -0
- package/src/lib/schema/builder.ts +201 -0
- package/src/lib/schema/defineFeatureFlags.ts +91 -0
- package/src/lib/schema/defineLogSchema.ts +291 -0
- package/src/lib/schema/evaluator.ts +404 -0
- package/src/lib/schema/extend.ts +69 -0
- package/src/lib/schema/systemSchema.ts +339 -0
- package/src/lib/schema/typeGuards.ts +163 -0
- package/src/lib/schema/types.ts +265 -0
- package/src/lib/spanBuffer.ts +571 -0
- package/src/lib/spanBufferHelpers.ts +73 -0
- package/src/lib/spanBufferStats.ts +40 -0
- package/src/lib/spanContext.ts +1566 -0
- package/src/lib/sqlite/__tests__/sqlite-common.test.ts +89 -0
- package/src/lib/sqlite/index.ts +26 -0
- package/src/lib/sqlite/sqlite-async-writer.ts +101 -0
- package/src/lib/sqlite/sqlite-common.ts +309 -0
- package/src/lib/sqlite/sqlite-d1.ts +104 -0
- package/src/lib/sqlite/sqlite-db.ts +32 -0
- package/src/lib/sqlite/sqlite-node.ts +83 -0
- package/src/lib/sqlite/sqlite-writer.ts +128 -0
- package/src/lib/testing/TRACE-TESTING.md +100 -0
- package/src/lib/testing/__tests__/bun-harness.test.ts +108 -0
- package/src/lib/testing/__tests__/extractFacts.test.ts +279 -0
- package/src/lib/testing/__tests__/facts.test.ts +324 -0
- package/src/lib/testing/__tests__/vitest-harness.test.ts +32 -0
- package/src/lib/testing/bun-harness.ts +990 -0
- package/src/lib/testing/extractFacts.ts +362 -0
- package/src/lib/testing/facts.ts +470 -0
- package/src/lib/testing/index.ts +141 -0
- package/src/lib/testing/queryable-span.ts +108 -0
- package/src/lib/testing/span-query.ts +65 -0
- package/src/lib/testing/stdio-replay.ts +50 -0
- package/src/lib/testing/trace-query.ts +329 -0
- package/src/lib/testing/vitest-harness.ts +691 -0
- package/src/lib/threadId.ts +135 -0
- package/src/lib/traceContext.ts +182 -0
- package/src/lib/traceId.ts +142 -0
- package/src/lib/traceRoot.es.ts +157 -0
- package/src/lib/traceRoot.node.ts +170 -0
- package/src/lib/traceRoot.ts +154 -0
- package/src/lib/traceRoot.universal.ts +22 -0
- package/src/lib/tracer.ts +896 -0
- package/src/lib/tracers/ArrayQueueTracer.ts +76 -0
- package/src/lib/tracers/CompositeTracer.ts +76 -0
- package/src/lib/tracers/NoOpTracer.ts +73 -0
- package/src/lib/tracers/SQLiteTracer.ts +115 -0
- package/src/lib/tracers/StdioTracer.ts +380 -0
- package/src/lib/tracers/TestTracer.ts +146 -0
- package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +184 -0
- package/src/lib/tracers/__tests__/NoOpTracer.test.ts +204 -0
- package/src/lib/tracers/__tests__/StdioTracer.test.ts +313 -0
- package/src/lib/tracers/__tests__/TestTracer.test.ts +200 -0
- package/src/lib/tracers/index.ts +12 -0
- package/src/lib/types.ts +498 -0
- package/src/lib/utf8Cache.ts +201 -0
- package/src/lib/wasm/WasmBufferStrategy.ts +219 -0
- package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +256 -0
- package/src/lib/wasm/__tests__/wasm-integration.test.ts +476 -0
- package/src/lib/wasm/__tests__/wasmAllocator.test.ts +699 -0
- package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +449 -0
- package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +390 -0
- package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +444 -0
- package/src/lib/wasm/allocator.zig +945 -0
- package/src/lib/wasm/wasmAllocator.ts +469 -0
- package/src/lib/wasm/wasmSpanBuffer.ts +1014 -0
- package/src/lib/wasm/wasmTraceRoot.ts +315 -0
- package/src/node.ts +10 -0
- package/src/testing.ts +18 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpanContext Types for Op-Centric API
|
|
3
|
+
*
|
|
4
|
+
* Core types for span-level operations within the trace logging system.
|
|
5
|
+
* These types define the context passed to Op functions for:
|
|
6
|
+
* - Tag writing (row 0 attributes)
|
|
7
|
+
* - Structured logging (rows 2+)
|
|
8
|
+
* - Result handling (ok/err)
|
|
9
|
+
* - Child span creation
|
|
10
|
+
* - Feature flag access
|
|
11
|
+
* - Dependency access
|
|
12
|
+
*
|
|
13
|
+
* ## Dependency Layer
|
|
14
|
+
* This module is at Layer 2 in the type hierarchy:
|
|
15
|
+
* - Depends on: result (Layer 1), types (Layer 3), featureFlagTypes (Layer 1)
|
|
16
|
+
* - Depended on by: opTypes (Layer 3)
|
|
17
|
+
*
|
|
18
|
+
* SpanFn now uses Op<Ctx, Args, S, E> directly (no structural typing).
|
|
19
|
+
*/
|
|
20
|
+
import type { FluentLogEntry as FluentLogEntryFromGenerator } from '../codegen/spanLoggerGenerator.js';
|
|
21
|
+
import type { Err, Ok, Result } from '../result.js';
|
|
22
|
+
import type { FeatureFlagEvaluator, InferFeatureFlagsWithContext } from '../schema/evaluator.js';
|
|
23
|
+
import type { LogSchema } from '../schema/LogSchema.js';
|
|
24
|
+
import type { InferSchema } from '../schema/types.js';
|
|
25
|
+
import type { SpanBuffer } from '../types.js';
|
|
26
|
+
import type { Op } from './opTypes.js';
|
|
27
|
+
import type { OpContext } from './types.js';
|
|
28
|
+
/**
|
|
29
|
+
* DepsConfig - structural type to avoid importing from opGroupTypes.
|
|
30
|
+
* Represents a record of dependency groups.
|
|
31
|
+
*/
|
|
32
|
+
export type DepsConfig = Record<string, any>;
|
|
33
|
+
/**
|
|
34
|
+
* ResolvedDeps - structural type to avoid importing from opGroupTypes.
|
|
35
|
+
* At runtime, deps are resolved OpGroups with their ops accessible.
|
|
36
|
+
*/
|
|
37
|
+
export type ResolvedDeps<_D extends DepsConfig> = Record<string, any>;
|
|
38
|
+
/**
|
|
39
|
+
* Tag writer for setting span attributes (row 0)
|
|
40
|
+
* Generated at runtime with typed methods per schema field.
|
|
41
|
+
*
|
|
42
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
43
|
+
* - Writes to row 0 (fixed layout for span-start attributes)
|
|
44
|
+
* - All methods return TagWriter<T> for fluent chaining
|
|
45
|
+
* - Generated at runtime via createTagWriter()
|
|
46
|
+
*/
|
|
47
|
+
export type TagWriter<T extends LogSchema> = {
|
|
48
|
+
[K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => TagWriter<T>;
|
|
49
|
+
} & {
|
|
50
|
+
/** Set multiple attributes at once */
|
|
51
|
+
with(attributes: Partial<InferSchema<T>>): TagWriter<T>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* SpanLogger - public API surface for structured logging.
|
|
55
|
+
*
|
|
56
|
+
* Includes core methods (info/debug/warn/error) from BaseSpanLogger
|
|
57
|
+
* and schema-specific methods from ColumnWriter.
|
|
58
|
+
* Internal methods (_setScope, _buffer, etc.) are hidden from this type.
|
|
59
|
+
*
|
|
60
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
61
|
+
* - Each level (info/debug/warn/error) creates a log entry
|
|
62
|
+
* - Returns FluentLogEntry for chaining field setters
|
|
63
|
+
* - Generated at runtime via createSpanLoggerFromGenerator()
|
|
64
|
+
*/
|
|
65
|
+
export interface SpanLogger<T extends LogSchema> {
|
|
66
|
+
/** Log at info level */
|
|
67
|
+
info(message: string): FluentLogEntry<T>;
|
|
68
|
+
/** Log at debug level */
|
|
69
|
+
debug(message: string): FluentLogEntry<T>;
|
|
70
|
+
/** Log at warn level */
|
|
71
|
+
warn(message: string): FluentLogEntry<T>;
|
|
72
|
+
/** Log at error level */
|
|
73
|
+
error(message: string): FluentLogEntry<T>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Fluent log entry - chainable attribute setters after log level.
|
|
77
|
+
*
|
|
78
|
+
* Re-exported from spanLoggerGenerator.ts to avoid circular dependencies.
|
|
79
|
+
* The implementation in spanLoggerGenerator.ts is the source of truth.
|
|
80
|
+
*
|
|
81
|
+
* Allows setting attributes after choosing a log level:
|
|
82
|
+
* ctx.log.info('message').userId('u1').requestId('r1')
|
|
83
|
+
*
|
|
84
|
+
* All attributes are optional, chainable, and return FluentLogEntry for continuation.
|
|
85
|
+
*
|
|
86
|
+
* Includes system schema fields for direct access (no information hiding):
|
|
87
|
+
* - line(n) - Source line number (0-65535)
|
|
88
|
+
* - error_code(code) - Error code string
|
|
89
|
+
* - exception_stack(stack) - Exception stack trace
|
|
90
|
+
* - ff_value(value) - Feature flag value
|
|
91
|
+
* - uint64_value(value) - BigInt value
|
|
92
|
+
*
|
|
93
|
+
* Per specs/lmao/01c_context_flow_and_op_wrappers.md "Line Number System":
|
|
94
|
+
* - TypeScript transformer injects line() calls at compile time
|
|
95
|
+
* - No runtime overhead - just a method call with literal number
|
|
96
|
+
*/
|
|
97
|
+
export type FluentLogEntry<T extends LogSchema> = FluentLogEntryFromGenerator<T>;
|
|
98
|
+
/**
|
|
99
|
+
* SpanFn - overloaded span creation function.
|
|
100
|
+
*
|
|
101
|
+
* Per specs/lmao/01l_op_context_pattern.md and 01o lines 34-72:
|
|
102
|
+
* Creates child spans with type-safe Op invocation or inline closures, with/without line numbers.
|
|
103
|
+
*
|
|
104
|
+
* The transformer injects line numbers at compile time, but runtime supports both patterns for fallback.
|
|
105
|
+
* Uses Op<Ctx, Args, S, E> and returns Result<S, E> (no generic R).
|
|
106
|
+
*/
|
|
107
|
+
export type SpanFn<Ctx extends OpContext> = {
|
|
108
|
+
/**
|
|
109
|
+
* Create child span with line number and Op invocation.
|
|
110
|
+
*
|
|
111
|
+
* Per spec 01o lines 46-49: Monomorphic span_op for transformer-injected line numbers.
|
|
112
|
+
*
|
|
113
|
+
* @param line - Source code line number (injected by transformer at compile time)
|
|
114
|
+
* @param name - Child span name (overrides Op's default name)
|
|
115
|
+
* @param op - Op to invoke (type-safe with Args, Success, Error types)
|
|
116
|
+
* @param args - Arguments to pass to Op function
|
|
117
|
+
* @returns Promise resolving to Result<S, E>
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* const result = await ctx.span(42, 'fetch-user', fetchUserOp, userId);
|
|
121
|
+
*/
|
|
122
|
+
<S, E, Args extends unknown[]>(line: number, name: string, op: Op<Ctx, Args, S, E>, ...args: Args): Promise<Result<S, E>>;
|
|
123
|
+
/**
|
|
124
|
+
* Create child span with line number and inline closure.
|
|
125
|
+
*
|
|
126
|
+
* Per spec 01o lines 51-53: Monomorphic span_fn for transformer-injected line numbers.
|
|
127
|
+
*
|
|
128
|
+
* @param line - Source code line number (injected by transformer at compile time)
|
|
129
|
+
* @param name - Child span name
|
|
130
|
+
* @param fn - Async function to execute in child span (receives SpanContext<Ctx>)
|
|
131
|
+
* @returns Promise resolving to Result<S, E>
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* const result = await ctx.span(42, 'validate', async (childCtx) => {
|
|
135
|
+
* childCtx.tag.step('validation');
|
|
136
|
+
* return childCtx.ok({ valid: true });
|
|
137
|
+
* });
|
|
138
|
+
*/
|
|
139
|
+
<S, E>(line: number, name: string, fn: (ctx: SpanContext<Ctx>) => Result<S, E> | Promise<Result<S, E>>): Promise<Result<S, E>>;
|
|
140
|
+
/**
|
|
141
|
+
* Create child span with Op invocation (most common - no line number).
|
|
142
|
+
*
|
|
143
|
+
* Per spec 01o lines 55-71: Polymorphic span dispatcher for fallback when transformer didn't inject line number.
|
|
144
|
+
*
|
|
145
|
+
* @param name - Child span name (overrides Op's default name)
|
|
146
|
+
* @param op - Op to invoke (type-safe with Args, Success, Error types)
|
|
147
|
+
* @param args - Arguments to pass to Op function
|
|
148
|
+
* @returns Promise resolving to Result<S, E>
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* const result = await ctx.span('fetch-user', fetchUserOp, userId);
|
|
152
|
+
*/
|
|
153
|
+
<S, E, Args extends unknown[]>(name: string, op: Op<Ctx, Args, S, E>, ...args: Args): Promise<Result<S, E>>;
|
|
154
|
+
/**
|
|
155
|
+
* Create child span with inline closure (most common - no line number).
|
|
156
|
+
*
|
|
157
|
+
* Per spec 01o lines 55-71: Polymorphic span dispatcher for fallback when transformer didn't inject line number.
|
|
158
|
+
*
|
|
159
|
+
* @param name - Child span name
|
|
160
|
+
* @param fn - Async function to execute in child span (receives SpanContext<Ctx>)
|
|
161
|
+
* @returns Promise resolving to Result<S, E>
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* const result = await ctx.span('validate', async (childCtx) => {
|
|
165
|
+
* childCtx.tag.step('validation');
|
|
166
|
+
* return childCtx.ok({ valid: true });
|
|
167
|
+
* });
|
|
168
|
+
*/
|
|
169
|
+
<S, E>(name: string, fn: (ctx: SpanContext<Ctx>) => Result<S, E> | Promise<Result<S, E>>): Promise<Result<S, E>>;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* SpanSyncFn - synchronous child span creation.
|
|
173
|
+
*
|
|
174
|
+
* Use when the callback is guaranteed sync and should return immediately
|
|
175
|
+
* with a Result envelope.
|
|
176
|
+
*/
|
|
177
|
+
export type SpanSyncFn<Ctx extends OpContext> = <S, E>(name: string, fn: (ctx: SpanContext<Ctx>) => Result<S, E>) => Result<S, E>;
|
|
178
|
+
/**
|
|
179
|
+
* SpanContext - what op functions receive.
|
|
180
|
+
*
|
|
181
|
+
* Per specs/lmao/01c_context_flow_and_op_wrappers.md and 01l:
|
|
182
|
+
* - Passed to Op functions as first argument
|
|
183
|
+
* - Combines built-in properties with user-extensible UserCtx via intersection
|
|
184
|
+
* - Child spans inherit scoped attributes from parent (frozen copy for safety)
|
|
185
|
+
* - User properties from Ctx['userCtx'] are spread via intersection at end
|
|
186
|
+
*
|
|
187
|
+
* @template Ctx - Bundled context (logSchema, flags, deps, userCtx)
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* const createUser = op('create-user', async (ctx, userData) => {
|
|
192
|
+
* ctx.setScope({ userId: userData.id });
|
|
193
|
+
* ctx.tag.operation('INSERT');
|
|
194
|
+
* ctx.log.info('Creating user').line(42);
|
|
195
|
+
* return ctx.ok(user);
|
|
196
|
+
* });
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export type SpanContext<Ctx extends OpContext> = {
|
|
200
|
+
/**
|
|
201
|
+
* The underlying SpanBuffer for this context.
|
|
202
|
+
*
|
|
203
|
+
* Useful for Arrow table conversion after task completion.
|
|
204
|
+
* The buffer contains all trace data written during this span's execution.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* const result = await myTask(requestCtx, args);
|
|
209
|
+
* const table = convertToArrowTable(ctx.buffer);
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
buffer: SpanBuffer<Ctx['logSchema']>;
|
|
213
|
+
/**
|
|
214
|
+
* Tag writer for span attributes (row 0).
|
|
215
|
+
*
|
|
216
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
217
|
+
* - Writes to row 0 (fixed layout for span-start attributes)
|
|
218
|
+
* - All methods return TagWriter for fluent chaining
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ctx.tag.userId('u1').requestId('r1').operation('INSERT');
|
|
222
|
+
*/
|
|
223
|
+
tag: TagWriter<Ctx['logSchema']>;
|
|
224
|
+
/**
|
|
225
|
+
* Structured logger (rows 2+).
|
|
226
|
+
*
|
|
227
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
228
|
+
* - info/debug/warn/error create log entries
|
|
229
|
+
* - Returns FluentLogEntry for chaining field setters
|
|
230
|
+
* - Entries are appended after row 1
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ctx.log.info('Processing request').userId('u1').line(42);
|
|
234
|
+
*/
|
|
235
|
+
log: SpanLogger<Ctx['logSchema']>;
|
|
236
|
+
/**
|
|
237
|
+
* Feature flags (logs access to current span).
|
|
238
|
+
*
|
|
239
|
+
* Per specs/lmao/01p_feature_flags.md:
|
|
240
|
+
* - Sync access via ff.flagName / ff['flagName']
|
|
241
|
+
* - Async access via await ff.get('flagName')
|
|
242
|
+
* - Logs flag access to span automatically
|
|
243
|
+
* - Type-safe evaluation with context
|
|
244
|
+
*/
|
|
245
|
+
ff: FeatureFlagEvaluator<Ctx> & InferFeatureFlagsWithContext<Ctx>;
|
|
246
|
+
/**
|
|
247
|
+
* Dependencies - can be destructured!
|
|
248
|
+
*
|
|
249
|
+
* Per spec 01l lines 757-758:
|
|
250
|
+
* - Plain object references to dependency modules/ops
|
|
251
|
+
* - Zero-allocation deps (not closures)
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* const { retry, auth } = deps;
|
|
255
|
+
* await span('retry', retry, 1);
|
|
256
|
+
*/
|
|
257
|
+
deps: ResolvedDeps<Ctx['deps']>;
|
|
258
|
+
/**
|
|
259
|
+
* Create a success result with optional attributes.
|
|
260
|
+
*
|
|
261
|
+
* Writes span-ok entry to row 1 (span-end).
|
|
262
|
+
* Supports fluent chaining with .with() and .message().
|
|
263
|
+
*
|
|
264
|
+
* @param value - The success value
|
|
265
|
+
* @returns Fluent result builder
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* return ctx.ok(user).with({ userId: user.id });
|
|
269
|
+
*/
|
|
270
|
+
ok<S>(value: S): Ok<S, Ctx['logSchema']>;
|
|
271
|
+
/**
|
|
272
|
+
* Create an error result with optional attributes.
|
|
273
|
+
*
|
|
274
|
+
* Writes span-err entry to row 1 (span-end).
|
|
275
|
+
* Supports fluent chaining with .with() and .message().
|
|
276
|
+
*
|
|
277
|
+
* @param code - Error code string
|
|
278
|
+
* @param details - Error details
|
|
279
|
+
* @returns Fluent result builder
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* const NOT_FOUND = defineCodeError('NOT_FOUND')<{ userId: string }>();
|
|
283
|
+
* return ctx.err(NOT_FOUND({ userId })).message('User not found');
|
|
284
|
+
*/
|
|
285
|
+
err<E>(error: E): Err<E, Ctx['logSchema']>;
|
|
286
|
+
/**
|
|
287
|
+
* Create a child span with its own buffer.
|
|
288
|
+
*
|
|
289
|
+
* Child spans inherit scoped attributes from the parent.
|
|
290
|
+
* The child function receives a new SpanContext.
|
|
291
|
+
*
|
|
292
|
+
* Per specs/lmao/01i_span_scope_attributes.md:
|
|
293
|
+
* - Child inherits parent's scope by reference (safe because immutable)
|
|
294
|
+
* - Child can override scope values with setScope()
|
|
295
|
+
* - Scope is frozen at each level to prevent race conditions
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* const result = await ctx.span('validate', async (childCtx) => {
|
|
299
|
+
* childCtx.tag.step('validation');
|
|
300
|
+
* return childCtx.ok({ valid: true });
|
|
301
|
+
* });
|
|
302
|
+
*/
|
|
303
|
+
span: SpanFn<Ctx>;
|
|
304
|
+
/**
|
|
305
|
+
* Create a synchronous child span.
|
|
306
|
+
*
|
|
307
|
+
* `spanSync` is for sync callbacks only and returns Result directly.
|
|
308
|
+
* It does not await or perform async retry/backoff behavior.
|
|
309
|
+
*/
|
|
310
|
+
spanSync: SpanSyncFn<Ctx>;
|
|
311
|
+
/**
|
|
312
|
+
* Set scoped attributes that auto-propagate to all subsequent log entries.
|
|
313
|
+
*
|
|
314
|
+
* Scoped attributes are automatically included in all log entries
|
|
315
|
+
* and inherited by child spans. Uses merge semantics - pass null to clear a value.
|
|
316
|
+
*
|
|
317
|
+
* Per specs/lmao/01i_span_scope_attributes.md:
|
|
318
|
+
* - Creates a NEW frozen object (never mutates existing scope)
|
|
319
|
+
* - setScope({ x: null }) removes x from scope
|
|
320
|
+
* - Child spans get frozen snapshot at creation (async-safe)
|
|
321
|
+
*
|
|
322
|
+
* @param attributes - Attributes to scope to this span (null clears a value)
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ctx.setScope({ requestId: req.id, userId: req.user?.id });
|
|
326
|
+
* ctx.log.info('Processing'); // Includes requestId and userId
|
|
327
|
+
* ctx.setScope({ userId: null }); // Clear userId from scope
|
|
328
|
+
*/
|
|
329
|
+
setScope(values: Partial<InferSchema<Ctx['logSchema']>> | null): void;
|
|
330
|
+
/**
|
|
331
|
+
* Read-only view of current scoped attributes.
|
|
332
|
+
*
|
|
333
|
+
* Returns the frozen scope object containing all currently scoped values.
|
|
334
|
+
* Use setScope() to modify scope values.
|
|
335
|
+
*
|
|
336
|
+
* Per specs/lmao/01i_span_scope_attributes.md:
|
|
337
|
+
* - Always a frozen object, never undefined
|
|
338
|
+
* - Initialized to EMPTY_SCOPE, only replaced with new frozen objects
|
|
339
|
+
* - Safe to read from async code without race conditions
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ctx.setScope({ requestId: 'r1' });
|
|
343
|
+
* console.log(ctx.scope.requestId); // 'r1'
|
|
344
|
+
*/
|
|
345
|
+
scope: Readonly<Partial<InferSchema<Ctx['logSchema']>>>;
|
|
346
|
+
} & Ctx['userCtx'];
|
|
347
|
+
//# sourceMappingURL=spanContextTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spanContextTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/spanContextTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Op-Centric API Type Definitions Hub
|
|
3
|
+
*
|
|
4
|
+
* This is the central hub for all Op-centric API types. Consumers should import
|
|
5
|
+
* from this file rather than individual type files.
|
|
6
|
+
*
|
|
7
|
+
* Organized into logical groups:
|
|
8
|
+
* - Context utilities (reserved props, null/undefined key extraction, validation)
|
|
9
|
+
* - Feature flags (schema, evaluator, bound flags)
|
|
10
|
+
* - OpGroup (groups, mapping, deps, schema combination)
|
|
11
|
+
* - Op (metadata, function signature, instance)
|
|
12
|
+
* - SpanContext (tag writer, logger, span function, full context)
|
|
13
|
+
*
|
|
14
|
+
* @module opContext/types
|
|
15
|
+
*/
|
|
16
|
+
export type { FlagEvaluator, SpanContextWithoutFf } from '../schema/evaluator.js';
|
|
17
|
+
export { type DefaultKeys, type NullKeys, type OptionalContextParams, RESERVED_CONTEXT_PROPS, type RequiredContextParams, type ReservedContextProp, type ResolvedContext, type TraceContextParams, type UndefinedKeys, type ValidateUserContext, } from './contextTypes.js';
|
|
18
|
+
export type { BoundFeatureFlags, FeatureFlagSchema } from './featureFlagTypes.js';
|
|
19
|
+
export type { AnyOpGroup, ColumnMapping, CombinedDepsSchema, ContributedSchemaOf, DepsConfig, EffectiveSchema, MappedOpGroup, MappedSchema, OpGroup, PrefixedSchema, ResolvedDeps, SchemaFieldsOf, UnionToIntersection, } from './opGroupTypes.js';
|
|
20
|
+
export type { Op, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
21
|
+
export type { FluentLogEntry, SpanContext, SpanFn, SpanLogger, SpanSyncFn, TagWriter } from './spanContextTypes.js';
|
|
22
|
+
export { LogSchema } from '../schema/LogSchema.js';
|
|
23
|
+
export type { FeatureFlagDefinition, InferSchema, SchemaFields } from '../schema/types.js';
|
|
24
|
+
/**
|
|
25
|
+
* Unique symbol to carry OpContext type on OpContextFactory.
|
|
26
|
+
* Allows extracting the bundled type without passing 4 separate params.
|
|
27
|
+
* Must be a runtime value (not just `declare const`) so it can be used as property key.
|
|
28
|
+
*/
|
|
29
|
+
declare const opContextType: unique symbol;
|
|
30
|
+
/**
|
|
31
|
+
* Helper to extract OpContext from a factory.
|
|
32
|
+
* @example
|
|
33
|
+
* const { defineOp } = defineOpContext({ ... });
|
|
34
|
+
* type MyCtx = OpContextOf<typeof factory>; // OpContext<T, FF, Deps, UserCtx>
|
|
35
|
+
*/
|
|
36
|
+
export type OpContextOf<F> = F extends {
|
|
37
|
+
readonly [opContextType]?: infer Ctx;
|
|
38
|
+
} ? Ctx : never;
|
|
39
|
+
export { opContextType };
|
|
40
|
+
/**
|
|
41
|
+
* Bundled type parameters for Op context.
|
|
42
|
+
*
|
|
43
|
+
* Created by defineOpContext() and shared by all Ops from that factory.
|
|
44
|
+
* Reduces type parameter count: Op<Ctx, Args, S, E> instead of Op<T, FF, Deps, UserCtx, Args, R>
|
|
45
|
+
*
|
|
46
|
+
* @template T - LogSchema type
|
|
47
|
+
* @template FF - Feature flag schema
|
|
48
|
+
* @template Deps - Dependencies config
|
|
49
|
+
* @template UserCtx - User context properties
|
|
50
|
+
*/
|
|
51
|
+
export type OpContext<T extends LogSchema = LogSchema, FF extends FeatureFlagSchema = FeatureFlagSchema, Deps extends DepsConfig = DepsConfig, UserCtx extends Record<string, unknown> = Record<string, unknown>> = {
|
|
52
|
+
readonly logSchema: T;
|
|
53
|
+
readonly flags: FF;
|
|
54
|
+
readonly deps: Deps;
|
|
55
|
+
readonly userCtx: UserCtx;
|
|
56
|
+
};
|
|
57
|
+
import type { LogSchema } from '../schema/LogSchema.js';
|
|
58
|
+
import type { SchemaFields } from '../schema/types.js';
|
|
59
|
+
import type { ValidateUserContext } from './contextTypes.js';
|
|
60
|
+
import type { FeatureFlagSchema } from './featureFlagTypes.js';
|
|
61
|
+
import type { DepsConfig, OpGroup } from './opGroupTypes.js';
|
|
62
|
+
import type { Op, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
63
|
+
/**
|
|
64
|
+
* Configuration for defineOpContext
|
|
65
|
+
*
|
|
66
|
+
* This is the main configuration interface for creating an Op context factory.
|
|
67
|
+
* It defines:
|
|
68
|
+
* - The app's own schema (logSchema)
|
|
69
|
+
* - Dependencies from other OpGroups (deps)
|
|
70
|
+
* - Feature flag schema (flags)
|
|
71
|
+
* - User-defined context properties (ctx)
|
|
72
|
+
*
|
|
73
|
+
* @template T - LogSchema fields (app's own schema)
|
|
74
|
+
* @template FF - Feature flag schema
|
|
75
|
+
* @template Deps - Dependency record (other OpGroups with mappings)
|
|
76
|
+
* @template UserCtx - User-defined context properties
|
|
77
|
+
*
|
|
78
|
+
* The effective schema for ops = `T & CombinedDepsSchema<Deps>`.
|
|
79
|
+
* This means ops can write to columns from both the app's schema AND
|
|
80
|
+
* all columns contributed by wired dependencies (after mapping/prefixing).
|
|
81
|
+
*/
|
|
82
|
+
export interface OpContextConfig<T extends SchemaFields, FF extends FeatureFlagSchema, Deps extends DepsConfig, UserCtx extends Record<string, unknown>> {
|
|
83
|
+
/**
|
|
84
|
+
* Log schema defining the app's own columns.
|
|
85
|
+
*
|
|
86
|
+
* The effective schema for ops is this PLUS columns from deps.
|
|
87
|
+
* E.g., if you wire `http: httpOps.prefix('http')`, ops can also
|
|
88
|
+
* write to `http_status`, `http_url`, etc.
|
|
89
|
+
*/
|
|
90
|
+
readonly logSchema: LogSchema<T>;
|
|
91
|
+
/**
|
|
92
|
+
* Dependencies - other OpGroups that can be invoked via ctx.deps
|
|
93
|
+
*
|
|
94
|
+
* Each dep's columns are added to the effective schema based on its mapping:
|
|
95
|
+
* - `.prefix('http')` → columns become `http_status`, `http_url`, etc.
|
|
96
|
+
* - `.mapColumns({ query: 'query' })` → shares the `query` column
|
|
97
|
+
* - `.mapColumns({ _internal: null })` → drops the `_internal` column
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* deps: {
|
|
101
|
+
* pg: postgresOps.mapColumns({ query: 'query', rows: 'pg_rows' }),
|
|
102
|
+
* mysql: mysqlOps.mapColumns({ query: 'query', duration: 'mysql_duration' }),
|
|
103
|
+
* http: httpOps.prefix('http'),
|
|
104
|
+
* }
|
|
105
|
+
* // Effective schema includes: query, pg_rows, mysql_duration, http_status, http_url, ...
|
|
106
|
+
*/
|
|
107
|
+
readonly deps?: Deps;
|
|
108
|
+
/**
|
|
109
|
+
* Feature flag schema - defines available flags and their types
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* flags: defineFeatureFlags({
|
|
113
|
+
* newCheckout: S.boolean().default(false).async(),
|
|
114
|
+
* maxRetries: S.number().default(3).sync(),
|
|
115
|
+
* })
|
|
116
|
+
*/
|
|
117
|
+
readonly flags?: FF;
|
|
118
|
+
/**
|
|
119
|
+
* User-defined context properties
|
|
120
|
+
*
|
|
121
|
+
* ALL properties must be declared here for V8 hidden class optimization.
|
|
122
|
+
* Properties set to `null` must be provided when calling createTrace().
|
|
123
|
+
* Properties with values have defaults and can be optionally overridden.
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ctx: {
|
|
127
|
+
* env: null as CFWorkerEnv, // Must provide at createTrace()
|
|
128
|
+
* config: { retryCount: 3 }, // Has default, can override
|
|
129
|
+
* requestId: null as string, // Must provide at createTrace()
|
|
130
|
+
* }
|
|
131
|
+
*/
|
|
132
|
+
readonly ctx?: ValidateUserContext<UserCtx>;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Runtime binding from defineOpContext for use with Tracer.
|
|
136
|
+
*
|
|
137
|
+
* Contains everything a Tracer needs to create traces:
|
|
138
|
+
* - logBinding: Schema and capacity stats for buffer creation
|
|
139
|
+
* - ctxDefaults: User context defaults (with null sentinels for required fields)
|
|
140
|
+
* - deps: Wired dependencies for ctx.deps
|
|
141
|
+
*
|
|
142
|
+
* Carries phantom type via [opContextType] for full OpContext inference.
|
|
143
|
+
* This allows `new TestTracer(ctx)` to infer T from ctx.logBinding without
|
|
144
|
+
* explicit type parameters.
|
|
145
|
+
*
|
|
146
|
+
* @template T - LogSchema type
|
|
147
|
+
* @template FF - Feature flag schema
|
|
148
|
+
* @template Deps - Dependencies config
|
|
149
|
+
* @template UserCtx - User context properties
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* const ctx = defineOpContext({
|
|
154
|
+
* logSchema: defineLogSchema({ userId: S.category() }),
|
|
155
|
+
* ctx: { env: null as Env },
|
|
156
|
+
* });
|
|
157
|
+
*
|
|
158
|
+
* // Tracer infers types from binding - no explicit type params needed
|
|
159
|
+
* const { trace } = new TestTracer(ctx);
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export interface OpContextBinding<T extends LogSchema = LogSchema, FF extends FeatureFlagSchema = FeatureFlagSchema, Deps extends DepsConfig = DepsConfig, UserCtx extends Record<string, unknown> = Record<string, unknown>> {
|
|
163
|
+
/**
|
|
164
|
+
* Phantom type - extract via OpContextOf<typeof binding>
|
|
165
|
+
*
|
|
166
|
+
* Carries the bundled OpContext type for type inference.
|
|
167
|
+
* Tracers use this to infer the full context type without explicit parameters.
|
|
168
|
+
*
|
|
169
|
+
* @internal
|
|
170
|
+
*/
|
|
171
|
+
readonly [opContextType]?: OpContext<T, FF, Deps, UserCtx>;
|
|
172
|
+
/**
|
|
173
|
+
* LogBinding for this context (schema, capacity stats, optional prefix view).
|
|
174
|
+
* Used by Tracer to create SpanBuffers and SpanContexts.
|
|
175
|
+
* Typed with schema T for Op type safety.
|
|
176
|
+
*/
|
|
177
|
+
readonly logBinding: import('../logBinding.js').LogBinding<T>;
|
|
178
|
+
/**
|
|
179
|
+
* Feature flag schema needed by tracers to bootstrap typed evaluators.
|
|
180
|
+
*/
|
|
181
|
+
readonly flags: FF;
|
|
182
|
+
/**
|
|
183
|
+
* User context defaults from ctx config.
|
|
184
|
+
* Used by Tracer to merge with trace-level overrides.
|
|
185
|
+
* Properties with null values are required at trace creation.
|
|
186
|
+
*/
|
|
187
|
+
readonly ctxDefaults: UserCtx;
|
|
188
|
+
/**
|
|
189
|
+
* Dependencies wired at defineOpContext time.
|
|
190
|
+
* Used by Tracer to populate ctx.deps on root spans.
|
|
191
|
+
*/
|
|
192
|
+
readonly deps: Deps;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Return type of defineOpContext
|
|
196
|
+
*
|
|
197
|
+
* This is the factory returned by defineOpContext that provides:
|
|
198
|
+
* - `defineOp`: Define a single Op with explicit name
|
|
199
|
+
* - `defineOps`: Define multiple Ops and create an OpGroup
|
|
200
|
+
* - `logSchema`: The combined effective schema
|
|
201
|
+
* - `flags`: The feature flag schema
|
|
202
|
+
*
|
|
203
|
+
* Extends OpContextBinding to provide everything Tracer needs.
|
|
204
|
+
* Uses unique symbol [opContextType] to carry the bundled OpContext type
|
|
205
|
+
* for extraction via OpContextOf<typeof factory>.
|
|
206
|
+
*
|
|
207
|
+
* @template T - The app's LogSchema
|
|
208
|
+
* @template FF - Feature flag schema
|
|
209
|
+
* @template Deps - Wired dependencies
|
|
210
|
+
* @template UserCtx - User context properties
|
|
211
|
+
*
|
|
212
|
+
* The effective schema for ops is `T & CombinedDepsSchema<Deps>` - the app's
|
|
213
|
+
* schema combined with all columns contributed by wired dependencies.
|
|
214
|
+
*/
|
|
215
|
+
export interface OpContextFactory<T extends LogSchema, FF extends FeatureFlagSchema, Deps extends DepsConfig, UserCtx extends Record<string, unknown>> extends OpContextBinding<T, FF, Deps, UserCtx> {
|
|
216
|
+
/**
|
|
217
|
+
* The combined log schema (app schema + dep contributions).
|
|
218
|
+
*
|
|
219
|
+
* This is the effective schema that ops can write to. It includes:
|
|
220
|
+
* - All columns from the app's logSchema
|
|
221
|
+
* - All mapped/prefixed columns from dependencies
|
|
222
|
+
*
|
|
223
|
+
* External consumers can use this to see the full schema shape.
|
|
224
|
+
*/
|
|
225
|
+
readonly logSchema: T;
|
|
226
|
+
/**
|
|
227
|
+
* The feature flag schema (for external consumers)
|
|
228
|
+
*/
|
|
229
|
+
readonly flags: FF;
|
|
230
|
+
/**
|
|
231
|
+
* Define a single Op with explicit name.
|
|
232
|
+
*
|
|
233
|
+
* Creates an Op instance that wraps your function with metadata for tracing.
|
|
234
|
+
* The Op can be invoked via ctx.span() or exported for use by other modules.
|
|
235
|
+
*
|
|
236
|
+
* @param name - Op name (used for default span naming and metrics)
|
|
237
|
+
* @param fn - Op function receiving SpanContext and returning Result<S, E>
|
|
238
|
+
* @param metadata - Optional metadata override (package_name, package_file, etc.)
|
|
239
|
+
* @returns Op instance with type Op<OpContext<T, FF, Deps, UserCtx>, Args, S, E>
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```typescript
|
|
243
|
+
* const fetchUser = defineOp('fetchUser', async (ctx, userId: string) => {
|
|
244
|
+
* ctx.tag.userId(userId);
|
|
245
|
+
* const user = await db.getUser(userId);
|
|
246
|
+
* if (!user) return ctx.err('NOT_FOUND', { userId });
|
|
247
|
+
* return ctx.ok(user);
|
|
248
|
+
* });
|
|
249
|
+
*
|
|
250
|
+
* // Invoke via span:
|
|
251
|
+
* const result = await ctx.span('get-user', fetchUser, 'user-123');
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
defineOp<Args extends unknown[], S, E>(name: string, fn: OpFn<OpContext<T, FF, Deps, UserCtx>, Args, S, E>, metadata?: Partial<OpMetadata>): Op<OpContext<T, FF, Deps, UserCtx>, Args, S, E>;
|
|
255
|
+
/**
|
|
256
|
+
* Define multiple Ops at once and create an OpGroup.
|
|
257
|
+
*
|
|
258
|
+
* Property keys become Op names. Supports `this` binding for calling
|
|
259
|
+
* sibling ops within the same batch. Returns an OpGroup that can be:
|
|
260
|
+
* - Prefixed with `.prefix('http')` for column namespacing
|
|
261
|
+
* - Column-mapped with `.mapColumns({ query: 'query' })` for sharing
|
|
262
|
+
* - Wired as a dependency in another module's `deps` config
|
|
263
|
+
*
|
|
264
|
+
* @param definitions - Record of Op functions or existing Op instances
|
|
265
|
+
* @returns OpGroup with all defined Ops accessible as properties
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* export const userOps = defineOps({
|
|
270
|
+
* // Reuse existing Op
|
|
271
|
+
* fetchUser,
|
|
272
|
+
*
|
|
273
|
+
* // Define new op with method syntax
|
|
274
|
+
* async createUser(ctx, data: UserData) {
|
|
275
|
+
* ctx.tag.operation('INSERT');
|
|
276
|
+
* const user = await db.createUser(data);
|
|
277
|
+
* return ctx.ok(user);
|
|
278
|
+
* },
|
|
279
|
+
*
|
|
280
|
+
* // Call sibling op via this.opName
|
|
281
|
+
* async createAndFetch(ctx, data: UserData) {
|
|
282
|
+
* const created = await ctx.span('create', this.createUser, data);
|
|
283
|
+
* if (!created.success) return created;
|
|
284
|
+
* return ctx.span('fetch', this.fetchUser, created.value.id);
|
|
285
|
+
* },
|
|
286
|
+
* });
|
|
287
|
+
*
|
|
288
|
+
* // Wire as dependency with prefix:
|
|
289
|
+
* deps: { users: userOps.prefix('user') }
|
|
290
|
+
*
|
|
291
|
+
* // Invoke from parent context:
|
|
292
|
+
* await ctx.span('create-user', userOps.createUser, userData);
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
defineOps<Defs extends Record<string, OpFn<OpContext<T, FF, Deps, UserCtx>, unknown[], unknown, unknown> | Op<OpContext<T, FF, Deps, UserCtx>, unknown[], unknown, unknown>>>(definitions: Defs): OpGroup<OpContext<T, FF, Deps, UserCtx>, OpsFromRecord<OpContext<T, FF, Deps, UserCtx>, Defs>>;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Context type utilities (reserved props, null/undefined key extraction, validation)
|
|
2
|
+
export { RESERVED_CONTEXT_PROPS, } from './contextTypes.js';
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// CONVENIENCE RE-EXPORTS
|
|
5
|
+
// =============================================================================
|
|
6
|
+
export { LogSchema } from '../schema/LogSchema.js';
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// OP CONTEXT TYPE SYMBOL
|
|
9
|
+
// =============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Unique symbol to carry OpContext type on OpContextFactory.
|
|
12
|
+
* Allows extracting the bundled type without passing 4 separate params.
|
|
13
|
+
* Must be a runtime value (not just `declare const`) so it can be used as property key.
|
|
14
|
+
*/
|
|
15
|
+
const opContextType = Symbol('opContextType');
|
|
16
|
+
export { opContextType };
|