@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,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract facts from a SpanBuffer tree.
|
|
3
|
+
*
|
|
4
|
+
* This is the bridge between LMAO's buffer system and the trace-testing
|
|
5
|
+
* fact system. It walks the buffer tree and produces strongly-typed facts.
|
|
6
|
+
*
|
|
7
|
+
* @module testing/extractFacts
|
|
8
|
+
*/
|
|
9
|
+
import type { LogSchema } from '../schema/LogSchema.js';
|
|
10
|
+
import type { SpanBuffer } from '../types.js';
|
|
11
|
+
import { type FactArray } from './facts.js';
|
|
12
|
+
/**
|
|
13
|
+
* Options for fact extraction.
|
|
14
|
+
*/
|
|
15
|
+
export interface ExtractFactsOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Include scope facts (values propagated through span tree).
|
|
18
|
+
* @default true
|
|
19
|
+
*/
|
|
20
|
+
includeScope?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Include tag facts from each row.
|
|
23
|
+
* @default true
|
|
24
|
+
*/
|
|
25
|
+
includeTags?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Include log message facts.
|
|
28
|
+
* @default true
|
|
29
|
+
*/
|
|
30
|
+
includeLogs?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Include feature flag facts.
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
35
|
+
includeFF?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Include timing metrics (duration_ns).
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
includeMetrics?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Schema field names to extract as tags.
|
|
43
|
+
* If not specified, all non-null fields are extracted.
|
|
44
|
+
*/
|
|
45
|
+
tagFields?: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract facts from a SpanBuffer tree.
|
|
49
|
+
*
|
|
50
|
+
* Walks the buffer tree depth-first and produces facts for:
|
|
51
|
+
* - Span lifecycle (started, ok, err, exception)
|
|
52
|
+
* - Log entries (info, warn, error, debug)
|
|
53
|
+
* - Tag values (from row 0 of each span)
|
|
54
|
+
* - Scope values (propagated through tree)
|
|
55
|
+
* - Feature flag accesses
|
|
56
|
+
*
|
|
57
|
+
* @param rootBuffer - The root SpanBuffer to extract from
|
|
58
|
+
* @param options - Extraction options
|
|
59
|
+
* @returns FactArray with all extracted facts
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const tracer = new TestTracer(opContext);
|
|
64
|
+
* await tracer.trace('my-op', myOp);
|
|
65
|
+
*
|
|
66
|
+
* const facts = extractFacts(tracer.rootBuffers[0]);
|
|
67
|
+
*
|
|
68
|
+
* expect(facts.has(spanOk('my-op'))).toBe(true);
|
|
69
|
+
* expect(facts.hasMatch('log:error: *')).toBe(false);
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function extractFacts<T extends LogSchema>(rootBuffer: SpanBuffer<T>, options?: ExtractFactsOptions): FactArray;
|
|
73
|
+
//# sourceMappingURL=extractFacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractFacts.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/extractFacts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAYxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,SAAS,EAYf,MAAM,YAAY,CAAC;AAsBpB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAWD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAC9C,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,mBAAwB,GAChC,SAAS,CAOX"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { ENTRY_TYPE_DEBUG, ENTRY_TYPE_ERROR, ENTRY_TYPE_FF_ACCESS, ENTRY_TYPE_FF_USAGE, ENTRY_TYPE_INFO, ENTRY_TYPE_SPAN_ERR, ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_OK, ENTRY_TYPE_WARN, } from '../schema/systemSchema.js';
|
|
2
|
+
import { createFactArray, ffFact, logFact, metricFact, scopeFact, spanErr, spanException, spanOk, spanStarted, tagFact, } from './facts.js';
|
|
3
|
+
function isUint8Array(value) {
|
|
4
|
+
return value instanceof Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
function isIndexedValues(value) {
|
|
7
|
+
return Array.isArray(value) || ArrayBuffer.isView(value);
|
|
8
|
+
}
|
|
9
|
+
function getIndexedValue(container, index) {
|
|
10
|
+
if (Array.isArray(container)) {
|
|
11
|
+
return container[index];
|
|
12
|
+
}
|
|
13
|
+
if (ArrayBuffer.isView(container)) {
|
|
14
|
+
return Reflect.get(container, index);
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const DEFAULT_OPTIONS = {
|
|
19
|
+
includeScope: true,
|
|
20
|
+
includeTags: true,
|
|
21
|
+
includeLogs: true,
|
|
22
|
+
includeFF: true,
|
|
23
|
+
includeMetrics: false,
|
|
24
|
+
tagFields: [],
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Extract facts from a SpanBuffer tree.
|
|
28
|
+
*
|
|
29
|
+
* Walks the buffer tree depth-first and produces facts for:
|
|
30
|
+
* - Span lifecycle (started, ok, err, exception)
|
|
31
|
+
* - Log entries (info, warn, error, debug)
|
|
32
|
+
* - Tag values (from row 0 of each span)
|
|
33
|
+
* - Scope values (propagated through tree)
|
|
34
|
+
* - Feature flag accesses
|
|
35
|
+
*
|
|
36
|
+
* @param rootBuffer - The root SpanBuffer to extract from
|
|
37
|
+
* @param options - Extraction options
|
|
38
|
+
* @returns FactArray with all extracted facts
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const tracer = new TestTracer(opContext);
|
|
43
|
+
* await tracer.trace('my-op', myOp);
|
|
44
|
+
*
|
|
45
|
+
* const facts = extractFacts(tracer.rootBuffers[0]);
|
|
46
|
+
*
|
|
47
|
+
* expect(facts.has(spanOk('my-op'))).toBe(true);
|
|
48
|
+
* expect(facts.hasMatch('log:error: *')).toBe(false);
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function extractFacts(rootBuffer, options = {}) {
|
|
52
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
53
|
+
const facts = [];
|
|
54
|
+
walkBuffer(rootBuffer, facts, opts);
|
|
55
|
+
return createFactArray(facts);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Walk a buffer and its children, extracting facts.
|
|
59
|
+
*/
|
|
60
|
+
function walkBuffer(buffer, facts, opts) {
|
|
61
|
+
// Span name is in message_values[0] (written by writeSpanStart)
|
|
62
|
+
const spanName = buffer.message_values[0];
|
|
63
|
+
const writeIndex = buffer._writeIndex;
|
|
64
|
+
if (writeIndex === 0) {
|
|
65
|
+
// Empty buffer - no facts to extract
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Always emit span:started as first fact for this span
|
|
69
|
+
facts.push(spanStarted(spanName));
|
|
70
|
+
// Extract scope facts (from buffer's scope values)
|
|
71
|
+
if (opts.includeScope && buffer._scopeValues) {
|
|
72
|
+
for (const [key, value] of Object.entries(buffer._scopeValues)) {
|
|
73
|
+
if (value !== undefined && value !== null) {
|
|
74
|
+
facts.push(scopeFact(key, String(value)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Extract tag facts from row 0 (ctx.tag writes here)
|
|
79
|
+
// Also check row 1 (completion row - .with() on ok()/err())
|
|
80
|
+
// And rows 2+ (log rows - .with() on log.*)
|
|
81
|
+
if (opts.includeTags) {
|
|
82
|
+
for (let row = 0; row < writeIndex; row++) {
|
|
83
|
+
extractTagFacts(buffer, row, facts, opts);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Buffer layout per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
87
|
+
// - Row 0: span-start (tags overwrite this row's attribute columns)
|
|
88
|
+
// - Row 1: span-ok/err/exception (completion status)
|
|
89
|
+
// - Row 2+: log entries (info/debug/warn/error), ff entries
|
|
90
|
+
const entryTypes = buffer.entry_type;
|
|
91
|
+
const messages = buffer.message_values;
|
|
92
|
+
// Process log/ff entries from row 2 onwards
|
|
93
|
+
for (let row = 2; row < writeIndex; row++) {
|
|
94
|
+
const entryType = entryTypes[row];
|
|
95
|
+
switch (entryType) {
|
|
96
|
+
case ENTRY_TYPE_INFO:
|
|
97
|
+
case ENTRY_TYPE_DEBUG:
|
|
98
|
+
case ENTRY_TYPE_WARN:
|
|
99
|
+
case ENTRY_TYPE_ERROR: {
|
|
100
|
+
if (opts.includeLogs) {
|
|
101
|
+
const level = entryTypeToLogLevel(entryType);
|
|
102
|
+
const rowMessage = messages[row];
|
|
103
|
+
const message = typeof rowMessage === 'string' ? rowMessage : '';
|
|
104
|
+
facts.push(logFact(level, message));
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case ENTRY_TYPE_FF_ACCESS:
|
|
109
|
+
case ENTRY_TYPE_FF_USAGE: {
|
|
110
|
+
if (opts.includeFF) {
|
|
111
|
+
extractFFfacts(buffer, row, facts);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Recurse into children BEFORE completing this span
|
|
118
|
+
// This maintains the natural execution order in facts
|
|
119
|
+
for (const child of buffer._children) {
|
|
120
|
+
walkBuffer(child, facts, opts);
|
|
121
|
+
}
|
|
122
|
+
// Completion status is ALWAYS at row 1 (not last row)
|
|
123
|
+
// Row 1 is pre-initialized as span-exception, overwritten by ok()/err()
|
|
124
|
+
if (writeIndex >= 2) {
|
|
125
|
+
const completionEntryType = entryTypes[1];
|
|
126
|
+
switch (completionEntryType) {
|
|
127
|
+
case ENTRY_TYPE_SPAN_OK:
|
|
128
|
+
facts.push(spanOk(spanName));
|
|
129
|
+
break;
|
|
130
|
+
case ENTRY_TYPE_SPAN_ERR: {
|
|
131
|
+
const errorCode = getErrorCode(buffer, 1);
|
|
132
|
+
facts.push(spanErr(spanName, errorCode));
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case ENTRY_TYPE_SPAN_EXCEPTION: {
|
|
136
|
+
const message = getExceptionMessage(buffer, 1);
|
|
137
|
+
facts.push(spanException(spanName, message));
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Extract duration metric if requested
|
|
143
|
+
if (opts.includeMetrics) {
|
|
144
|
+
const duration = getSpanDuration(buffer);
|
|
145
|
+
if (duration !== undefined) {
|
|
146
|
+
facts.push(metricFact(`${spanName}:duration_ns`, Number(duration)));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Extract tag facts from a specific row.
|
|
152
|
+
*/
|
|
153
|
+
function extractTagFacts(buffer, row, facts, opts) {
|
|
154
|
+
const schema = buffer._logSchema;
|
|
155
|
+
const fields = opts.tagFields.length > 0 ? opts.tagFields : Object.keys(schema.fields);
|
|
156
|
+
for (const fieldName of fields) {
|
|
157
|
+
// Skip system fields
|
|
158
|
+
if (fieldName.startsWith('_'))
|
|
159
|
+
continue;
|
|
160
|
+
const nullsKey = `${fieldName}_nulls`;
|
|
161
|
+
const valuesKey = `${fieldName}_values`;
|
|
162
|
+
const nulls = Reflect.get(buffer, nullsKey);
|
|
163
|
+
const values = Reflect.get(buffer, valuesKey);
|
|
164
|
+
if (!isUint8Array(nulls) || !isIndexedValues(values))
|
|
165
|
+
continue;
|
|
166
|
+
// Check if value is non-null at this row
|
|
167
|
+
if (!isNull(nulls, row)) {
|
|
168
|
+
const value = getIndexedValue(values, row);
|
|
169
|
+
if (value !== undefined) {
|
|
170
|
+
facts.push(tagFact(fieldName, String(value)));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Extract feature flag facts from a row.
|
|
177
|
+
*/
|
|
178
|
+
function extractFFfacts(buffer, row, facts) {
|
|
179
|
+
// Feature flag entries store the flag name in message_values and the resolved value in ff_value_values.
|
|
180
|
+
const name = buffer.message_values[row];
|
|
181
|
+
const value = buffer.ff_value_values[row];
|
|
182
|
+
if (typeof name === 'string' && typeof value === 'string') {
|
|
183
|
+
facts.push(ffFact(name, value));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Check if a bit is unset in a null bitmap (Arrow format: 1 = valid, 0 = null).
|
|
188
|
+
*/
|
|
189
|
+
function isNull(nulls, index) {
|
|
190
|
+
const byteIndex = index >> 3;
|
|
191
|
+
const bitIndex = index & 7;
|
|
192
|
+
return (nulls[byteIndex] & (1 << bitIndex)) === 0;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Convert entry type number to log level string.
|
|
196
|
+
*/
|
|
197
|
+
function entryTypeToLogLevel(entryType) {
|
|
198
|
+
switch (entryType) {
|
|
199
|
+
case ENTRY_TYPE_DEBUG:
|
|
200
|
+
return 'debug';
|
|
201
|
+
case ENTRY_TYPE_INFO:
|
|
202
|
+
return 'info';
|
|
203
|
+
case ENTRY_TYPE_WARN:
|
|
204
|
+
return 'warn';
|
|
205
|
+
case ENTRY_TYPE_ERROR:
|
|
206
|
+
return 'error';
|
|
207
|
+
default:
|
|
208
|
+
return 'info';
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get error code from a span-err row.
|
|
213
|
+
*/
|
|
214
|
+
function getErrorCode(buffer, row) {
|
|
215
|
+
const errorCode = buffer.error_code_values[row];
|
|
216
|
+
return typeof errorCode === 'string' ? errorCode : 'UNKNOWN';
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get exception message from a span-exception row.
|
|
220
|
+
*/
|
|
221
|
+
function getExceptionMessage(buffer, row) {
|
|
222
|
+
const message = buffer.message_values[row];
|
|
223
|
+
return typeof message === 'string' ? message : 'Unknown exception';
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Calculate span duration from timestamps.
|
|
227
|
+
*/
|
|
228
|
+
function getSpanDuration(buffer) {
|
|
229
|
+
const timestamps = buffer.timestamp;
|
|
230
|
+
const writeIndex = buffer._writeIndex;
|
|
231
|
+
if (writeIndex < 2)
|
|
232
|
+
return undefined;
|
|
233
|
+
// Duration = last timestamp - first timestamp
|
|
234
|
+
const startNanos = timestamps[0];
|
|
235
|
+
const endNanos = timestamps[writeIndex - 1];
|
|
236
|
+
return endNanos - startNanos;
|
|
237
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strongly-typed trace facts using TypeScript template literal types.
|
|
3
|
+
*
|
|
4
|
+
* Instead of `facts: string[]`, we use branded template literal types that
|
|
5
|
+
* ensure facts follow a consistent format and enable autocomplete.
|
|
6
|
+
*
|
|
7
|
+
* Format: `${namespace}:${name}: ${content}`
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* - `span:fetch-user: started`
|
|
11
|
+
* - `span:fetch-user: ok`
|
|
12
|
+
* - `span:fetch-user: err(NOT_FOUND)`
|
|
13
|
+
* - `log:info: Processing order`
|
|
14
|
+
* - `tag:userId: 123`
|
|
15
|
+
* - `scope:requestId: req-abc`
|
|
16
|
+
* - `ff:darkMode: true`
|
|
17
|
+
*
|
|
18
|
+
* @module testing/facts
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* All valid fact namespaces.
|
|
22
|
+
*/
|
|
23
|
+
export type FactNamespace = 'span' | 'log' | 'tag' | 'scope' | 'ff' | 'metric';
|
|
24
|
+
/**
|
|
25
|
+
* Span lifecycle states.
|
|
26
|
+
*/
|
|
27
|
+
export type SpanState = 'started' | 'ok' | `err(${string})` | `exception(${string})`;
|
|
28
|
+
/**
|
|
29
|
+
* A span fact: `span:${name}: ${state}`
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* type F1 = SpanFact<'fetch-user', 'started'>; // "span:fetch-user: started"
|
|
33
|
+
* type F2 = SpanFact<'fetch-user', 'ok'>; // "span:fetch-user: ok"
|
|
34
|
+
* type F3 = SpanFact<'fetch-user', 'err(NOT_FOUND)'>; // "span:fetch-user: err(NOT_FOUND)"
|
|
35
|
+
*/
|
|
36
|
+
export type SpanFact<Name extends string = string, State extends SpanState = SpanState> = `span:${Name}: ${State}`;
|
|
37
|
+
/**
|
|
38
|
+
* Type guard for span facts.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isSpanFact(fact: TraceFact): fact is SpanFact;
|
|
41
|
+
/**
|
|
42
|
+
* Create a span:started fact.
|
|
43
|
+
*/
|
|
44
|
+
export declare function spanStarted<N extends string>(name: N): SpanFact<N, 'started'>;
|
|
45
|
+
/**
|
|
46
|
+
* Create a span:ok fact.
|
|
47
|
+
*/
|
|
48
|
+
export declare function spanOk<N extends string>(name: N): SpanFact<N, 'ok'>;
|
|
49
|
+
/**
|
|
50
|
+
* Create a span:err fact.
|
|
51
|
+
*/
|
|
52
|
+
export declare function spanErr<N extends string, C extends string>(name: N, code: C): SpanFact<N, `err(${C})`>;
|
|
53
|
+
/**
|
|
54
|
+
* Create a span:exception fact.
|
|
55
|
+
*/
|
|
56
|
+
export declare function spanException<N extends string, M extends string>(name: N, message: M): SpanFact<N, `exception(${M})`>;
|
|
57
|
+
/**
|
|
58
|
+
* Log levels.
|
|
59
|
+
*/
|
|
60
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
61
|
+
/**
|
|
62
|
+
* A log fact: `log:${level}: ${message}`
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* type F = LogFact<'info', 'Processing order'>; // "log:info: Processing order"
|
|
66
|
+
*/
|
|
67
|
+
export type LogFact<Level extends LogLevel = LogLevel, Message extends string = string> = `log:${Level}: ${Message}`;
|
|
68
|
+
/**
|
|
69
|
+
* Type guard for log facts.
|
|
70
|
+
*/
|
|
71
|
+
export declare function isLogFact(fact: TraceFact): fact is LogFact;
|
|
72
|
+
/**
|
|
73
|
+
* Create a log fact.
|
|
74
|
+
*/
|
|
75
|
+
export declare function logFact<L extends LogLevel, M extends string>(level: L, message: M): LogFact<L, M>;
|
|
76
|
+
export declare const logDebug: <M extends string>(msg: M) => `log:debug: ${M}`;
|
|
77
|
+
export declare const logInfo: <M extends string>(msg: M) => `log:info: ${M}`;
|
|
78
|
+
export declare const logWarn: <M extends string>(msg: M) => `log:warn: ${M}`;
|
|
79
|
+
export declare const logError: <M extends string>(msg: M) => `log:error: ${M}`;
|
|
80
|
+
/**
|
|
81
|
+
* A tag fact: `tag:${key}: ${value}`
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* type F = TagFact<'userId', '123'>; // "tag:userId: 123"
|
|
85
|
+
*/
|
|
86
|
+
export type TagFact<Key extends string = string, Value extends string = string> = `tag:${Key}: ${Value}`;
|
|
87
|
+
/**
|
|
88
|
+
* Type guard for tag facts.
|
|
89
|
+
*/
|
|
90
|
+
export declare function isTagFact(fact: TraceFact): fact is TagFact;
|
|
91
|
+
/**
|
|
92
|
+
* Create a tag fact.
|
|
93
|
+
*/
|
|
94
|
+
export declare function tagFact<K extends string, V extends string | number | boolean>(key: K, value: V): TagFact<K, `${V}`>;
|
|
95
|
+
/**
|
|
96
|
+
* A scope fact: `scope:${key}: ${value}`
|
|
97
|
+
*
|
|
98
|
+
* Scope facts represent values propagated through the span tree.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* type F = ScopeFact<'requestId', 'req-abc'>; // "scope:requestId: req-abc"
|
|
102
|
+
*/
|
|
103
|
+
export type ScopeFact<Key extends string = string, Value extends string = string> = `scope:${Key}: ${Value}`;
|
|
104
|
+
/**
|
|
105
|
+
* Type guard for scope facts.
|
|
106
|
+
*/
|
|
107
|
+
export declare function isScopeFact(fact: TraceFact): fact is ScopeFact;
|
|
108
|
+
/**
|
|
109
|
+
* Create a scope fact.
|
|
110
|
+
*/
|
|
111
|
+
export declare function scopeFact<K extends string, V extends string | number | boolean>(key: K, value: V): ScopeFact<K, `${V}`>;
|
|
112
|
+
/**
|
|
113
|
+
* A feature flag fact: `ff:${flag}: ${value}`
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* type F = FFFact<'darkMode', 'true'>; // "ff:darkMode: true"
|
|
117
|
+
*/
|
|
118
|
+
export type FFFact<Flag extends string = string, Value extends string = string> = `ff:${Flag}: ${Value}`;
|
|
119
|
+
/**
|
|
120
|
+
* Type guard for feature flag facts.
|
|
121
|
+
*/
|
|
122
|
+
export declare function isFFFact(fact: TraceFact): fact is FFFact;
|
|
123
|
+
/**
|
|
124
|
+
* Create a feature flag fact.
|
|
125
|
+
*/
|
|
126
|
+
export declare function ffFact<F extends string, V extends string | number | boolean>(flag: F, value: V): FFFact<F, `${V}`>;
|
|
127
|
+
/**
|
|
128
|
+
* A metric fact: `metric:${name}: ${value}`
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* type F = MetricFact<'duration_ms', '42'>; // "metric:duration_ms: 42"
|
|
132
|
+
*/
|
|
133
|
+
export type MetricFact<Name extends string = string, Value extends string = string> = `metric:${Name}: ${Value}`;
|
|
134
|
+
/**
|
|
135
|
+
* Type guard for metric facts.
|
|
136
|
+
*/
|
|
137
|
+
export declare function isMetricFact(fact: TraceFact): fact is MetricFact;
|
|
138
|
+
/**
|
|
139
|
+
* Create a metric fact.
|
|
140
|
+
*/
|
|
141
|
+
export declare function metricFact<N extends string, V extends number>(name: N, value: V): MetricFact<N, `${V}`>;
|
|
142
|
+
/**
|
|
143
|
+
* Any valid trace fact.
|
|
144
|
+
*
|
|
145
|
+
* This is a union of all fact types, providing type safety while
|
|
146
|
+
* allowing heterogeneous fact arrays.
|
|
147
|
+
*/
|
|
148
|
+
export type TraceFact = SpanFact | LogFact | TagFact | ScopeFact | FFFact | MetricFact;
|
|
149
|
+
/**
|
|
150
|
+
* Parsed fact structure.
|
|
151
|
+
*/
|
|
152
|
+
export interface ParsedFact {
|
|
153
|
+
namespace: FactNamespace;
|
|
154
|
+
name: string;
|
|
155
|
+
content: string;
|
|
156
|
+
raw: TraceFact;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Parse a fact string into its components.
|
|
160
|
+
*/
|
|
161
|
+
export declare function parseFact(fact: TraceFact): ParsedFact;
|
|
162
|
+
/**
|
|
163
|
+
* A readonly array of trace facts with helper methods.
|
|
164
|
+
*
|
|
165
|
+
* This is the primary interface for working with collected facts.
|
|
166
|
+
*/
|
|
167
|
+
export interface FactArray extends ReadonlyArray<TraceFact> {
|
|
168
|
+
/**
|
|
169
|
+
* Check if a fact exists (exact match).
|
|
170
|
+
*/
|
|
171
|
+
has(fact: TraceFact): boolean;
|
|
172
|
+
/**
|
|
173
|
+
* Check if any fact matches a pattern.
|
|
174
|
+
* Pattern supports * wildcards in any segment.
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* facts.hasMatch('span:*: ok') // Any span completed ok
|
|
178
|
+
* facts.hasMatch('span:fetch-*: *') // Any fetch span, any state
|
|
179
|
+
* facts.hasMatch('log:error: *') // Any error log
|
|
180
|
+
*/
|
|
181
|
+
hasMatch(pattern: string): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* Filter to facts of a specific namespace.
|
|
184
|
+
*/
|
|
185
|
+
byNamespace<N extends FactNamespace>(namespace: N): FactArray;
|
|
186
|
+
/**
|
|
187
|
+
* Get all span facts.
|
|
188
|
+
*/
|
|
189
|
+
spans(): SpanFact[];
|
|
190
|
+
/**
|
|
191
|
+
* Get all log facts.
|
|
192
|
+
*/
|
|
193
|
+
logs(): LogFact[];
|
|
194
|
+
/**
|
|
195
|
+
* Get all tag facts.
|
|
196
|
+
*/
|
|
197
|
+
tags(): TagFact[];
|
|
198
|
+
/**
|
|
199
|
+
* Check if facts appear in order (not necessarily adjacent).
|
|
200
|
+
*/
|
|
201
|
+
hasInOrder(facts: TraceFact[]): boolean;
|
|
202
|
+
/**
|
|
203
|
+
* Find the index of a fact (or -1 if not found).
|
|
204
|
+
*/
|
|
205
|
+
indexOf(fact: TraceFact): number;
|
|
206
|
+
/**
|
|
207
|
+
* Get facts matching a pattern.
|
|
208
|
+
*/
|
|
209
|
+
match(pattern: string): FactArray;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Create a FactArray from raw facts.
|
|
213
|
+
*/
|
|
214
|
+
export declare function createFactArray(facts: TraceFact[]): FactArray;
|
|
215
|
+
/**
|
|
216
|
+
* Extract tag fact types from a schema.
|
|
217
|
+
*
|
|
218
|
+
* Given a LogSchema, this produces a union of valid TagFact types
|
|
219
|
+
* for that schema's fields.
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* type Schema = { userId: S.category(), count: S.number() };
|
|
223
|
+
* type Tags = SchemaTagFacts<Schema>;
|
|
224
|
+
* // = TagFact<'userId', string> | TagFact<'count', string>
|
|
225
|
+
*/
|
|
226
|
+
export type SchemaTagFacts<Schema extends Record<string, unknown>> = {
|
|
227
|
+
[K in keyof Schema & string]: TagFact<K, string>;
|
|
228
|
+
}[keyof Schema & string];
|
|
229
|
+
/**
|
|
230
|
+
* Extract scope fact types from a schema.
|
|
231
|
+
*/
|
|
232
|
+
export type SchemaScopeFacts<Schema extends Record<string, unknown>> = {
|
|
233
|
+
[K in keyof Schema & string]: ScopeFact<K, string>;
|
|
234
|
+
}[keyof Schema & string];
|
|
235
|
+
//# sourceMappingURL=facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/facts.ts"],"names":[],"mappings":"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"}
|