@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
|
@@ -15,9 +15,12 @@
|
|
|
15
15
|
*
|
|
16
16
|
* SpanLogger starts with _writeIndex = 1, so first _nextRow() makes it 2.
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { activeMaterializerMode, generateColumnWriterClass, } from '@smoothbricks/arrow-builder';
|
|
19
|
+
import { resolveEnumLookupDescriptor, } from '../enumMetadata.js';
|
|
20
|
+
import { decodeVocabularyMessage } from '../resolveMessage.js';
|
|
19
21
|
import { ENTRY_TYPE_DEBUG, ENTRY_TYPE_ERROR, ENTRY_TYPE_FF_ACCESS, ENTRY_TYPE_FF_USAGE, ENTRY_TYPE_INFO, ENTRY_TYPE_TRACE, ENTRY_TYPE_WARN, } from '../schema/systemSchema.js';
|
|
20
|
-
import {
|
|
22
|
+
import { getSchemaType } from '../schema/typeGuards.js';
|
|
23
|
+
import { materializeSpanLoggerClass, } from './spanLoggerClosureMaterializer.js';
|
|
21
24
|
// =============================================================================
|
|
22
25
|
// SINGLETON HELPERS OBJECT
|
|
23
26
|
// =============================================================================
|
|
@@ -28,6 +31,12 @@ import { getEnumValues, getSchemaType } from '../schema/typeGuards.js';
|
|
|
28
31
|
* Singleton - same object shared by all generated SpanLogger classes.
|
|
29
32
|
*/
|
|
30
33
|
export const SPAN_LOGGER_HELPERS = {
|
|
34
|
+
normalizeOperationalTemplate: (template) => {
|
|
35
|
+
if (template.indexOf('{{') === -1 && template.indexOf('}}') === -1)
|
|
36
|
+
return template;
|
|
37
|
+
return template.replaceAll('{{', '{').replaceAll('}}', '}');
|
|
38
|
+
},
|
|
39
|
+
decodeVocabularyMessage,
|
|
31
40
|
setNullBit: (bitmap, idx) => {
|
|
32
41
|
bitmap[idx >>> 3] |= 1 << (idx & 7);
|
|
33
42
|
},
|
|
@@ -126,35 +135,19 @@ export const SPAN_LOGGER_HELPERS = {
|
|
|
126
135
|
}
|
|
127
136
|
},
|
|
128
137
|
};
|
|
129
|
-
/**
|
|
130
|
-
* Generate enum value mapping code
|
|
131
|
-
* Creates a switch-case statement for compile-time enum mapping
|
|
132
|
-
*/
|
|
133
|
-
function generateEnumMapping(fieldName, enumValues) {
|
|
134
|
-
const cases = enumValues.map((value, index) => ` case ${JSON.stringify(value)}: return ${index};`).join('\n');
|
|
135
|
-
return `
|
|
136
|
-
function getEnumIndex_${fieldName}(value) {
|
|
137
|
-
switch(value) {
|
|
138
|
-
${cases}
|
|
139
|
-
default: return 0;
|
|
140
|
-
}
|
|
141
|
-
}`;
|
|
142
|
-
}
|
|
143
138
|
/**
|
|
144
139
|
* Generate override fluent setters for enum fields.
|
|
145
140
|
* These convert string values to numeric indices before writing to the buffer.
|
|
146
141
|
* The buffer expects numeric indices (after the enum map removal change).
|
|
147
142
|
*/
|
|
148
|
-
function generateEnumFluentSetters(
|
|
143
|
+
function generateEnumFluentSetters(enumFields, enumEncoderNames) {
|
|
149
144
|
const setters = [];
|
|
150
|
-
for (const fieldName of
|
|
145
|
+
for (const { fieldName } of enumFields) {
|
|
146
|
+
const encoderName = enumEncoderNames[fieldName];
|
|
151
147
|
setters.push(`
|
|
152
|
-
/**
|
|
153
|
-
* Override fluent setter for ${fieldName} to convert string → index.
|
|
154
|
-
* Buffer expects numeric index, not string value.
|
|
155
|
-
*/
|
|
148
|
+
/** Convert the declared enum string to its schema-order index. */
|
|
156
149
|
${fieldName}(value) {
|
|
157
|
-
const idx =
|
|
150
|
+
const idx = ${encoderName}(value);
|
|
158
151
|
this._buffer.${fieldName}(this._writeIndex, idx);
|
|
159
152
|
return this;
|
|
160
153
|
}`);
|
|
@@ -199,7 +192,7 @@ function generateSetScopeMethod() {
|
|
|
199
192
|
* pattern of temporarily switching this._buffer for prefill then switching back.
|
|
200
193
|
* Called by _checkOverflow after getting overflow buffer.
|
|
201
194
|
*/
|
|
202
|
-
function generatePrefillScopedAttributesMethod(schemaFields,
|
|
195
|
+
function generatePrefillScopedAttributesMethod(schemaFields, enumEncoderNames) {
|
|
203
196
|
const columnFills = schemaFields.map(([fieldName, fieldSchema]) => {
|
|
204
197
|
const columnName = fieldName;
|
|
205
198
|
const lmaoType = getSchemaType(fieldSchema);
|
|
@@ -220,8 +213,9 @@ function generatePrefillScopedAttributesMethod(schemaFields, enumFieldNames) {
|
|
|
220
213
|
}
|
|
221
214
|
// Value processing based on type
|
|
222
215
|
let valueExpr = 'scopeValue';
|
|
223
|
-
|
|
224
|
-
|
|
216
|
+
const enumEncoderName = enumEncoderNames[fieldName];
|
|
217
|
+
if (lmaoType === 'enum' && enumEncoderName !== undefined) {
|
|
218
|
+
valueExpr = `${enumEncoderName}(scopeValue)`;
|
|
225
219
|
}
|
|
226
220
|
// For string arrays (category/text), use manual loop instead of fill()
|
|
227
221
|
if (lmaoType === 'category' || lmaoType === 'text') {
|
|
@@ -261,25 +255,36 @@ function generatePrefillScopedAttributesMethod(schemaFields, enumFieldNames) {
|
|
|
261
255
|
/**
|
|
262
256
|
* Build the extension for SpanLogger that extends ColumnWriter
|
|
263
257
|
*/
|
|
264
|
-
function buildSpanLoggerExtension(schema) {
|
|
258
|
+
function buildSpanLoggerExtension(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns, enumLookup) {
|
|
265
259
|
const schemaFields = schema._columns;
|
|
266
|
-
|
|
267
|
-
const
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const
|
|
271
|
-
|
|
272
|
-
if (lmaoType === 'enum' && enumValues) {
|
|
273
|
-
enumMappings.push(generateEnumMapping(fieldName, enumValues));
|
|
274
|
-
enumFieldNames.add(fieldName);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
260
|
+
const enumEncoderNames = Object.create(null);
|
|
261
|
+
const enumEncoderBindings = enumLookup.ordered.map(({ fieldName }, index) => {
|
|
262
|
+
const encoderName = `encodeEnum${index}`;
|
|
263
|
+
enumEncoderNames[fieldName] = encoderName;
|
|
264
|
+
return ` const ${encoderName} = enumLookup.byField[${JSON.stringify(fieldName)}].encode;`;
|
|
265
|
+
});
|
|
277
266
|
// Generate methods
|
|
278
267
|
const setScopeMethod = generateSetScopeMethod();
|
|
279
|
-
const prefillMethod = generatePrefillScopedAttributesMethod(schemaFields,
|
|
280
|
-
const enumFluentSetters = generateEnumFluentSetters(
|
|
268
|
+
const prefillMethod = generatePrefillScopedAttributesMethod(schemaFields, enumEncoderNames);
|
|
269
|
+
const enumFluentSetters = generateEnumFluentSetters(enumLookup.ordered, enumEncoderNames);
|
|
270
|
+
const staticMessageWrite = (entryType) => {
|
|
271
|
+
switch (messagePhysicalLayout) {
|
|
272
|
+
case 'current':
|
|
273
|
+
return `const localMessageId = this._state._physicalLayoutPlan.encodeLocalMessage(vocabularyIndex);
|
|
274
|
+
if (localMessageId === 0) {
|
|
275
|
+
this._buffer.message_values[idx] = helpers.decodeVocabularyMessage(this._buffer._vocabularyGeneration, vocabularyIndex);
|
|
276
|
+
} else {
|
|
277
|
+
this._buffer._messageIds[idx] = localMessageId;
|
|
278
|
+
}`;
|
|
279
|
+
case 'specialized':
|
|
280
|
+
return 'this._buffer._logHeaders[idx] = vocabularyIndex + 1;';
|
|
281
|
+
case 'packed':
|
|
282
|
+
return `if (vocabularyIndex > 0x00fffffe) throw new RangeError('Packed message dense index exceeds 0xFFFFFE');
|
|
283
|
+
this._buffer._rowHeaders[idx] = ((((vocabularyIndex + 1) << 8) | ${entryType}) >>> 0);`;
|
|
284
|
+
}
|
|
285
|
+
};
|
|
281
286
|
return {
|
|
282
|
-
|
|
287
|
+
preallocatedColumns: eagerColumns,
|
|
283
288
|
// Entry type constants (inlined from lmao.ts)
|
|
284
289
|
classPreamble: `
|
|
285
290
|
const ENTRY_TYPE_INFO = ${ENTRY_TYPE_INFO};
|
|
@@ -289,106 +294,87 @@ function buildSpanLoggerExtension(schema) {
|
|
|
289
294
|
const ENTRY_TYPE_TRACE = ${ENTRY_TYPE_TRACE};
|
|
290
295
|
const ENTRY_TYPE_FF_ACCESS = ${ENTRY_TYPE_FF_ACCESS};
|
|
291
296
|
const ENTRY_TYPE_FF_USAGE = ${ENTRY_TYPE_FF_USAGE};
|
|
292
|
-
|
|
293
|
-
${enumMappings.join('\n')}
|
|
297
|
+
${enumEncoderBindings.join('\n')}
|
|
294
298
|
`,
|
|
295
|
-
|
|
296
|
-
//
|
|
297
|
-
//
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
// We just need to switch this._buffer and prefill scope on the new buffer.
|
|
306
|
-
methods: `_checkOverflow() {
|
|
307
|
-
if (this._buffer._writeIndex >= this._buffer._capacity) {
|
|
308
|
-
this._buffer = this._buffer.getOrCreateOverflow();
|
|
309
|
-
this._prefillScopedAttributesOn(this._buffer);
|
|
299
|
+
methods:
|
|
300
|
+
// The optional fields argument is the untransformed fallback. JavaScript evaluates
|
|
301
|
+
// the receiver, template, and object initializers before this method runs. Lowered
|
|
302
|
+
// calls use _infoTemplate/_warnTemplate/_errorTemplate plus direct setters instead.
|
|
303
|
+
// Context-owned append advances the shared active buffer and returns the literal row.
|
|
304
|
+
`info(message, fields) {
|
|
305
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_INFO);
|
|
306
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Dynamic log write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = helpers.normalizeOperationalTemplate(message);'}
|
|
307
|
+
if (fields !== undefined) {
|
|
308
|
+
this.with(fields);
|
|
310
309
|
}
|
|
310
|
+
return this;
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
// We sync this._writeIndex so fluent setters write at correct row.
|
|
317
|
-
`info(message) {
|
|
318
|
-
this._checkOverflow();
|
|
319
|
-
const idx = this._buffer._traceRoot.writeLogEntry(this._buffer, ENTRY_TYPE_INFO);
|
|
320
|
-
this._writeIndex = idx;
|
|
321
|
-
if (this._buffer.message_values) {
|
|
322
|
-
this._buffer.message_values[idx] = message;
|
|
323
|
-
if (this._buffer.message_nulls) {
|
|
324
|
-
helpers.setNullBit(this._buffer.message_nulls, idx);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
this._buffer.constructor.stats.totalWrites++;
|
|
313
|
+
_infoTemplate(vocabularyIndex) {
|
|
314
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_INFO);
|
|
315
|
+
${messageLayoutFamily === 'dynamic-only' ? `throw new TypeError('Static log write reached a dynamic-only callsite plan');` : staticMessageWrite(ENTRY_TYPE_INFO)}
|
|
328
316
|
return this;
|
|
329
317
|
}
|
|
330
318
|
|
|
331
319
|
` +
|
|
332
320
|
// Write a debug log entry.
|
|
333
321
|
`debug(message) {
|
|
334
|
-
this.
|
|
335
|
-
|
|
336
|
-
this
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
this._buffer.constructor.stats.totalWrites++;
|
|
322
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_DEBUG);
|
|
323
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Dynamic log write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = message;'}
|
|
324
|
+
return this;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
_debugTemplate(vocabularyIndex) {
|
|
328
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_DEBUG);
|
|
329
|
+
${messageLayoutFamily === 'dynamic-only' ? `throw new TypeError('Static log write reached a dynamic-only callsite plan');` : staticMessageWrite(ENTRY_TYPE_DEBUG)}
|
|
344
330
|
return this;
|
|
345
331
|
}
|
|
346
332
|
|
|
347
333
|
` +
|
|
348
334
|
// Write a warn log entry.
|
|
349
|
-
`warn(message) {
|
|
350
|
-
this.
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
this._buffer.message_values[idx] = message;
|
|
355
|
-
if (this._buffer.message_nulls) {
|
|
356
|
-
helpers.setNullBit(this._buffer.message_nulls, idx);
|
|
357
|
-
}
|
|
335
|
+
`warn(message, fields) {
|
|
336
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_WARN);
|
|
337
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Dynamic log write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = helpers.normalizeOperationalTemplate(message);'}
|
|
338
|
+
if (fields !== undefined) {
|
|
339
|
+
this.with(fields);
|
|
358
340
|
}
|
|
359
|
-
this
|
|
341
|
+
return this;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
_warnTemplate(vocabularyIndex) {
|
|
345
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_WARN);
|
|
346
|
+
${messageLayoutFamily === 'dynamic-only' ? `throw new TypeError('Static log write reached a dynamic-only callsite plan');` : staticMessageWrite(ENTRY_TYPE_WARN)}
|
|
360
347
|
return this;
|
|
361
348
|
}
|
|
362
349
|
|
|
363
350
|
` +
|
|
364
351
|
// Write an error log entry.
|
|
365
|
-
`error(message) {
|
|
366
|
-
this.
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
this._buffer.message_values[idx] = message;
|
|
371
|
-
if (this._buffer.message_nulls) {
|
|
372
|
-
helpers.setNullBit(this._buffer.message_nulls, idx);
|
|
373
|
-
}
|
|
352
|
+
`error(message, fields) {
|
|
353
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_ERROR);
|
|
354
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Dynamic log write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = helpers.normalizeOperationalTemplate(message);'}
|
|
355
|
+
if (fields !== undefined) {
|
|
356
|
+
this.with(fields);
|
|
374
357
|
}
|
|
375
|
-
this
|
|
358
|
+
return this;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
_errorTemplate(vocabularyIndex) {
|
|
362
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_ERROR);
|
|
363
|
+
${messageLayoutFamily === 'dynamic-only' ? `throw new TypeError('Static log write reached a dynamic-only callsite plan');` : staticMessageWrite(ENTRY_TYPE_ERROR)}
|
|
376
364
|
return this;
|
|
377
365
|
}
|
|
378
366
|
|
|
379
367
|
` +
|
|
380
368
|
// Write a trace log entry.
|
|
381
369
|
`trace(message) {
|
|
382
|
-
this.
|
|
383
|
-
|
|
384
|
-
this
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
}
|
|
391
|
-
this._buffer.constructor.stats.totalWrites++;
|
|
370
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_TRACE);
|
|
371
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Dynamic log write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = message;'}
|
|
372
|
+
return this;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
_traceTemplate(vocabularyIndex) {
|
|
376
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_TRACE);
|
|
377
|
+
${messageLayoutFamily === 'dynamic-only' ? `throw new TypeError('Static log write reached a dynamic-only callsite plan');` : staticMessageWrite(ENTRY_TYPE_TRACE)}
|
|
392
378
|
return this;
|
|
393
379
|
}
|
|
394
380
|
|
|
@@ -412,15 +398,8 @@ function buildSpanLoggerExtension(schema) {
|
|
|
412
398
|
// Write a feature flag access entry (internal method, not on public type).
|
|
413
399
|
// Called by FeatureFlagEvaluator to log flag access.
|
|
414
400
|
`ffAccess(flagName, value) {
|
|
415
|
-
this.
|
|
416
|
-
|
|
417
|
-
this._writeIndex = idx;
|
|
418
|
-
if (this._buffer.message_values) {
|
|
419
|
-
this._buffer.message_values[idx] = flagName;
|
|
420
|
-
if (this._buffer.message_nulls) {
|
|
421
|
-
helpers.setNullBit(this._buffer.message_nulls, idx);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
401
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_FF_ACCESS);
|
|
402
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Feature flag write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = flagName;'}
|
|
424
403
|
if (this._buffer.ff_value_values) {
|
|
425
404
|
const strValue = value === null || value === undefined ? 'null' : String(value);
|
|
426
405
|
this._buffer.ff_value_values[idx] = strValue;
|
|
@@ -428,23 +407,14 @@ function buildSpanLoggerExtension(schema) {
|
|
|
428
407
|
helpers.setNullBit(this._buffer.ff_value_nulls, idx);
|
|
429
408
|
}
|
|
430
409
|
}
|
|
431
|
-
this._buffer.constructor.stats.totalWrites++;
|
|
432
410
|
}
|
|
433
411
|
|
|
434
412
|
` +
|
|
435
413
|
// Write a feature flag usage entry (internal method, not on public type).
|
|
436
414
|
// Called by FeatureFlagEvaluator to log flag usage.
|
|
437
415
|
`ffUsage(flagName, context) {
|
|
438
|
-
this.
|
|
439
|
-
|
|
440
|
-
this._writeIndex = idx;
|
|
441
|
-
if (this._buffer.message_values) {
|
|
442
|
-
this._buffer.message_values[idx] = flagName;
|
|
443
|
-
if (this._buffer.message_nulls) {
|
|
444
|
-
helpers.setNullBit(this._buffer.message_nulls, idx);
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
this._buffer.constructor.stats.totalWrites++;
|
|
416
|
+
const idx = this._state._appendWriterEntry(ENTRY_TYPE_FF_USAGE);
|
|
417
|
+
${messageLayoutFamily === 'static-only' ? `throw new TypeError('Feature flag write reached a static-only callsite plan');` : 'this._buffer.message_values[idx] = flagName;'}
|
|
448
418
|
if (context) {
|
|
449
419
|
this.with(context);
|
|
450
420
|
}
|
|
@@ -527,6 +497,7 @@ function buildSpanLoggerExtension(schema) {
|
|
|
527
497
|
// Use singleton helpers object (created once at module load)
|
|
528
498
|
dependencies: {
|
|
529
499
|
helpers: SPAN_LOGGER_HELPERS,
|
|
500
|
+
enumLookup,
|
|
530
501
|
},
|
|
531
502
|
};
|
|
532
503
|
}
|
|
@@ -537,43 +508,78 @@ const spanLoggerClassCache = new WeakMap();
|
|
|
537
508
|
function isSpanLoggerConstructor(value) {
|
|
538
509
|
return typeof value === 'function';
|
|
539
510
|
}
|
|
511
|
+
function generateStateBoundSpanLoggerClass(schema, extension) {
|
|
512
|
+
const source = generateColumnWriterClass(schema, 'GeneratedSpanLogger', extension);
|
|
513
|
+
const constructorStart = source.indexOf(' constructor(buffer) {');
|
|
514
|
+
const firstSetter = schema._columnNames[0];
|
|
515
|
+
const methodsStart = source.indexOf(firstSetter === undefined ? '\n info(message, fields) {' : `\n ${firstSetter}(value) {`, constructorStart);
|
|
516
|
+
if (constructorStart < 0 || methodsStart < 0) {
|
|
517
|
+
throw new Error('Failed to locate generated SpanLogger class boundaries');
|
|
518
|
+
}
|
|
519
|
+
const stateConstructor = ' constructor(state) {\n this._state = state;\n }\n';
|
|
520
|
+
return (source.slice(0, constructorStart) + stateConstructor + source.slice(methodsStart + 1))
|
|
521
|
+
.replaceAll('this._buffer', 'this._state._buffer')
|
|
522
|
+
.replaceAll('this._writeIndex', '(this._state._buffer._writeIndex - 1)');
|
|
523
|
+
}
|
|
524
|
+
/** Compiled materializer: render class source and evaluate it with `new Function`. */
|
|
525
|
+
function compileSpanLoggerClass(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns, enumLookup) {
|
|
526
|
+
const extension = buildSpanLoggerExtension(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns, enumLookup);
|
|
527
|
+
const classCode = generateStateBoundSpanLoggerClass(schema, extension).trim();
|
|
528
|
+
return new Function('helpers', 'enumLookup', classCode)(SPAN_LOGGER_HELPERS, enumLookup);
|
|
529
|
+
}
|
|
540
530
|
/**
|
|
541
|
-
*
|
|
542
|
-
*
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
531
|
+
* Schema/config -> pure-data plan consumed by the closure-composed (no-eval)
|
|
532
|
+
* materializer. Mirrors the inputs the compiled renderer bakes into source:
|
|
533
|
+
* per-column access mode (arrow-builder's buildColumnAccessorPlan semantics),
|
|
534
|
+
* layout family/physical layout, and the injected singleton dependencies.
|
|
535
|
+
*/
|
|
536
|
+
function buildSpanLoggerPlan(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns, enumLookup) {
|
|
537
|
+
const preallocated = new Set(eagerColumns);
|
|
538
|
+
const columns = schema._columns.map(([fieldName, fieldSchema]) => {
|
|
539
|
+
const isEager = typeof fieldSchema === 'object' && fieldSchema !== null && Reflect.get(fieldSchema, '__eager') === true;
|
|
540
|
+
const mode = isEager ? 'eager' : preallocated.has(fieldName) ? 'preallocated' : 'lazy';
|
|
541
|
+
return { name: fieldName, schemaType: getSchemaType(fieldSchema), mode };
|
|
542
|
+
});
|
|
543
|
+
return {
|
|
544
|
+
columns,
|
|
545
|
+
messageLayoutFamily,
|
|
546
|
+
messagePhysicalLayout,
|
|
547
|
+
helpers: SPAN_LOGGER_HELPERS,
|
|
548
|
+
enumLookup,
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Create the state-only SpanLogger constructor selected for one schema/layout family.
|
|
548
553
|
*
|
|
549
|
-
*
|
|
554
|
+
* Selects the materializer via activeMaterializerMode(): the compiled renderer
|
|
555
|
+
* (string codegen) where `new Function` is allowed, the closure-composed
|
|
556
|
+
* materializer where it is forbidden (e.g. workerd). Cache keys are
|
|
557
|
+
* mode-prefixed so a forced override never returns the other mode's class.
|
|
550
558
|
*/
|
|
551
|
-
export function createSpanLoggerClass(schema) {
|
|
552
|
-
|
|
553
|
-
|
|
559
|
+
export function createSpanLoggerClass(schema, messageLayoutFamily = 'mixed', messagePhysicalLayout = 'current', eagerColumns = [], enumLookup = resolveEnumLookupDescriptor(schema)) {
|
|
560
|
+
const mode = activeMaterializerMode();
|
|
561
|
+
const cacheKey = `${mode}:${messageLayoutFamily}:${messagePhysicalLayout}:${eagerColumns.join('\u0000')}`;
|
|
562
|
+
let familyClasses = spanLoggerClassCache.get(schema);
|
|
563
|
+
let SpanLoggerClass = familyClasses?.get(cacheKey);
|
|
554
564
|
if (!SpanLoggerClass) {
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
565
|
+
SpanLoggerClass =
|
|
566
|
+
mode === 'compiled'
|
|
567
|
+
? compileSpanLoggerClass(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns, enumLookup)
|
|
568
|
+
: materializeSpanLoggerClass(buildSpanLoggerPlan(schema, messageLayoutFamily, messagePhysicalLayout, eagerColumns, enumLookup));
|
|
559
569
|
if (!isSpanLoggerConstructor(SpanLoggerClass)) {
|
|
560
570
|
throw new Error('Failed to generate SpanLogger constructor');
|
|
561
571
|
}
|
|
562
|
-
|
|
572
|
+
familyClasses ??= new Map();
|
|
573
|
+
familyClasses.set(cacheKey, SpanLoggerClass);
|
|
574
|
+
spanLoggerClassCache.set(schema, familyClasses);
|
|
563
575
|
}
|
|
564
576
|
if (!isSpanLoggerConstructor(SpanLoggerClass)) {
|
|
565
577
|
throw new Error('Invalid cached SpanLogger constructor');
|
|
566
578
|
}
|
|
567
579
|
return SpanLoggerClass;
|
|
568
580
|
}
|
|
569
|
-
/**
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
* @param schema - Tag attribute schema
|
|
573
|
-
* @param buffer - SpanBuffer to write to
|
|
574
|
-
*/
|
|
575
|
-
export function createSpanLogger(schema, buffer) {
|
|
576
|
-
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
577
|
-
return new SpanLoggerClass(buffer);
|
|
581
|
+
/** Create a SpanLogger bound to an existing SpanContext writer state. */
|
|
582
|
+
export function createSpanLogger(schema, state) {
|
|
583
|
+
return new (createSpanLoggerClass(schema))(state);
|
|
578
584
|
}
|
|
579
585
|
//#endregion smoo/lmao!n/codegen-spanlogger
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { Column, type Table } from '@uwdata/flechette';
|
|
11
11
|
import { type CapacityStatsEntry } from './arrow/capacityStats.js';
|
|
12
|
+
import { type ArrowLease } from './arrow/lease.js';
|
|
12
13
|
import type { LogSchema } from './schema/types.js';
|
|
13
14
|
import type { AnySpanBuffer } from './types.js';
|
|
14
15
|
type BuiltMetadataColumns = {
|
|
@@ -23,11 +24,13 @@ export type SystemColumnBuilder = (buffer: AnySpanBuffer, buffers: AnySpanBuffer
|
|
|
23
24
|
* Dictionaries are built from the data in this batch only and are not shared
|
|
24
25
|
* with other batches, even when combined into a Table.
|
|
25
26
|
*/
|
|
26
|
-
export declare function convertToTable(buffer: AnySpanBuffer, systemColumnBuilder?: SystemColumnBuilder): Table;
|
|
27
|
+
export declare function convertToTable(buffer: AnySpanBuffer, systemColumnBuilder?: SystemColumnBuilder, borrowChunks?: boolean): Table;
|
|
27
28
|
/**
|
|
28
29
|
* Convert SpanBuffer (and its overflow chain) to Arrow Table
|
|
29
30
|
*/
|
|
30
31
|
export declare function convertToArrowTable<_T extends LogSchema = LogSchema>(buffer: AnySpanBuffer, systemColumnBuilder?: SystemColumnBuilder): Table;
|
|
32
|
+
/** Borrow JS physical Arrow chunks until the returned lease is released. */
|
|
33
|
+
export declare function convertToLeasedArrowTable(buffer: AnySpanBuffer, systemColumnBuilder?: SystemColumnBuilder): ArrowLease;
|
|
31
34
|
/**
|
|
32
35
|
* Convert SpanBuffer tree to Arrow Table
|
|
33
36
|
*
|
|
@@ -35,6 +38,8 @@ export declare function convertToArrowTable<_T extends LogSchema = LogSchema>(bu
|
|
|
35
38
|
* - Pass 1: Walk tree, build dictionaries (collect unique strings, cache UTF-8)
|
|
36
39
|
* - Pass 2: Walk tree, convert each buffer to a table using shared dictionaries
|
|
37
40
|
*/
|
|
38
|
-
export declare function convertSpanTreeToArrowTable(rootBuffer: AnySpanBuffer, _systemColumnBuilder?: SystemColumnBuilder, modulesToLogStats?: CapacityStatsEntry[], periodStartNs?: bigint): Table;
|
|
41
|
+
export declare function convertSpanTreeToArrowTable(rootBuffer: AnySpanBuffer, _systemColumnBuilder?: SystemColumnBuilder, modulesToLogStats?: CapacityStatsEntry[], periodStartNs?: bigint, borrowChunks?: boolean): Table;
|
|
42
|
+
/** Convert a logical trace tree while pinning every borrowed physical chunk. */
|
|
43
|
+
export declare function convertSpanTreeToLeasedArrowTable(rootBuffer: AnySpanBuffer, systemColumnBuilder?: SystemColumnBuilder, modulesToLogStats?: CapacityStatsEntry[], periodStartNs?: bigint): ArrowLease;
|
|
39
44
|
export {};
|
|
40
45
|
//# sourceMappingURL=convertToArrow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToArrow.d.ts","sourceRoot":"","sources":["../../src/lib/convertToArrow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"convertToArrow.d.ts","sourceRoot":"","sources":["../../src/lib/convertToArrow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,EAIL,MAAM,EAMN,KAAK,KAAK,EASX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,kBAAkB,EAA4B,MAAM,0BAA0B,CAAC;AAQ7F,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAyBrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAQ5D,KAAK,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;CAAE,CAAC;AAI7E,MAAM,MAAM,mBAAmB,GAAG,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,EAAE,EACxB,SAAS,EAAE,MAAM,KACd,oBAAoB,CAAC;AAyqB1B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,UAAQ,GACnB,KAAK,CAQP;AAgbD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,SAAS,GAAG,SAAS,EAClE,MAAM,EAAE,aAAa,EACrB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,KAAK,CAIP;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,UAAU,CAWZ;AAMD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,aAAa,EACzB,oBAAoB,CAAC,EAAE,mBAAmB,EAC1C,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,EACxC,aAAa,CAAC,EAAE,MAAM,EACtB,YAAY,UAAQ,GACnB,KAAK,CA4OP;AAED,gFAAgF;AAChF,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,aAAa,EACzB,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,iBAAiB,CAAC,EAAE,kBAAkB,EAAE,EACxC,aAAa,CAAC,EAAE,MAAM,GACrB,UAAU,CAQZ"}
|