@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,5 +1,5 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, it } from 'bun:test';
|
|
2
|
-
import {
|
|
2
|
+
import { JsBufferStrategy } from '../../JsBufferStrategy.js';
|
|
3
3
|
import { defineLogSchema } from '../../schema/defineLogSchema.js';
|
|
4
4
|
import {
|
|
5
5
|
ENTRY_TYPE_DEBUG,
|
|
@@ -12,27 +12,22 @@ import {
|
|
|
12
12
|
} from '../../schema/systemSchema.js';
|
|
13
13
|
import { createTraceId } from '../../traceId.js';
|
|
14
14
|
import type { TracerLifecycleHooks } from '../../traceRoot.js';
|
|
15
|
-
import type { AnySpanBuffer } from '../../types.js';
|
|
16
15
|
import { createWasmAllocator, type WasmAllocator } from '../wasmAllocator.js';
|
|
17
16
|
import { createWasmTraceRoot } from '../wasmTraceRoot.js';
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
return createBuffer(defineLogSchema({}));
|
|
21
|
-
}
|
|
18
|
+
const mockSchema = defineLogSchema({});
|
|
22
19
|
|
|
23
20
|
/**
|
|
24
21
|
* Mock tracer that implements TracerLifecycleHooks for testing.
|
|
25
22
|
*/
|
|
26
|
-
const mockTracer: TracerLifecycleHooks = {
|
|
23
|
+
const mockTracer: TracerLifecycleHooks<typeof mockSchema> = {
|
|
27
24
|
onTraceStart: () => {},
|
|
28
25
|
onTraceEnd: () => {},
|
|
29
26
|
onSpanStart: () => {},
|
|
30
27
|
onSpanEnd: () => {},
|
|
31
28
|
onStatsWillResetFor: () => {},
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
createOverflowBuffer: createMockSpanBuffer,
|
|
35
|
-
},
|
|
29
|
+
getFlagEvaluatorForContext: () => undefined,
|
|
30
|
+
bufferStrategy: new JsBufferStrategy<typeof mockSchema>(),
|
|
36
31
|
};
|
|
37
32
|
|
|
38
33
|
describe('WasmTraceRoot', () => {
|
|
@@ -111,7 +106,7 @@ describe('WasmTraceRoot', () => {
|
|
|
111
106
|
describe('writeSpanStartPtr (low-level pointer API)', () => {
|
|
112
107
|
it('sets entry_type[0] = SPAN_START (1)', () => {
|
|
113
108
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
114
|
-
const systemPtr = allocator.
|
|
109
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
115
110
|
const identityPtr = allocator.allocIdentityChild();
|
|
116
111
|
|
|
117
112
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -121,7 +116,7 @@ describe('WasmTraceRoot', () => {
|
|
|
121
116
|
|
|
122
117
|
it('sets entry_type[1] = SPAN_EXCEPTION (4) for crash safety', () => {
|
|
123
118
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
124
|
-
const systemPtr = allocator.
|
|
119
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
125
120
|
const identityPtr = allocator.allocIdentityChild();
|
|
126
121
|
|
|
127
122
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -131,7 +126,7 @@ describe('WasmTraceRoot', () => {
|
|
|
131
126
|
|
|
132
127
|
it('sets _writeIndex to 2', () => {
|
|
133
128
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
134
|
-
const systemPtr = allocator.
|
|
129
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
135
130
|
const identityPtr = allocator.allocIdentityChild();
|
|
136
131
|
|
|
137
132
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -141,7 +136,7 @@ describe('WasmTraceRoot', () => {
|
|
|
141
136
|
|
|
142
137
|
it('writes a valid timestamp at row 0', () => {
|
|
143
138
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
144
|
-
const systemPtr = allocator.
|
|
139
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
145
140
|
const identityPtr = allocator.allocIdentityChild();
|
|
146
141
|
|
|
147
142
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -154,7 +149,7 @@ describe('WasmTraceRoot', () => {
|
|
|
154
149
|
describe('writeSpanEndOkPtr (low-level pointer API)', () => {
|
|
155
150
|
it('sets entry_type[1] = SPAN_OK (2)', () => {
|
|
156
151
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
157
|
-
const systemPtr = allocator.
|
|
152
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
158
153
|
const identityPtr = allocator.allocIdentityChild();
|
|
159
154
|
|
|
160
155
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -165,7 +160,7 @@ describe('WasmTraceRoot', () => {
|
|
|
165
160
|
|
|
166
161
|
it('writes a valid timestamp at row 1', () => {
|
|
167
162
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
168
|
-
const systemPtr = allocator.
|
|
163
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
169
164
|
const identityPtr = allocator.allocIdentityChild();
|
|
170
165
|
|
|
171
166
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -177,7 +172,7 @@ describe('WasmTraceRoot', () => {
|
|
|
177
172
|
|
|
178
173
|
it('writes timestamp >= span start timestamp', () => {
|
|
179
174
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
180
|
-
const systemPtr = allocator.
|
|
175
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
181
176
|
const identityPtr = allocator.allocIdentityChild();
|
|
182
177
|
|
|
183
178
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -193,7 +188,7 @@ describe('WasmTraceRoot', () => {
|
|
|
193
188
|
describe('writeSpanEndErrPtr (low-level pointer API)', () => {
|
|
194
189
|
it('sets entry_type[1] = SPAN_ERR (3)', () => {
|
|
195
190
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
196
|
-
const systemPtr = allocator.
|
|
191
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
197
192
|
const identityPtr = allocator.allocIdentityChild();
|
|
198
193
|
|
|
199
194
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -204,7 +199,7 @@ describe('WasmTraceRoot', () => {
|
|
|
204
199
|
|
|
205
200
|
it('writes a valid timestamp at row 1', () => {
|
|
206
201
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
207
|
-
const systemPtr = allocator.
|
|
202
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
208
203
|
const identityPtr = allocator.allocIdentityChild();
|
|
209
204
|
|
|
210
205
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -218,7 +213,7 @@ describe('WasmTraceRoot', () => {
|
|
|
218
213
|
describe('writeLogEntryPtr (low-level pointer API)', () => {
|
|
219
214
|
it('returns correct row index starting at 2', () => {
|
|
220
215
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
221
|
-
const systemPtr = allocator.
|
|
216
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
222
217
|
const identityPtr = allocator.allocIdentityChild();
|
|
223
218
|
|
|
224
219
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -229,7 +224,7 @@ describe('WasmTraceRoot', () => {
|
|
|
229
224
|
|
|
230
225
|
it('increments write index for each log entry', () => {
|
|
231
226
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
232
|
-
const systemPtr = allocator.
|
|
227
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
233
228
|
const identityPtr = allocator.allocIdentityChild();
|
|
234
229
|
|
|
235
230
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -246,7 +241,7 @@ describe('WasmTraceRoot', () => {
|
|
|
246
241
|
|
|
247
242
|
it('writes correct entry type', () => {
|
|
248
243
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
249
|
-
const systemPtr = allocator.
|
|
244
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
250
245
|
const identityPtr = allocator.allocIdentityChild();
|
|
251
246
|
|
|
252
247
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -261,7 +256,7 @@ describe('WasmTraceRoot', () => {
|
|
|
261
256
|
|
|
262
257
|
it('writes valid timestamps for log entries', () => {
|
|
263
258
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
264
|
-
const systemPtr = allocator.
|
|
259
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
265
260
|
const identityPtr = allocator.allocIdentityChild();
|
|
266
261
|
|
|
267
262
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -275,7 +270,7 @@ describe('WasmTraceRoot', () => {
|
|
|
275
270
|
describe('readWriteIndex', () => {
|
|
276
271
|
it('returns 2 after writeSpanStartPtr', () => {
|
|
277
272
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
278
|
-
const systemPtr = allocator.
|
|
273
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
279
274
|
const identityPtr = allocator.allocIdentityChild();
|
|
280
275
|
|
|
281
276
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -285,7 +280,7 @@ describe('WasmTraceRoot', () => {
|
|
|
285
280
|
|
|
286
281
|
it('reflects log entries written', () => {
|
|
287
282
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
288
|
-
const systemPtr = allocator.
|
|
283
|
+
const systemPtr = allocator.allocExact(64 * 9, 8);
|
|
289
284
|
const identityPtr = allocator.allocIdentityChild();
|
|
290
285
|
|
|
291
286
|
traceRoot.writeSpanStartPtr(systemPtr, identityPtr);
|
|
@@ -326,9 +321,9 @@ describe('WasmTraceRoot', () => {
|
|
|
326
321
|
it('can write to multiple system blocks', () => {
|
|
327
322
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
328
323
|
|
|
329
|
-
const systemPtr1 = allocator.
|
|
324
|
+
const systemPtr1 = allocator.allocExact(64 * 9, 8);
|
|
330
325
|
const identityPtr1 = allocator.allocIdentityChild();
|
|
331
|
-
const systemPtr2 = allocator.
|
|
326
|
+
const systemPtr2 = allocator.allocExact(64 * 9, 8);
|
|
332
327
|
const identityPtr2 = allocator.allocIdentityChild();
|
|
333
328
|
|
|
334
329
|
traceRoot.writeSpanStartPtr(systemPtr1, identityPtr1);
|
|
@@ -343,9 +338,9 @@ describe('WasmTraceRoot', () => {
|
|
|
343
338
|
it('maintains separate state for each span buffer', () => {
|
|
344
339
|
const traceRoot = createWasmTraceRoot(allocator, 'test-trace-id', mockTracer);
|
|
345
340
|
|
|
346
|
-
const systemPtr1 = allocator.
|
|
341
|
+
const systemPtr1 = allocator.allocExact(64 * 9, 8);
|
|
347
342
|
const identityPtr1 = allocator.allocIdentityChild();
|
|
348
|
-
const systemPtr2 = allocator.
|
|
343
|
+
const systemPtr2 = allocator.allocExact(64 * 9, 8);
|
|
349
344
|
const identityPtr2 = allocator.allocIdentityChild();
|
|
350
345
|
|
|
351
346
|
traceRoot.writeSpanStartPtr(systemPtr1, identityPtr1);
|
|
@@ -137,8 +137,8 @@ describe('WasmTracer', () => {
|
|
|
137
137
|
|
|
138
138
|
// Allocator should have all the expected methods
|
|
139
139
|
expect(tracer.allocator.memory).toBeInstanceOf(WebAssembly.Memory);
|
|
140
|
-
expect(typeof tracer.allocator.
|
|
141
|
-
expect(typeof tracer.allocator.
|
|
140
|
+
expect(typeof tracer.allocator.allocExact).toBe('function');
|
|
141
|
+
expect(typeof tracer.allocator.freeExact).toBe('function');
|
|
142
142
|
expect(typeof tracer.allocator.getAllocCount).toBe('function');
|
|
143
143
|
});
|
|
144
144
|
});
|
|
@@ -20,23 +20,26 @@
|
|
|
20
20
|
// Types
|
|
21
21
|
// =============================================================================
|
|
22
22
|
|
|
23
|
+
export interface WasmMemoryEpochPin {
|
|
24
|
+
readonly buffer: ArrayBuffer;
|
|
25
|
+
readonly version: number;
|
|
26
|
+
readonly released: boolean;
|
|
27
|
+
release(): void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const WASM_SPAN_IDENTITY_ROOT = 0;
|
|
31
|
+
export const WASM_SPAN_IDENTITY_CHILD = 1;
|
|
32
|
+
export const WASM_NO_LAYOUT_OFFSET = 0xffffffff;
|
|
33
|
+
|
|
23
34
|
export interface WasmAllocator {
|
|
24
35
|
/** The underlying WASM memory */
|
|
25
36
|
readonly memory: WebAssembly.Memory;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
write_log_entry: (
|
|
33
|
-
systemPtr: number,
|
|
34
|
-
identityPtr: number,
|
|
35
|
-
traceRootPtr: number,
|
|
36
|
-
entryType: number,
|
|
37
|
-
capacity: number,
|
|
38
|
-
) => number;
|
|
39
|
-
};
|
|
37
|
+
/** Monotonic version of the current linear-memory ArrayBuffer. */
|
|
38
|
+
readonly memoryVersion: number;
|
|
39
|
+
/** Refresh canonical allocator views after growth and return memoryVersion. */
|
|
40
|
+
refreshViews(): number;
|
|
41
|
+
/** Pin the current linear-memory backing epoch for borrowed Arrow views. */
|
|
42
|
+
pinMemoryEpoch(): WasmMemoryEpochPin;
|
|
40
43
|
|
|
41
44
|
/** Cached views (recreated after grow, but pre-sized to avoid grow for benchmarks) */
|
|
42
45
|
readonly u8: Uint8Array;
|
|
@@ -53,17 +56,26 @@ export interface WasmAllocator {
|
|
|
53
56
|
/** Reset all freelists (for testing/benchmarking) */
|
|
54
57
|
reset(): void;
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
/** Allocate and release an exact logical byte extent with explicit alignment. */
|
|
60
|
+
allocExact(byteLength: number, alignment: number): number;
|
|
61
|
+
freeExact(offset: number, byteLength: number, alignment: number): void;
|
|
62
|
+
/**
|
|
63
|
+
* Allocate one root/child superblock and pre-arm its lifecycle rows in one
|
|
64
|
+
* WASM call. All offsets are immutable compile/startup layout constants.
|
|
65
|
+
*/
|
|
66
|
+
createAndStartSpan(
|
|
67
|
+
identityMode: typeof WASM_SPAN_IDENTITY_ROOT | typeof WASM_SPAN_IDENTITY_CHILD,
|
|
68
|
+
traceIdLength: number,
|
|
69
|
+
superblockByteLength: number,
|
|
70
|
+
systemOffset: number,
|
|
71
|
+
entryTypeOffset: number,
|
|
72
|
+
rowHeaderOffset: number,
|
|
73
|
+
traceRootPtr: number,
|
|
74
|
+
): number;
|
|
75
|
+
/** Allocate one storage-only overflow superblock in one WASM call. */
|
|
76
|
+
createOverflowSpan(superblockByteLength: number): number;
|
|
77
|
+
/** Release one root, child, or overflow superblock. */
|
|
78
|
+
freeSpanSuperblock(offset: number, byteLength: number): void;
|
|
67
79
|
|
|
68
80
|
// Span lifecycle (writes timestamp + entry_type)
|
|
69
81
|
spanStart(systemPtr: number, identityPtr: number, traceRootPtr: number, capacity?: number): void;
|
|
@@ -78,11 +90,6 @@ export interface WasmAllocator {
|
|
|
78
90
|
capacity?: number,
|
|
79
91
|
): number;
|
|
80
92
|
|
|
81
|
-
// Column writes (auto-allocate if offset is 0)
|
|
82
|
-
writeColF64(colOffset: number, rowIdx: number, value: number, capacity?: number): number;
|
|
83
|
-
writeColU32(colOffset: number, rowIdx: number, value: number, capacity?: number): number;
|
|
84
|
-
writeColU8(colOffset: number, rowIdx: number, value: number, capacity?: number): number;
|
|
85
|
-
|
|
86
93
|
// TraceRoot initialization
|
|
87
94
|
initTraceRoot(traceRootPtr: number): void;
|
|
88
95
|
|
|
@@ -90,10 +97,6 @@ export interface WasmAllocator {
|
|
|
90
97
|
getBumpPtr(): number;
|
|
91
98
|
getAllocCount(): number;
|
|
92
99
|
getFreeCount(): number;
|
|
93
|
-
getSpanSystemSize(capacity?: number): number;
|
|
94
|
-
getCol1BSize(capacity?: number): number;
|
|
95
|
-
getCol4BSize(capacity?: number): number;
|
|
96
|
-
getCol8BSize(capacity?: number): number;
|
|
97
100
|
|
|
98
101
|
// Reading (for Arrow conversion)
|
|
99
102
|
readTimestamp(systemPtr: number, rowIdx: number): bigint;
|
|
@@ -151,16 +154,19 @@ export interface WasmAllocatorOptions {
|
|
|
151
154
|
interface WasmExports {
|
|
152
155
|
init(): void;
|
|
153
156
|
reset(): void;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
157
|
+
alloc_exact(byteLength: number, alignment: number): number;
|
|
158
|
+
free_exact(offset: number, byteLength: number, alignment: number): void;
|
|
159
|
+
create_and_start_span(
|
|
160
|
+
identityMode: number,
|
|
161
|
+
traceIdLength: number,
|
|
162
|
+
superblockByteLength: number,
|
|
163
|
+
systemOffset: number,
|
|
164
|
+
entryTypeOffset: number,
|
|
165
|
+
rowHeaderOffset: number,
|
|
166
|
+
traceRootPtr: number,
|
|
167
|
+
): number;
|
|
168
|
+
create_overflow_span(superblockByteLength: number): number;
|
|
169
|
+
free_span_superblock(offset: number, byteLength: number): void;
|
|
164
170
|
|
|
165
171
|
span_start(systemPtr: number, identityPtr: number, traceRootPtr: number, capacity: number): void;
|
|
166
172
|
span_end_ok(systemPtr: number, traceRootPtr: number, capacity: number): void;
|
|
@@ -182,10 +188,6 @@ interface WasmExports {
|
|
|
182
188
|
get_bump_ptr(): number;
|
|
183
189
|
get_alloc_count(): number;
|
|
184
190
|
get_free_count(): number;
|
|
185
|
-
get_span_system_size(capacity: number): number;
|
|
186
|
-
get_col_1b_size(capacity: number): number;
|
|
187
|
-
get_col_4b_size(capacity: number): number;
|
|
188
|
-
get_col_8b_size(capacity: number): number;
|
|
189
191
|
|
|
190
192
|
read_timestamp(systemPtr: number, rowIdx: number): bigint;
|
|
191
193
|
read_entry_type(systemPtr: number, rowIdx: number, capacity: number): number;
|
|
@@ -221,7 +223,11 @@ function isWasmExports(value: unknown): value is WasmExports {
|
|
|
221
223
|
}
|
|
222
224
|
|
|
223
225
|
return (
|
|
224
|
-
typeof Reflect.get(value, 'init') === 'function' &&
|
|
226
|
+
typeof Reflect.get(value, 'init') === 'function' &&
|
|
227
|
+
typeof Reflect.get(value, 'alloc_exact') === 'function' &&
|
|
228
|
+
typeof Reflect.get(value, 'create_and_start_span') === 'function' &&
|
|
229
|
+
typeof Reflect.get(value, 'create_overflow_span') === 'function' &&
|
|
230
|
+
typeof Reflect.get(value, 'free_span_superblock') === 'function'
|
|
225
231
|
);
|
|
226
232
|
}
|
|
227
233
|
|
|
@@ -256,6 +262,20 @@ function wrapWasmInstance(instance: WebAssembly.Instance, memory: WebAssembly.Me
|
|
|
256
262
|
const exports = instance.exports;
|
|
257
263
|
let views = createViews(memory);
|
|
258
264
|
let currentBuffer = memory.buffer;
|
|
265
|
+
let memoryVersion = 1;
|
|
266
|
+
let memoryEpochPins = 0;
|
|
267
|
+
|
|
268
|
+
const refreshViews = (): number => {
|
|
269
|
+
if (memory.buffer !== currentBuffer) {
|
|
270
|
+
if (memoryEpochPins !== 0) {
|
|
271
|
+
throw new Error('WASM memory grew while an Arrow lease pinned the previous epoch');
|
|
272
|
+
}
|
|
273
|
+
currentBuffer = memory.buffer;
|
|
274
|
+
views = createViews(memory);
|
|
275
|
+
memoryVersion++;
|
|
276
|
+
}
|
|
277
|
+
return memoryVersion;
|
|
278
|
+
};
|
|
259
279
|
|
|
260
280
|
// Initialize the allocator header
|
|
261
281
|
exports.init();
|
|
@@ -263,80 +283,91 @@ function wrapWasmInstance(instance: WebAssembly.Instance, memory: WebAssembly.Me
|
|
|
263
283
|
return {
|
|
264
284
|
memory,
|
|
265
285
|
capacity,
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
286
|
+
get memoryVersion() {
|
|
287
|
+
return refreshViews();
|
|
288
|
+
},
|
|
289
|
+
refreshViews,
|
|
290
|
+
pinMemoryEpoch() {
|
|
291
|
+
const version = refreshViews();
|
|
292
|
+
const buffer = currentBuffer;
|
|
293
|
+
memoryEpochPins++;
|
|
294
|
+
let released = false;
|
|
295
|
+
return {
|
|
296
|
+
buffer,
|
|
297
|
+
version,
|
|
298
|
+
get released() {
|
|
299
|
+
return released;
|
|
300
|
+
},
|
|
301
|
+
release() {
|
|
302
|
+
if (released) return;
|
|
303
|
+
released = true;
|
|
304
|
+
memoryEpochPins--;
|
|
305
|
+
},
|
|
306
|
+
};
|
|
271
307
|
},
|
|
272
308
|
|
|
273
309
|
get u8() {
|
|
274
|
-
|
|
275
|
-
if (memory.buffer !== currentBuffer) {
|
|
276
|
-
currentBuffer = memory.buffer;
|
|
277
|
-
views = createViews(memory);
|
|
278
|
-
}
|
|
310
|
+
refreshViews();
|
|
279
311
|
return views.u8;
|
|
280
312
|
},
|
|
281
313
|
get u32() {
|
|
282
|
-
|
|
283
|
-
currentBuffer = memory.buffer;
|
|
284
|
-
views = createViews(memory);
|
|
285
|
-
}
|
|
314
|
+
refreshViews();
|
|
286
315
|
return views.u32;
|
|
287
316
|
},
|
|
288
317
|
get i64() {
|
|
289
|
-
|
|
290
|
-
currentBuffer = memory.buffer;
|
|
291
|
-
views = createViews(memory);
|
|
292
|
-
}
|
|
318
|
+
refreshViews();
|
|
293
319
|
return views.i64;
|
|
294
320
|
},
|
|
295
321
|
get f64() {
|
|
296
|
-
|
|
297
|
-
currentBuffer = memory.buffer;
|
|
298
|
-
views = createViews(memory);
|
|
299
|
-
}
|
|
322
|
+
refreshViews();
|
|
300
323
|
return views.f64;
|
|
301
324
|
},
|
|
302
325
|
|
|
303
326
|
init: exports.init,
|
|
304
327
|
reset: exports.reset,
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
328
|
+
allocExact: exports.alloc_exact,
|
|
329
|
+
freeExact: exports.free_exact,
|
|
330
|
+
createAndStartSpan: (
|
|
331
|
+
identityMode,
|
|
332
|
+
traceIdLength,
|
|
333
|
+
superblockByteLength,
|
|
334
|
+
systemOffset,
|
|
335
|
+
entryTypeOffset,
|
|
336
|
+
rowHeaderOffset,
|
|
337
|
+
traceRootPtr,
|
|
338
|
+
) => {
|
|
339
|
+
const offset = exports.create_and_start_span(
|
|
340
|
+
identityMode,
|
|
341
|
+
traceIdLength,
|
|
342
|
+
superblockByteLength,
|
|
343
|
+
systemOffset,
|
|
344
|
+
entryTypeOffset,
|
|
345
|
+
rowHeaderOffset,
|
|
346
|
+
traceRootPtr,
|
|
347
|
+
);
|
|
348
|
+
refreshViews();
|
|
349
|
+
return offset;
|
|
350
|
+
},
|
|
351
|
+
createOverflowSpan: (superblockByteLength) => {
|
|
352
|
+
const offset = exports.create_overflow_span(superblockByteLength);
|
|
353
|
+
refreshViews();
|
|
354
|
+
return offset;
|
|
355
|
+
},
|
|
356
|
+
freeSpanSuperblock: exports.free_span_superblock,
|
|
317
357
|
|
|
318
358
|
// Span lifecycle with optional capacity
|
|
319
359
|
spanStart: (systemPtr, identityPtr, traceRootPtr, cap = capacity) =>
|
|
320
360
|
exports.span_start(systemPtr, identityPtr, traceRootPtr, cap),
|
|
321
361
|
spanEndOk: (systemPtr, traceRootPtr, cap = capacity) => exports.span_end_ok(systemPtr, traceRootPtr, cap),
|
|
322
362
|
spanEndErr: (systemPtr, traceRootPtr, cap = capacity) => exports.span_end_err(systemPtr, traceRootPtr, cap),
|
|
323
|
-
writeLogEntry: (systemPtr,
|
|
324
|
-
exports.write_log_entry(systemPtr,
|
|
325
|
-
|
|
326
|
-
// Column writes with optional capacity
|
|
327
|
-
writeColF64: (colOffset, rowIdx, value, cap = capacity) => exports.write_col_f64(colOffset, rowIdx, value, cap),
|
|
328
|
-
writeColU32: (colOffset, rowIdx, value, cap = capacity) => exports.write_col_u32(colOffset, rowIdx, value, cap),
|
|
329
|
-
writeColU8: (colOffset, rowIdx, value, cap = capacity) => exports.write_col_u8(colOffset, rowIdx, value, cap),
|
|
363
|
+
writeLogEntry: (systemPtr, identityPtr, traceRootPtr, entryType, cap = capacity) =>
|
|
364
|
+
exports.write_log_entry(systemPtr, identityPtr, traceRootPtr, entryType, cap),
|
|
330
365
|
|
|
331
366
|
initTraceRoot: exports.init_trace_root,
|
|
332
367
|
|
|
333
368
|
getBumpPtr: exports.get_bump_ptr,
|
|
334
369
|
getAllocCount: exports.get_alloc_count,
|
|
335
370
|
getFreeCount: exports.get_free_count,
|
|
336
|
-
getSpanSystemSize: (cap = capacity) => exports.get_span_system_size(cap),
|
|
337
|
-
getCol1BSize: (cap = capacity) => exports.get_col_1b_size(cap),
|
|
338
|
-
getCol4BSize: (cap = capacity) => exports.get_col_4b_size(cap),
|
|
339
|
-
getCol8BSize: (cap = capacity) => exports.get_col_8b_size(cap),
|
|
340
371
|
|
|
341
372
|
readTimestamp: exports.read_timestamp,
|
|
342
373
|
readEntryType: (systemPtr, rowIdx, cap = capacity) => exports.read_entry_type(systemPtr, rowIdx, cap),
|
|
@@ -384,6 +415,10 @@ function createImports(memory: WebAssembly.Memory) {
|
|
|
384
415
|
// This eliminates recompilation cost in benchmarks and production
|
|
385
416
|
let cachedWasmModule: WebAssembly.Module | null = null;
|
|
386
417
|
|
|
418
|
+
// The shipped Rust allocator is the only supported artifact. Node and browser loading
|
|
419
|
+
// deliberately share this fixed path so runtime selection cannot drift by environment.
|
|
420
|
+
const WASM_ARTIFACT_NAME = 'allocator.wasm';
|
|
421
|
+
|
|
387
422
|
/**
|
|
388
423
|
* Load WASM bytes - handles both Node.js and browser environments.
|
|
389
424
|
*/
|
|
@@ -397,7 +432,7 @@ async function loadWasmBytes(): Promise<ArrayBuffer> {
|
|
|
397
432
|
// __dirname equivalent for ESM
|
|
398
433
|
const currentFile = fileURLToPath(import.meta.url);
|
|
399
434
|
const currentDir = dirname(currentFile);
|
|
400
|
-
const wasmPath = join(currentDir, '../../../dist
|
|
435
|
+
const wasmPath = join(currentDir, '../../../dist', WASM_ARTIFACT_NAME);
|
|
401
436
|
|
|
402
437
|
const buffer = await readFile(wasmPath);
|
|
403
438
|
// Create a proper ArrayBuffer from the Node.js Buffer
|
|
@@ -407,7 +442,7 @@ async function loadWasmBytes(): Promise<ArrayBuffer> {
|
|
|
407
442
|
}
|
|
408
443
|
|
|
409
444
|
// Browser: fetch from relative path
|
|
410
|
-
const response = await fetch(new URL(
|
|
445
|
+
const response = await fetch(new URL(`../../../dist/${WASM_ARTIFACT_NAME}`, import.meta.url));
|
|
411
446
|
return response.arrayBuffer();
|
|
412
447
|
}
|
|
413
448
|
|