@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,346 @@
|
|
|
1
|
+
import { createTagWriter } from './codegen/fixedPositionWriterGenerator.js';
|
|
2
|
+
import { createSpanLogger as createSpanLoggerFromGenerator } from './codegen/spanLoggerGenerator.js';
|
|
3
|
+
import { Op } from './op.js';
|
|
4
|
+
import { createOpMetadata } from './opContext/defineOp.js';
|
|
5
|
+
import { Err, Ok } from './result.js';
|
|
6
|
+
import { createFeatureFlagEvaluator, InMemoryFlagEvaluator } from './schema/evaluator.js';
|
|
7
|
+
import { ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_OK } from './schema/systemSchema.js';
|
|
8
|
+
import { EMPTY_SCOPE } from './spanBuffer.js';
|
|
9
|
+
import { createSpanContextClass, writeSpanEnd, writeSpanStart, } from './spanContext.js';
|
|
10
|
+
import { generateTraceId, isValidTraceId } from './traceId.js';
|
|
11
|
+
function isTraceOverridesArg(value) {
|
|
12
|
+
return value !== null && typeof value === 'object' && !(value instanceof Op);
|
|
13
|
+
}
|
|
14
|
+
function isTraceFn(value) {
|
|
15
|
+
return typeof value === 'function';
|
|
16
|
+
}
|
|
17
|
+
function isPromiseResult(value) {
|
|
18
|
+
return (value !== null &&
|
|
19
|
+
(typeof value === 'object' || typeof value === 'function') &&
|
|
20
|
+
typeof Reflect.get(value, 'then') === 'function');
|
|
21
|
+
}
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Tracer Class
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Tracer - Abstract base class for trace collection
|
|
27
|
+
*
|
|
28
|
+
* Provides trace execution with lifecycle hooks for buffer management.
|
|
29
|
+
* Subclasses implement onTraceStart, onTraceEnd, onSpanStart, onSpanEnd to define
|
|
30
|
+
* how spans are collected and processed.
|
|
31
|
+
*
|
|
32
|
+
* BufferStrategy is injected to control memory management and Arrow conversion.
|
|
33
|
+
*
|
|
34
|
+
* @typeParam B - OpContextBinding type (inferred from constructor argument)
|
|
35
|
+
*/
|
|
36
|
+
export class Tracer {
|
|
37
|
+
logBinding;
|
|
38
|
+
SpanContextClass;
|
|
39
|
+
flagEvaluator;
|
|
40
|
+
ctxDefaults;
|
|
41
|
+
deps;
|
|
42
|
+
createTraceRoot;
|
|
43
|
+
/**
|
|
44
|
+
* Buffer strategy for memory management and Arrow conversion.
|
|
45
|
+
* Public because SpanContext needs access for child span creation.
|
|
46
|
+
* Also accessible to subclasses for toArrowTable/releaseBuffer calls.
|
|
47
|
+
*/
|
|
48
|
+
bufferStrategy;
|
|
49
|
+
constructor(binding, options) {
|
|
50
|
+
this.logBinding = binding.logBinding;
|
|
51
|
+
this.bufferStrategy = options.bufferStrategy;
|
|
52
|
+
this.ctxDefaults = binding.ctxDefaults ?? EMPTY_SCOPE;
|
|
53
|
+
this.deps = binding.deps ?? EMPTY_SCOPE;
|
|
54
|
+
this.flagEvaluator = this._createFlagEvaluator(binding.flags, options.flagEvaluator);
|
|
55
|
+
this.createTraceRoot = options.createTraceRoot;
|
|
56
|
+
// Create SpanContext class for all contexts created by this tracer
|
|
57
|
+
// The class closes over schema/logBinding and provides typed methods
|
|
58
|
+
this.SpanContextClass = createSpanContextClass(binding.logBinding.logSchema, binding.logBinding);
|
|
59
|
+
// Bind methods for destructuring (per AGENTS.md - "Always destructure")
|
|
60
|
+
this.trace = this.trace.bind(this);
|
|
61
|
+
this.trace_op = this.trace_op.bind(this);
|
|
62
|
+
this.trace_fn = this.trace_fn.bind(this);
|
|
63
|
+
this.flush = this.flush.bind(this);
|
|
64
|
+
}
|
|
65
|
+
_createFlagEvaluator(flags, evaluator) {
|
|
66
|
+
const delegate = evaluator ?? new InMemoryFlagEvaluator(flags);
|
|
67
|
+
const boundEvaluator = {
|
|
68
|
+
getSync: (ctx, flag) => delegate.getSync(ctx, flag),
|
|
69
|
+
getAsync: (ctx, flag) => delegate.getAsync(ctx, flag),
|
|
70
|
+
forContext: (ctx) => createFeatureFlagEvaluator(flags, ctx, boundEvaluator),
|
|
71
|
+
};
|
|
72
|
+
return boundEvaluator;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Flush any pending data. Default is no-op.
|
|
76
|
+
* Subclasses override if they batch data (e.g., collecting in onTraceEnd then flushing here).
|
|
77
|
+
*/
|
|
78
|
+
async flush() {
|
|
79
|
+
// Default no-op - subclasses override if needed
|
|
80
|
+
}
|
|
81
|
+
trace(...args) {
|
|
82
|
+
const len = args.length;
|
|
83
|
+
if (len === 0)
|
|
84
|
+
throw new Error('trace() requires at least 1 argument');
|
|
85
|
+
// Detect if first arg is a line number (transformer-injected)
|
|
86
|
+
const firstArg = args[0];
|
|
87
|
+
const hasLine = typeof firstArg === 'number';
|
|
88
|
+
const line = hasLine ? firstArg : 0;
|
|
89
|
+
// Name is always required and comes after optional line
|
|
90
|
+
const nameIdx = hasLine ? 1 : 0;
|
|
91
|
+
const name = args[nameIdx];
|
|
92
|
+
if (typeof name !== 'string') {
|
|
93
|
+
throw new Error('trace() requires a trace name string');
|
|
94
|
+
}
|
|
95
|
+
// Check if next arg is overrides (object but not Op or function)
|
|
96
|
+
const nextIdx = nameIdx + 1;
|
|
97
|
+
const nextArg = args[nextIdx];
|
|
98
|
+
const hasOverrides = isTraceOverridesArg(nextArg) && !isTraceFn(nextArg);
|
|
99
|
+
const overrides = hasOverrides ? nextArg : EMPTY_SCOPE;
|
|
100
|
+
const fnIdx = nextIdx + (hasOverrides ? 1 : 0);
|
|
101
|
+
const fnOrOp = args[fnIdx];
|
|
102
|
+
const argCount = len - fnIdx - 1;
|
|
103
|
+
// Dispatch to monomorphic methods
|
|
104
|
+
if (fnOrOp instanceof Op) {
|
|
105
|
+
switch (argCount) {
|
|
106
|
+
case 0:
|
|
107
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn);
|
|
108
|
+
case 1:
|
|
109
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1]);
|
|
110
|
+
case 2:
|
|
111
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2]);
|
|
112
|
+
case 3:
|
|
113
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2], args[fnIdx + 3]);
|
|
114
|
+
case 4:
|
|
115
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2], args[fnIdx + 3], args[fnIdx + 4]);
|
|
116
|
+
case 5:
|
|
117
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2], args[fnIdx + 3], args[fnIdx + 4], args[fnIdx + 5]);
|
|
118
|
+
case 6:
|
|
119
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2], args[fnIdx + 3], args[fnIdx + 4], args[fnIdx + 5], args[fnIdx + 6]);
|
|
120
|
+
case 7:
|
|
121
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2], args[fnIdx + 3], args[fnIdx + 4], args[fnIdx + 5], args[fnIdx + 6], args[fnIdx + 7]);
|
|
122
|
+
case 8:
|
|
123
|
+
return this._trace_unknown_op(line, name, overrides, fnOrOp.metadata, fnOrOp.fn, args[fnIdx + 1], args[fnIdx + 2], args[fnIdx + 3], args[fnIdx + 4], args[fnIdx + 5], args[fnIdx + 6], args[fnIdx + 7], args[fnIdx + 8]);
|
|
124
|
+
default:
|
|
125
|
+
throw new Error(`trace() supports up to 8 op arguments, got ${argCount}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Function path - no args allowed
|
|
129
|
+
if (argCount > 0) {
|
|
130
|
+
throw new Error('trace() with inline function does not accept additional arguments');
|
|
131
|
+
}
|
|
132
|
+
if (!isTraceFn(fnOrOp)) {
|
|
133
|
+
throw new Error('trace() requires an Op or function callback');
|
|
134
|
+
}
|
|
135
|
+
return this._trace_unknown_fn(line, name, overrides, fnOrOp);
|
|
136
|
+
}
|
|
137
|
+
// ===========================================================================
|
|
138
|
+
// Monomorphic trace methods (for transformer optimization)
|
|
139
|
+
// ===========================================================================
|
|
140
|
+
/**
|
|
141
|
+
* Execute an Op as a root trace (internal monomorphic method).
|
|
142
|
+
* Supports 0-8 arguments. The transformer rewrites trace() calls to this.
|
|
143
|
+
*/
|
|
144
|
+
_trace_op(line, name, overrides, op, ...opArgs) {
|
|
145
|
+
const ctx = this._createRootContext(line, name, overrides, op.metadata);
|
|
146
|
+
return this._executeResultWithContext(ctx, (c) => op.fn(c, ...opArgs));
|
|
147
|
+
}
|
|
148
|
+
_trace_unknown_op(line, name, overrides, metadata, fn, ...opArgs) {
|
|
149
|
+
const ctx = this._createRootContext(line, name, overrides, metadata);
|
|
150
|
+
return this._executeResultWithContext(ctx, (childCtx) => fn(childCtx, ...opArgs));
|
|
151
|
+
}
|
|
152
|
+
_trace_fn(line, name, overrides, fn) {
|
|
153
|
+
const ctx = this._createRootContext(line, name, overrides, createOpMetadata('root', 'tracer', 'runtime', 'unknown', 0));
|
|
154
|
+
return this._executeUnknownWithContext(ctx, fn);
|
|
155
|
+
}
|
|
156
|
+
_trace_unknown_fn(line, name, overrides, fn) {
|
|
157
|
+
return this._trace_fn(line, name, overrides, fn);
|
|
158
|
+
}
|
|
159
|
+
// ===========================================================================
|
|
160
|
+
// Public monomorphic methods (for transformer direct calls)
|
|
161
|
+
// ===========================================================================
|
|
162
|
+
/**
|
|
163
|
+
* Execute an Op as a root trace (monomorphic - for transformer optimization).
|
|
164
|
+
* Public API for transformer to call directly, bypassing polymorphic dispatch.
|
|
165
|
+
*/
|
|
166
|
+
trace_op(line, name, overrides, op, ...opArgs) {
|
|
167
|
+
return this._trace_op(line, name, overrides, op, ...opArgs);
|
|
168
|
+
}
|
|
169
|
+
trace_fn(line, name, overrides, fn) {
|
|
170
|
+
return this._trace_fn(line, name, overrides, fn);
|
|
171
|
+
}
|
|
172
|
+
// ===========================================================================
|
|
173
|
+
// Internal helpers
|
|
174
|
+
// ===========================================================================
|
|
175
|
+
_createRootContext(_line, name, overrides, metadata) {
|
|
176
|
+
// Extract trace_id from overrides if present
|
|
177
|
+
const traceId = isValidTraceId(overrides.trace_id) ? overrides.trace_id : generateTraceId();
|
|
178
|
+
const schema = this.logBinding.logSchema;
|
|
179
|
+
// Validate null-sentinel required fields and merge user context.
|
|
180
|
+
// _resolveUserContext ignores trace_id (transport-only field).
|
|
181
|
+
const overrideRecord = { ...overrides };
|
|
182
|
+
const resolvedUserCtx = this._resolveUserContext(overrideRecord);
|
|
183
|
+
// Create TraceRoot via platform-specific factory
|
|
184
|
+
const traceRoot = this.createTraceRoot(traceId, this);
|
|
185
|
+
// Create root SpanBuffer with pre-built TraceRoot via strategy
|
|
186
|
+
const buffer = this.bufferStrategy.createSpanBuffer(schema, traceRoot, // pre-built TraceRoot with trace_id, anchors, tracer
|
|
187
|
+
metadata);
|
|
188
|
+
// Write span-start entry (row 0)
|
|
189
|
+
writeSpanStart(buffer, name);
|
|
190
|
+
// Create tag writer and span logger (needed for constructor)
|
|
191
|
+
const tagWriter = createTagWriter(schema, buffer);
|
|
192
|
+
const spanLogger = createSpanLoggerFromGenerator(schema, buffer);
|
|
193
|
+
// Instantiate SpanContext class with direct arguments (no temp object allocation)
|
|
194
|
+
const ctx = new this.SpanContextClass(buffer, schema, spanLogger, tagWriter);
|
|
195
|
+
// Set up deps from config (may be EMPTY_SCOPE if none provided)
|
|
196
|
+
ctx.deps = this.deps;
|
|
197
|
+
ctx.ff = this.flagEvaluator.forContext(ctx);
|
|
198
|
+
// Copy resolved user context onto SpanContext.
|
|
199
|
+
for (const key in resolvedUserCtx) {
|
|
200
|
+
ctx[key] = resolvedUserCtx[key];
|
|
201
|
+
}
|
|
202
|
+
return ctx;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Validate null-sentinel required fields and merge with provided overrides.
|
|
206
|
+
*
|
|
207
|
+
* Per the ctx config pattern:
|
|
208
|
+
* - Properties with null values in ctxDefaults must be provided in overrides
|
|
209
|
+
* - Properties with default values can optionally be overridden
|
|
210
|
+
* - undefined is allowed for optional fields
|
|
211
|
+
*/
|
|
212
|
+
_resolveUserContext(overrides) {
|
|
213
|
+
const ctxDefaults = this.ctxDefaults;
|
|
214
|
+
// Check that all null-sentinel keys are provided in overrides
|
|
215
|
+
for (const key of Object.keys(ctxDefaults)) {
|
|
216
|
+
const defaultValue = ctxDefaults[key];
|
|
217
|
+
if (defaultValue === null) {
|
|
218
|
+
const providedValue = overrides[key];
|
|
219
|
+
if (providedValue === null || providedValue === undefined) {
|
|
220
|
+
throw new Error(`Required context parameter '${key}' must be provided. ` +
|
|
221
|
+
'Properties with null values in ctx config are required.');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Merge defaults with provided overrides (provided values win)
|
|
226
|
+
const resolvedUserCtx = { ...ctxDefaults };
|
|
227
|
+
for (const key of Object.keys(overrides)) {
|
|
228
|
+
if (key === 'trace_id') {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const value = overrides[key];
|
|
232
|
+
if (value !== undefined) {
|
|
233
|
+
resolvedUserCtx[key] = value;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return resolvedUserCtx;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Execute function with context and handle span-ok/span-err/span-exception writes
|
|
240
|
+
* Promise-agnostic: returns sync for sync fn, Promise for async fn
|
|
241
|
+
*
|
|
242
|
+
* Writes span-end entry (entry_type, timestamp, error_code) and applies deferred tags
|
|
243
|
+
* when the function returns an Ok/Err result.
|
|
244
|
+
*/
|
|
245
|
+
_executeResultWithContext(ctx, fn) {
|
|
246
|
+
const buffer = ctx._buffer;
|
|
247
|
+
this.onTraceStart(buffer);
|
|
248
|
+
let isAsync = false;
|
|
249
|
+
try {
|
|
250
|
+
const result = fn(ctx);
|
|
251
|
+
if (isPromiseResult(result)) {
|
|
252
|
+
isAsync = true;
|
|
253
|
+
return result
|
|
254
|
+
.then((resolved) => {
|
|
255
|
+
writeSpanEnd(buffer, resolved);
|
|
256
|
+
return resolved;
|
|
257
|
+
}, (error) => {
|
|
258
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_EXCEPTION);
|
|
259
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
260
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
261
|
+
buffer.message(1, errorMessage);
|
|
262
|
+
if (errorStack) {
|
|
263
|
+
buffer.exception_stack(1, errorStack);
|
|
264
|
+
}
|
|
265
|
+
throw error;
|
|
266
|
+
})
|
|
267
|
+
.finally(() => this.onTraceEnd(buffer));
|
|
268
|
+
}
|
|
269
|
+
writeSpanEnd(buffer, result);
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_EXCEPTION);
|
|
274
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
275
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
276
|
+
buffer.message(1, errorMessage);
|
|
277
|
+
if (errorStack) {
|
|
278
|
+
buffer.exception_stack(1, errorStack);
|
|
279
|
+
}
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
if (!isAsync) {
|
|
284
|
+
this.onTraceEnd(buffer);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
_executeUnknownWithContext(ctx, fn) {
|
|
289
|
+
const buffer = ctx._buffer;
|
|
290
|
+
// Call trace start hook
|
|
291
|
+
this.onTraceStart(buffer);
|
|
292
|
+
let isAsync = false;
|
|
293
|
+
try {
|
|
294
|
+
const result = fn(ctx);
|
|
295
|
+
if (isPromiseResult(result)) {
|
|
296
|
+
isAsync = true;
|
|
297
|
+
return result
|
|
298
|
+
.then((resolved) => {
|
|
299
|
+
if (resolved instanceof Ok || resolved instanceof Err) {
|
|
300
|
+
writeSpanEnd(buffer, resolved);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_OK);
|
|
304
|
+
}
|
|
305
|
+
return resolved;
|
|
306
|
+
}, (error) => {
|
|
307
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_EXCEPTION);
|
|
308
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
309
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
310
|
+
buffer.message(1, errorMessage);
|
|
311
|
+
if (errorStack) {
|
|
312
|
+
buffer.exception_stack(1, errorStack);
|
|
313
|
+
}
|
|
314
|
+
throw error;
|
|
315
|
+
})
|
|
316
|
+
.finally(() => this.onTraceEnd(buffer));
|
|
317
|
+
}
|
|
318
|
+
// Sync path - write span-end
|
|
319
|
+
if (result instanceof Ok || result instanceof Err) {
|
|
320
|
+
writeSpanEnd(buffer, result);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_OK);
|
|
324
|
+
}
|
|
325
|
+
return result;
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
// Sync exception path
|
|
329
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_EXCEPTION);
|
|
330
|
+
// Write exception details
|
|
331
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
332
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
333
|
+
buffer.message(1, errorMessage);
|
|
334
|
+
if (errorStack) {
|
|
335
|
+
buffer.exception_stack(1, errorStack);
|
|
336
|
+
}
|
|
337
|
+
throw error;
|
|
338
|
+
}
|
|
339
|
+
finally {
|
|
340
|
+
// Only call for sync path - async uses .finally() on promise
|
|
341
|
+
if (!isAsync) {
|
|
342
|
+
this.onTraceEnd(buffer);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { OpContextBinding } from '../opContext/types.js';
|
|
2
|
+
import { Tracer } from '../tracer.js';
|
|
3
|
+
import type { SpanBuffer } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tracer that batches completed root traces in an in-memory queue.
|
|
6
|
+
*
|
|
7
|
+
* Use `drain()` to consume all queued buffers and clear the queue.
|
|
8
|
+
* Designed for production scenarios where traces should be batched
|
|
9
|
+
* before sending to a backend.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { createTraceRoot } from '@smoothbricks/lmao/node';
|
|
14
|
+
* import { JsBufferStrategy } from '@smoothbricks/lmao';
|
|
15
|
+
*
|
|
16
|
+
* const ctx = defineOpContext({ logSchema });
|
|
17
|
+
* const tracer = new ArrayQueueTracer(ctx, {
|
|
18
|
+
* bufferStrategy: new JsBufferStrategy(),
|
|
19
|
+
* createTraceRoot,
|
|
20
|
+
* });
|
|
21
|
+
* const { trace } = tracer;
|
|
22
|
+
*
|
|
23
|
+
* // Process requests, traces accumulate
|
|
24
|
+
* await trace('request-1', handleRequest, req1);
|
|
25
|
+
* await trace('request-2', handleRequest, req2);
|
|
26
|
+
*
|
|
27
|
+
* // Periodically drain and process
|
|
28
|
+
* const batch = tracer.drain();
|
|
29
|
+
* for (const buf of batch) {
|
|
30
|
+
* const table = await tracer.bufferStrategy.toArrowTable(buf);
|
|
31
|
+
* await sendToBackend(table);
|
|
32
|
+
* tracer.bufferStrategy.releaseBuffer(buf);
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class ArrayQueueTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
|
|
37
|
+
/**
|
|
38
|
+
* Queue of completed root trace buffers.
|
|
39
|
+
* Use `drain()` to consume and clear.
|
|
40
|
+
* Public for test inspection.
|
|
41
|
+
*/
|
|
42
|
+
readonly queue: SpanBuffer<B['logBinding']['logSchema']>[];
|
|
43
|
+
onTraceStart(_rootBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
44
|
+
onTraceEnd(rootBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
45
|
+
onSpanStart(_childBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
46
|
+
onSpanEnd(_childBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
47
|
+
onStatsWillResetFor(_buffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Consume all queued buffers and clear the queue.
|
|
50
|
+
* Returns an independent copy of the queue contents.
|
|
51
|
+
*
|
|
52
|
+
* @returns Array of root buffers (with child spans in _children tree)
|
|
53
|
+
*/
|
|
54
|
+
drain(): SpanBuffer<B['logBinding']['logSchema']>[];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ArrayQueueTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayQueueTracer.d.ts","sourceRoot":"","sources":["../../../src/lib/tracers/ArrayQueueTracer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC5F;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAM;IAEhE,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIzE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAItE,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIzE,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIvE,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAI5E;;;;;OAKG;IACH,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE;CAKpD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Tracer } from '../tracer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tracer that batches completed root traces in an in-memory queue.
|
|
4
|
+
*
|
|
5
|
+
* Use `drain()` to consume all queued buffers and clear the queue.
|
|
6
|
+
* Designed for production scenarios where traces should be batched
|
|
7
|
+
* before sending to a backend.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { createTraceRoot } from '@smoothbricks/lmao/node';
|
|
12
|
+
* import { JsBufferStrategy } from '@smoothbricks/lmao';
|
|
13
|
+
*
|
|
14
|
+
* const ctx = defineOpContext({ logSchema });
|
|
15
|
+
* const tracer = new ArrayQueueTracer(ctx, {
|
|
16
|
+
* bufferStrategy: new JsBufferStrategy(),
|
|
17
|
+
* createTraceRoot,
|
|
18
|
+
* });
|
|
19
|
+
* const { trace } = tracer;
|
|
20
|
+
*
|
|
21
|
+
* // Process requests, traces accumulate
|
|
22
|
+
* await trace('request-1', handleRequest, req1);
|
|
23
|
+
* await trace('request-2', handleRequest, req2);
|
|
24
|
+
*
|
|
25
|
+
* // Periodically drain and process
|
|
26
|
+
* const batch = tracer.drain();
|
|
27
|
+
* for (const buf of batch) {
|
|
28
|
+
* const table = await tracer.bufferStrategy.toArrowTable(buf);
|
|
29
|
+
* await sendToBackend(table);
|
|
30
|
+
* tracer.bufferStrategy.releaseBuffer(buf);
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class ArrayQueueTracer extends Tracer {
|
|
35
|
+
/**
|
|
36
|
+
* Queue of completed root trace buffers.
|
|
37
|
+
* Use `drain()` to consume and clear.
|
|
38
|
+
* Public for test inspection.
|
|
39
|
+
*/
|
|
40
|
+
queue = [];
|
|
41
|
+
onTraceStart(_rootBuffer) {
|
|
42
|
+
// No-op
|
|
43
|
+
}
|
|
44
|
+
onTraceEnd(rootBuffer) {
|
|
45
|
+
this.queue.push(rootBuffer);
|
|
46
|
+
}
|
|
47
|
+
onSpanStart(_childBuffer) {
|
|
48
|
+
// No-op
|
|
49
|
+
}
|
|
50
|
+
onSpanEnd(_childBuffer) {
|
|
51
|
+
// No-op
|
|
52
|
+
}
|
|
53
|
+
onStatsWillResetFor(_buffer) {
|
|
54
|
+
// No-op - override in subclass to capture stats
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Consume all queued buffers and clear the queue.
|
|
58
|
+
* Returns an independent copy of the queue contents.
|
|
59
|
+
*
|
|
60
|
+
* @returns Array of root buffers (with child spans in _children tree)
|
|
61
|
+
*/
|
|
62
|
+
drain() {
|
|
63
|
+
const buffers = [...this.queue];
|
|
64
|
+
this.queue.length = 0;
|
|
65
|
+
return buffers;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { OpContextBinding } from '../opContext/types.js';
|
|
2
|
+
import { Tracer, type TracerOptions } from '../tracer.js';
|
|
3
|
+
import type { SpanBuffer } from '../types.js';
|
|
4
|
+
export interface CompositeTracerOptions<B extends OpContextBinding = OpContextBinding> extends TracerOptions<B['logBinding']['logSchema']> {
|
|
5
|
+
delegates: Tracer<B>[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Composite tracer that fans lifecycle hooks out to delegate tracers.
|
|
9
|
+
*
|
|
10
|
+
* Useful when you want multiple outputs from a single trace run,
|
|
11
|
+
* for example Stdio + SQLite.
|
|
12
|
+
*/
|
|
13
|
+
export declare class CompositeTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
|
|
14
|
+
private readonly delegates;
|
|
15
|
+
constructor(binding: B, options: CompositeTracerOptions<B>);
|
|
16
|
+
onTraceStart(rootBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
17
|
+
onTraceEnd(rootBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
18
|
+
onSpanStart(childBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
19
|
+
onSpanEnd(childBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
20
|
+
onStatsWillResetFor(buffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
21
|
+
flush(): Promise<void>;
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=CompositeTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompositeTracer.d.ts","sourceRoot":"","sources":["../../../src/lib/tracers/CompositeTracer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQ9C,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CACnF,SAAQ,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,eAAe,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;gBAE5B,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAK1D,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAMxE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAMtE,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAMxE,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAMtE,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAM5D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Tracer } from '../tracer.js';
|
|
2
|
+
function hasClose(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'close') === 'function';
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Composite tracer that fans lifecycle hooks out to delegate tracers.
|
|
7
|
+
*
|
|
8
|
+
* Useful when you want multiple outputs from a single trace run,
|
|
9
|
+
* for example Stdio + SQLite.
|
|
10
|
+
*/
|
|
11
|
+
export class CompositeTracer extends Tracer {
|
|
12
|
+
delegates;
|
|
13
|
+
constructor(binding, options) {
|
|
14
|
+
super(binding, options);
|
|
15
|
+
this.delegates = options.delegates;
|
|
16
|
+
}
|
|
17
|
+
onTraceStart(rootBuffer) {
|
|
18
|
+
for (const tracer of this.delegates) {
|
|
19
|
+
tracer.onTraceStart(rootBuffer);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
onTraceEnd(rootBuffer) {
|
|
23
|
+
for (const tracer of this.delegates) {
|
|
24
|
+
tracer.onTraceEnd(rootBuffer);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
onSpanStart(childBuffer) {
|
|
28
|
+
for (const tracer of this.delegates) {
|
|
29
|
+
tracer.onSpanStart(childBuffer);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
onSpanEnd(childBuffer) {
|
|
33
|
+
for (const tracer of this.delegates) {
|
|
34
|
+
tracer.onSpanEnd(childBuffer);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
onStatsWillResetFor(buffer) {
|
|
38
|
+
for (const tracer of this.delegates) {
|
|
39
|
+
tracer.onStatsWillResetFor(buffer);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async flush() {
|
|
43
|
+
for (const tracer of this.delegates) {
|
|
44
|
+
await tracer.flush();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async close() {
|
|
48
|
+
for (const tracer of this.delegates) {
|
|
49
|
+
if (hasClose(tracer)) {
|
|
50
|
+
const { close } = tracer;
|
|
51
|
+
if (close) {
|
|
52
|
+
await close.call(tracer);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NoOpTracer - A tracer that executes ops but discards all trace data
|
|
3
|
+
*
|
|
4
|
+
* All lifecycle hooks are no-ops - traces execute normally but produce no output.
|
|
5
|
+
* Useful for:
|
|
6
|
+
* - Tests that don't need to inspect trace output
|
|
7
|
+
* - Disabling tracing in production without code changes
|
|
8
|
+
* - Baseline performance testing (measures op execution cost without tracing overhead)
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { createTraceRoot } from '@smoothbricks/lmao/node';
|
|
13
|
+
* import { JsBufferStrategy } from '@smoothbricks/lmao';
|
|
14
|
+
*
|
|
15
|
+
* const ctx = defineOpContext({ logSchema });
|
|
16
|
+
* const { trace } = new NoOpTracer(ctx, {
|
|
17
|
+
* bufferStrategy: new JsBufferStrategy(),
|
|
18
|
+
* createTraceRoot,
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Trace executes, result returned, no side effects
|
|
22
|
+
* const result = await trace('fetch', fetchOp);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import type { OpContextBinding } from '../opContext/types.js';
|
|
26
|
+
import { Tracer } from '../tracer.js';
|
|
27
|
+
import type { SpanBuffer } from '../types.js';
|
|
28
|
+
/**
|
|
29
|
+
* No-op tracer - executes ops normally but discards all trace data
|
|
30
|
+
*
|
|
31
|
+
* All lifecycle hooks are empty - no processing, no output.
|
|
32
|
+
* Useful for testing and measuring op execution cost without trace overhead.
|
|
33
|
+
*
|
|
34
|
+
* @typeParam B - OpContextBinding type
|
|
35
|
+
*/
|
|
36
|
+
export declare class NoOpTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
|
|
37
|
+
/**
|
|
38
|
+
* No-op hook for trace start.
|
|
39
|
+
*/
|
|
40
|
+
onTraceStart(_rootBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
41
|
+
/**
|
|
42
|
+
* No-op hook for trace end.
|
|
43
|
+
*/
|
|
44
|
+
onTraceEnd(_rootBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
45
|
+
/**
|
|
46
|
+
* No-op hook for span start.
|
|
47
|
+
*/
|
|
48
|
+
onSpanStart(_childBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
49
|
+
/**
|
|
50
|
+
* No-op hook for span end.
|
|
51
|
+
*/
|
|
52
|
+
onSpanEnd(_childBuffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
53
|
+
/**
|
|
54
|
+
* No-op hook for stats reset.
|
|
55
|
+
*/
|
|
56
|
+
onStatsWillResetFor(_buffer: SpanBuffer<B['logBinding']['logSchema']>): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=NoOpTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoOpTracer.d.ts","sourceRoot":"","sources":["../../../src/lib/tracers/NoOpTracer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IACtF;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIzE;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIvE;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIzE;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;IAIvE;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI;CAG7E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Tracer } from '../tracer.js';
|
|
2
|
+
/**
|
|
3
|
+
* No-op tracer - executes ops normally but discards all trace data
|
|
4
|
+
*
|
|
5
|
+
* All lifecycle hooks are empty - no processing, no output.
|
|
6
|
+
* Useful for testing and measuring op execution cost without trace overhead.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam B - OpContextBinding type
|
|
9
|
+
*/
|
|
10
|
+
export class NoOpTracer extends Tracer {
|
|
11
|
+
/**
|
|
12
|
+
* No-op hook for trace start.
|
|
13
|
+
*/
|
|
14
|
+
onTraceStart(_rootBuffer) {
|
|
15
|
+
// No-op
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* No-op hook for trace end.
|
|
19
|
+
*/
|
|
20
|
+
onTraceEnd(_rootBuffer) {
|
|
21
|
+
// No-op
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* No-op hook for span start.
|
|
25
|
+
*/
|
|
26
|
+
onSpanStart(_childBuffer) {
|
|
27
|
+
// No-op
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* No-op hook for span end.
|
|
31
|
+
*/
|
|
32
|
+
onSpanEnd(_childBuffer) {
|
|
33
|
+
// No-op
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* No-op hook for stats reset.
|
|
37
|
+
*/
|
|
38
|
+
onStatsWillResetFor(_buffer) {
|
|
39
|
+
// No-op
|
|
40
|
+
}
|
|
41
|
+
}
|