@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,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for synchronous and asynchronous trace execution
|
|
3
|
+
*
|
|
4
|
+
* Verifies that Tracer.trace() correctly handles both sync and async functions,
|
|
5
|
+
* writing span-ok or span-exception entries at the correct time (immediately for sync,
|
|
6
|
+
* after Promise resolution for async).
|
|
7
|
+
*
|
|
8
|
+
* Per specs/lmao/01_trace_logging_system.md and tracer.ts implementation:
|
|
9
|
+
* - Sync functions: span-ok/span-exception written immediately after execution
|
|
10
|
+
* - Async functions: span-ok/span-exception written after Promise resolves/rejects
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { describe, expect, it } from 'bun:test';
|
|
14
|
+
// Must import test-helpers first to initialize timestamp implementation
|
|
15
|
+
import './test-helpers.js';
|
|
16
|
+
import { defineOpContext } from '../defineOpContext.js';
|
|
17
|
+
import { S } from '../schema/builder.js';
|
|
18
|
+
import { defineLogSchema } from '../schema/defineLogSchema.js';
|
|
19
|
+
import { ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_OK, ENTRY_TYPE_SPAN_START } from '../schema/systemSchema.js';
|
|
20
|
+
import { TestTracer } from '../tracers/TestTracer.js';
|
|
21
|
+
import type { AnySpanBuffer } from '../types.js';
|
|
22
|
+
import { createTestTracerOptions } from './test-helpers.js';
|
|
23
|
+
|
|
24
|
+
// Test schema
|
|
25
|
+
const testSchema = defineLogSchema({
|
|
26
|
+
userId: S.category(),
|
|
27
|
+
requestId: S.category(),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('Sync/Async Trace Execution', () => {
|
|
31
|
+
describe('Sync trace execution', () => {
|
|
32
|
+
it('should write span-ok immediately for sync function', () => {
|
|
33
|
+
const ctx = defineOpContext({
|
|
34
|
+
logSchema: testSchema,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
38
|
+
|
|
39
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
40
|
+
|
|
41
|
+
// Execute sync function - trace() returns sync result
|
|
42
|
+
const result = tracer.trace('sync-trace', (ctx) => {
|
|
43
|
+
capturedBuffer = ctx.buffer;
|
|
44
|
+
|
|
45
|
+
// At this point, span-start is written (row 0)
|
|
46
|
+
expect(ctx.buffer.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
47
|
+
|
|
48
|
+
// Row 1 not yet written (happens after function returns)
|
|
49
|
+
return { success: true, value: 42 };
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// For sync function, result should be returned immediately (not a Promise)
|
|
53
|
+
expect(result).toEqual({ success: true, value: 42 });
|
|
54
|
+
|
|
55
|
+
// span-ok should be written to row 1 immediately after sync function returns
|
|
56
|
+
expect(capturedBuffer).toBeDefined();
|
|
57
|
+
expect(capturedBuffer?.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
58
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
59
|
+
|
|
60
|
+
// Timestamp should be written
|
|
61
|
+
expect(capturedBuffer?.timestamp[1]).toBeGreaterThan(0n);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should write span-exception immediately for sync function that throws', () => {
|
|
65
|
+
const ctx = defineOpContext({
|
|
66
|
+
logSchema: testSchema,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
70
|
+
|
|
71
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
72
|
+
|
|
73
|
+
const testError = new Error('Sync error');
|
|
74
|
+
|
|
75
|
+
// Execute sync function that throws - should throw immediately
|
|
76
|
+
expect(() => {
|
|
77
|
+
tracer.trace('sync-error-trace', (ctx) => {
|
|
78
|
+
capturedBuffer = ctx.buffer;
|
|
79
|
+
|
|
80
|
+
// span-start written at row 0
|
|
81
|
+
expect(ctx.buffer.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
82
|
+
|
|
83
|
+
throw testError;
|
|
84
|
+
});
|
|
85
|
+
}).toThrow('Sync error');
|
|
86
|
+
|
|
87
|
+
// span-exception should be written to row 1 immediately
|
|
88
|
+
expect(capturedBuffer).toBeDefined();
|
|
89
|
+
expect(capturedBuffer?.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
90
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_EXCEPTION);
|
|
91
|
+
|
|
92
|
+
// Exception details should be written
|
|
93
|
+
expect(capturedBuffer?.timestamp[1]).toBeGreaterThan(0n);
|
|
94
|
+
|
|
95
|
+
// message should contain error message
|
|
96
|
+
// Note: System columns (message, exception_stack) use method call, not direct array access
|
|
97
|
+
// We verify via conversion later if needed, here we just check entry_type
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('Async trace execution', () => {
|
|
102
|
+
it('should write span-ok after Promise resolves', async () => {
|
|
103
|
+
const ctx = defineOpContext({
|
|
104
|
+
logSchema: testSchema,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
108
|
+
let promiseResolved = false;
|
|
109
|
+
|
|
110
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
111
|
+
|
|
112
|
+
// Execute async function - trace() returns Promise
|
|
113
|
+
const resultPromise = tracer.trace('async-trace', async (ctx) => {
|
|
114
|
+
capturedBuffer = ctx.buffer;
|
|
115
|
+
|
|
116
|
+
// span-start is written at row 0
|
|
117
|
+
expect(ctx.buffer.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
118
|
+
|
|
119
|
+
// Row 1 not yet written (will be written after Promise resolves)
|
|
120
|
+
// At this point, entry_type[1] may be 0 or pre-initialized
|
|
121
|
+
|
|
122
|
+
// Simulate async work
|
|
123
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
124
|
+
|
|
125
|
+
promiseResolved = true;
|
|
126
|
+
|
|
127
|
+
return { success: true, value: 'async result' };
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// Result should be a Promise
|
|
131
|
+
expect(resultPromise).toBeInstanceOf(Promise);
|
|
132
|
+
|
|
133
|
+
// Before awaiting, span-ok not yet written
|
|
134
|
+
expect(promiseResolved).toBe(false);
|
|
135
|
+
|
|
136
|
+
// Await the Promise
|
|
137
|
+
const result = await resultPromise;
|
|
138
|
+
|
|
139
|
+
// Promise should have resolved
|
|
140
|
+
expect(promiseResolved).toBe(true);
|
|
141
|
+
expect(result).toEqual({ success: true, value: 'async result' });
|
|
142
|
+
|
|
143
|
+
// After Promise resolves, span-ok should be written to row 1
|
|
144
|
+
expect(capturedBuffer).toBeDefined();
|
|
145
|
+
expect(capturedBuffer?.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
146
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
147
|
+
|
|
148
|
+
// Timestamp should be written
|
|
149
|
+
expect(capturedBuffer?.timestamp[1]).toBeGreaterThan(0n);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it('should write span-exception after Promise rejects', async () => {
|
|
153
|
+
const ctx = defineOpContext({
|
|
154
|
+
logSchema: testSchema,
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
158
|
+
let promiseRejected = false;
|
|
159
|
+
|
|
160
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
161
|
+
|
|
162
|
+
const testError = new Error('Async error');
|
|
163
|
+
|
|
164
|
+
// Execute async function that throws
|
|
165
|
+
const resultPromise = tracer.trace('async-error-trace', async (ctx) => {
|
|
166
|
+
capturedBuffer = ctx.buffer;
|
|
167
|
+
|
|
168
|
+
// span-start written at row 0
|
|
169
|
+
expect(ctx.buffer.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
170
|
+
|
|
171
|
+
// Simulate async work before error
|
|
172
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
173
|
+
|
|
174
|
+
promiseRejected = true;
|
|
175
|
+
|
|
176
|
+
throw testError;
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// Result should be a Promise
|
|
180
|
+
expect(resultPromise).toBeInstanceOf(Promise);
|
|
181
|
+
|
|
182
|
+
// Before awaiting, exception not yet thrown
|
|
183
|
+
expect(promiseRejected).toBe(false);
|
|
184
|
+
|
|
185
|
+
// Await and expect rejection
|
|
186
|
+
await expect(resultPromise).rejects.toThrow('Async error');
|
|
187
|
+
|
|
188
|
+
// Promise should have rejected
|
|
189
|
+
expect(promiseRejected).toBe(true);
|
|
190
|
+
|
|
191
|
+
// After Promise rejects, span-exception should be written to row 1
|
|
192
|
+
expect(capturedBuffer).toBeDefined();
|
|
193
|
+
expect(capturedBuffer?.entry_type[0]).toBe(ENTRY_TYPE_SPAN_START);
|
|
194
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_EXCEPTION);
|
|
195
|
+
|
|
196
|
+
// Timestamp should be written
|
|
197
|
+
expect(capturedBuffer?.timestamp[1]).toBeGreaterThan(0n);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
describe('Mixed sync/async traces', () => {
|
|
202
|
+
it('should handle multiple sync traces correctly', () => {
|
|
203
|
+
const ctx = defineOpContext({
|
|
204
|
+
logSchema: testSchema,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
const buffers: AnySpanBuffer[] = [];
|
|
208
|
+
|
|
209
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
210
|
+
|
|
211
|
+
// Execute multiple sync traces
|
|
212
|
+
const result1 = tracer.trace('sync-1', (ctx) => {
|
|
213
|
+
buffers.push(ctx.buffer);
|
|
214
|
+
ctx.tag.userId('user-1');
|
|
215
|
+
return 'result-1';
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
const result2 = tracer.trace('sync-2', (ctx) => {
|
|
219
|
+
buffers.push(ctx.buffer);
|
|
220
|
+
ctx.tag.userId('user-2');
|
|
221
|
+
return 'result-2';
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// Both should return immediately
|
|
225
|
+
expect(result1).toBe('result-1');
|
|
226
|
+
expect(result2).toBe('result-2');
|
|
227
|
+
|
|
228
|
+
// Both buffers should have span-ok written
|
|
229
|
+
expect(buffers.length).toBe(2);
|
|
230
|
+
expect(buffers[0].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
231
|
+
expect(buffers[1].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
232
|
+
|
|
233
|
+
// Both traces should be collected
|
|
234
|
+
expect(tracer.rootBuffers.length).toBe(2);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('should handle multiple async traces correctly', async () => {
|
|
238
|
+
const ctx = defineOpContext({
|
|
239
|
+
logSchema: testSchema,
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const buffers: AnySpanBuffer[] = [];
|
|
243
|
+
|
|
244
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
245
|
+
|
|
246
|
+
// Execute multiple async traces in parallel
|
|
247
|
+
const promise1 = tracer.trace('async-1', async (ctx) => {
|
|
248
|
+
buffers.push(ctx.buffer);
|
|
249
|
+
ctx.tag.userId('user-1');
|
|
250
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
251
|
+
return 'result-1';
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
const promise2 = tracer.trace('async-2', async (ctx) => {
|
|
255
|
+
buffers.push(ctx.buffer);
|
|
256
|
+
ctx.tag.userId('user-2');
|
|
257
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
258
|
+
return 'result-2';
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Both should return Promises
|
|
262
|
+
expect(promise1).toBeInstanceOf(Promise);
|
|
263
|
+
expect(promise2).toBeInstanceOf(Promise);
|
|
264
|
+
|
|
265
|
+
// Await both
|
|
266
|
+
const [result1, result2] = await Promise.all([promise1, promise2]);
|
|
267
|
+
|
|
268
|
+
expect(result1).toBe('result-1');
|
|
269
|
+
expect(result2).toBe('result-2');
|
|
270
|
+
|
|
271
|
+
// Both buffers should have span-ok written
|
|
272
|
+
expect(buffers.length).toBe(2);
|
|
273
|
+
expect(buffers[0].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
274
|
+
expect(buffers[1].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
275
|
+
|
|
276
|
+
// Both traces should be collected
|
|
277
|
+
expect(tracer.rootBuffers.length).toBe(2);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('should handle interleaved sync and async traces', async () => {
|
|
281
|
+
const ctx = defineOpContext({
|
|
282
|
+
logSchema: testSchema,
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
const buffers: AnySpanBuffer[] = [];
|
|
286
|
+
|
|
287
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
288
|
+
|
|
289
|
+
// Sync trace
|
|
290
|
+
const syncResult = tracer.trace('sync', (ctx) => {
|
|
291
|
+
buffers.push(ctx.buffer);
|
|
292
|
+
return 'sync-done';
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
// Async trace
|
|
296
|
+
const asyncPromise = tracer.trace('async', async (ctx) => {
|
|
297
|
+
buffers.push(ctx.buffer);
|
|
298
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
299
|
+
return 'async-done';
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
// Another sync trace
|
|
303
|
+
const syncResult2 = tracer.trace('sync-2', (ctx) => {
|
|
304
|
+
buffers.push(ctx.buffer);
|
|
305
|
+
return 'sync-done-2';
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Sync results available immediately
|
|
309
|
+
expect(syncResult).toBe('sync-done');
|
|
310
|
+
expect(syncResult2).toBe('sync-done-2');
|
|
311
|
+
|
|
312
|
+
// Async result available after await
|
|
313
|
+
const asyncResult = await asyncPromise;
|
|
314
|
+
expect(asyncResult).toBe('async-done');
|
|
315
|
+
|
|
316
|
+
// All three buffers should have span-ok
|
|
317
|
+
expect(buffers.length).toBe(3);
|
|
318
|
+
expect(buffers[0].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
319
|
+
expect(buffers[1].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
320
|
+
expect(buffers[2].entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
321
|
+
|
|
322
|
+
// All three traces should be collected
|
|
323
|
+
expect(tracer.rootBuffers.length).toBe(3);
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
describe('Trace with tags and logging', () => {
|
|
328
|
+
it('should support tags in sync trace', () => {
|
|
329
|
+
const ctx = defineOpContext({
|
|
330
|
+
logSchema: testSchema,
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
334
|
+
|
|
335
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
336
|
+
|
|
337
|
+
const result = tracer.trace('sync-with-tags', (ctx) => {
|
|
338
|
+
capturedBuffer = ctx.buffer;
|
|
339
|
+
|
|
340
|
+
// Write tags
|
|
341
|
+
ctx.tag.userId('user-123');
|
|
342
|
+
ctx.tag.requestId('req-456');
|
|
343
|
+
|
|
344
|
+
return { id: 123 };
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
expect(result).toEqual({ id: 123 });
|
|
348
|
+
|
|
349
|
+
// span-ok should be written
|
|
350
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
it('should support tags in async trace', async () => {
|
|
354
|
+
const ctx = defineOpContext({
|
|
355
|
+
logSchema: testSchema,
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
359
|
+
|
|
360
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
361
|
+
|
|
362
|
+
const result = await tracer.trace('async-with-tags', async (ctx) => {
|
|
363
|
+
capturedBuffer = ctx.buffer;
|
|
364
|
+
|
|
365
|
+
// Write tags
|
|
366
|
+
ctx.tag.userId('user-123');
|
|
367
|
+
ctx.tag.requestId('req-456');
|
|
368
|
+
|
|
369
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
370
|
+
|
|
371
|
+
return { id: 123 };
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
expect(result).toEqual({ id: 123 });
|
|
375
|
+
|
|
376
|
+
// span-ok should be written after Promise resolves
|
|
377
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
it('should support logging in sync trace', () => {
|
|
381
|
+
const ctx = defineOpContext({
|
|
382
|
+
logSchema: testSchema,
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
386
|
+
|
|
387
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
388
|
+
|
|
389
|
+
const result = tracer.trace('sync-with-logging', (ctx) => {
|
|
390
|
+
capturedBuffer = ctx.buffer;
|
|
391
|
+
|
|
392
|
+
// Log events (should go to rows 2+)
|
|
393
|
+
ctx.log.info('Starting operation');
|
|
394
|
+
ctx.log.debug('Debug info');
|
|
395
|
+
|
|
396
|
+
return 'done';
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
expect(result).toBe('done');
|
|
400
|
+
|
|
401
|
+
// span-ok at row 1
|
|
402
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
403
|
+
|
|
404
|
+
// Events logged at rows 2+ (verified by successful completion)
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
it('should support logging in async trace', async () => {
|
|
408
|
+
const ctx = defineOpContext({
|
|
409
|
+
logSchema: testSchema,
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
let capturedBuffer: AnySpanBuffer | undefined;
|
|
413
|
+
|
|
414
|
+
const tracer = new TestTracer(ctx, { ...createTestTracerOptions() });
|
|
415
|
+
|
|
416
|
+
const result = await tracer.trace('async-with-logging', async (ctx) => {
|
|
417
|
+
capturedBuffer = ctx.buffer;
|
|
418
|
+
|
|
419
|
+
// Log events
|
|
420
|
+
ctx.log.info('Starting async operation');
|
|
421
|
+
|
|
422
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
423
|
+
|
|
424
|
+
ctx.log.info('Completed async operation');
|
|
425
|
+
|
|
426
|
+
return 'done';
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
expect(result).toBe('done');
|
|
430
|
+
|
|
431
|
+
// span-ok at row 1 (written after Promise resolves)
|
|
432
|
+
expect(capturedBuffer?.entry_type[1]).toBe(ENTRY_TYPE_SPAN_OK);
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
});
|