@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
|
@@ -213,7 +213,7 @@ function buildOpContextFactory<
|
|
|
213
213
|
// See agent-todo/opgroup-refactor.md lines 58-70, 525-547 for rationale.
|
|
214
214
|
const logBinding = {
|
|
215
215
|
logSchema: mergedSchema,
|
|
216
|
-
|
|
216
|
+
remapDescriptor: undefined,
|
|
217
217
|
};
|
|
218
218
|
|
|
219
219
|
// WHY: build the binding first so Ops created by defineOp carry it via _opContextBinding.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { LogSchema } from './schema/LogSchema.js';
|
|
2
|
+
import { getEnumValues, getSchemaType } from './schema/typeGuards.js';
|
|
3
|
+
|
|
4
|
+
export type EnumIndexArray = Uint8Array | Uint16Array | Uint32Array;
|
|
5
|
+
export type EnumIndexArrayConstructor = Uint8ArrayConstructor | Uint16ArrayConstructor | Uint32ArrayConstructor;
|
|
6
|
+
|
|
7
|
+
/** Immutable schema-order metadata for one enum column. */
|
|
8
|
+
export interface EnumLookupDescriptor {
|
|
9
|
+
readonly fieldName: string;
|
|
10
|
+
readonly values: readonly string[];
|
|
11
|
+
readonly indexArrayConstructor: EnumIndexArrayConstructor;
|
|
12
|
+
/** Encode a declared value, preserving strict string matching and index 0 for every invalid value. */
|
|
13
|
+
readonly encode: (value: unknown) => number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** Immutable enum metadata shared by every physical plan for one LogSchema. */
|
|
17
|
+
export interface SchemaEnumLookupDescriptor {
|
|
18
|
+
readonly ordered: readonly EnumLookupDescriptor[];
|
|
19
|
+
readonly byField: Readonly<Record<string, EnumLookupDescriptor>>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function createNullPrototypeRecord<Value>(): Record<string, Value> {
|
|
23
|
+
return Object.create(null);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const EMPTY_ENUM_DESCRIPTORS: readonly EnumLookupDescriptor[] = Object.freeze([]);
|
|
27
|
+
const EMPTY_ENUM_LOOKUP: SchemaEnumLookupDescriptor = Object.freeze({
|
|
28
|
+
ordered: EMPTY_ENUM_DESCRIPTORS,
|
|
29
|
+
byField: Object.freeze(createNullPrototypeRecord<EnumLookupDescriptor>()),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
const enumLookupBySchema = new WeakMap<LogSchema, SchemaEnumLookupDescriptor>();
|
|
33
|
+
interface EnumLookupCore {
|
|
34
|
+
readonly values: readonly string[];
|
|
35
|
+
readonly indexArrayConstructor: EnumIndexArrayConstructor;
|
|
36
|
+
readonly encode: (value: unknown) => number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const enumLookupCoreByFieldSchema = new WeakMap<object, EnumLookupCore>();
|
|
40
|
+
const enumLookupDescriptorsByFieldSchema = new WeakMap<object, Record<string, EnumLookupDescriptor>>();
|
|
41
|
+
|
|
42
|
+
function indexArrayConstructorForCount(count: number): EnumIndexArrayConstructor {
|
|
43
|
+
// The maximum stored index is count - 1, so 256 and 65,536 values still fit
|
|
44
|
+
// exactly in Uint8 and Uint16 respectively.
|
|
45
|
+
if (count <= 0x100) return Uint8Array;
|
|
46
|
+
if (count <= 0x1_0000) return Uint16Array;
|
|
47
|
+
return Uint32Array;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function createEnumEncoder(values: readonly string[]): (value: unknown) => number {
|
|
51
|
+
const ordinalByValue = createNullPrototypeRecord<number>();
|
|
52
|
+
for (let index = 0; index < values.length; index++) {
|
|
53
|
+
const value = values[index];
|
|
54
|
+
// Switch cases historically resolve duplicate declarations to the first
|
|
55
|
+
// matching case. Preserve that byte-level behavior in the fallback table.
|
|
56
|
+
if (!Object.hasOwn(ordinalByValue, value)) ordinalByValue[value] = index;
|
|
57
|
+
}
|
|
58
|
+
const immutableOrdinalByValue = Object.freeze(ordinalByValue);
|
|
59
|
+
return (value: unknown): number => (typeof value === 'string' ? (immutableOrdinalByValue[value] ?? 0) : 0);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function createEnumLookupDescriptor(
|
|
63
|
+
fieldName: string,
|
|
64
|
+
fieldSchema: object,
|
|
65
|
+
sourceValues: readonly string[],
|
|
66
|
+
): EnumLookupDescriptor {
|
|
67
|
+
let descriptorsByName = enumLookupDescriptorsByFieldSchema.get(fieldSchema);
|
|
68
|
+
const cached = descriptorsByName?.[fieldName];
|
|
69
|
+
if (cached) return cached;
|
|
70
|
+
|
|
71
|
+
let core = enumLookupCoreByFieldSchema.get(fieldSchema);
|
|
72
|
+
if (!core) {
|
|
73
|
+
const values = Object.freeze(Array.from(sourceValues));
|
|
74
|
+
core = Object.freeze({
|
|
75
|
+
values,
|
|
76
|
+
indexArrayConstructor: indexArrayConstructorForCount(values.length),
|
|
77
|
+
encode: createEnumEncoder(values),
|
|
78
|
+
});
|
|
79
|
+
enumLookupCoreByFieldSchema.set(fieldSchema, core);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const descriptor = Object.freeze({
|
|
83
|
+
fieldName,
|
|
84
|
+
values: core.values,
|
|
85
|
+
indexArrayConstructor: core.indexArrayConstructor,
|
|
86
|
+
encode: core.encode,
|
|
87
|
+
});
|
|
88
|
+
descriptorsByName ??= createNullPrototypeRecord<EnumLookupDescriptor>();
|
|
89
|
+
descriptorsByName[fieldName] = descriptor;
|
|
90
|
+
enumLookupDescriptorsByFieldSchema.set(fieldSchema, descriptorsByName);
|
|
91
|
+
return descriptor;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Resolve and cache schema-order enum lookup metadata exactly once per LogSchema. */
|
|
95
|
+
export function resolveEnumLookupDescriptor(schema: LogSchema): SchemaEnumLookupDescriptor {
|
|
96
|
+
const cached = enumLookupBySchema.get(schema);
|
|
97
|
+
if (cached) return cached;
|
|
98
|
+
|
|
99
|
+
const ordered: EnumLookupDescriptor[] = [];
|
|
100
|
+
const byField = createNullPrototypeRecord<EnumLookupDescriptor>();
|
|
101
|
+
for (const [fieldName, fieldSchema] of schema._columns) {
|
|
102
|
+
if (getSchemaType(fieldSchema) !== 'enum') continue;
|
|
103
|
+
const values = getEnumValues(fieldSchema);
|
|
104
|
+
if (!values || (typeof fieldSchema !== 'object' && typeof fieldSchema !== 'function') || fieldSchema === null) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const descriptor = createEnumLookupDescriptor(fieldName, fieldSchema, values);
|
|
108
|
+
ordered.push(descriptor);
|
|
109
|
+
byField[fieldName] = descriptor;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const descriptor =
|
|
113
|
+
ordered.length === 0
|
|
114
|
+
? EMPTY_ENUM_LOOKUP
|
|
115
|
+
: Object.freeze({
|
|
116
|
+
ordered: Object.freeze(ordered),
|
|
117
|
+
byField: Object.freeze(byField),
|
|
118
|
+
});
|
|
119
|
+
enumLookupBySchema.set(schema, descriptor);
|
|
120
|
+
return descriptor;
|
|
121
|
+
}
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
import { Column, type Table, tableFromColumns } from '@uwdata/flechette';
|
|
11
11
|
import type { CapacityStatsEntry } from './arrow/capacityStats.js';
|
|
12
|
+
import type { ArrowLease } from './arrow/lease.js';
|
|
12
13
|
import { cleanupDebug } from './cleanupDiagnostics.js';
|
|
13
|
-
import {
|
|
14
|
+
import { convertSpanTreeToLeasedArrowTable } from './convertToArrow.js';
|
|
14
15
|
import type { SpanBufferConstructor } from './spanBuffer.js';
|
|
15
16
|
import type { AnySpanBuffer, OpMetadata } from './types.js';
|
|
16
17
|
|
|
@@ -381,13 +382,16 @@ export class FlushScheduler {
|
|
|
381
382
|
|
|
382
383
|
// Convert all buffers to Arrow tables and concatenate
|
|
383
384
|
const tables: Table[] = [];
|
|
385
|
+
const leases: ArrowLease[] = [];
|
|
384
386
|
|
|
385
387
|
for (const buffer of buffersToFlush) {
|
|
386
388
|
try {
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
tables.push(table);
|
|
389
|
+
const lease = convertSpanTreeToLeasedArrowTable(buffer, undefined, modulesToLogStatsForConversion);
|
|
390
|
+
if (lease.table.numRows > 0) {
|
|
391
|
+
leases.push(lease);
|
|
392
|
+
tables.push(lease.table);
|
|
393
|
+
} else {
|
|
394
|
+
lease.release();
|
|
391
395
|
}
|
|
392
396
|
} catch (error) {
|
|
393
397
|
console.error('Error converting buffer to Arrow table:', error);
|
|
@@ -455,6 +459,8 @@ export class FlushScheduler {
|
|
|
455
459
|
pendingBuffers: this.buffers.size,
|
|
456
460
|
});
|
|
457
461
|
// Do NOT reset buffers on failure to avoid data loss
|
|
462
|
+
} finally {
|
|
463
|
+
for (const lease of leases) lease.release();
|
|
458
464
|
}
|
|
459
465
|
}
|
|
460
466
|
|