@smoothbricks/lmao 0.2.2 → 0.3.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 +206 -206
- 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 +33 -18
- 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/typeGuards.d.ts +7 -47
- package/dist/lib/schema/typeGuards.d.ts.map +1 -1
- package/dist/lib/schema/typeGuards.js +7 -123
- 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/traceContext.d.ts.map +1 -1
- package/dist/lib/traceContext.js +1 -4
- 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 +122 -24
- 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/typeGuards.ts +7 -151
- 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/traceContext.ts +1 -6
- 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__/CompositeTracer.test.ts +150 -0
- 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
|
@@ -6,23 +6,24 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module span-query
|
|
8
8
|
*/
|
|
9
|
+
import { resolveMessage } from '../resolveMessage.js';
|
|
10
|
+
import { iterateSpanTree } from '../traceTopology.js';
|
|
9
11
|
import { extractFacts } from './extractFacts.js';
|
|
10
12
|
/** Find first descendant span by name (depth-first) */
|
|
11
13
|
export function findSpan(root, name) {
|
|
12
|
-
for (const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return typed;
|
|
16
|
-
const found = findSpan(typed, name);
|
|
17
|
-
if (found)
|
|
18
|
-
return found;
|
|
14
|
+
for (const descendant of iterateDescendantSpans(root)) {
|
|
15
|
+
if (resolveMessage(descendant, 0) === name)
|
|
16
|
+
return descendant;
|
|
19
17
|
}
|
|
20
18
|
return undefined;
|
|
21
19
|
}
|
|
22
20
|
/** Find all descendant spans matching name (depth-first) */
|
|
23
21
|
export function findAllSpans(root, name) {
|
|
24
22
|
const results = [];
|
|
25
|
-
|
|
23
|
+
for (const descendant of iterateDescendantSpans(root)) {
|
|
24
|
+
if (resolveMessage(descendant, 0) === name)
|
|
25
|
+
results.push(descendant);
|
|
26
|
+
}
|
|
26
27
|
return results;
|
|
27
28
|
}
|
|
28
29
|
/** Extract facts for a specific named span within a root buffer tree */
|
|
@@ -35,21 +36,17 @@ export function extractFactsFor(root, spanName, options) {
|
|
|
35
36
|
/** Collect all descendant span names (flat list, depth-first) */
|
|
36
37
|
export function spanNames(root) {
|
|
37
38
|
const result = [];
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
function collectSpans(root, name, results) {
|
|
42
|
-
for (const child of root._children) {
|
|
43
|
-
const typed = child;
|
|
44
|
-
if (typed.message_values[0] === name)
|
|
45
|
-
results.push(typed);
|
|
46
|
-
collectSpans(typed, name, results);
|
|
39
|
+
for (const descendant of iterateDescendantSpans(root)) {
|
|
40
|
+
result.push(resolveMessage(descendant, 0) ?? '');
|
|
47
41
|
}
|
|
42
|
+
return result;
|
|
48
43
|
}
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
function* iterateDescendantSpans(root) {
|
|
45
|
+
let previousNodeIndex = root._nodeIndex;
|
|
46
|
+
for (const buffer of iterateSpanTree(root)) {
|
|
47
|
+
if (buffer._nodeIndex === previousNodeIndex)
|
|
48
|
+
continue;
|
|
49
|
+
previousNodeIndex = buffer._nodeIndex;
|
|
50
|
+
yield buffer;
|
|
54
51
|
}
|
|
55
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio-replay.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/stdio-replay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"stdio-replay.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/stdio-replay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyCjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,GAAG,IAAI,CAoB7F"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { JsBufferStrategy } from '../JsBufferStrategy.js';
|
|
2
2
|
import { createTraceRoot } from '../traceRoot.universal.js';
|
|
3
3
|
import { StdioTracer } from '../tracers/StdioTracer.js';
|
|
4
|
+
import { iterateSpanChildren } from '../traceTopology.js';
|
|
4
5
|
function isStdioWritable(value) {
|
|
5
6
|
return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'write') === 'function';
|
|
6
7
|
}
|
|
@@ -12,12 +13,24 @@ function makeConsoleWriteStream(write) {
|
|
|
12
13
|
},
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
function replayChildSpans(tracer, rootBuffer) {
|
|
17
|
+
const stack = [
|
|
18
|
+
{ buffer: rootBuffer, children: iterateSpanChildren(rootBuffer), replayLifecycle: false },
|
|
19
|
+
];
|
|
20
|
+
while (stack.length > 0) {
|
|
21
|
+
const frame = stack[stack.length - 1];
|
|
22
|
+
if (!frame)
|
|
23
|
+
break;
|
|
24
|
+
const next = frame.children.next();
|
|
25
|
+
if (!next.done) {
|
|
26
|
+
tracer.onSpanStart(next.value);
|
|
27
|
+
stack.push({ buffer: next.value, children: iterateSpanChildren(next.value), replayLifecycle: true });
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
stack.pop();
|
|
31
|
+
if (frame.replayLifecycle)
|
|
32
|
+
tracer.onSpanEnd(frame.buffer);
|
|
19
33
|
}
|
|
20
|
-
tracer.onSpanEnd(buffer);
|
|
21
34
|
}
|
|
22
35
|
export function replayTraceToStdio(binding, rootBuffer) {
|
|
23
36
|
const processRef = globalThis.process;
|
|
@@ -35,8 +48,6 @@ export function replayTraceToStdio(binding, rootBuffer) {
|
|
|
35
48
|
colorEnabled: processRef?.stdout !== undefined,
|
|
36
49
|
});
|
|
37
50
|
tracer.onTraceStart(rootBuffer);
|
|
38
|
-
|
|
39
|
-
replayChildSpan(tracer, child);
|
|
40
|
-
}
|
|
51
|
+
replayChildSpans(tracer, rootBuffer);
|
|
41
52
|
tracer.onTraceEnd(rootBuffer);
|
|
42
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadId.d.ts","sourceRoot":"","sources":["../../src/lib/threadId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,8BAA8B;AAC9B,eAAO,MAAM,eAAe,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"threadId.d.ts","sourceRoot":"","sources":["../../src/lib/threadId.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,8BAA8B;AAC9B,eAAO,MAAM,eAAe,IAAI,CAAC;AA2CjC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAmBpC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOpF;AAGD;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
|
package/dist/lib/threadId.js
CHANGED
|
@@ -35,17 +35,20 @@ let threadIdBigInt = null;
|
|
|
35
35
|
function ensureInitialized() {
|
|
36
36
|
if (threadIdBytes !== null)
|
|
37
37
|
return;
|
|
38
|
-
|
|
38
|
+
// Keep initialization transactional so a failed entropy provider can be retried.
|
|
39
|
+
const bytes = new Uint8Array(THREAD_ID_BYTES);
|
|
39
40
|
// Use Web Crypto API - available in browsers, Node 19+, Deno, Bun, Workers
|
|
40
41
|
if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {
|
|
41
|
-
crypto.getRandomValues(
|
|
42
|
+
crypto.getRandomValues(bytes);
|
|
43
|
+
threadIdBytes = bytes;
|
|
42
44
|
return;
|
|
43
45
|
}
|
|
44
46
|
// For Node.js < 19, try to use node:crypto
|
|
45
47
|
try {
|
|
46
48
|
const nodeCrypto = require('node:crypto');
|
|
47
49
|
if (nodeCrypto && typeof nodeCrypto.randomFillSync === 'function') {
|
|
48
|
-
nodeCrypto.randomFillSync(
|
|
50
|
+
nodeCrypto.randomFillSync(bytes);
|
|
51
|
+
threadIdBytes = bytes;
|
|
49
52
|
return;
|
|
50
53
|
}
|
|
51
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceContext.d.ts","sourceRoot":"","sources":["../../src/lib/traceContext.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"traceContext.d.ts","sourceRoot":"","sources":["../../src/lib/traceContext.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/traceContext.js
CHANGED
|
@@ -38,8 +38,5 @@ export const TraceContextProto = {
|
|
|
38
38
|
* Type guard to check if a value is a TraceContext
|
|
39
39
|
*/
|
|
40
40
|
export function isTraceContext(value) {
|
|
41
|
-
return
|
|
42
|
-
value !== null &&
|
|
43
|
-
TRACE_CONTEXT_MARKER in value &&
|
|
44
|
-
value[TRACE_CONTEXT_MARKER] === true);
|
|
41
|
+
return typeof value === 'object' && value !== null && Reflect.get(value, TRACE_CONTEXT_MARKER) === true;
|
|
45
42
|
}
|
package/dist/lib/traceRoot.d.ts
CHANGED
|
@@ -13,28 +13,36 @@
|
|
|
13
13
|
* @module traceRoot
|
|
14
14
|
*/
|
|
15
15
|
import type { Nanoseconds } from '@smoothbricks/arrow-builder';
|
|
16
|
+
import type { BufferStrategy } from './bufferStrategy.js';
|
|
17
|
+
import type { LogSchema } from './schema/LogSchema.js';
|
|
18
|
+
import type { TraceTopology } from './traceTopology.js';
|
|
16
19
|
import type { AnySpanBuffer } from './types.js';
|
|
17
20
|
export type { SpanIdentity, TraceId } from './traceId.js';
|
|
18
21
|
export { createTraceId, extractSpanIdentity, generateTraceId, isValidTraceId, MAX_TRACE_ID_LENGTH } from './traceId.js';
|
|
22
|
+
/**
|
|
23
|
+
* Consume the one-shot marker set when a WASM allocation export already
|
|
24
|
+
* initialized the system lifecycle rows. Message storage is still populated
|
|
25
|
+
* by the selected physical appender after this returns.
|
|
26
|
+
*/
|
|
27
|
+
export declare function consumeSpanStartedAtAllocation(buffer: AnySpanBuffer): boolean;
|
|
19
28
|
/**
|
|
20
29
|
* Tracer lifecycle hooks interface.
|
|
21
30
|
* Extracted to avoid circular dependency - Tracer implements this.
|
|
22
31
|
*/
|
|
23
|
-
export interface TracerLifecycleHooks {
|
|
32
|
+
export interface TracerLifecycleHooks<T extends LogSchema = LogSchema> {
|
|
24
33
|
onTraceStart(buffer: unknown): void;
|
|
25
34
|
onTraceEnd(buffer: unknown): void;
|
|
26
35
|
onSpanStart(buffer: unknown): void;
|
|
27
36
|
onSpanEnd(buffer: unknown): void;
|
|
28
37
|
onStatsWillResetFor(buffer: unknown): void;
|
|
38
|
+
/** Internal evaluator source used when a specialized parent omits the public ff slot. */
|
|
39
|
+
getFlagEvaluatorForContext(): unknown;
|
|
29
40
|
/**
|
|
30
41
|
* Buffer strategy for creating child and overflow buffers.
|
|
31
42
|
* SpanContext uses this to create child spans with the correct strategy (JS or WASM).
|
|
32
43
|
* Note: Caller must call writeSpanStart() after createChildSpanBuffer() to set span name.
|
|
33
44
|
*/
|
|
34
|
-
readonly bufferStrategy:
|
|
35
|
-
createChildSpanBuffer(parentBuffer: AnySpanBuffer, callsiteMetadata: unknown, opMetadata: unknown, capacity?: number, schema?: unknown): AnySpanBuffer;
|
|
36
|
-
createOverflowBuffer(buffer: AnySpanBuffer): AnySpanBuffer;
|
|
37
|
-
};
|
|
45
|
+
readonly bufferStrategy: BufferStrategy<T>;
|
|
38
46
|
}
|
|
39
47
|
/**
|
|
40
48
|
* TraceRoot._system memory layout (little-endian):
|
|
@@ -66,17 +74,26 @@ export declare const TRACE_ROOT_TRACE_ID_OFFSET = 17;
|
|
|
66
74
|
*
|
|
67
75
|
* The factory creates anchor timestamps internally using platform-specific APIs.
|
|
68
76
|
*/
|
|
69
|
-
export type TraceRootFactory = (trace_id: string, tracer: TracerLifecycleHooks) => ITraceRoot
|
|
70
|
-
|
|
77
|
+
export type TraceRootFactory<T extends LogSchema = LogSchema> = (trace_id: string, tracer: TracerLifecycleHooks<T>) => ITraceRoot<T>;
|
|
78
|
+
/** Platform-fixed primitives copied into the physical plan/generated writer hot path. */
|
|
79
|
+
export type TimestampNowPrimitive = (traceRoot: ITraceRoot) => Nanoseconds;
|
|
80
|
+
export type TimestampAppendPrimitive = (traceRoot: ITraceRoot, buffer: AnySpanBuffer, entryType: number) => number;
|
|
81
|
+
export type SpanStartPrimitive = (traceRoot: ITraceRoot, buffer: AnySpanBuffer, spanName: string) => void;
|
|
82
|
+
export type SpanEndPrimitive = (traceRoot: ITraceRoot, buffer: AnySpanBuffer, entryType: number) => void;
|
|
83
|
+
export interface ITraceRoot<T extends LogSchema = LogSchema> {
|
|
71
84
|
/**
|
|
72
85
|
* Raw backing buffer containing anchor timestamps and trace_id.
|
|
73
86
|
* The WASM path can read this directly without BigInt extraction.
|
|
74
87
|
*/
|
|
75
88
|
readonly _system: ArrayBuffer;
|
|
89
|
+
/** Canonical immutable UTF-8 trace ID bytes, shared by span identity construction. */
|
|
90
|
+
readonly _traceIdBytes: Uint8Array;
|
|
76
91
|
/**
|
|
77
92
|
* Tracer reference for lifecycle hooks and event callbacks.
|
|
78
93
|
*/
|
|
79
|
-
readonly tracer: TracerLifecycleHooks
|
|
94
|
+
readonly tracer: TracerLifecycleHooks<T>;
|
|
95
|
+
/** Trace-owned arena for logical span topology. */
|
|
96
|
+
readonly _topology: TraceTopology;
|
|
80
97
|
/**
|
|
81
98
|
* Trace ID for this trace.
|
|
82
99
|
*/
|
|
@@ -92,6 +109,11 @@ export interface ITraceRoot {
|
|
|
92
109
|
* Node.js: stored as number in the shared layout (WASM-readable), but represents hrtime
|
|
93
110
|
*/
|
|
94
111
|
readonly anchorPerfNow: number;
|
|
112
|
+
/** Monomorphic platform implementations cached by plans and generated writers. */
|
|
113
|
+
readonly _timestampNow: TimestampNowPrimitive;
|
|
114
|
+
readonly _appendLogEntry: TimestampAppendPrimitive;
|
|
115
|
+
readonly _writeSpanStart: SpanStartPrimitive;
|
|
116
|
+
readonly _writeSpanEnd: SpanEndPrimitive;
|
|
95
117
|
/**
|
|
96
118
|
* Get current timestamp in nanoseconds since Unix epoch.
|
|
97
119
|
* Platform-specific implementation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceRoot.d.ts","sourceRoot":"","sources":["../../src/lib/traceRoot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExH;;;GAGG;AAEH,MAAM,WAAW,oBAAoB;
|
|
1
|
+
{"version":3,"file":"traceRoot.d.ts","sourceRoot":"","sources":["../../src/lib/traceRoot.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,30 +9,36 @@
|
|
|
9
9
|
* @module traceRoot.es
|
|
10
10
|
*/
|
|
11
11
|
import { Nanoseconds } from '@smoothbricks/arrow-builder';
|
|
12
|
+
import type { LogSchema } from './schema/LogSchema.js';
|
|
12
13
|
import { type TraceId } from './traceId.js';
|
|
13
|
-
import { type ITraceRoot, type TracerLifecycleHooks } from './traceRoot.js';
|
|
14
|
+
import { type ITraceRoot, type SpanEndPrimitive, type SpanStartPrimitive, type TimestampAppendPrimitive, type TimestampNowPrimitive, type TracerLifecycleHooks } from './traceRoot.js';
|
|
15
|
+
import { TraceTopology } from './traceTopology.js';
|
|
14
16
|
import type { AnySpanBuffer } from './types.js';
|
|
15
|
-
|
|
16
|
-
* TraceRoot - Browser implementation with performance.now() timing.
|
|
17
|
-
*
|
|
18
|
-
* Stores anchor data in _system ArrayBuffer for consistency with Node.js layout,
|
|
19
|
-
* but all timestamp calculations are done in pure JS.
|
|
20
|
-
*/
|
|
21
|
-
export declare class TraceRoot implements ITraceRoot {
|
|
17
|
+
export declare class TraceRoot<T extends LogSchema = LogSchema> implements ITraceRoot<T> {
|
|
22
18
|
/**
|
|
23
19
|
* Raw backing buffer containing anchor timestamps and trace_id.
|
|
24
20
|
*/
|
|
25
21
|
readonly _system: ArrayBuffer;
|
|
22
|
+
readonly _traceIdBytes: Uint8Array;
|
|
23
|
+
readonly trace_id: TraceId;
|
|
26
24
|
/**
|
|
27
25
|
* Tracer reference for lifecycle hooks and event callbacks.
|
|
28
26
|
*/
|
|
29
|
-
readonly tracer: TracerLifecycleHooks
|
|
27
|
+
readonly tracer: TracerLifecycleHooks<T>;
|
|
28
|
+
readonly _topology: TraceTopology;
|
|
29
|
+
readonly _timestampNow: TimestampNowPrimitive;
|
|
30
|
+
readonly _appendLogEntry: TimestampAppendPrimitive;
|
|
31
|
+
readonly _writeSpanStart: SpanStartPrimitive;
|
|
32
|
+
readonly _writeSpanEnd: SpanEndPrimitive;
|
|
33
|
+
readonly _anchorEpochNanos: bigint;
|
|
34
|
+
readonly _anchorPerformanceNow: number;
|
|
35
|
+
_lastTimestampNanos: bigint;
|
|
30
36
|
/**
|
|
31
37
|
* Cached TypedArray views for fast JS access.
|
|
32
38
|
*/
|
|
33
39
|
private readonly _epochView;
|
|
34
40
|
private readonly _perfView;
|
|
35
|
-
constructor(trace_id: TraceId, anchorEpochNanos: bigint, anchorPerfNow: number, tracer: TracerLifecycleHooks);
|
|
41
|
+
constructor(trace_id: TraceId, anchorEpochNanos: bigint, anchorPerfNow: number, tracer: TracerLifecycleHooks<T>);
|
|
36
42
|
/**
|
|
37
43
|
* Epoch time in nanoseconds when trace was created.
|
|
38
44
|
*/
|
|
@@ -41,10 +47,6 @@ export declare class TraceRoot implements ITraceRoot {
|
|
|
41
47
|
* High-resolution timer anchor when trace was created (performance.now() value).
|
|
42
48
|
*/
|
|
43
49
|
get anchorPerfNow(): number;
|
|
44
|
-
/**
|
|
45
|
-
* Trace ID for this trace.
|
|
46
|
-
*/
|
|
47
|
-
get trace_id(): TraceId;
|
|
48
50
|
/**
|
|
49
51
|
* Get current timestamp in nanoseconds since Unix epoch.
|
|
50
52
|
* Uses performance.now() - microsecond precision (last 3 digits = 000).
|
|
@@ -71,5 +73,5 @@ export declare class TraceRoot implements ITraceRoot {
|
|
|
71
73
|
* Factory function for creating browser TraceRoot instances.
|
|
72
74
|
* Pass this to Tracer constructor for browser/ES environments.
|
|
73
75
|
*/
|
|
74
|
-
export declare function createTraceRoot(trace_id: string, tracer: TracerLifecycleHooks): TraceRoot
|
|
76
|
+
export declare function createTraceRoot<T extends LogSchema>(trace_id: string, tracer: TracerLifecycleHooks<T>): TraceRoot<T>;
|
|
75
77
|
//# sourceMappingURL=traceRoot.es.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceRoot.es.d.ts","sourceRoot":"","sources":["../../src/lib/traceRoot.es.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"traceRoot.es.d.ts","sourceRoot":"","sources":["../../src/lib/traceRoot.es.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAK1B,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwDhD,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IAC9E;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,aAAa,wBAAgB;IACtC,QAAQ,CAAC,eAAe,2BAAkB;IAC1C,QAAQ,CAAC,eAAe,qBAA2B;IACnD,QAAQ,CAAC,aAAa,mBAAyB;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,mBAAmB,SAAM;IAEzB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,YAAY,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAsB9G;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAGD;;;OAGG;IACH,iBAAiB,IAAI,WAAW,CAE/B;IAGD;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE5D;IAED;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3D;IAED;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;CACF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAIpH"}
|
package/dist/lib/traceRoot.es.js
CHANGED
|
@@ -13,25 +13,79 @@ import { Nanoseconds } from '@smoothbricks/arrow-builder';
|
|
|
13
13
|
import { ENTRY_TYPE_SPAN_EXCEPTION, ENTRY_TYPE_SPAN_START } from './schema/systemSchema.js';
|
|
14
14
|
import { createTraceId } from './traceId.js';
|
|
15
15
|
import { TRACE_ROOT_ANCHOR_EPOCH_OFFSET, TRACE_ROOT_ANCHOR_PERF_OFFSET, TRACE_ROOT_TRACE_ID_LEN_OFFSET, TRACE_ROOT_TRACE_ID_OFFSET, } from './traceRoot.js';
|
|
16
|
+
import { TraceTopology } from './traceTopology.js';
|
|
16
17
|
/** Shared TextEncoder for trace_id encoding (stateless, reusable) */
|
|
17
18
|
const textEncoder = new TextEncoder();
|
|
18
|
-
/** Shared TextDecoder for trace_id decoding (stateless, reusable) */
|
|
19
|
-
const textDecoder = new TextDecoder();
|
|
20
19
|
/**
|
|
21
20
|
* TraceRoot - Browser implementation with performance.now() timing.
|
|
22
21
|
*
|
|
23
22
|
* Stores anchor data in _system ArrayBuffer for consistency with Node.js layout,
|
|
24
23
|
* but all timestamp calculations are done in pure JS.
|
|
25
24
|
*/
|
|
25
|
+
function nextTimestamp(root) {
|
|
26
|
+
const elapsedNanos = BigInt(Math.floor((performance.now() - root._anchorPerformanceNow) * 1000)) * 1000n;
|
|
27
|
+
let timestamp = root._anchorEpochNanos + elapsedNanos;
|
|
28
|
+
if (timestamp <= root._lastTimestampNanos)
|
|
29
|
+
timestamp = root._lastTimestampNanos + 1000n;
|
|
30
|
+
root._lastTimestampNanos = timestamp;
|
|
31
|
+
return Nanoseconds.unsafe(timestamp);
|
|
32
|
+
}
|
|
33
|
+
const timestampNow = (traceRoot) => {
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ES primitive table is only installed on TraceRoot.es instances.
|
|
35
|
+
return nextTimestamp(traceRoot);
|
|
36
|
+
};
|
|
37
|
+
const appendLogEntry = (traceRoot, buffer, entryType) => {
|
|
38
|
+
const entryTypes = buffer.entry_type;
|
|
39
|
+
if (entryTypes === undefined)
|
|
40
|
+
throw new TypeError('Split timestamp appender requires entry_type storage');
|
|
41
|
+
const idx = buffer._writeIndex;
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ES primitive table is only installed on TraceRoot.es instances.
|
|
43
|
+
buffer.timestamp[idx] = nextTimestamp(traceRoot);
|
|
44
|
+
entryTypes[idx] = entryType;
|
|
45
|
+
buffer._writeIndex = idx + 1;
|
|
46
|
+
return idx;
|
|
47
|
+
};
|
|
48
|
+
const writeSpanStartPrimitive = (traceRoot, buffer, spanName) => {
|
|
49
|
+
const entryTypes = buffer.entry_type;
|
|
50
|
+
if (entryTypes === undefined)
|
|
51
|
+
throw new TypeError('Split span-start appender requires entry_type storage');
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ES primitive table is only installed on TraceRoot.es instances.
|
|
53
|
+
buffer.timestamp[0] = nextTimestamp(traceRoot);
|
|
54
|
+
entryTypes[0] = ENTRY_TYPE_SPAN_START;
|
|
55
|
+
if (buffer.message_values)
|
|
56
|
+
buffer.message(0, spanName);
|
|
57
|
+
entryTypes[1] = ENTRY_TYPE_SPAN_EXCEPTION;
|
|
58
|
+
buffer.timestamp[1] = 0n;
|
|
59
|
+
buffer._writeIndex = 2;
|
|
60
|
+
};
|
|
61
|
+
const writeSpanEndPrimitive = (traceRoot, buffer, entryType) => {
|
|
62
|
+
const entryTypes = buffer.entry_type;
|
|
63
|
+
if (entryTypes === undefined)
|
|
64
|
+
throw new TypeError('Split span-end appender requires entry_type storage');
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ES primitive table is only installed on TraceRoot.es instances.
|
|
66
|
+
buffer.timestamp[1] = nextTimestamp(traceRoot);
|
|
67
|
+
entryTypes[1] = entryType;
|
|
68
|
+
buffer._sealStatsChain();
|
|
69
|
+
};
|
|
26
70
|
export class TraceRoot {
|
|
27
71
|
/**
|
|
28
72
|
* Raw backing buffer containing anchor timestamps and trace_id.
|
|
29
73
|
*/
|
|
30
74
|
_system;
|
|
75
|
+
_traceIdBytes;
|
|
76
|
+
trace_id;
|
|
31
77
|
/**
|
|
32
78
|
* Tracer reference for lifecycle hooks and event callbacks.
|
|
33
79
|
*/
|
|
34
80
|
tracer;
|
|
81
|
+
_topology;
|
|
82
|
+
_timestampNow = timestampNow;
|
|
83
|
+
_appendLogEntry = appendLogEntry;
|
|
84
|
+
_writeSpanStart = writeSpanStartPrimitive;
|
|
85
|
+
_writeSpanEnd = writeSpanEndPrimitive;
|
|
86
|
+
_anchorEpochNanos;
|
|
87
|
+
_anchorPerformanceNow;
|
|
88
|
+
_lastTimestampNanos = 0n;
|
|
35
89
|
/**
|
|
36
90
|
* Cached TypedArray views for fast JS access.
|
|
37
91
|
*/
|
|
@@ -41,18 +95,21 @@ export class TraceRoot {
|
|
|
41
95
|
// Allocate buffer: 17 bytes header + trace_id length
|
|
42
96
|
// trace_id is validated to be ASCII (1 byte per char) so length === byte length
|
|
43
97
|
this._system = new ArrayBuffer(TRACE_ROOT_TRACE_ID_OFFSET + trace_id.length);
|
|
98
|
+
this._traceIdBytes = new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_OFFSET, trace_id.length);
|
|
99
|
+
this.trace_id = trace_id;
|
|
44
100
|
this.tracer = tracer;
|
|
101
|
+
this._topology = new TraceTopology();
|
|
102
|
+
this._anchorEpochNanos = anchorEpochNanos;
|
|
103
|
+
this._anchorPerformanceNow = anchorPerfNow;
|
|
45
104
|
// Create cached views (one-time allocation)
|
|
46
105
|
this._epochView = new BigInt64Array(this._system, TRACE_ROOT_ANCHOR_EPOCH_OFFSET, 1);
|
|
47
106
|
this._perfView = new Float64Array(this._system, TRACE_ROOT_ANCHOR_PERF_OFFSET, 1);
|
|
48
107
|
// Write anchor data directly
|
|
49
108
|
this._epochView[0] = anchorEpochNanos;
|
|
50
109
|
this._perfView[0] = anchorPerfNow;
|
|
51
|
-
// Encode
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
const { written } = textEncoder.encodeInto(trace_id, traceIdDest);
|
|
55
|
-
u8View[0] = written;
|
|
110
|
+
// Encode once into the canonical trace-owned view used by root span identities.
|
|
111
|
+
const { written } = textEncoder.encodeInto(trace_id, this._traceIdBytes);
|
|
112
|
+
new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_LEN_OFFSET, 1)[0] = written;
|
|
56
113
|
}
|
|
57
114
|
/**
|
|
58
115
|
* Epoch time in nanoseconds when trace was created.
|
|
@@ -66,23 +123,13 @@ export class TraceRoot {
|
|
|
66
123
|
get anchorPerfNow() {
|
|
67
124
|
return this._perfView[0];
|
|
68
125
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Trace ID for this trace.
|
|
71
|
-
*/
|
|
72
|
-
get trace_id() {
|
|
73
|
-
const len = new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_LEN_OFFSET, 1)[0];
|
|
74
|
-
return createTraceId(textDecoder.decode(new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_OFFSET, len)));
|
|
75
|
-
}
|
|
76
126
|
//#region smoo/lmao!n/trace-root-timestamps #es
|
|
77
127
|
/**
|
|
78
128
|
* Get current timestamp in nanoseconds since Unix epoch.
|
|
79
129
|
* Uses performance.now() - microsecond precision (last 3 digits = 000).
|
|
80
130
|
*/
|
|
81
131
|
getTimestampNanos() {
|
|
82
|
-
|
|
83
|
-
// Convert to nanoseconds (last 3 digits = 000 due to microsecond precision)
|
|
84
|
-
const elapsedNanos = BigInt(Math.floor(elapsedMs * 1000)) * 1000n;
|
|
85
|
-
return Nanoseconds.unsafe(this._epochView[0] + elapsedNanos);
|
|
132
|
+
return this._timestampNow(this);
|
|
86
133
|
}
|
|
87
134
|
//#endregion smoo/lmao!n/trace-root-timestamps
|
|
88
135
|
/**
|
|
@@ -91,34 +138,21 @@ export class TraceRoot {
|
|
|
91
138
|
* Pure JS implementation - writes timestamp, entry_type, message, and sets _writeIndex.
|
|
92
139
|
*/
|
|
93
140
|
writeSpanStart(buffer, spanName) {
|
|
94
|
-
|
|
95
|
-
buffer.timestamp[0] = this.getTimestampNanos();
|
|
96
|
-
buffer.entry_type[0] = ENTRY_TYPE_SPAN_START;
|
|
97
|
-
buffer.message(0, spanName);
|
|
98
|
-
// Row 1: pre-initialize as span-exception (will be overwritten on ok/err)
|
|
99
|
-
buffer.entry_type[1] = ENTRY_TYPE_SPAN_EXCEPTION;
|
|
100
|
-
buffer.timestamp[1] = 0n;
|
|
101
|
-
// Events start at row 2
|
|
102
|
-
buffer._writeIndex = 2;
|
|
141
|
+
this._writeSpanStart(this, buffer, spanName);
|
|
103
142
|
}
|
|
104
143
|
/**
|
|
105
144
|
* Write span-end entry to buffer at row 1.
|
|
106
145
|
* Writes both timestamp and entry_type.
|
|
107
146
|
*/
|
|
108
147
|
writeSpanEnd(buffer, entryType) {
|
|
109
|
-
|
|
110
|
-
buffer.entry_type[1] = entryType;
|
|
148
|
+
this._writeSpanEnd(this, buffer, entryType);
|
|
111
149
|
}
|
|
112
150
|
/**
|
|
113
151
|
* Write log entry: bump writeIndex, write timestamp + entry_type, return idx.
|
|
114
152
|
* SpanLogger uses returned idx for string column writes.
|
|
115
153
|
*/
|
|
116
154
|
writeLogEntry(buffer, entryType) {
|
|
117
|
-
|
|
118
|
-
buffer.timestamp[idx] = this.getTimestampNanos();
|
|
119
|
-
buffer.entry_type[idx] = entryType;
|
|
120
|
-
buffer._writeIndex = idx + 1;
|
|
121
|
-
return idx;
|
|
155
|
+
return this._appendLogEntry(this, buffer, entryType);
|
|
122
156
|
}
|
|
123
157
|
}
|
|
124
158
|
/**
|
package/dist/lib/traceRoot.js
CHANGED
|
@@ -14,6 +14,17 @@
|
|
|
14
14
|
*/
|
|
15
15
|
// Re-export TraceId types from traceId.ts
|
|
16
16
|
export { createTraceId, extractSpanIdentity, generateTraceId, isValidTraceId, MAX_TRACE_ID_LENGTH } from './traceId.js';
|
|
17
|
+
/**
|
|
18
|
+
* Consume the one-shot marker set when a WASM allocation export already
|
|
19
|
+
* initialized the system lifecycle rows. Message storage is still populated
|
|
20
|
+
* by the selected physical appender after this returns.
|
|
21
|
+
*/
|
|
22
|
+
export function consumeSpanStartedAtAllocation(buffer) {
|
|
23
|
+
if (buffer._spanStartedAtAllocation !== true)
|
|
24
|
+
return false;
|
|
25
|
+
buffer._spanStartedAtAllocation = false;
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
17
28
|
//#endregion smoo/lmao!n/buffer-tuning-observability
|
|
18
29
|
/**
|
|
19
30
|
* TraceRoot._system memory layout (little-endian):
|
|
@@ -7,34 +7,36 @@
|
|
|
7
7
|
* @module traceRoot.node
|
|
8
8
|
*/
|
|
9
9
|
import { Nanoseconds } from '@smoothbricks/arrow-builder';
|
|
10
|
+
import type { LogSchema } from './schema/LogSchema.js';
|
|
10
11
|
import { type TraceId } from './traceId.js';
|
|
11
|
-
import { type ITraceRoot, type TracerLifecycleHooks } from './traceRoot.js';
|
|
12
|
+
import { type ITraceRoot, type SpanEndPrimitive, type SpanStartPrimitive, type TimestampAppendPrimitive, type TimestampNowPrimitive, type TracerLifecycleHooks } from './traceRoot.js';
|
|
13
|
+
import { TraceTopology } from './traceTopology.js';
|
|
12
14
|
import type { AnySpanBuffer } from './types.js';
|
|
13
|
-
|
|
14
|
-
* TraceRoot - Node.js implementation.
|
|
15
|
-
*
|
|
16
|
-
* Stores anchor data in _system ArrayBuffer and writes timestamps directly from JS.
|
|
17
|
-
*/
|
|
18
|
-
export declare class TraceRoot implements ITraceRoot {
|
|
15
|
+
export declare class TraceRoot<T extends LogSchema = LogSchema> implements ITraceRoot<T> {
|
|
19
16
|
/**
|
|
20
17
|
* Raw backing buffer containing anchor timestamps and trace_id.
|
|
21
18
|
*/
|
|
22
19
|
readonly _system: ArrayBuffer;
|
|
20
|
+
readonly _traceIdBytes: Uint8Array;
|
|
21
|
+
readonly trace_id: TraceId;
|
|
23
22
|
/**
|
|
24
23
|
* Tracer reference for lifecycle hooks and event callbacks.
|
|
25
24
|
*/
|
|
26
|
-
readonly tracer: TracerLifecycleHooks
|
|
25
|
+
readonly tracer: TracerLifecycleHooks<T>;
|
|
26
|
+
readonly _topology: TraceTopology;
|
|
27
|
+
readonly _timestampNow: TimestampNowPrimitive;
|
|
28
|
+
readonly _appendLogEntry: TimestampAppendPrimitive;
|
|
29
|
+
readonly _writeSpanStart: SpanStartPrimitive;
|
|
30
|
+
readonly _writeSpanEnd: SpanEndPrimitive;
|
|
27
31
|
/**
|
|
28
32
|
* Cached TypedArray views for fast JS access.
|
|
29
33
|
*/
|
|
30
34
|
private readonly _epochView;
|
|
31
35
|
private readonly _perfView;
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
private readonly _anchorHrtimeBigInt;
|
|
37
|
-
constructor(trace_id: TraceId, anchorEpochNanos: bigint, anchorPerfNow: number, anchorHrtimeBigInt: bigint, tracer: TracerLifecycleHooks);
|
|
36
|
+
/** Epoch offset makes each exact timestamp one clock read plus one BigInt addition. */
|
|
37
|
+
readonly _epochHrtimeOffset: bigint;
|
|
38
|
+
_lastTimestampNanos: bigint;
|
|
39
|
+
constructor(trace_id: TraceId, anchorEpochNanos: bigint, anchorPerfNow: number, anchorHrtimeBigInt: bigint, tracer: TracerLifecycleHooks<T>);
|
|
38
40
|
/**
|
|
39
41
|
* Epoch time in nanoseconds when trace was created.
|
|
40
42
|
*/
|
|
@@ -43,10 +45,6 @@ export declare class TraceRoot implements ITraceRoot {
|
|
|
43
45
|
* High-resolution timer anchor when trace was created.
|
|
44
46
|
*/
|
|
45
47
|
get anchorPerfNow(): number;
|
|
46
|
-
/**
|
|
47
|
-
* Trace ID for this trace.
|
|
48
|
-
*/
|
|
49
|
-
get trace_id(): TraceId;
|
|
50
48
|
/**
|
|
51
49
|
* Get current timestamp in nanoseconds since Unix epoch.
|
|
52
50
|
* Uses process.hrtime.bigint() for true nanosecond precision.
|
|
@@ -73,5 +71,5 @@ export declare class TraceRoot implements ITraceRoot {
|
|
|
73
71
|
* Factory function for creating Node.js TraceRoot instances.
|
|
74
72
|
* Pass this to Tracer constructor for Node.js environments.
|
|
75
73
|
*/
|
|
76
|
-
export declare function createTraceRoot(trace_id: string, tracer: TracerLifecycleHooks): TraceRoot
|
|
74
|
+
export declare function createTraceRoot<T extends LogSchema>(trace_id: string, tracer: TracerLifecycleHooks<T>): TraceRoot<T>;
|
|
77
75
|
//# sourceMappingURL=traceRoot.node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traceRoot.node.d.ts","sourceRoot":"","sources":["../../src/lib/traceRoot.node.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"traceRoot.node.d.ts","sourceRoot":"","sources":["../../src/lib/traceRoot.node.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAK1B,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAuDhD,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IAC9E;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,aAAa,wBAAgB;IACtC,QAAQ,CAAC,eAAe,2BAAkB;IAC1C,QAAQ,CAAC,eAAe,qBAA2B;IACnD,QAAQ,CAAC,aAAa,mBAAyB;IAE/C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,uFAAuF;IACvF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,mBAAmB,SAAM;IAEzB,YACE,QAAQ,EAAE,OAAO,EACjB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAuBhC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;OAGG;IACH,iBAAiB,IAAI,WAAW,CAE/B;IAED;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE5D;IAED;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3D;IAED;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;CACF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAMpH"}
|