@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,319 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integration tests for RemappedBufferView registration with prefixed modules
|
|
3
|
-
*
|
|
4
|
-
* Per specs/lmao/01e_library_integration_pattern.md and 01c_context_flow_and_op_wrappers.md:
|
|
5
|
-
* - RemappedBufferView class is generated once when prefix() is called (cold path)
|
|
6
|
-
* - Op._invoke() creates instances when registering child spans with parent buffers
|
|
7
|
-
* - Root spans don't create RemappedBufferView (no parent to register with)
|
|
8
|
-
*
|
|
9
|
-
* Note: These tests verify the Op-centric API's span hierarchy handling.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { describe, expect, it } from 'bun:test';
|
|
13
|
-
// Must import test-helpers first to initialize timestamp implementation
|
|
14
|
-
import './test-helpers.js';
|
|
15
|
-
import { convertSpanTreeToArrowTable } from '../convertToArrow.js';
|
|
16
|
-
import { defineOpContext } from '../defineOpContext.js';
|
|
17
|
-
import { S } from '../schema/builder.js';
|
|
18
|
-
import { defineLogSchema } from '../schema/defineLogSchema.js';
|
|
19
|
-
import { TestTracer } from '../tracers/TestTracer.js';
|
|
20
|
-
import type { AnySpanBuffer } from '../types.js';
|
|
21
|
-
import { createTestTracerOptions } from './test-helpers.js';
|
|
22
|
-
|
|
23
|
-
function extractRows(
|
|
24
|
-
table: ReturnType<typeof convertSpanTreeToArrowTable>,
|
|
25
|
-
columns: readonly string[],
|
|
26
|
-
): Array<Record<string, unknown>> {
|
|
27
|
-
return Array.from({ length: table.numRows }, (_, rowIndex) => {
|
|
28
|
-
const row: Record<string, unknown> = {};
|
|
29
|
-
for (const columnName of columns) {
|
|
30
|
-
const column = table.getChild(columnName);
|
|
31
|
-
if (column) {
|
|
32
|
-
row[columnName] = column.get(rowIndex) as unknown;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return row;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
describe('RemappedBufferView Integration', () => {
|
|
40
|
-
describe('basic span execution', () => {
|
|
41
|
-
it('should execute parent and child ops correctly', async () => {
|
|
42
|
-
const appSchema = defineLogSchema({
|
|
43
|
-
userId: S.category(),
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const opContext = defineOpContext({
|
|
47
|
-
logSchema: appSchema,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const { defineOp } = opContext;
|
|
51
|
-
|
|
52
|
-
let parentExecuted = false;
|
|
53
|
-
let childExecuted = false;
|
|
54
|
-
|
|
55
|
-
const childOp = defineOp('child-op', async (ctx) => {
|
|
56
|
-
childExecuted = true;
|
|
57
|
-
ctx.tag.userId('child-user');
|
|
58
|
-
return ctx.ok({ child: true });
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
const parentOp = defineOp('parent-op', async (ctx) => {
|
|
62
|
-
parentExecuted = true;
|
|
63
|
-
const childResult = await ctx.span('child-span', childOp);
|
|
64
|
-
return ctx.ok({ parent: true, childResult });
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
const { trace } = new TestTracer(opContext, { ...createTestTracerOptions() });
|
|
68
|
-
const result = await trace('parent-span', parentOp);
|
|
69
|
-
|
|
70
|
-
expect(parentExecuted).toBe(true);
|
|
71
|
-
expect(childExecuted).toBe(true);
|
|
72
|
-
expect(result.success).toBe(true);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
describe('Arrow conversion with unprefixed schemas', () => {
|
|
77
|
-
it('should write to buffer correctly', async () => {
|
|
78
|
-
const appSchema = defineLogSchema({
|
|
79
|
-
userId: S.category(),
|
|
80
|
-
action: S.enum(['create', 'read', 'update', 'delete']),
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
const opContext = defineOpContext({
|
|
84
|
-
logSchema: appSchema,
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
const { defineOp } = opContext;
|
|
88
|
-
|
|
89
|
-
let rootBuffer: AnySpanBuffer | undefined;
|
|
90
|
-
|
|
91
|
-
const parentOp = defineOp('parent-op', async (ctx) => {
|
|
92
|
-
rootBuffer = ctx.buffer;
|
|
93
|
-
ctx.tag.userId('test-user').action('create');
|
|
94
|
-
ctx.log.info('Test log message');
|
|
95
|
-
return ctx.ok({ success: true });
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
const { trace } = new TestTracer(opContext, { ...createTestTracerOptions() });
|
|
99
|
-
await trace('parent-span', parentOp);
|
|
100
|
-
|
|
101
|
-
expect(rootBuffer).toBeDefined();
|
|
102
|
-
if (!rootBuffer) throw new Error('rootBuffer is undefined');
|
|
103
|
-
|
|
104
|
-
// Verify buffer has rows written
|
|
105
|
-
expect(rootBuffer._writeIndex).toBeGreaterThan(0);
|
|
106
|
-
|
|
107
|
-
// Convert to Arrow table and verify schema
|
|
108
|
-
const table = convertSpanTreeToArrowTable(rootBuffer);
|
|
109
|
-
|
|
110
|
-
// Should have rows
|
|
111
|
-
expect(table.numRows).toBeGreaterThan(0);
|
|
112
|
-
|
|
113
|
-
// Verify user attribute columns exist in schema
|
|
114
|
-
const fieldNames = table.schema.fields.map((f) => f.name);
|
|
115
|
-
expect(fieldNames).toContain('userId');
|
|
116
|
-
expect(fieldNames).toContain('action');
|
|
117
|
-
|
|
118
|
-
// Verify system columns exist
|
|
119
|
-
expect(fieldNames).toContain('timestamp');
|
|
120
|
-
expect(fieldNames).toContain('trace_id');
|
|
121
|
-
expect(fieldNames).toContain('span_id');
|
|
122
|
-
expect(fieldNames).toContain('entry_type');
|
|
123
|
-
expect(fieldNames).toContain('package_name');
|
|
124
|
-
expect(fieldNames).toContain('message');
|
|
125
|
-
|
|
126
|
-
// Verify actual data values in rows
|
|
127
|
-
// Collect all rows for easier debugging
|
|
128
|
-
const rows = extractRows(table, ['userId', 'action', 'message', 'entry_type']);
|
|
129
|
-
|
|
130
|
-
// Find the row with our userId (should be the tag row or span-start row)
|
|
131
|
-
const userIdRow = rows.find((r) => r.userId === 'test-user');
|
|
132
|
-
expect(userIdRow).toBeDefined();
|
|
133
|
-
expect(userIdRow?.userId).toBe('test-user');
|
|
134
|
-
expect(userIdRow?.action).toBe('create');
|
|
135
|
-
|
|
136
|
-
// Find the log message row
|
|
137
|
-
const logRow = rows.find((r) => r.message === 'Test log message');
|
|
138
|
-
expect(logRow).toBeDefined();
|
|
139
|
-
expect(logRow?.message).toBe('Test log message');
|
|
140
|
-
|
|
141
|
-
// Verify entry types are present (span-start, info log, span-ok)
|
|
142
|
-
const entryTypes = rows.map((r) => r.entry_type);
|
|
143
|
-
expect(entryTypes).toContain('span-start');
|
|
144
|
-
expect(entryTypes).toContain('info');
|
|
145
|
-
expect(entryTypes).toContain('span-ok');
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
describe('nested spans execution', () => {
|
|
150
|
-
it('should execute deeply nested spans', async () => {
|
|
151
|
-
const schema = defineLogSchema({
|
|
152
|
-
level: S.category(),
|
|
153
|
-
data: S.text(),
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
const opContext = defineOpContext({
|
|
157
|
-
logSchema: schema,
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
const { defineOp } = opContext;
|
|
161
|
-
|
|
162
|
-
const executionOrder: number[] = [];
|
|
163
|
-
|
|
164
|
-
const level3Op = defineOp('level3', async (ctx) => {
|
|
165
|
-
executionOrder.push(3);
|
|
166
|
-
ctx.tag.level('3').data('level 3 data');
|
|
167
|
-
return ctx.ok({ level: 3 });
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
const level2Op = defineOp('level2', async (ctx) => {
|
|
171
|
-
executionOrder.push(2);
|
|
172
|
-
ctx.tag.level('2').data('level 2 data');
|
|
173
|
-
await ctx.span('level3-span', level3Op);
|
|
174
|
-
return ctx.ok({ level: 2 });
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
const level1Op = defineOp('level1', async (ctx) => {
|
|
178
|
-
executionOrder.push(1);
|
|
179
|
-
ctx.tag.level('1').data('level 1 data');
|
|
180
|
-
await ctx.span('level2-span', level2Op);
|
|
181
|
-
return ctx.ok({ level: 1 });
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
const { trace } = new TestTracer(opContext, { ...createTestTracerOptions() });
|
|
185
|
-
const result = await trace('level1-span', level1Op);
|
|
186
|
-
|
|
187
|
-
expect(result.success).toBe(true);
|
|
188
|
-
expect(executionOrder).toEqual([1, 2, 3]);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
describe('parallel child spans', () => {
|
|
193
|
-
it('should execute multiple sequential child spans', async () => {
|
|
194
|
-
const schema = defineLogSchema({
|
|
195
|
-
taskId: S.category(),
|
|
196
|
-
taskStatus: S.enum(['pending', 'done']),
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
const opContext = defineOpContext({
|
|
200
|
-
logSchema: schema,
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
const { defineOp } = opContext;
|
|
204
|
-
|
|
205
|
-
const taskResults: number[] = [];
|
|
206
|
-
|
|
207
|
-
const task1Op = defineOp('task1', async (ctx) => {
|
|
208
|
-
ctx.tag.taskId('task-1').taskStatus('done');
|
|
209
|
-
taskResults.push(1);
|
|
210
|
-
return ctx.ok({ task: 1 });
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
const task2Op = defineOp('task2', async (ctx) => {
|
|
214
|
-
ctx.tag.taskId('task-2').taskStatus('done');
|
|
215
|
-
taskResults.push(2);
|
|
216
|
-
return ctx.ok({ task: 2 });
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
const task3Op = defineOp('task3', async (ctx) => {
|
|
220
|
-
ctx.tag.taskId('task-3').taskStatus('done');
|
|
221
|
-
taskResults.push(3);
|
|
222
|
-
return ctx.ok({ task: 3 });
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
const parentOp = defineOp('parent', async (ctx) => {
|
|
226
|
-
ctx.tag.taskId('parent').taskStatus('pending');
|
|
227
|
-
|
|
228
|
-
// Run child tasks sequentially
|
|
229
|
-
await ctx.span('task1-span', task1Op);
|
|
230
|
-
await ctx.span('task2-span', task2Op);
|
|
231
|
-
await ctx.span('task3-span', task3Op);
|
|
232
|
-
|
|
233
|
-
ctx.tag.taskStatus('done');
|
|
234
|
-
return ctx.ok({ done: true });
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
const { trace } = new TestTracer(opContext, { ...createTestTracerOptions() });
|
|
238
|
-
const result = await trace('parent-span', parentOp);
|
|
239
|
-
|
|
240
|
-
expect(result.success).toBe(true);
|
|
241
|
-
expect(taskResults).toEqual([1, 2, 3]);
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
describe('same factory for all ops', () => {
|
|
246
|
-
it('should handle all ops from the same factory', async () => {
|
|
247
|
-
// All ops use the same factory/schema for consistent behavior
|
|
248
|
-
const schema = defineLogSchema({
|
|
249
|
-
userId: S.category(),
|
|
250
|
-
status: S.number(),
|
|
251
|
-
method: S.category(),
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
const opContext = defineOpContext({
|
|
255
|
-
logSchema: schema,
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
const { defineOp } = opContext;
|
|
259
|
-
|
|
260
|
-
let appExecuted = false;
|
|
261
|
-
let httpExecuted = false;
|
|
262
|
-
|
|
263
|
-
const httpOp = defineOp('http-request', async (ctx) => {
|
|
264
|
-
httpExecuted = true;
|
|
265
|
-
ctx.tag.status(200).method('GET');
|
|
266
|
-
return ctx.ok({ http: true });
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
const appOp = defineOp('app-handler', async (ctx) => {
|
|
270
|
-
appExecuted = true;
|
|
271
|
-
ctx.tag.userId('user-123');
|
|
272
|
-
await ctx.span('http-span', httpOp);
|
|
273
|
-
return ctx.ok({ app: true });
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
const { trace } = new TestTracer(opContext, { ...createTestTracerOptions() });
|
|
277
|
-
const result = await trace('app-span', appOp);
|
|
278
|
-
|
|
279
|
-
expect(result.success).toBe(true);
|
|
280
|
-
expect(appExecuted).toBe(true);
|
|
281
|
-
expect(httpExecuted).toBe(true);
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
describe('inline closure spans', () => {
|
|
286
|
-
it('should handle inline closure spans', async () => {
|
|
287
|
-
const schema = defineLogSchema({
|
|
288
|
-
step: S.category(),
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
const opContext = defineOpContext({
|
|
292
|
-
logSchema: schema,
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
const { defineOp } = opContext;
|
|
296
|
-
|
|
297
|
-
const executedSteps: string[] = [];
|
|
298
|
-
|
|
299
|
-
const parentOp = defineOp('parent', async (ctx) => {
|
|
300
|
-
executedSteps.push('parent-start');
|
|
301
|
-
|
|
302
|
-
await ctx.span('inline-child', async (childCtx) => {
|
|
303
|
-
executedSteps.push('child');
|
|
304
|
-
childCtx.tag.step('inline-step');
|
|
305
|
-
return childCtx.ok({ inline: true });
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
executedSteps.push('parent-end');
|
|
309
|
-
return ctx.ok({ done: true });
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
const { trace } = new TestTracer(opContext, { ...createTestTracerOptions() });
|
|
313
|
-
const result = await trace('parent-span', parentOp);
|
|
314
|
-
|
|
315
|
-
expect(result.success).toBe(true);
|
|
316
|
-
expect(executedSteps).toEqual(['parent-start', 'child', 'parent-end']);
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
});
|