@smoothbricks/lmao 0.2.2 → 0.2.3
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/dist/allocator.wasm +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/lib/JsBufferStrategy.d.ts +4 -3
- package/dist/lib/JsBufferStrategy.d.ts.map +1 -1
- package/dist/lib/JsBufferStrategy.js +18 -11
- package/dist/lib/arrow/lease.d.ts +10 -0
- package/dist/lib/arrow/lease.d.ts.map +1 -0
- package/dist/lib/arrow/lease.js +33 -0
- package/dist/lib/arrow/utils.d.ts +3 -4
- package/dist/lib/arrow/utils.d.ts.map +1 -1
- package/dist/lib/arrow/utils.js +12 -13
- package/dist/lib/arrow/vocabularyDictionary.d.ts +21 -0
- package/dist/lib/arrow/vocabularyDictionary.d.ts.map +1 -0
- package/dist/lib/arrow/vocabularyDictionary.js +95 -0
- package/dist/lib/bufferStrategy.d.ts +3 -2
- package/dist/lib/bufferStrategy.d.ts.map +1 -1
- package/dist/lib/cloudflare/traceRows.d.ts.map +1 -1
- package/dist/lib/cloudflare/traceRows.js +3 -2
- package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -1
- package/dist/lib/codegen/evaluatorGenerator.js +12 -11
- package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +44 -82
- package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -1
- package/dist/lib/codegen/fixedPositionWriterGenerator.js +223 -162
- package/dist/lib/codegen/spanLoggerClosureMaterializer.d.ts +63 -0
- package/dist/lib/codegen/spanLoggerClosureMaterializer.d.ts.map +1 -0
- package/dist/lib/codegen/spanLoggerClosureMaterializer.js +447 -0
- package/dist/lib/codegen/spanLoggerGenerator.d.ts +36 -19
- package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -1
- package/dist/lib/codegen/spanLoggerGenerator.js +164 -158
- package/dist/lib/convertToArrow.d.ts +7 -2
- package/dist/lib/convertToArrow.d.ts.map +1 -1
- package/dist/lib/convertToArrow.js +499 -285
- package/dist/lib/defineOpContext.js +1 -1
- package/dist/lib/enumMetadata.d.ts +19 -0
- package/dist/lib/enumMetadata.d.ts.map +1 -0
- package/dist/lib/enumMetadata.js +86 -0
- package/dist/lib/flushScheduler.d.ts.map +1 -1
- package/dist/lib/flushScheduler.js +13 -4
- package/dist/lib/library.d.ts +16 -98
- package/dist/lib/library.d.ts.map +1 -1
- package/dist/lib/library.js +32 -525
- package/dist/lib/logBinding.d.ts +21 -27
- package/dist/lib/logBinding.d.ts.map +1 -1
- package/dist/lib/op.d.ts +30 -30
- package/dist/lib/op.d.ts.map +1 -1
- package/dist/lib/op.js +15 -22
- package/dist/lib/opContext/createOpGroup.d.ts +1 -1
- package/dist/lib/opContext/createOpGroup.d.ts.map +1 -1
- package/dist/lib/opContext/createOpGroup.js +22 -29
- package/dist/lib/opContext/defineOp.d.ts +4 -4
- package/dist/lib/opContext/defineOp.d.ts.map +1 -1
- package/dist/lib/opContext/defineOp.js +53 -10
- package/dist/lib/opContext/opGroupTypes.d.ts +2 -2
- package/dist/lib/opContext/opTypes.d.ts +1 -1
- package/dist/lib/opContext/opTypes.d.ts.map +1 -1
- package/dist/lib/opContext/spanContextTypes.d.ts +29 -14
- package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -1
- package/dist/lib/opContext/types.d.ts +4 -4
- package/dist/lib/opContext/types.d.ts.map +1 -1
- package/dist/lib/physicalLayoutPlan.d.ts +89 -0
- package/dist/lib/physicalLayoutPlan.d.ts.map +1 -0
- package/dist/lib/physicalLayoutPlan.js +442 -0
- package/dist/lib/resolveMessage.d.ts +9 -0
- package/dist/lib/resolveMessage.d.ts.map +1 -0
- package/dist/lib/resolveMessage.js +63 -0
- package/dist/lib/result.d.ts +5 -7
- package/dist/lib/result.d.ts.map +1 -1
- package/dist/lib/result.js +19 -26
- package/dist/lib/runtimeHint.d.ts +35 -0
- package/dist/lib/runtimeHint.d.ts.map +1 -0
- package/dist/lib/runtimeHint.js +79 -0
- package/dist/lib/schema/types.d.ts +1 -1
- package/dist/lib/schema/types.d.ts.map +1 -1
- package/dist/lib/span-buffer/aot/v1.d.ts +2 -0
- package/dist/lib/span-buffer/aot/v1.d.ts.map +1 -0
- package/dist/lib/span-buffer/aot/v1.js +24 -0
- package/dist/lib/spanBuffer.d.ts +33 -4
- package/dist/lib/spanBuffer.d.ts.map +1 -1
- package/dist/lib/spanBuffer.js +583 -91
- package/dist/lib/spanBufferStats.d.ts +1 -1
- package/dist/lib/spanBufferStats.d.ts.map +1 -1
- package/dist/lib/spanContext.d.ts +27 -51
- package/dist/lib/spanContext.d.ts.map +1 -1
- package/dist/lib/spanContext.js +822 -344
- package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -1
- package/dist/lib/sqlite/sqlite-common.js +20 -21
- package/dist/lib/testing/bun-harness.d.ts +8 -3
- package/dist/lib/testing/bun-harness.d.ts.map +1 -1
- package/dist/lib/testing/bun-harness.js +30 -18
- package/dist/lib/testing/extractFacts.d.ts +1 -1
- package/dist/lib/testing/extractFacts.d.ts.map +1 -1
- package/dist/lib/testing/extractFacts.js +55 -63
- package/dist/lib/testing/facts.d.ts +1 -1
- package/dist/lib/testing/facts.d.ts.map +1 -1
- package/dist/lib/testing/queryable-span.d.ts +1 -1
- package/dist/lib/testing/queryable-span.d.ts.map +1 -1
- package/dist/lib/testing/queryable-span.js +26 -28
- package/dist/lib/testing/span-query.d.ts.map +1 -1
- package/dist/lib/testing/span-query.js +19 -22
- package/dist/lib/testing/stdio-replay.d.ts.map +1 -1
- package/dist/lib/testing/stdio-replay.js +19 -8
- package/dist/lib/threadId.d.ts.map +1 -1
- package/dist/lib/threadId.js +6 -3
- package/dist/lib/traceRoot.d.ts +30 -8
- package/dist/lib/traceRoot.d.ts.map +1 -1
- package/dist/lib/traceRoot.es.d.ts +17 -15
- package/dist/lib/traceRoot.es.d.ts.map +1 -1
- package/dist/lib/traceRoot.es.js +68 -34
- package/dist/lib/traceRoot.js +11 -0
- package/dist/lib/traceRoot.node.d.ts +17 -19
- package/dist/lib/traceRoot.node.d.ts.map +1 -1
- package/dist/lib/traceRoot.node.js +66 -38
- package/dist/lib/traceTopology.d.ts +42 -0
- package/dist/lib/traceTopology.d.ts.map +1 -0
- package/dist/lib/traceTopology.js +260 -0
- package/dist/lib/tracer.d.ts +9 -5
- package/dist/lib/tracer.d.ts.map +1 -1
- package/dist/lib/tracer.js +65 -71
- package/dist/lib/tracers/ArrayQueueTracer.d.ts +1 -1
- package/dist/lib/tracers/ArrayQueueTracer.js +1 -1
- package/dist/lib/tracers/StdioTracer.d.ts.map +1 -1
- package/dist/lib/tracers/StdioTracer.js +15 -13
- package/dist/lib/tracers/TestTracer.d.ts +4 -6
- package/dist/lib/tracers/TestTracer.d.ts.map +1 -1
- package/dist/lib/tracers/TestTracer.js +6 -8
- package/dist/lib/types.d.ts +49 -32
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/vocabularyRegistry.d.ts +25 -0
- package/dist/lib/vocabularyRegistry.d.ts.map +1 -0
- package/dist/lib/vocabularyRegistry.js +372 -0
- package/dist/lib/wasm/WasmBufferStrategy.d.ts +6 -10
- package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -1
- package/dist/lib/wasm/WasmBufferStrategy.js +44 -37
- package/dist/lib/wasm/wasmAllocator.d.ts +27 -22
- package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -1
- package/dist/lib/wasm/wasmAllocator.js +66 -44
- package/dist/lib/wasm/wasmPhysicalLayout.d.ts +67 -0
- package/dist/lib/wasm/wasmPhysicalLayout.d.ts.map +1 -0
- package/dist/lib/wasm/wasmPhysicalLayout.js +179 -0
- package/dist/lib/wasm/wasmSpanBuffer.d.ts +79 -31
- package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -1
- package/dist/lib/wasm/wasmSpanBuffer.js +442 -272
- package/dist/lib/wasm/wasmTraceRoot.d.ts +24 -22
- package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -1
- package/dist/lib/wasm/wasmTraceRoot.js +110 -71
- package/dist/vocabulary/register/v1.d.ts +2 -0
- package/dist/vocabulary/register/v1.d.ts.map +1 -0
- package/dist/vocabulary/register/v1.js +1 -0
- package/dist/wasm.d.ts +5 -0
- package/dist/wasm.d.ts.map +1 -0
- package/dist/wasm.js +4 -0
- package/package.json +54 -6
- package/src/index.ts +1 -0
- package/src/lib/JsBufferStrategy.ts +27 -9
- package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +335 -37
- package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +97 -26
- package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +75 -15
- package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +30 -6
- package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +18 -21
- package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +5 -2
- package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +25 -7
- package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +3 -2
- package/src/lib/__tests__/buffer-overflow.test.ts +24 -18
- package/src/lib/__tests__/capability-span-context.test.ts +505 -0
- package/src/lib/__tests__/capacity-tuning.test.ts +5 -3
- package/src/lib/__tests__/eager-columns.test.ts +345 -0
- package/src/lib/__tests__/enum-metadata-aot.test.ts +153 -0
- package/src/lib/__tests__/enum-metadata.test.ts +177 -0
- package/src/lib/__tests__/fixtures/empty-vocabulary-runtime.fixture.ts +15 -0
- package/src/lib/__tests__/flushScheduler.test.ts +5 -1
- package/src/lib/__tests__/identity-view.property.test.ts +179 -0
- package/src/lib/__tests__/library.test.ts +19 -235
- package/src/lib/__tests__/message-buffer-families.test.ts +878 -0
- package/src/lib/__tests__/nested-library-tasks.test.ts +14 -15
- package/src/lib/__tests__/op-metadata.test.ts +1 -1
- package/src/lib/__tests__/op-type-safety.test.ts +5 -16
- package/src/lib/__tests__/physical-layout-plan.test.ts +333 -0
- package/src/lib/__tests__/remap-descriptor-integration.test.ts +381 -0
- package/src/lib/__tests__/root-context-construction.test.ts +414 -0
- package/src/lib/__tests__/span-auto-runtime.test.ts +386 -0
- package/src/lib/__tests__/span-buffer-segment-stats.test.ts +221 -0
- package/src/lib/__tests__/span-lifecycle.test.ts +53 -25
- package/src/lib/__tests__/spanbuffer-materializer-parity.test.ts +266 -0
- package/src/lib/__tests__/sync-async-trace.test.ts +24 -23
- package/src/lib/__tests__/tag-writer-aot.test.ts +214 -0
- package/src/lib/__tests__/test-helpers.ts +67 -12
- package/src/lib/__tests__/threadId.test.ts +62 -0
- package/src/lib/__tests__/timestamp.test.ts +221 -93
- package/src/lib/__tests__/traceTopology.property.test.ts +383 -0
- package/src/lib/__tests__/type-narrowing.test.ts +63 -0
- package/src/lib/__tests__/vocabulary-dense-decoding.test.ts +405 -0
- package/src/lib/__tests__/vocabularyRegistry.test.ts +313 -0
- package/src/lib/arrow/lease.ts +43 -0
- package/src/lib/arrow/utils.ts +10 -14
- package/src/lib/arrow/vocabularyDictionary.ts +123 -0
- package/src/lib/bufferStrategy.ts +9 -1
- package/src/lib/cloudflare/traceRows.ts +3 -2
- package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +21 -141
- package/src/lib/codegen/__tests__/fixedPositionWriter-parity.test.ts +273 -0
- package/src/lib/codegen/__tests__/fixedPositionWriter-uint64.test.ts +61 -34
- package/src/lib/codegen/__tests__/nullBitmap.test.ts +33 -37
- package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +34 -18
- package/src/lib/codegen/__tests__/spanLoggerMaterializerParity.test.ts +503 -0
- package/src/lib/codegen/evaluatorGenerator.ts +18 -13
- package/src/lib/codegen/fixedPositionWriterGenerator.ts +329 -245
- package/src/lib/codegen/spanLoggerClosureMaterializer.ts +598 -0
- package/src/lib/codegen/spanLoggerGenerator.ts +241 -177
- package/src/lib/convertToArrow.ts +598 -311
- package/src/lib/defineOpContext.ts +1 -1
- package/src/lib/enumMetadata.ts +121 -0
- package/src/lib/flushScheduler.ts +11 -5
- package/src/lib/library.ts +37 -595
- package/src/lib/logBinding.ts +21 -27
- package/src/lib/op.ts +75 -18
- package/src/lib/opContext/__tests__/retry.test.ts +27 -21
- package/src/lib/opContext/createOpGroup.ts +33 -31
- package/src/lib/opContext/defineOp.ts +88 -11
- package/src/lib/opContext/opGroupTypes.ts +2 -2
- package/src/lib/opContext/opTypes.ts +1 -1
- package/src/lib/opContext/spanContextTypes.ts +98 -17
- package/src/lib/opContext/types.ts +7 -3
- package/src/lib/physicalLayoutPlan.ts +598 -0
- package/src/lib/resolveMessage.ts +67 -0
- package/src/lib/result.ts +20 -33
- package/src/lib/runtimeHint.ts +98 -0
- package/src/lib/schema/__tests__/featureFlags.test.ts +2 -1
- package/src/lib/schema/builder.ts +1 -1
- package/src/lib/schema/types.ts +1 -1
- package/src/lib/span-buffer/aot/v1.ts +26 -0
- package/src/lib/spanBuffer.ts +658 -92
- package/src/lib/spanBufferStats.ts +1 -1
- package/src/lib/spanContext.ts +1350 -861
- package/src/lib/sqlite/sqlite-common.ts +20 -31
- package/src/lib/testing/__tests__/topology-traversal.test.ts +174 -0
- package/src/lib/testing/__tests__/vitest-harness.test.ts +2 -1
- package/src/lib/testing/bun-harness.ts +94 -43
- package/src/lib/testing/extractFacts.ts +64 -78
- package/src/lib/testing/facts.ts +1 -1
- package/src/lib/testing/queryable-span.ts +23 -30
- package/src/lib/testing/span-query.ts +16 -20
- package/src/lib/testing/stdio-replay.ts +25 -8
- package/src/lib/testing/vitest-harness.ts +1 -1
- package/src/lib/threadId.ts +6 -3
- package/src/lib/traceRoot.es.ts +77 -42
- package/src/lib/traceRoot.node.ts +75 -46
- package/src/lib/traceRoot.ts +41 -14
- package/src/lib/traceTopology.ts +279 -0
- package/src/lib/tracer.ts +109 -98
- package/src/lib/tracers/ArrayQueueTracer.ts +1 -1
- package/src/lib/tracers/StdioTracer.ts +15 -13
- package/src/lib/tracers/TestTracer.ts +6 -8
- package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +15 -10
- package/src/lib/tracers/__tests__/TestTracer.test.ts +23 -13
- package/src/lib/types.ts +64 -33
- package/src/lib/vocabularyRegistry.ts +439 -0
- package/src/lib/wasm/WasmBufferStrategy.ts +56 -48
- package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +215 -11
- package/src/lib/wasm/__tests__/allocatorFreeBlockClamp.test.ts +86 -0
- package/src/lib/wasm/__tests__/wasm-identity-view.test.ts +311 -0
- package/src/lib/wasm/__tests__/wasm-integration.test.ts +417 -44
- package/src/lib/wasm/__tests__/wasm-message-buffer-families.test.ts +588 -0
- package/src/lib/wasm/__tests__/wasmAllocator.test.ts +100 -668
- package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +419 -63
- package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +24 -29
- package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +2 -2
- package/src/lib/wasm/wasmAllocator.ts +131 -96
- package/src/lib/wasm/wasmPhysicalLayout.ts +309 -0
- package/src/lib/wasm/wasmSpanBuffer.ts +597 -341
- package/src/lib/wasm/wasmTraceRoot.ts +140 -78
- package/src/vocabulary/register/v1.ts +1 -0
- package/src/wasm.ts +19 -0
- package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +0 -319
- package/src/lib/__tests__/remapped-buffer-view.test.ts +0 -635
- package/src/lib/wasm/allocator.zig +0 -948
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-common.d.ts","sourceRoot":"","sources":["../../../src/lib/sqlite/sqlite-common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite-common.d.ts","sourceRoot":"","sources":["../../../src/lib/sqlite/sqlite-common.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,oBAAoB,sdAchC,CAAC;AAEF,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAI/D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAExE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAMxF;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,sBAAsB,EAAE,CAQ1B;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,sBAAsB,EAAE,CAKlH;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,QAAQ,SAA6B,GACpC,kBAAkB,EAAE,CAEtB;AAED,wBAAiB,gBAAgB,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,CAiBnF;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,sBAAsB,EAAE,CAW1B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAElG;AAED,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEtF;AAED,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAS1E;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,EAAE,CAgBnH"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { hasOwn, hasOwnString, isRecord } from '@smoothbricks/validation';
|
|
2
|
+
import { resolveEntryType, resolveMessage } from '../resolveMessage.js';
|
|
2
3
|
import { getSchemaType } from '../schema/typeGuards.js';
|
|
4
|
+
import { iterateSpanTree, NO_NODE } from '../traceTopology.js';
|
|
3
5
|
export const SPANS_TABLE_INIT_SQL = `
|
|
4
6
|
CREATE TABLE IF NOT EXISTS spans (
|
|
5
7
|
trace_id TEXT NOT NULL,
|
|
@@ -147,26 +149,23 @@ export function extractSqliteColumnsFromTableInfo(columns) {
|
|
|
147
149
|
export function parseSqliteTableInfoRows(rows, boundary = 'PRAGMA table_info(spans)') {
|
|
148
150
|
return rows.map((row, rowIndex) => parseSqliteTableInfoRow(row, boundary, rowIndex));
|
|
149
151
|
}
|
|
150
|
-
function* walkOverflowSegments(buffer, traceId, spanId, parentSpanId, rowOffset) {
|
|
151
|
-
yield {
|
|
152
|
-
buffer,
|
|
153
|
-
traceId,
|
|
154
|
-
spanId,
|
|
155
|
-
parentSpanId,
|
|
156
|
-
rowOffset,
|
|
157
|
-
};
|
|
158
|
-
if (buffer._overflow) {
|
|
159
|
-
yield* walkOverflowSegments(buffer._overflow, traceId, spanId, parentSpanId, rowOffset + buffer._writeIndex);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
function* walkTree(buffer) {
|
|
163
|
-
yield* walkOverflowSegments(buffer, buffer.trace_id, buffer.span_id, buffer.parent_span_id, 0);
|
|
164
|
-
for (const child of buffer._children) {
|
|
165
|
-
yield* walkTree(child);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
152
|
export function* walkSpanSegments(rootBuffer) {
|
|
169
|
-
|
|
153
|
+
let logicalNode = NO_NODE;
|
|
154
|
+
let rowOffset = 0;
|
|
155
|
+
for (const buffer of iterateSpanTree(rootBuffer)) {
|
|
156
|
+
if (buffer._nodeIndex !== logicalNode) {
|
|
157
|
+
logicalNode = buffer._nodeIndex;
|
|
158
|
+
rowOffset = 0;
|
|
159
|
+
}
|
|
160
|
+
yield {
|
|
161
|
+
buffer,
|
|
162
|
+
traceId: buffer.trace_id,
|
|
163
|
+
spanId: buffer.span_id,
|
|
164
|
+
parentSpanId: buffer.parent_span_id,
|
|
165
|
+
rowOffset,
|
|
166
|
+
};
|
|
167
|
+
rowOffset += buffer._writeIndex;
|
|
168
|
+
}
|
|
170
169
|
}
|
|
171
170
|
export function getMissingSchemaColumns(schema, knownColumns) {
|
|
172
171
|
const schemaColumns = [];
|
|
@@ -200,9 +199,9 @@ export function readSpanFieldValue(buffer, fieldName, row) {
|
|
|
200
199
|
}
|
|
201
200
|
export function buildInsertParams(segment, row, activeUserFields) {
|
|
202
201
|
const { buffer, traceId, spanId, parentSpanId, rowOffset } = segment;
|
|
203
|
-
const entryType = buffer
|
|
202
|
+
const entryType = resolveEntryType(buffer, row);
|
|
204
203
|
const timestampNs = Number(buffer.timestamp[row]);
|
|
205
|
-
const message = buffer
|
|
204
|
+
const message = resolveMessage(buffer, row);
|
|
206
205
|
const userValues = activeUserFields.map((fieldName) => {
|
|
207
206
|
const directValue = readUserValue(buffer, fieldName, row);
|
|
208
207
|
const val = directValue ?? readScopeValue(buffer, fieldName);
|
|
@@ -44,9 +44,14 @@ export interface BunTestSuiteTracer<B extends OpContextBinding> {
|
|
|
44
44
|
useTestSpan(): HarnessSpanContext<B>;
|
|
45
45
|
setupBunTestSuiteTracing(): void;
|
|
46
46
|
}
|
|
47
|
-
export type BunTestSuiteUseTestTracer<B extends OpContextBinding, TExt extends SchemaFields = Record<never, never>> =
|
|
47
|
+
export type BunTestSuiteUseTestTracer<B extends OpContextBinding, TExt extends SchemaFields = Record<never, never>> = BunTestTracerInstance<ExtendBindingLogSchema<B, HarnessSchema<TExt>>>;
|
|
48
48
|
export type TestTracer<B extends OpContextBinding, TExt extends SchemaFields = Record<never, never>> = BunTestSuiteUseTestTracer<B, TExt>;
|
|
49
|
-
|
|
49
|
+
export interface ActiveBunTestTracer {
|
|
50
|
+
setup(): void;
|
|
51
|
+
useTestSpan(): unknown;
|
|
52
|
+
getTracer(): unknown;
|
|
53
|
+
createBunTestMock<TModule extends BunTestModuleShape>(bunTestModule: TModule): TModule;
|
|
54
|
+
}
|
|
50
55
|
/** Returns the active suite tracer set by installBunTestTracing(), or null if none is active. */
|
|
51
56
|
export declare function getActiveSuiteTracer(): ActiveBunTestTracer | null;
|
|
52
57
|
export declare function installBunTestTracing(tracer: ActiveBunTestTracer): void;
|
|
@@ -97,7 +102,7 @@ export declare function createBunTestMock<TModule extends BunTestModuleShape>(bu
|
|
|
97
102
|
* `useTestSpan()` preserves the suite-local schema extension instead of falling
|
|
98
103
|
* back to the erased global singleton shape.
|
|
99
104
|
*/
|
|
100
|
-
export declare function useTestSpan<
|
|
105
|
+
export declare function useTestSpan<B extends OpContextBinding>(): SpanContext<OpContextOf<B>>;
|
|
101
106
|
/**
|
|
102
107
|
* Get the root tracer instance.
|
|
103
108
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-harness.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/bun-harness.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AACpC,OAAO,EACL,QAAQ,IAAI,SAAS,EACrB,SAAS,IAAI,UAAU,EACvB,SAAS,IAAI,UAAU,EACvB,UAAU,IAAI,WAAW,EACzB,QAAQ,IAAI,SAAS,EACrB,MAAM,IAAI,OAAO,EACjB,EAAE,IAAI,GAAG,EAEV,MAAM,UAAU,CAAC;AAKlB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAA4C,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,CAAC,EAAE,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA8B3C,KAAK,kBAAkB,CAAC,CAAC,SAAS,gBAAgB,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,KAAK,sBAAsB,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;CAAE,CAAC;AAC1E,KAAK,aAAa,CAAC,IAAI,SAAS,YAAY,IAAI,sBAAsB,GAAG,IAAI,CAAC;AAC9E,KAAK,WAAW,GAAG,OAAO,SAAS,CAAC;AACpC,KAAK,KAAK,GAAG,OAAO,GAAG,CAAC;AAOxB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,CAAC;IACtB,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,KAAK,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AASD,KAAK,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,SAAS,YAAY,IAC/E,CAAC,SAAS,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,IAAI,EAAE,MAAM,OAAO,CAAC,GACpE,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GACzG,KAAK,CAAC;AAEZ,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;IAClF;;;;OAIG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,IAAI,CAAC;CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"bun-harness.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/bun-harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -101,6 +101,12 @@ function extendBindingLogSchema(binding, extension) {
|
|
|
101
101
|
};
|
|
102
102
|
return extendedBinding;
|
|
103
103
|
}
|
|
104
|
+
function createRuntimeHarnessBinding(binding, options) {
|
|
105
|
+
const harnessSchema = options?.extraTestColumns === undefined
|
|
106
|
+
? buildHarnessSchemaExtensions(binding, undefined)
|
|
107
|
+
: buildHarnessSchemaExtensions(binding, options.extraTestColumns);
|
|
108
|
+
return extendBindingLogSchema(binding, harnessSchema);
|
|
109
|
+
}
|
|
104
110
|
function isTruthyEnvFlag(value) {
|
|
105
111
|
return value === true || value === '1' || value === 'true';
|
|
106
112
|
}
|
|
@@ -119,6 +125,12 @@ function isTracerForBinding(value, binding) {
|
|
|
119
125
|
logBinding !== null &&
|
|
120
126
|
Reflect.get(logBinding, 'logSchema') === binding.logBinding.logSchema);
|
|
121
127
|
}
|
|
128
|
+
function isTracerInstance(value) {
|
|
129
|
+
return (typeof value === 'object' &&
|
|
130
|
+
value !== null &&
|
|
131
|
+
typeof Reflect.get(value, 'trace') === 'function' &&
|
|
132
|
+
typeof Reflect.get(value, 'flush') === 'function');
|
|
133
|
+
}
|
|
122
134
|
function isVerboseTraceEnabled(explicitVerbose) {
|
|
123
135
|
if (explicitVerbose !== undefined) {
|
|
124
136
|
return explicitVerbose;
|
|
@@ -201,11 +213,6 @@ export function defineTestTracer(binding, options) {
|
|
|
201
213
|
return {
|
|
202
214
|
opContext: binding,
|
|
203
215
|
extraTestColumns: options?.extraTestColumns,
|
|
204
|
-
// WHY no re-validation: the global useTestSpan() already validates against
|
|
205
|
-
// the active suite tracer's (extended) binding. Re-checking against the
|
|
206
|
-
// original binding fails when extraTestColumns extend the schema, because
|
|
207
|
-
// the span's _schema is the extended LogSchema, not the original.
|
|
208
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- WHY: useTestSpan() returns SpanContext typed to the suite binding; narrowing to OpContextOf<B> is safe because initTraceTestRun validates the binding matches
|
|
209
216
|
useTestSpan: () => useTestSpan(),
|
|
210
217
|
};
|
|
211
218
|
}
|
|
@@ -319,10 +326,7 @@ function createTestTracerInstance(binding, options) {
|
|
|
319
326
|
return;
|
|
320
327
|
}
|
|
321
328
|
isSetup = true;
|
|
322
|
-
const
|
|
323
|
-
? buildHarnessSchemaExtensions(binding, undefined)
|
|
324
|
-
: buildHarnessSchemaExtensions(binding, options.extraTestColumns);
|
|
325
|
-
const extendedBinding = extendBindingLogSchema(binding, harnessSchema);
|
|
329
|
+
const extendedBinding = createRuntimeHarnessBinding(binding, options);
|
|
326
330
|
activeBinding = extendedBinding;
|
|
327
331
|
verboseTrace = isVerboseTraceEnabled(options?.verbose);
|
|
328
332
|
const activeTracer = createRootTracer({
|
|
@@ -421,13 +425,13 @@ export function initTraceTestRun(opContext, options) {
|
|
|
421
425
|
logBinding: { ...opContext.logBinding, logSchema: extendedSchema },
|
|
422
426
|
};
|
|
423
427
|
_verboseTrace = isVerboseTraceEnabled(options?.verbose);
|
|
424
|
-
|
|
428
|
+
const tracer = createRootTracer({
|
|
425
429
|
binding: extendedBinding,
|
|
426
430
|
sqlite: options?.sqlite,
|
|
427
431
|
verbose: _verboseTrace,
|
|
428
432
|
});
|
|
433
|
+
_tracer = tracer;
|
|
429
434
|
// Create the single root trace — a long-lived promise keeps it alive
|
|
430
|
-
const tracer = _tracer;
|
|
431
435
|
_rootTracePromise = tracer.trace('test-run', (ctx) => {
|
|
432
436
|
_rootCtx = ctx;
|
|
433
437
|
return new Promise((resolve) => {
|
|
@@ -451,12 +455,12 @@ export function initTraceTestRun(opContext, options) {
|
|
|
451
455
|
cleanupDebug('global.rootTrace:await:end');
|
|
452
456
|
_rootTracePromise = null;
|
|
453
457
|
}
|
|
454
|
-
if (_tracer) {
|
|
458
|
+
if (isTracerInstance(_tracer)) {
|
|
455
459
|
try {
|
|
456
460
|
cleanupDebug('global.tracer.flush:start', { tracer: _tracer.constructor.name });
|
|
457
461
|
await _tracer.flush();
|
|
458
462
|
cleanupDebug('global.tracer.flush:end', { tracer: _tracer.constructor.name });
|
|
459
|
-
if (options?.sqlite && _rootCtx) {
|
|
463
|
+
if (options?.sqlite && isSpanContext(_rootCtx)) {
|
|
460
464
|
const traceId = _rootCtx.buffer.trace_id;
|
|
461
465
|
const dbPath = options.sqlite.dbPath ?? '.trace-results.db';
|
|
462
466
|
console.log(`\n[trace] trace_id: ${traceId} → ${dbPath}`);
|
|
@@ -484,7 +488,7 @@ export function initTraceTestRun(opContext, options) {
|
|
|
484
488
|
* @param bunTestModule - The original bun:test namespace (`import * as bunTest from 'bun:test'`)
|
|
485
489
|
*/
|
|
486
490
|
export function createBunTestMock(bunTestModule) {
|
|
487
|
-
if (!_rootCtx) {
|
|
491
|
+
if (!isSpanContext(_rootCtx)) {
|
|
488
492
|
if (_activeSuiteTracer) {
|
|
489
493
|
return _activeSuiteTracer.createBunTestMock(bunTestModule);
|
|
490
494
|
}
|
|
@@ -554,7 +558,11 @@ export function createBunTestMock(bunTestModule) {
|
|
|
554
558
|
}
|
|
555
559
|
export function useTestSpan() {
|
|
556
560
|
if (_activeSuiteTracer) {
|
|
557
|
-
|
|
561
|
+
const ctx = _activeSuiteTracer.useTestSpan();
|
|
562
|
+
if (!isSpanContext(ctx)) {
|
|
563
|
+
throw new TypeError('Active test tracer returned an invalid span context');
|
|
564
|
+
}
|
|
565
|
+
return ctx;
|
|
558
566
|
}
|
|
559
567
|
const ctx = _als.getStore();
|
|
560
568
|
if (!ctx)
|
|
@@ -570,9 +578,13 @@ export function useTestSpan() {
|
|
|
570
578
|
*/
|
|
571
579
|
export function getTracer() {
|
|
572
580
|
if (_activeSuiteTracer) {
|
|
573
|
-
|
|
581
|
+
const tracer = _activeSuiteTracer.getTracer();
|
|
582
|
+
if (!isTracerInstance(tracer)) {
|
|
583
|
+
throw new TypeError('Active test tracer returned an invalid tracer');
|
|
584
|
+
}
|
|
585
|
+
return tracer;
|
|
574
586
|
}
|
|
575
|
-
if (!_tracer)
|
|
587
|
+
if (!isTracerInstance(_tracer))
|
|
576
588
|
throw new Error('Call initTraceTestRun() in preload before tests');
|
|
577
589
|
return _tracer;
|
|
578
590
|
}
|
|
@@ -653,7 +665,7 @@ assignOptionalBoundTestFunction(describe, 'if', _describe, _describe);
|
|
|
653
665
|
export function it(name, fn) {
|
|
654
666
|
const describePath = _standaloneDescribeStack.length > 0 ? _standaloneDescribeStack.join(' > ') : null;
|
|
655
667
|
_it(name, () => {
|
|
656
|
-
if (!_rootCtx)
|
|
668
|
+
if (!isSpanContext(_rootCtx))
|
|
657
669
|
throw new Error('Call initTraceTestRun() in preload before tests');
|
|
658
670
|
return _rootCtx.span(name, async (ctx) => {
|
|
659
671
|
writeDescribeTag(ctx.tag, describePath);
|
|
@@ -49,7 +49,7 @@ export interface ExtractFactsOptions {
|
|
|
49
49
|
*
|
|
50
50
|
* Walks the buffer tree depth-first and produces facts for:
|
|
51
51
|
* - Span lifecycle (started, ok, err, exception)
|
|
52
|
-
* - Log entries (info, warn, error
|
|
52
|
+
* - Log entries (trace, debug, info, warn, error)
|
|
53
53
|
* - Tag values (from row 0 of each span)
|
|
54
54
|
* - Scope values (propagated through tree)
|
|
55
55
|
* - Feature flag accesses
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractFacts.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/extractFacts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"extractFacts.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/extractFacts.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAcxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,SAAS,EAYf,MAAM,YAAY,CAAC;AAsBpB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAC9C,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,mBAAwB,GAChC,SAAS,CA6BX"}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module testing/extractFacts
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { resolveEntryType, resolveMessage } from '../resolveMessage.js';
|
|
10
|
+
import { ENTRY_TYPE_DEBUG, ENTRY_TYPE_ERROR, ENTRY_TYPE_FF_ACCESS, ENTRY_TYPE_FF_USAGE, ENTRY_TYPE_INFO, ENTRY_TYPE_SPAN_ERR, ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_OK, ENTRY_TYPE_TRACE, ENTRY_TYPE_WARN, } from '../schema/systemSchema.js';
|
|
11
|
+
import { iterateSpanChildren } from '../traceTopology.js';
|
|
10
12
|
import { createFactArray, ffFact, logFact, metricFact, scopeFact, spanErr, spanException, spanOk, spanStarted, tagFact, } from './facts.js';
|
|
11
13
|
function isUint8Array(value) {
|
|
12
14
|
return value instanceof Uint8Array;
|
|
@@ -36,7 +38,7 @@ const DEFAULT_OPTIONS = {
|
|
|
36
38
|
*
|
|
37
39
|
* Walks the buffer tree depth-first and produces facts for:
|
|
38
40
|
* - Span lifecycle (started, ok, err, exception)
|
|
39
|
-
* - Log entries (info, warn, error
|
|
41
|
+
* - Log entries (trace, debug, info, warn, error)
|
|
40
42
|
* - Tag values (from row 0 of each span)
|
|
41
43
|
* - Scope values (propagated through tree)
|
|
42
44
|
* - Feature flag accesses
|
|
@@ -59,100 +61,89 @@ const DEFAULT_OPTIONS = {
|
|
|
59
61
|
export function extractFacts(rootBuffer, options = {}) {
|
|
60
62
|
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
61
63
|
const facts = [];
|
|
62
|
-
|
|
64
|
+
const stack = [{ buffer: rootBuffer }];
|
|
65
|
+
while (stack.length > 0) {
|
|
66
|
+
const frame = stack[stack.length - 1];
|
|
67
|
+
if (!frame)
|
|
68
|
+
break;
|
|
69
|
+
if (!frame.children) {
|
|
70
|
+
if (frame.buffer._writeIndex === 0) {
|
|
71
|
+
stack.pop();
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
enterBuffer(frame.buffer, facts, opts);
|
|
75
|
+
frame.children = iterateSpanChildren(frame.buffer);
|
|
76
|
+
}
|
|
77
|
+
const next = frame.children.next();
|
|
78
|
+
if (!next.done) {
|
|
79
|
+
stack.push({ buffer: next.value });
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
leaveBuffer(frame.buffer, facts, opts);
|
|
83
|
+
stack.pop();
|
|
84
|
+
}
|
|
63
85
|
return createFactArray(facts);
|
|
64
86
|
}
|
|
65
87
|
/**
|
|
66
88
|
* Walk a buffer and its children, extracting facts.
|
|
67
89
|
*/
|
|
68
|
-
function
|
|
69
|
-
|
|
70
|
-
const spanName = buffer.message_values[0];
|
|
90
|
+
function enterBuffer(buffer, facts, opts) {
|
|
91
|
+
const spanName = resolveMessage(buffer, 0) ?? '';
|
|
71
92
|
const writeIndex = buffer._writeIndex;
|
|
72
|
-
if (writeIndex === 0)
|
|
73
|
-
// Empty buffer - no facts to extract
|
|
93
|
+
if (writeIndex === 0)
|
|
74
94
|
return;
|
|
75
|
-
}
|
|
76
|
-
// Always emit span:started as first fact for this span
|
|
77
95
|
facts.push(spanStarted(spanName));
|
|
78
|
-
// Extract scope facts (from buffer's scope values)
|
|
79
96
|
if (opts.includeScope && buffer._scopeValues) {
|
|
80
97
|
for (const [key, value] of Object.entries(buffer._scopeValues)) {
|
|
81
|
-
if (value !== undefined && value !== null)
|
|
98
|
+
if (value !== undefined && value !== null)
|
|
82
99
|
facts.push(scopeFact(key, String(value)));
|
|
83
|
-
}
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
|
-
// Extract tag facts from row 0 (ctx.tag writes here)
|
|
87
|
-
// Also check row 1 (completion row - .with() on ok()/err())
|
|
88
|
-
// And rows 2+ (log rows - .with() on log.*)
|
|
89
102
|
if (opts.includeTags) {
|
|
90
|
-
for (let row = 0; row < writeIndex; row++)
|
|
103
|
+
for (let row = 0; row < writeIndex; row++)
|
|
91
104
|
extractTagFacts(buffer, row, facts, opts);
|
|
92
|
-
}
|
|
93
105
|
}
|
|
94
|
-
// Buffer layout per specs/lmao/01h_entry_types_and_logging_primitives.md:
|
|
95
|
-
// - Row 0: span-start (tags overwrite this row's attribute columns)
|
|
96
|
-
// - Row 1: span-ok/err/exception (completion status)
|
|
97
|
-
// - Row 2+: log entries (info/debug/warn/error), ff entries
|
|
98
|
-
const entryTypes = buffer.entry_type;
|
|
99
|
-
const messages = buffer.message_values;
|
|
100
|
-
// Process log/ff entries from row 2 onwards
|
|
101
106
|
for (let row = 2; row < writeIndex; row++) {
|
|
102
|
-
const entryType =
|
|
107
|
+
const entryType = resolveEntryType(buffer, row);
|
|
103
108
|
switch (entryType) {
|
|
104
109
|
case ENTRY_TYPE_INFO:
|
|
105
110
|
case ENTRY_TYPE_DEBUG:
|
|
106
111
|
case ENTRY_TYPE_WARN:
|
|
107
|
-
case ENTRY_TYPE_ERROR:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const message = typeof rowMessage === 'string' ? rowMessage : '';
|
|
112
|
-
facts.push(logFact(level, message));
|
|
113
|
-
}
|
|
112
|
+
case ENTRY_TYPE_ERROR:
|
|
113
|
+
case ENTRY_TYPE_TRACE:
|
|
114
|
+
if (opts.includeLogs)
|
|
115
|
+
facts.push(logFact(entryTypeToLogLevel(entryType), resolveMessage(buffer, row) ?? ''));
|
|
114
116
|
break;
|
|
115
|
-
}
|
|
116
117
|
case ENTRY_TYPE_FF_ACCESS:
|
|
117
|
-
case ENTRY_TYPE_FF_USAGE:
|
|
118
|
-
if (opts.includeFF)
|
|
118
|
+
case ENTRY_TYPE_FF_USAGE:
|
|
119
|
+
if (opts.includeFF)
|
|
119
120
|
extractFFfacts(buffer, row, facts);
|
|
120
|
-
}
|
|
121
121
|
break;
|
|
122
|
-
}
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
// Row 1 is pre-initialized as span-exception, overwritten by ok()/err()
|
|
124
|
+
}
|
|
125
|
+
function leaveBuffer(buffer, facts, opts) {
|
|
126
|
+
const writeIndex = buffer._writeIndex;
|
|
127
|
+
if (writeIndex === 0)
|
|
128
|
+
return;
|
|
129
|
+
const spanName = resolveMessage(buffer, 0) ?? '';
|
|
132
130
|
if (writeIndex >= 2) {
|
|
133
|
-
|
|
134
|
-
switch (completionEntryType) {
|
|
131
|
+
switch (resolveEntryType(buffer, 1)) {
|
|
135
132
|
case ENTRY_TYPE_SPAN_OK:
|
|
136
133
|
facts.push(spanOk(spanName));
|
|
137
134
|
break;
|
|
138
|
-
case ENTRY_TYPE_SPAN_ERR:
|
|
139
|
-
|
|
140
|
-
facts.push(spanErr(spanName, errorCode));
|
|
135
|
+
case ENTRY_TYPE_SPAN_ERR:
|
|
136
|
+
facts.push(spanErr(spanName, getErrorCode(buffer, 1)));
|
|
141
137
|
break;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const message = getExceptionMessage(buffer, 1);
|
|
145
|
-
facts.push(spanException(spanName, message));
|
|
138
|
+
case ENTRY_TYPE_SPAN_EXCEPTION:
|
|
139
|
+
facts.push(spanException(spanName, getExceptionMessage(buffer, 1)));
|
|
146
140
|
break;
|
|
147
|
-
}
|
|
148
141
|
}
|
|
149
142
|
}
|
|
150
|
-
// Extract duration metric if requested
|
|
151
143
|
if (opts.includeMetrics) {
|
|
152
144
|
const duration = getSpanDuration(buffer);
|
|
153
|
-
if (duration !== undefined)
|
|
145
|
+
if (duration !== undefined)
|
|
154
146
|
facts.push(metricFact(`${spanName}:duration_ns`, Number(duration)));
|
|
155
|
-
}
|
|
156
147
|
}
|
|
157
148
|
}
|
|
158
149
|
/**
|
|
@@ -163,7 +154,7 @@ function extractTagFacts(buffer, row, facts, opts) {
|
|
|
163
154
|
const fields = opts.tagFields.length > 0 ? opts.tagFields : Object.keys(schema.fields);
|
|
164
155
|
for (const fieldName of fields) {
|
|
165
156
|
// Skip system fields
|
|
166
|
-
if (fieldName.startsWith('_'))
|
|
157
|
+
if (fieldName === 'message' || fieldName.startsWith('_'))
|
|
167
158
|
continue;
|
|
168
159
|
const nullsKey = `${fieldName}_nulls`;
|
|
169
160
|
const valuesKey = `${fieldName}_values`;
|
|
@@ -185,9 +176,9 @@ function extractTagFacts(buffer, row, facts, opts) {
|
|
|
185
176
|
*/
|
|
186
177
|
function extractFFfacts(buffer, row, facts) {
|
|
187
178
|
// Feature flag entries store the flag name in message_values and the resolved value in ff_value_values.
|
|
188
|
-
const name = buffer
|
|
179
|
+
const name = resolveMessage(buffer, row);
|
|
189
180
|
const value = buffer.ff_value_values[row];
|
|
190
|
-
if (
|
|
181
|
+
if (name !== undefined && typeof value === 'string') {
|
|
191
182
|
facts.push(ffFact(name, value));
|
|
192
183
|
}
|
|
193
184
|
}
|
|
@@ -204,6 +195,8 @@ function isNull(nulls, index) {
|
|
|
204
195
|
*/
|
|
205
196
|
function entryTypeToLogLevel(entryType) {
|
|
206
197
|
switch (entryType) {
|
|
198
|
+
case ENTRY_TYPE_TRACE:
|
|
199
|
+
return 'trace';
|
|
207
200
|
case ENTRY_TYPE_DEBUG:
|
|
208
201
|
return 'debug';
|
|
209
202
|
case ENTRY_TYPE_INFO:
|
|
@@ -227,8 +220,7 @@ function getErrorCode(buffer, row) {
|
|
|
227
220
|
* Get exception message from a span-exception row.
|
|
228
221
|
*/
|
|
229
222
|
function getExceptionMessage(buffer, row) {
|
|
230
|
-
|
|
231
|
-
return typeof message === 'string' ? message : 'Unknown exception';
|
|
223
|
+
return resolveMessage(buffer, row) ?? 'Unknown exception';
|
|
232
224
|
}
|
|
233
225
|
/**
|
|
234
226
|
* Calculate span duration from timestamps.
|
|
@@ -57,7 +57,7 @@ export declare function spanException<N extends string, M extends string>(name:
|
|
|
57
57
|
/**
|
|
58
58
|
* Log levels.
|
|
59
59
|
*/
|
|
60
|
-
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
60
|
+
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';
|
|
61
61
|
/**
|
|
62
62
|
* A log fact: `log:${level}: ${message}`
|
|
63
63
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC;AAM/E;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,MAAM,GAAG,GAAG,aAAa,MAAM,GAAG,CAAC;AAErF;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,SAAS,SAAS,GAAG,SAAS,IAAI,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC;AAEnH;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,IAAI,QAAQ,CAE5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAEnE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAEtG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAErH;AAMD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/facts.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ import type { SpanBuffer } from '../types.js';
|
|
|
19
19
|
import { type ExtractFactsOptions } from './extractFacts.js';
|
|
20
20
|
import type { FactArray } from './facts.js';
|
|
21
21
|
export interface QueryableSpan<T extends LogSchema = LogSchema> {
|
|
22
|
-
/**
|
|
22
|
+
/** Resolved span name. */
|
|
23
23
|
readonly name: string;
|
|
24
24
|
/** Extract all facts from this span and its children */
|
|
25
25
|
facts(options?: ExtractFactsOptions): FactArray;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryable-span.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/queryable-span.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"queryable-span.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/queryable-span.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC5D,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAEhD,kDAAkD;IAClD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAEjD,iDAAiD;IACjD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtC,yDAAyD;IACzD,KAAK,IAAI,MAAM,EAAE,CAAC;IAElB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CAChC;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEtF"}
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module queryable-span
|
|
16
16
|
*/
|
|
17
|
+
import { resolveMessage } from '../resolveMessage.js';
|
|
18
|
+
import { iterateSpanChildren, iterateSpanTree } from '../traceTopology.js';
|
|
17
19
|
import { extractFacts } from './extractFacts.js';
|
|
18
20
|
/** Wrap a SpanBuffer as a QueryableSpan for ergonomic test assertions */
|
|
19
21
|
export function querySpan(buffer) {
|
|
@@ -25,50 +27,46 @@ class QueryableSpanImpl {
|
|
|
25
27
|
this.buffer = buffer;
|
|
26
28
|
}
|
|
27
29
|
get name() {
|
|
28
|
-
return this.buffer
|
|
30
|
+
return resolveMessage(this.buffer, 0) ?? '';
|
|
29
31
|
}
|
|
30
32
|
facts(options) {
|
|
31
33
|
return extractFacts(this.buffer, options);
|
|
32
34
|
}
|
|
33
35
|
find(name) {
|
|
34
|
-
|
|
36
|
+
for (const descendant of iterateDescendantSpans(this.buffer)) {
|
|
37
|
+
if (resolveMessage(descendant, 0) === name)
|
|
38
|
+
return new QueryableSpanImpl(descendant);
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
35
41
|
}
|
|
36
42
|
findAll(name) {
|
|
37
43
|
const results = [];
|
|
38
|
-
|
|
44
|
+
for (const descendant of iterateDescendantSpans(this.buffer)) {
|
|
45
|
+
if (resolveMessage(descendant, 0) === name)
|
|
46
|
+
results.push(new QueryableSpanImpl(descendant));
|
|
47
|
+
}
|
|
39
48
|
return results;
|
|
40
49
|
}
|
|
41
50
|
get children() {
|
|
42
|
-
return this.buffer._children.map((child) => new QueryableSpanImpl(child));
|
|
43
|
-
}
|
|
44
|
-
names() {
|
|
45
51
|
const result = [];
|
|
46
|
-
|
|
52
|
+
for (const child of iterateSpanChildren(this.buffer))
|
|
53
|
+
result.push(new QueryableSpanImpl(child));
|
|
47
54
|
return result;
|
|
48
55
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return new QueryableSpanImpl(child);
|
|
54
|
-
}
|
|
55
|
-
const found = findInChildren(child._children, name);
|
|
56
|
-
if (found)
|
|
57
|
-
return found;
|
|
58
|
-
}
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
function collectAll(children, name, results) {
|
|
62
|
-
for (const child of children) {
|
|
63
|
-
if (child.message_values[0] === name) {
|
|
64
|
-
results.push(new QueryableSpanImpl(child));
|
|
56
|
+
names() {
|
|
57
|
+
const result = [];
|
|
58
|
+
for (const descendant of iterateDescendantSpans(this.buffer)) {
|
|
59
|
+
result.push(resolveMessage(descendant, 0) ?? '');
|
|
65
60
|
}
|
|
66
|
-
|
|
61
|
+
return result;
|
|
67
62
|
}
|
|
68
63
|
}
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
64
|
+
function* iterateDescendantSpans(root) {
|
|
65
|
+
let previousNodeIndex = root._nodeIndex;
|
|
66
|
+
for (const buffer of iterateSpanTree(root)) {
|
|
67
|
+
if (buffer._nodeIndex === previousNodeIndex)
|
|
68
|
+
continue;
|
|
69
|
+
previousNodeIndex = buffer._nodeIndex;
|
|
70
|
+
yield buffer;
|
|
73
71
|
}
|
|
74
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-query.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/span-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"span-query.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/span-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,mBAAmB,EAAgB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,uDAAuD;AACvD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAK1G;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAMpG;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EACjD,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,SAAS,GAAG,SAAS,CAIvB;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAM5E"}
|