@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,763 @@
|
|
|
1
|
+
import { createTagWriter } from './codegen/fixedPositionWriterGenerator.js';
|
|
2
|
+
import { createSpanLogger as createSpanLoggerFromGenerator, } from './codegen/spanLoggerGenerator.js';
|
|
3
|
+
import { Blocked } from './errors/Blocked.js';
|
|
4
|
+
import { TransientError } from './errors/Transient.js';
|
|
5
|
+
import { Op } from './op.js';
|
|
6
|
+
import { Err, hasErrorCode, Ok } from './result.js';
|
|
7
|
+
import { ENTRY_TYPE_SPAN_ERR, ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_OK, ENTRY_TYPE_SPAN_RETRY, } from './schema/systemSchema.js';
|
|
8
|
+
// Note: TraceRoot.writeSpanStart() is used instead of direct timestamp writes.
|
|
9
|
+
// The platform-specific TraceRoot (traceRoot.es.ts or traceRoot.node.ts) handles
|
|
10
|
+
// timestamp calculation and writes to buffer._system columns.
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// SpanContext Symbol Marker
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Internal symbol to mark span contexts
|
|
16
|
+
* Used for type guards and prototype chain detection
|
|
17
|
+
*/
|
|
18
|
+
export const SPAN_CONTEXT_MARKER = Symbol.for('lmao.SpanContext');
|
|
19
|
+
function isOpInstance(value) {
|
|
20
|
+
return value instanceof Op;
|
|
21
|
+
}
|
|
22
|
+
// WHY: resolveSpanTarget() accepts either an Op instance or a raw span
|
|
23
|
+
// function. TypeScript needs an explicit predicate here to preserve the call
|
|
24
|
+
// signature when the non-Op branch passes `value` through as `fn`.
|
|
25
|
+
function isSpanDispatchFn(value) {
|
|
26
|
+
return typeof value === 'function';
|
|
27
|
+
}
|
|
28
|
+
function isSpanBufferConstructorForSchema(value, schema) {
|
|
29
|
+
return (typeof value === 'function' &&
|
|
30
|
+
Reflect.get(value, 'schema') === schema &&
|
|
31
|
+
typeof Reflect.get(value, 'stats') === 'object');
|
|
32
|
+
}
|
|
33
|
+
function getBufferConstructor(buffer) {
|
|
34
|
+
const ctor = buffer.constructor;
|
|
35
|
+
if (!isSpanBufferConstructorForSchema(ctor, buffer._logSchema)) {
|
|
36
|
+
throw new TypeError('Span buffer constructor does not match the buffer schema');
|
|
37
|
+
}
|
|
38
|
+
return ctor;
|
|
39
|
+
}
|
|
40
|
+
function isSpanBufferForSchema(buffer, schema) {
|
|
41
|
+
return (typeof buffer === 'object' &&
|
|
42
|
+
buffer !== null &&
|
|
43
|
+
Reflect.get(buffer, '_logSchema') === schema &&
|
|
44
|
+
isSpanBufferConstructorForSchema(Reflect.get(buffer, 'constructor'), schema));
|
|
45
|
+
}
|
|
46
|
+
function isSpanContextInstance(value) {
|
|
47
|
+
return (isSpanContext(value) &&
|
|
48
|
+
Reflect.has(value, '_buffer') &&
|
|
49
|
+
Reflect.has(value, '_spanLogger') &&
|
|
50
|
+
Reflect.has(value, '_schema'));
|
|
51
|
+
}
|
|
52
|
+
function createInheritedContext(parent) {
|
|
53
|
+
const child = Object.create(parent);
|
|
54
|
+
if (!isSpanContextInstance(child)) {
|
|
55
|
+
throw new TypeError('Failed to create child span context');
|
|
56
|
+
}
|
|
57
|
+
return child;
|
|
58
|
+
}
|
|
59
|
+
function createInheritedContextWithOverrides(parent, overrides) {
|
|
60
|
+
const child = Object.assign(Object.create(parent), overrides);
|
|
61
|
+
if (!isSpanContextInstance(child)) {
|
|
62
|
+
throw new TypeError('Failed to create overridden child span context');
|
|
63
|
+
}
|
|
64
|
+
return child;
|
|
65
|
+
}
|
|
66
|
+
function readStringArgument(args, index, label) {
|
|
67
|
+
const value = args[index];
|
|
68
|
+
if (typeof value !== 'string') {
|
|
69
|
+
throw new TypeError(`${label} must be a string`);
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
function resolveSpanTarget(value, fallbackBuffer) {
|
|
74
|
+
if (isOpInstance(value)) {
|
|
75
|
+
return {
|
|
76
|
+
SpanBufferClass: value.SpanBufferClass,
|
|
77
|
+
remappedViewClass: value.remappedViewClass,
|
|
78
|
+
opMetadata: value.metadata,
|
|
79
|
+
fn: value.fn,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (!isSpanDispatchFn(value)) {
|
|
83
|
+
throw new TypeError('span() expects an Op or function');
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
SpanBufferClass: getBufferConstructor(fallbackBuffer),
|
|
87
|
+
remappedViewClass: undefined,
|
|
88
|
+
opMetadata: fallbackBuffer._opMetadata,
|
|
89
|
+
fn: value,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// =============================================================================
|
|
93
|
+
// Helper Functions
|
|
94
|
+
// =============================================================================
|
|
95
|
+
/**
|
|
96
|
+
* Write span-start entry to buffer at row 0 (fixed layout)
|
|
97
|
+
* Pre-initialize row 1 as span-exception (will be overwritten by ok/err)
|
|
98
|
+
* Set writeIndex to 2 (events start after reserved rows)
|
|
99
|
+
*
|
|
100
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
101
|
+
* - Row 0: span-start (written here)
|
|
102
|
+
* - Row 1: span-end (pre-initialized as exception, overwritten by ok/err)
|
|
103
|
+
* - Row 2+: events (ctx.log.* appends here)
|
|
104
|
+
*
|
|
105
|
+
* @param buffer - SpanBuffer to write to
|
|
106
|
+
* @param spanName - Name for this span
|
|
107
|
+
*/
|
|
108
|
+
export function writeSpanStart(buffer, spanName) {
|
|
109
|
+
// Delegate to TraceRoot - platform-specific implementation handles timestamps
|
|
110
|
+
buffer._traceRoot.writeSpanStart(buffer, spanName);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a SpanLogger for the given buffer.
|
|
114
|
+
*
|
|
115
|
+
* Per specs/lmao/01i_span_scope_attributes.md: Scope values are stored directly on buffer._scopeValues.
|
|
116
|
+
* The SpanLogger reads/writes scope via buffer._scopeValues - no separate Scope class needed.
|
|
117
|
+
*
|
|
118
|
+
* @param schema - Tag attribute schema with field definitions
|
|
119
|
+
* @param buffer - SpanBuffer to write entries to (per-span instance)
|
|
120
|
+
* @returns SpanLogger with typed methods matching schema
|
|
121
|
+
*/
|
|
122
|
+
export function createSpanLogger(schema, buffer) {
|
|
123
|
+
return createSpanLoggerFromGenerator(schema, buffer);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculate delay for retry based on policy and attempt number.
|
|
127
|
+
*
|
|
128
|
+
* @param policy - RetryPolicy from TransientError
|
|
129
|
+
* @param attempt - Current attempt number (1-indexed)
|
|
130
|
+
* @returns Delay in milliseconds before next retry
|
|
131
|
+
*/
|
|
132
|
+
function calculateDelay(policy, attempt) {
|
|
133
|
+
let delay;
|
|
134
|
+
switch (policy.backoff) {
|
|
135
|
+
case 'exponential':
|
|
136
|
+
// Delay doubles each attempt: baseDelay * 2^(attempt-1)
|
|
137
|
+
delay = Math.min(policy.baseDelayMs * 2 ** (attempt - 1), policy.maxDelayMs ?? 30000);
|
|
138
|
+
break;
|
|
139
|
+
case 'linear':
|
|
140
|
+
// Delay increases linearly: baseDelay * attempt
|
|
141
|
+
delay = Math.min(policy.baseDelayMs * attempt, policy.maxDelayMs ?? 30000);
|
|
142
|
+
break;
|
|
143
|
+
case 'fixed':
|
|
144
|
+
// Same delay between each attempt
|
|
145
|
+
delay = policy.baseDelayMs;
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
delay = policy.baseDelayMs;
|
|
149
|
+
}
|
|
150
|
+
// Apply jitter if enabled (default true) - random value between 0 and delay
|
|
151
|
+
if (policy.jitter !== false) {
|
|
152
|
+
delay = Math.floor(Math.random() * delay);
|
|
153
|
+
}
|
|
154
|
+
return delay;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Write span-retry entry to buffer.
|
|
158
|
+
*
|
|
159
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
160
|
+
* - span-retry appends to Row 2+ in parent span buffer (like log entries)
|
|
161
|
+
* - Trace-only entry (NOT written to event log)
|
|
162
|
+
* - Contains: attempt number, error code, and delay until next attempt
|
|
163
|
+
*
|
|
164
|
+
* @param buffer - SpanBuffer to write to (appends at _writeIndex)
|
|
165
|
+
* @param attempt - Attempt number (1-indexed)
|
|
166
|
+
* @param error - TransientError that triggered the retry
|
|
167
|
+
* @param delayMs - Delay before next attempt
|
|
168
|
+
*/
|
|
169
|
+
function writeRetryEntry(buffer, attempt, error, delayMs) {
|
|
170
|
+
// Get current write index and advance for next write
|
|
171
|
+
const index = buffer._writeIndex;
|
|
172
|
+
// Write entry via TraceRoot for timestamp handling
|
|
173
|
+
// TraceRoot.writeLogEntry writes timestamp and entry_type at the given index
|
|
174
|
+
buffer._traceRoot.writeLogEntry(buffer, ENTRY_TYPE_SPAN_RETRY);
|
|
175
|
+
// Write retry-specific message: retry:op:{opName} for prefix-based querying
|
|
176
|
+
const opName = buffer._opMetadata?.name ?? 'unknown';
|
|
177
|
+
buffer.message(index, `retry:op:${opName}`);
|
|
178
|
+
// Write error code if available
|
|
179
|
+
if (error.code) {
|
|
180
|
+
buffer.error_code(index, error.code);
|
|
181
|
+
}
|
|
182
|
+
// Retry metadata fields for direct queryability in Arrow output
|
|
183
|
+
buffer.retry_attempt(index, attempt);
|
|
184
|
+
buffer.retry_delay_ms(index, delayMs);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Sleep for the specified duration.
|
|
188
|
+
*
|
|
189
|
+
* @param ms - Duration in milliseconds
|
|
190
|
+
* @returns Promise that resolves after the delay
|
|
191
|
+
*/
|
|
192
|
+
function sleep(ms) {
|
|
193
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Execute function with retry loop for TransientError handling.
|
|
197
|
+
*
|
|
198
|
+
* Per plan 19-03: Op class handles retry loop internally.
|
|
199
|
+
* - TransientError from op body triggers retry based on error.policy
|
|
200
|
+
* - Retry respects maxAttempts from TransientError.policy
|
|
201
|
+
* - span-retry entry written for each transient failure
|
|
202
|
+
* - Only final result written as span-ok or span-err
|
|
203
|
+
* - BlockedError returns immediately without retry
|
|
204
|
+
*
|
|
205
|
+
* @param buffer - SpanBuffer to write retry entries to
|
|
206
|
+
* @param fn - Function to execute (may be retried)
|
|
207
|
+
* @returns Final result (success, non-transient error, or exhausted transient error)
|
|
208
|
+
*/
|
|
209
|
+
async function executeWithRetry(buffer, fn) {
|
|
210
|
+
let attempt = 0;
|
|
211
|
+
while (true) {
|
|
212
|
+
attempt++;
|
|
213
|
+
// Execute the function
|
|
214
|
+
const result = await fn();
|
|
215
|
+
// Success - return immediately
|
|
216
|
+
if (result instanceof Ok) {
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
// Error result - check error type for retry behavior
|
|
220
|
+
const error = result.error;
|
|
221
|
+
// BlockedError - return immediately, no retry
|
|
222
|
+
if (error instanceof Blocked) {
|
|
223
|
+
return result;
|
|
224
|
+
}
|
|
225
|
+
// TransientError - check if we should retry
|
|
226
|
+
if (error instanceof TransientError) {
|
|
227
|
+
const { policy } = error;
|
|
228
|
+
// Check attempt limit (maxAttempts includes initial attempt)
|
|
229
|
+
if (attempt >= policy.maxAttempts) {
|
|
230
|
+
// Exhausted - return final error
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
// Calculate delay based on policy and attempt number
|
|
234
|
+
const delay = calculateDelay(policy, attempt);
|
|
235
|
+
// Write span-retry entry to buffer for observability
|
|
236
|
+
writeRetryEntry(buffer, attempt, error, delay);
|
|
237
|
+
// Wait before retry
|
|
238
|
+
await sleep(delay);
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
// Non-transient error - return immediately
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Write span-end entry to buffer at row 1.
|
|
247
|
+
*
|
|
248
|
+
* Called by span methods after fn() returns to write:
|
|
249
|
+
* - entry_type (SPAN_OK or SPAN_ERR based on result instanceof)
|
|
250
|
+
* - timestamp
|
|
251
|
+
* - error_code (for Err only)
|
|
252
|
+
* - result row attributes already written eagerly by the fixed-position ResultWriter
|
|
253
|
+
*
|
|
254
|
+
* @param buffer - SpanBuffer to write to
|
|
255
|
+
* @param result - The result returned by the span function
|
|
256
|
+
*/
|
|
257
|
+
export function writeSpanEnd(buffer, result) {
|
|
258
|
+
// Write entry_type and timestamp via TraceRoot (platform-specific)
|
|
259
|
+
if (result instanceof Ok) {
|
|
260
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_OK);
|
|
261
|
+
}
|
|
262
|
+
else if (result instanceof Err) {
|
|
263
|
+
buffer._traceRoot.writeSpanEnd(buffer, ENTRY_TYPE_SPAN_ERR);
|
|
264
|
+
// Write error_code if the error has a code property
|
|
265
|
+
if (hasErrorCode(result.error)) {
|
|
266
|
+
buffer.error_code(1, result.error.code);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// =============================================================================
|
|
271
|
+
// SpanContext Class Factory
|
|
272
|
+
// =============================================================================
|
|
273
|
+
/**
|
|
274
|
+
* Create a SpanContext class for the given schema and logBinding.
|
|
275
|
+
*
|
|
276
|
+
* The returned class:
|
|
277
|
+
* - Closes over schema/logBinding (available to all methods)
|
|
278
|
+
* - Constructor takes buffer, spanLogger, tag directly (no temp object allocation)
|
|
279
|
+
* - Uses prototype methods for internal methods (_spanPre, _spanException, span0-span8)
|
|
280
|
+
* - Supports context inheritance via Object.create(parent) for child spans
|
|
281
|
+
* - Supports context overrides via own properties shadowing inherited ones
|
|
282
|
+
*
|
|
283
|
+
* @param schemaOnly - Tag attribute schema
|
|
284
|
+
* @param logBinding - LogBinding with schema and stats
|
|
285
|
+
* @returns Class constructor for SpanContext instances
|
|
286
|
+
*/
|
|
287
|
+
export function createSpanContextClass(_schemaOnly, logBinding) {
|
|
288
|
+
/**
|
|
289
|
+
* SpanContext implementation class.
|
|
290
|
+
*
|
|
291
|
+
* Constructor takes core values directly so arrow functions can close over them,
|
|
292
|
+
* avoiding both temp object allocation and property lookups in hot paths.
|
|
293
|
+
*/
|
|
294
|
+
class SpanContextImpl {
|
|
295
|
+
// Core properties set via constructor
|
|
296
|
+
_buffer;
|
|
297
|
+
_schema;
|
|
298
|
+
_spanLogger;
|
|
299
|
+
_logBinding = logBinding;
|
|
300
|
+
// User-facing properties
|
|
301
|
+
tag;
|
|
302
|
+
log;
|
|
303
|
+
ff;
|
|
304
|
+
deps;
|
|
305
|
+
// Arrow functions that close over constructor args directly
|
|
306
|
+
setScope;
|
|
307
|
+
ok;
|
|
308
|
+
err;
|
|
309
|
+
span;
|
|
310
|
+
spanSync;
|
|
311
|
+
constructor(buffer, schema, spanLogger, tag) {
|
|
312
|
+
this._buffer = buffer;
|
|
313
|
+
this._schema = schema;
|
|
314
|
+
this._spanLogger = spanLogger;
|
|
315
|
+
this.tag = tag;
|
|
316
|
+
this.log = spanLogger;
|
|
317
|
+
// Regular functions close over constructor args directly - no property lookups
|
|
318
|
+
// Using regular function (not arrow) allows destructuring while closing over args
|
|
319
|
+
this.setScope = (attributes) => {
|
|
320
|
+
spanLogger._setScope(attributes ?? {});
|
|
321
|
+
};
|
|
322
|
+
this.ok = (value) => new Ok(value, schema, buffer);
|
|
323
|
+
this.err = (error) => new Err(error, schema, buffer);
|
|
324
|
+
// span uses regular function to access `arguments` (no ...rest spread allocation)
|
|
325
|
+
// Closes over `self` for calling prototype methods
|
|
326
|
+
// Named function for better stack traces
|
|
327
|
+
const self = this;
|
|
328
|
+
const span = function span(nameOrLine, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11) {
|
|
329
|
+
// Use arguments.length instead of ...rest to avoid array allocation
|
|
330
|
+
const len = arguments.length;
|
|
331
|
+
// Detect call pattern:
|
|
332
|
+
// - span(name, fn) - len=2, typeof arg0 === 'string'
|
|
333
|
+
// - span(line, name, fn) - len=3, typeof arg0 === 'number'
|
|
334
|
+
// - span(name, overrides, fn) - len=3, typeof arg0 === 'string', typeof arg1 === 'object'
|
|
335
|
+
// - span(line, name, overrides, fn) - len=4, typeof arg0 === 'number', typeof arg2 === 'object'
|
|
336
|
+
// Plus additional args for span arguments
|
|
337
|
+
const hasLine = typeof nameOrLine === 'number';
|
|
338
|
+
const spanLine = hasLine ? nameOrLine : 0;
|
|
339
|
+
const spanName = hasLine ? readStringArgument(arguments, 1, 'span name') : nameOrLine;
|
|
340
|
+
// Index where fn/op or overrides starts
|
|
341
|
+
const checkIdx = hasLine ? 2 : 1;
|
|
342
|
+
const maybeOverrides = arguments[checkIdx];
|
|
343
|
+
// Check if it's an overrides object (not Op, not function)
|
|
344
|
+
const hasOverrides = maybeOverrides !== null &&
|
|
345
|
+
typeof maybeOverrides === 'object' &&
|
|
346
|
+
!(maybeOverrides instanceof Op) &&
|
|
347
|
+
typeof maybeOverrides !== 'function';
|
|
348
|
+
const fnIdx = checkIdx + (hasOverrides ? 1 : 0);
|
|
349
|
+
const target = resolveSpanTarget(arguments[fnIdx], self._buffer);
|
|
350
|
+
// Create child context - use _newCtx0 or _newCtx1 based on overrides
|
|
351
|
+
const childCtx = hasOverrides ? self._newCtx1(maybeOverrides) : self._newCtx0();
|
|
352
|
+
// Dispatch to monomorphic methods with all Op properties extracted
|
|
353
|
+
const argCount = len - fnIdx - 1;
|
|
354
|
+
switch (argCount) {
|
|
355
|
+
case 0:
|
|
356
|
+
return self.span0(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn);
|
|
357
|
+
case 1:
|
|
358
|
+
return self.span1(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1]);
|
|
359
|
+
case 2:
|
|
360
|
+
return self.span2(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2]);
|
|
361
|
+
case 3:
|
|
362
|
+
return self.span3(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3]);
|
|
363
|
+
case 4:
|
|
364
|
+
return self.span4(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4]);
|
|
365
|
+
case 5:
|
|
366
|
+
return self.span5(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5]);
|
|
367
|
+
case 6:
|
|
368
|
+
return self.span6(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5], arguments[fnIdx + 6]);
|
|
369
|
+
case 7:
|
|
370
|
+
return self.span7(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5], arguments[fnIdx + 6], arguments[fnIdx + 7]);
|
|
371
|
+
case 8:
|
|
372
|
+
return self.span8(spanLine, spanName, childCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5], arguments[fnIdx + 6], arguments[fnIdx + 7], arguments[fnIdx + 8]);
|
|
373
|
+
default:
|
|
374
|
+
throw new Error(`span() supports up to 8 arguments, got ${argCount}`);
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
this.span = span;
|
|
378
|
+
this.spanSync = function spanSync(name, fn) {
|
|
379
|
+
const childCtx = self._newCtx0();
|
|
380
|
+
return self.spanSync0(0, name, childCtx, getBufferConstructor(self._buffer), undefined, self._buffer._opMetadata, fn);
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
// =========================================================================
|
|
384
|
+
// Getters (on prototype, inherited by children)
|
|
385
|
+
// =========================================================================
|
|
386
|
+
get [SPAN_CONTEXT_MARKER]() {
|
|
387
|
+
return true;
|
|
388
|
+
}
|
|
389
|
+
get module() {
|
|
390
|
+
return this._buffer._opMetadata;
|
|
391
|
+
}
|
|
392
|
+
get callee_package() {
|
|
393
|
+
return this._buffer._opMetadata.package_name;
|
|
394
|
+
}
|
|
395
|
+
get callee_file() {
|
|
396
|
+
return this._buffer._opMetadata.package_file;
|
|
397
|
+
}
|
|
398
|
+
get callee_line() {
|
|
399
|
+
// Access the line_values array directly to read line number at row 0
|
|
400
|
+
// line_values is a Float64Array per the system schema (LazyNumberSchema)
|
|
401
|
+
return this._buffer.line_values[0];
|
|
402
|
+
}
|
|
403
|
+
get callee_git_sha() {
|
|
404
|
+
return this._buffer._opMetadata.git_sha;
|
|
405
|
+
}
|
|
406
|
+
get buffer() {
|
|
407
|
+
return this._buffer;
|
|
408
|
+
}
|
|
409
|
+
get scope() {
|
|
410
|
+
return this._buffer._scopeValues;
|
|
411
|
+
}
|
|
412
|
+
// =========================================================================
|
|
413
|
+
// Internal methods (on prototype)
|
|
414
|
+
// =========================================================================
|
|
415
|
+
/**
|
|
416
|
+
* Create a new child context with prototype chain inheritance.
|
|
417
|
+
* Called by transformer for spans without overrides.
|
|
418
|
+
*
|
|
419
|
+
* Transformer emits: ctx.span0(line, name, ctx._newCtx0(), fn)
|
|
420
|
+
*/
|
|
421
|
+
_newCtx0() {
|
|
422
|
+
return createInheritedContext(this);
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Create a new child context with prototype chain inheritance + user overrides.
|
|
426
|
+
* Called by transformer for spans with overrides.
|
|
427
|
+
*
|
|
428
|
+
* Transformer emits: ctx.span0(line, name, ctx._newCtx1({ requestId }), fn)
|
|
429
|
+
*/
|
|
430
|
+
_newCtx1(overrides) {
|
|
431
|
+
return createInheritedContextWithOverrides(this, overrides);
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Complete child span context setup - creates buffer, registers with parent.
|
|
435
|
+
* Called by span0-span8 after _newCtx0/_newCtx1 has created the prototype chain.
|
|
436
|
+
*
|
|
437
|
+
* Properties are set in HOT→COLD order per specs/lmao/01b1_buffer_performance_optimizations.md
|
|
438
|
+
* to ensure frequently-accessed properties get V8 in-object slots.
|
|
439
|
+
*
|
|
440
|
+
* @param childCtx - Child context created by _newCtx0 or _newCtx1
|
|
441
|
+
* @param line - Source line number (0 if not provided by transformer)
|
|
442
|
+
* @param name - Child span name
|
|
443
|
+
* @param SpanBufferClass - Buffer class to use (Op's class or parent's class for plain functions)
|
|
444
|
+
* @param remappedViewClass - Optional view class for prefixed ops (wraps buffer for Arrow conversion)
|
|
445
|
+
* @param opMetadata - Metadata for the executing op (Op's metadata or parent's for plain functions)
|
|
446
|
+
*/
|
|
447
|
+
_spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata) {
|
|
448
|
+
// Get Op's schema for cross-library calls (child may have different schema than parent)
|
|
449
|
+
const childSchema = SpanBufferClass.schema;
|
|
450
|
+
// Use buffer strategy for child span creation (supports both JS and WASM buffers)
|
|
451
|
+
// Pass schema for cross-library calls where child has different schema than parent
|
|
452
|
+
const createdBuffer = this._buffer._traceRoot.tracer.bufferStrategy.createChildSpanBuffer(this._buffer, // parentBuffer
|
|
453
|
+
this._buffer._opMetadata, // callsiteMetadata - WHO called span() (for row 0)
|
|
454
|
+
opMetadata, // opMetadata - WHICH op is executing (for rows 1+)
|
|
455
|
+
undefined, // capacity - use default
|
|
456
|
+
childSchema);
|
|
457
|
+
if (!isSpanBufferForSchema(createdBuffer, childSchema)) {
|
|
458
|
+
throw new TypeError('Child span buffer does not match the requested schema');
|
|
459
|
+
}
|
|
460
|
+
const childBuffer = createdBuffer;
|
|
461
|
+
// Why wrap buffer: RemappedBufferView translates prefixed column names during Arrow conversion
|
|
462
|
+
// Parent sees remapped names, child sees unprefixed names (transparent to child)
|
|
463
|
+
const bufferOrView = remappedViewClass ? new remappedViewClass(childBuffer) : childBuffer;
|
|
464
|
+
// Why push wrapped buffer: Parent's _children see remapped names for Arrow conversion
|
|
465
|
+
this._buffer._children.push(bufferOrView);
|
|
466
|
+
// Write span-start for child span (row 0) and pre-initialize span-end (row 1)
|
|
467
|
+
writeSpanStart(childBuffer, name);
|
|
468
|
+
// Write line number to row 0 (line() takes pos and value)
|
|
469
|
+
childBuffer.line(0, line);
|
|
470
|
+
const childLogger = createSpanLogger(childSchema, childBuffer);
|
|
471
|
+
const childTagAPI = createTagWriter(childSchema, childBuffer);
|
|
472
|
+
// Cast to impl for property assignment
|
|
473
|
+
const ctx = childCtx;
|
|
474
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
475
|
+
// PROPERTY ASSIGNMENT ORDER: HOT → COLD (V8 in-object slots optimization)
|
|
476
|
+
// First ~10-12 properties get fast in-object slots per spec
|
|
477
|
+
// ═══════════════════════════════════════════════════════════════════
|
|
478
|
+
// SLOT 1-4: HOTTEST - accessed on every span operation
|
|
479
|
+
ctx._buffer = childBuffer;
|
|
480
|
+
ctx._spanLogger = childLogger;
|
|
481
|
+
ctx.tag = childTagAPI;
|
|
482
|
+
ctx.log = childLogger;
|
|
483
|
+
// SLOT 5-7: HOT - reserved keys copied from parent for O(1) access
|
|
484
|
+
ctx.deps = this.deps;
|
|
485
|
+
// Create child-bound FF evaluator so flag access logs to child buffer
|
|
486
|
+
// If no evaluator (ff is EMPTY_SCOPE), just copy the reference
|
|
487
|
+
ctx.ff = this.ff.forContext ? this.ff.forContext(ctx) : this.ff;
|
|
488
|
+
// Note: user-defined extras (env, requestId, etc.) inherited via prototype chain
|
|
489
|
+
// SLOT 8-11: WARM - function properties (created per-context for destructuring)
|
|
490
|
+
// Regular functions close over local variables directly - no property lookups
|
|
491
|
+
const childSpan = function span(nameOrLine, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11) {
|
|
492
|
+
const len = arguments.length;
|
|
493
|
+
const hasLine = typeof nameOrLine === 'number';
|
|
494
|
+
const spanLine = hasLine ? nameOrLine : 0;
|
|
495
|
+
const spanName = hasLine ? readStringArgument(arguments, 1, 'span name') : nameOrLine;
|
|
496
|
+
const checkIdx = hasLine ? 2 : 1;
|
|
497
|
+
const maybeOverrides = arguments[checkIdx];
|
|
498
|
+
const hasOverrides = maybeOverrides !== null &&
|
|
499
|
+
typeof maybeOverrides === 'object' &&
|
|
500
|
+
!(maybeOverrides instanceof Op) &&
|
|
501
|
+
typeof maybeOverrides !== 'function';
|
|
502
|
+
const fnIdx = checkIdx + (hasOverrides ? 1 : 0);
|
|
503
|
+
const target = resolveSpanTarget(arguments[fnIdx], childBuffer);
|
|
504
|
+
// Create child context - use _newCtx0 or _newCtx1 based on overrides
|
|
505
|
+
const newChildCtx = hasOverrides ? ctx._newCtx1(maybeOverrides) : ctx._newCtx0();
|
|
506
|
+
const argCount = len - fnIdx - 1;
|
|
507
|
+
switch (argCount) {
|
|
508
|
+
case 0:
|
|
509
|
+
return ctx.span0(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn);
|
|
510
|
+
case 1:
|
|
511
|
+
return ctx.span1(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1]);
|
|
512
|
+
case 2:
|
|
513
|
+
return ctx.span2(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2]);
|
|
514
|
+
case 3:
|
|
515
|
+
return ctx.span3(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3]);
|
|
516
|
+
case 4:
|
|
517
|
+
return ctx.span4(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4]);
|
|
518
|
+
case 5:
|
|
519
|
+
return ctx.span5(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5]);
|
|
520
|
+
case 6:
|
|
521
|
+
return ctx.span6(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5], arguments[fnIdx + 6]);
|
|
522
|
+
case 7:
|
|
523
|
+
return ctx.span7(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5], arguments[fnIdx + 6], arguments[fnIdx + 7]);
|
|
524
|
+
case 8:
|
|
525
|
+
return ctx.span8(spanLine, spanName, newChildCtx, target.SpanBufferClass, target.remappedViewClass, target.opMetadata, target.fn, arguments[fnIdx + 1], arguments[fnIdx + 2], arguments[fnIdx + 3], arguments[fnIdx + 4], arguments[fnIdx + 5], arguments[fnIdx + 6], arguments[fnIdx + 7], arguments[fnIdx + 8]);
|
|
526
|
+
default:
|
|
527
|
+
throw new Error(`span() supports up to 8 arguments, got ${argCount}`);
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
ctx.span = childSpan;
|
|
531
|
+
ctx.spanSync = function spanSync(name, fn) {
|
|
532
|
+
const newChildCtx = ctx._newCtx0();
|
|
533
|
+
return ctx.spanSync0(0, name, newChildCtx, getBufferConstructor(childBuffer), undefined, childBuffer._opMetadata, fn);
|
|
534
|
+
};
|
|
535
|
+
ctx.ok = function ok(value) {
|
|
536
|
+
return new Ok(value, childSchema, childBuffer);
|
|
537
|
+
};
|
|
538
|
+
ctx.err = function err(error) {
|
|
539
|
+
return new Err(error, childSchema, childBuffer);
|
|
540
|
+
};
|
|
541
|
+
ctx.setScope = function setScope(attributes) {
|
|
542
|
+
childLogger._setScope(attributes ?? {});
|
|
543
|
+
};
|
|
544
|
+
// SLOT 12+: COLD - internal/rarely accessed
|
|
545
|
+
ctx._schema = childSchema;
|
|
546
|
+
ctx._logBinding = logBinding;
|
|
547
|
+
return ctx;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Handle span exception - writes exception details to row 1.
|
|
551
|
+
* Called in catch blocks of span methods.
|
|
552
|
+
*/
|
|
553
|
+
_spanException(childBuffer, error) {
|
|
554
|
+
// Write entry_type and timestamp via TraceRoot (platform-specific)
|
|
555
|
+
childBuffer._traceRoot.writeSpanEnd(childBuffer, ENTRY_TYPE_SPAN_EXCEPTION);
|
|
556
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
557
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
558
|
+
childBuffer.message(1, errorMessage);
|
|
559
|
+
if (errorStack) {
|
|
560
|
+
childBuffer.exception_stack(1, errorStack);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
// =========================================================================
|
|
564
|
+
// Monomorphic span methods (for transformer output)
|
|
565
|
+
// Transformer emits: ctx.span0(line, name, ctx, fn) or
|
|
566
|
+
// ctx.span0(line, name, Object.assign(Object.create(ctx), overrides), fn)
|
|
567
|
+
// childCtx inherits from parent via prototype chain, may have user overrides as own properties
|
|
568
|
+
// =========================================================================
|
|
569
|
+
spanSync0(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn) {
|
|
570
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
571
|
+
const buffer = ctx._buffer;
|
|
572
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
573
|
+
try {
|
|
574
|
+
const result = fn(ctx);
|
|
575
|
+
writeSpanEnd(buffer, result);
|
|
576
|
+
return result;
|
|
577
|
+
}
|
|
578
|
+
catch (error) {
|
|
579
|
+
this._spanException(buffer, error);
|
|
580
|
+
throw error;
|
|
581
|
+
}
|
|
582
|
+
finally {
|
|
583
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
async span0(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn) {
|
|
587
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
588
|
+
const buffer = ctx._buffer;
|
|
589
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
590
|
+
try {
|
|
591
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
592
|
+
const result = await executeWithRetry(buffer, () => fn(ctx));
|
|
593
|
+
writeSpanEnd(buffer, result);
|
|
594
|
+
return result;
|
|
595
|
+
}
|
|
596
|
+
catch (error) {
|
|
597
|
+
this._spanException(buffer, error);
|
|
598
|
+
throw error;
|
|
599
|
+
}
|
|
600
|
+
finally {
|
|
601
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
async span1(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1) {
|
|
605
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
606
|
+
const buffer = ctx._buffer;
|
|
607
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
608
|
+
try {
|
|
609
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
610
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1));
|
|
611
|
+
writeSpanEnd(buffer, result);
|
|
612
|
+
return result;
|
|
613
|
+
}
|
|
614
|
+
catch (error) {
|
|
615
|
+
this._spanException(buffer, error);
|
|
616
|
+
throw error;
|
|
617
|
+
}
|
|
618
|
+
finally {
|
|
619
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
async span2(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2) {
|
|
623
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
624
|
+
const buffer = ctx._buffer;
|
|
625
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
626
|
+
try {
|
|
627
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
628
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2));
|
|
629
|
+
writeSpanEnd(buffer, result);
|
|
630
|
+
return result;
|
|
631
|
+
}
|
|
632
|
+
catch (error) {
|
|
633
|
+
this._spanException(buffer, error);
|
|
634
|
+
throw error;
|
|
635
|
+
}
|
|
636
|
+
finally {
|
|
637
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
async span3(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2, a3) {
|
|
641
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
642
|
+
const buffer = ctx._buffer;
|
|
643
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
644
|
+
try {
|
|
645
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
646
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2, a3));
|
|
647
|
+
writeSpanEnd(buffer, result);
|
|
648
|
+
return result;
|
|
649
|
+
}
|
|
650
|
+
catch (error) {
|
|
651
|
+
this._spanException(buffer, error);
|
|
652
|
+
throw error;
|
|
653
|
+
}
|
|
654
|
+
finally {
|
|
655
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
async span4(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2, a3, a4) {
|
|
659
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
660
|
+
const buffer = ctx._buffer;
|
|
661
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
662
|
+
try {
|
|
663
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
664
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2, a3, a4));
|
|
665
|
+
writeSpanEnd(buffer, result);
|
|
666
|
+
return result;
|
|
667
|
+
}
|
|
668
|
+
catch (error) {
|
|
669
|
+
this._spanException(buffer, error);
|
|
670
|
+
throw error;
|
|
671
|
+
}
|
|
672
|
+
finally {
|
|
673
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
async span5(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2, a3, a4, a5) {
|
|
677
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
678
|
+
const buffer = ctx._buffer;
|
|
679
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
680
|
+
try {
|
|
681
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
682
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2, a3, a4, a5));
|
|
683
|
+
writeSpanEnd(buffer, result);
|
|
684
|
+
return result;
|
|
685
|
+
}
|
|
686
|
+
catch (error) {
|
|
687
|
+
this._spanException(buffer, error);
|
|
688
|
+
throw error;
|
|
689
|
+
}
|
|
690
|
+
finally {
|
|
691
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
async span6(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2, a3, a4, a5, a6) {
|
|
695
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
696
|
+
const buffer = ctx._buffer;
|
|
697
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
698
|
+
try {
|
|
699
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
700
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2, a3, a4, a5, a6));
|
|
701
|
+
writeSpanEnd(buffer, result);
|
|
702
|
+
return result;
|
|
703
|
+
}
|
|
704
|
+
catch (error) {
|
|
705
|
+
this._spanException(buffer, error);
|
|
706
|
+
throw error;
|
|
707
|
+
}
|
|
708
|
+
finally {
|
|
709
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
async span7(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2, a3, a4, a5, a6, a7) {
|
|
713
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
714
|
+
const buffer = ctx._buffer;
|
|
715
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
716
|
+
try {
|
|
717
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
718
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2, a3, a4, a5, a6, a7));
|
|
719
|
+
writeSpanEnd(buffer, result);
|
|
720
|
+
return result;
|
|
721
|
+
}
|
|
722
|
+
catch (error) {
|
|
723
|
+
this._spanException(buffer, error);
|
|
724
|
+
throw error;
|
|
725
|
+
}
|
|
726
|
+
finally {
|
|
727
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
async span8(line, name, childCtx, SpanBufferClass, remappedViewClass, opMetadata, fn, a1, a2, a3, a4, a5, a6, a7, a8) {
|
|
731
|
+
const ctx = this._spanPre(childCtx, line, name, SpanBufferClass, remappedViewClass, opMetadata);
|
|
732
|
+
const buffer = ctx._buffer;
|
|
733
|
+
buffer._traceRoot.tracer.onSpanStart(buffer);
|
|
734
|
+
try {
|
|
735
|
+
// Execute with retry loop - TransientError triggers retry, BlockedError returns immediately
|
|
736
|
+
const result = await executeWithRetry(buffer, () => fn(ctx, a1, a2, a3, a4, a5, a6, a7, a8));
|
|
737
|
+
writeSpanEnd(buffer, result);
|
|
738
|
+
return result;
|
|
739
|
+
}
|
|
740
|
+
catch (error) {
|
|
741
|
+
this._spanException(buffer, error);
|
|
742
|
+
throw error;
|
|
743
|
+
}
|
|
744
|
+
finally {
|
|
745
|
+
buffer._traceRoot.tracer.onSpanEnd(buffer);
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
const SpanContextCtor = SpanContextImpl;
|
|
750
|
+
return SpanContextCtor;
|
|
751
|
+
}
|
|
752
|
+
// =============================================================================
|
|
753
|
+
// Type Guard
|
|
754
|
+
// =============================================================================
|
|
755
|
+
/**
|
|
756
|
+
* Type guard to check if a value is a SpanContext
|
|
757
|
+
*/
|
|
758
|
+
export function isSpanContext(value) {
|
|
759
|
+
return (typeof value === 'object' &&
|
|
760
|
+
value !== null &&
|
|
761
|
+
SPAN_CONTEXT_MARKER in value &&
|
|
762
|
+
Reflect.get(value, SPAN_CONTEXT_MARKER) === true);
|
|
763
|
+
}
|