@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
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
import { intern, PreEncodedEntry } from '@smoothbricks/arrow-builder';
|
|
11
11
|
import { Op as OpClass } from '../op.js';
|
|
12
|
+
import { resolveEagerColumns } from '../physicalLayoutPlan.js';
|
|
13
|
+
import { runtimeHintMessageLayoutFamily, runtimeHintMessagePhysicalLayout } from '../runtimeHint.js';
|
|
12
14
|
import { getSpanBufferClass } from '../spanBuffer.js';
|
|
13
15
|
import type { OpGroup, OpGroupOps } from './opGroupTypes.js';
|
|
14
|
-
import type { Op, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
16
|
+
import type { Op, OpCompileMetadata, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
15
17
|
import type { OpContext } from './types.js';
|
|
16
18
|
|
|
17
19
|
//#region smoo/lmao!n/metadata-injection
|
|
@@ -57,6 +59,31 @@ export function createOpMetadata(
|
|
|
57
59
|
*/
|
|
58
60
|
export const DEFAULT_METADATA: OpMetadata = createOpMetadata('unknown', 'unknown', 'unknown', 'unknown', 0);
|
|
59
61
|
|
|
62
|
+
const DEFAULT_COMPILE_METADATA: OpCompileMetadata = Object.freeze({
|
|
63
|
+
runtimeHint: 0,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const EMPTY_EAGER_COLUMNS: readonly string[] = Object.freeze([]);
|
|
67
|
+
const EMPTY_LOCAL_MESSAGE_DICTIONARY: readonly number[] = Object.freeze([]);
|
|
68
|
+
|
|
69
|
+
function normalizeCompileMetadata(compileMetadata?: OpCompileMetadata): OpCompileMetadata {
|
|
70
|
+
if (compileMetadata === undefined) return DEFAULT_COMPILE_METADATA;
|
|
71
|
+
const eagerColumns = compileMetadata.eagerColumns;
|
|
72
|
+
const localMessageDictionary = compileMetadata.localMessageDictionary;
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
runtimeHint: compileMetadata.runtimeHint,
|
|
75
|
+
eagerColumns:
|
|
76
|
+
eagerColumns === undefined || eagerColumns.length === 0
|
|
77
|
+
? EMPTY_EAGER_COLUMNS
|
|
78
|
+
: Object.freeze([...new Set(eagerColumns)]),
|
|
79
|
+
localMessageDictionary:
|
|
80
|
+
localMessageDictionary === undefined || localMessageDictionary.length === 0
|
|
81
|
+
? EMPTY_LOCAL_MESSAGE_DICTIONARY
|
|
82
|
+
: Object.freeze([...localMessageDictionary]),
|
|
83
|
+
materializeSpanBufferClass: compileMetadata.materializeSpanBufferClass,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
60
87
|
// =============================================================================
|
|
61
88
|
// STACK TRACE METADATA EXTRACTION
|
|
62
89
|
// =============================================================================
|
|
@@ -173,7 +200,7 @@ type CreateOpGroupFn<Ctx extends OpContext> = <Ops extends OpGroupOps<Ctx>>(
|
|
|
173
200
|
* - metadata: includes name + merged with defaults
|
|
174
201
|
* - SpanBufferClass: from getSpanBufferClass(logSchema) - has static schema + stats
|
|
175
202
|
* - fn(ctx, ...args): the user function to execute
|
|
176
|
-
* -
|
|
203
|
+
* - remapDescriptor: undefined for original ops (set by .prefix()/.mapColumns())
|
|
177
204
|
*
|
|
178
205
|
* @template Ctx - Bundled OpContext (logSchema, flags, deps, userCtx)
|
|
179
206
|
* @param factoryConfig - Configuration containing logSchema and flags
|
|
@@ -185,21 +212,39 @@ export function createDefineOp<Ctx extends OpContext>(
|
|
|
185
212
|
name: string,
|
|
186
213
|
fn: OpFn<Ctx, Args, S, E>,
|
|
187
214
|
metadata?: Partial<OpMetadata>,
|
|
215
|
+
compileMetadata?: OpCompileMetadata,
|
|
188
216
|
) => Op<Ctx, Args, S, E> {
|
|
189
|
-
// Why get class from schema: Class has static schema + stats shared by all instances
|
|
190
|
-
const SpanBufferClass = getSpanBufferClass(factoryConfig.logSchema);
|
|
191
|
-
|
|
192
217
|
return function defineOpImpl<Args extends unknown[], S, E>(
|
|
193
218
|
name: string,
|
|
194
219
|
fn: OpFn<Ctx, Args, S, E>,
|
|
195
220
|
metadata?: Partial<OpMetadata>,
|
|
221
|
+
compileMetadata?: OpCompileMetadata,
|
|
196
222
|
): Op<Ctx, Args, S, E> {
|
|
223
|
+
const normalizedCompileMetadata = normalizeCompileMetadata(compileMetadata);
|
|
224
|
+
normalizedCompileMetadata.materializeSpanBufferClass?.(factoryConfig.logSchema);
|
|
225
|
+
const eagerColumns = resolveEagerColumns(
|
|
226
|
+
factoryConfig.logSchema,
|
|
227
|
+
normalizedCompileMetadata.eagerColumns ?? EMPTY_EAGER_COLUMNS,
|
|
228
|
+
);
|
|
229
|
+
const messageLayoutFamily = runtimeHintMessageLayoutFamily(normalizedCompileMetadata.runtimeHint);
|
|
230
|
+
const messagePhysicalLayout = runtimeHintMessagePhysicalLayout(normalizedCompileMetadata.runtimeHint);
|
|
231
|
+
const SelectedSpanBufferClass = getSpanBufferClass(
|
|
232
|
+
factoryConfig.logSchema,
|
|
233
|
+
messageLayoutFamily,
|
|
234
|
+
messagePhysicalLayout,
|
|
235
|
+
eagerColumns,
|
|
236
|
+
);
|
|
237
|
+
|
|
197
238
|
// When transformer is not installed, extract metadata from stack trace
|
|
198
239
|
// This provides useful file/line info for debugging even without build-time injection
|
|
199
240
|
// skipFrames=3: Error -> extractMetadataFromStack -> defineOpImpl -> caller
|
|
200
241
|
const baseMetadata = metadata?.package_file ? DEFAULT_METADATA : extractMetadataFromStack(3);
|
|
201
242
|
// Use name from: 1) explicit metadata.name (transformer), 2) defineOp('name', fn), 3) baseMetadata
|
|
202
|
-
const finalMetadata = {
|
|
243
|
+
const finalMetadata: OpMetadata = {
|
|
244
|
+
...baseMetadata,
|
|
245
|
+
...metadata,
|
|
246
|
+
name: metadata?.name ?? name,
|
|
247
|
+
};
|
|
203
248
|
|
|
204
249
|
// Use the Op class which handles all span/buffer management:
|
|
205
250
|
// - Creates SpanBuffer for the op
|
|
@@ -207,9 +252,18 @@ export function createDefineOp<Ctx extends OpContext>(
|
|
|
207
252
|
// - Sets _opMetadata and _callsiteMetadata
|
|
208
253
|
// - Writes span-start/span-ok/span-err entries
|
|
209
254
|
// - Handles exceptions with span-exception
|
|
210
|
-
// Why
|
|
211
|
-
//
|
|
212
|
-
return new OpClass(
|
|
255
|
+
// Why SelectedSpanBufferClass: Ops with the same physical layout share one constructor and stats object.
|
|
256
|
+
// Base Ops have no remap descriptor; mapped OpGroups bind one during startup cloning.
|
|
257
|
+
return new OpClass(
|
|
258
|
+
finalMetadata,
|
|
259
|
+
SelectedSpanBufferClass,
|
|
260
|
+
fn,
|
|
261
|
+
undefined,
|
|
262
|
+
factoryConfig.opContextBinding,
|
|
263
|
+
normalizedCompileMetadata.runtimeHint,
|
|
264
|
+
normalizedCompileMetadata.eagerColumns ?? EMPTY_EAGER_COLUMNS,
|
|
265
|
+
normalizedCompileMetadata.localMessageDictionary ?? EMPTY_LOCAL_MESSAGE_DICTIONARY,
|
|
266
|
+
);
|
|
213
267
|
};
|
|
214
268
|
}
|
|
215
269
|
|
|
@@ -258,20 +312,43 @@ export function createDefineOps<Ctx extends OpContext>(
|
|
|
258
312
|
createOpGroup: CreateOpGroupFn<Ctx>,
|
|
259
313
|
): <Defs extends Record<string, Op<Ctx, unknown[], unknown, unknown> | OpFn<Ctx, unknown[], unknown, unknown>>>(
|
|
260
314
|
definitions: Defs & ThisType<OpsFromRecord<Ctx, Defs>>,
|
|
315
|
+
compileMetadataByKey?: Partial<Record<keyof Defs, OpCompileMetadata>>,
|
|
261
316
|
) => OpGroup<Ctx, OpsFromRecord<Ctx, Defs>> {
|
|
262
317
|
// Get the defineOp function for wrapping raw functions
|
|
263
318
|
const defineOp = createDefineOp<Ctx>(factoryConfig);
|
|
264
319
|
|
|
265
320
|
return function defineOpsImpl<
|
|
266
321
|
Defs extends Record<string, Op<Ctx, unknown[], unknown, unknown> | OpFn<Ctx, unknown[], unknown, unknown>>,
|
|
267
|
-
>(
|
|
322
|
+
>(
|
|
323
|
+
definitions: Defs & ThisType<OpsFromRecord<Ctx, Defs>>,
|
|
324
|
+
compileMetadataByKey?: Partial<Record<keyof Defs, OpCompileMetadata>>,
|
|
325
|
+
): OpGroup<Ctx, OpsFromRecord<Ctx, Defs>> {
|
|
268
326
|
// Build the ops record by processing each definition.
|
|
269
327
|
// Keep the runtime container broad, then narrow once we've populated every key.
|
|
270
328
|
const ops: Record<string, Op<Ctx, unknown[], unknown, unknown>> = {};
|
|
271
329
|
|
|
272
330
|
for (const name in definitions) {
|
|
273
331
|
const def = definitions[name];
|
|
274
|
-
|
|
332
|
+
const compileMetadata = compileMetadataByKey?.[name];
|
|
333
|
+
if (isOp<Ctx>(def)) {
|
|
334
|
+
if (compileMetadata === undefined) {
|
|
335
|
+
ops[name] = def;
|
|
336
|
+
} else {
|
|
337
|
+
const normalizedCompileMetadata = normalizeCompileMetadata(compileMetadata);
|
|
338
|
+
ops[name] = new OpClass(
|
|
339
|
+
def.metadata,
|
|
340
|
+
def.callsitePlan.SpanBufferClass,
|
|
341
|
+
def.fn,
|
|
342
|
+
def.callsitePlan.remapDescriptor ?? undefined,
|
|
343
|
+
def._opContextBinding,
|
|
344
|
+
normalizedCompileMetadata.runtimeHint,
|
|
345
|
+
normalizedCompileMetadata.eagerColumns ?? EMPTY_EAGER_COLUMNS,
|
|
346
|
+
normalizedCompileMetadata.localMessageDictionary ?? EMPTY_LOCAL_MESSAGE_DICTIONARY,
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
ops[name] = defineOp(name, def, undefined, compileMetadata);
|
|
351
|
+
}
|
|
275
352
|
}
|
|
276
353
|
|
|
277
354
|
if (!hasAllDefinedOps(definitions, ops)) {
|
|
@@ -164,8 +164,8 @@ export type OpGroup<Ctx extends OpContext, Ops extends object = NoOpMembers> = O
|
|
|
164
164
|
/**
|
|
165
165
|
* An OpGroup with column mapping applied.
|
|
166
166
|
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
167
|
+
* Wiring composes the mapping into immutable metadata interpreted only by cold
|
|
168
|
+
* Arrow conversion; library child buffers keep their canonical storage layout.
|
|
169
169
|
*
|
|
170
170
|
* Note: Ops are accessed directly as properties (`.opName` not `.ops.opName`)
|
|
171
171
|
* for V8 hidden class optimization and cleaner API ergonomics.
|
|
@@ -24,7 +24,7 @@ import type { OpContext } from './types.js';
|
|
|
24
24
|
// Re-export the Op class and OpMetadata from op.ts - single source of truth
|
|
25
25
|
// The class is defined in op.ts to be the canonical type used by both
|
|
26
26
|
// defineOp (creates instances) and Tracer (checks instanceof)
|
|
27
|
-
export { Op, type OpMetadata } from '../op.js';
|
|
27
|
+
export { Op, type OpCompileMetadata, type OpMetadata } from '../op.js';
|
|
28
28
|
|
|
29
29
|
// =============================================================================
|
|
30
30
|
// OP FUNCTION TYPE
|
|
@@ -68,24 +68,29 @@ export type TagWriter<T extends LogSchema> = {
|
|
|
68
68
|
/**
|
|
69
69
|
* SpanLogger - public API surface for structured logging.
|
|
70
70
|
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
71
|
+
* Operational info/warn/error calls accept either a static template or the
|
|
72
|
+
* untransformed fallback form `(template, fields)`. Debug/trace retain the raw
|
|
73
|
+
* dynamic message API. The transformer lowers supported calls to direct writes;
|
|
74
|
+
* internal methods and buffers remain hidden from this type.
|
|
74
75
|
*
|
|
75
|
-
* Per specs/lmao/01h_entry_types_and_logging_primitives.md
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* - Generated at runtime via createSpanLoggerFromGenerator()
|
|
76
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md, each call creates
|
|
77
|
+
* exactly one log entry. The generated runtime implementation binds structured
|
|
78
|
+
* fallback fields to the schema-specific column writers.
|
|
79
79
|
*/
|
|
80
80
|
export interface SpanLogger<T extends LogSchema> {
|
|
81
|
-
/** Log
|
|
82
|
-
info(
|
|
81
|
+
/** Log a static info template, optionally with schema-bound fallback fields */
|
|
82
|
+
info(template: string): FluentLogEntry<T>;
|
|
83
|
+
info(template: string, fields: Partial<InferSchema<T>>): FluentLogEntry<T>;
|
|
83
84
|
/** Log at debug level */
|
|
84
85
|
debug(message: string): FluentLogEntry<T>;
|
|
85
|
-
/** Log
|
|
86
|
-
warn(
|
|
87
|
-
|
|
88
|
-
error
|
|
86
|
+
/** Log a static warn template, optionally with schema-bound fallback fields */
|
|
87
|
+
warn(template: string): FluentLogEntry<T>;
|
|
88
|
+
warn(template: string, fields: Partial<InferSchema<T>>): FluentLogEntry<T>;
|
|
89
|
+
/** Log a static error template, optionally with schema-bound fallback fields */
|
|
90
|
+
error(template: string): FluentLogEntry<T>;
|
|
91
|
+
error(template: string, fields: Partial<InferSchema<T>>): FluentLogEntry<T>;
|
|
92
|
+
/** Log at trace level */
|
|
93
|
+
trace(message: string): FluentLogEntry<T>;
|
|
89
94
|
}
|
|
90
95
|
|
|
91
96
|
/**
|
|
@@ -208,10 +213,7 @@ export type SpanFn<Ctx extends OpContext> = {
|
|
|
208
213
|
* Use when the callback is guaranteed sync and should return immediately
|
|
209
214
|
* with a Result envelope.
|
|
210
215
|
*/
|
|
211
|
-
export type SpanSyncFn<Ctx extends OpContext> = <S, E>(
|
|
212
|
-
name: string,
|
|
213
|
-
fn: (ctx: SpanContext<Ctx>) => Result<S, E>,
|
|
214
|
-
) => Result<S, E>;
|
|
216
|
+
export type SpanSyncFn<Ctx extends OpContext> = <S, E>(name: string, op: Op<Ctx, [], S, E>) => Result<S, E>;
|
|
215
217
|
|
|
216
218
|
// =============================================================================
|
|
217
219
|
// SPAN CONTEXT TYPE
|
|
@@ -359,6 +361,85 @@ export type SpanContext<Ctx extends OpContext> = {
|
|
|
359
361
|
*/
|
|
360
362
|
spanSync: SpanSyncFn<Ctx>;
|
|
361
363
|
|
|
364
|
+
/** @internal Transformer-only fixed-arity sync-fast span ABI. */
|
|
365
|
+
spanAuto0<S, E>(line: number, name: string, op: Op<Ctx, [], S, E>): Result<S, E> | Promise<Result<S, E>>;
|
|
366
|
+
spanAuto1<S, E, A1>(
|
|
367
|
+
line: number,
|
|
368
|
+
name: string,
|
|
369
|
+
op: Op<Ctx, [A1], S, E>,
|
|
370
|
+
a1: A1,
|
|
371
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
372
|
+
spanAuto2<S, E, A1, A2>(
|
|
373
|
+
line: number,
|
|
374
|
+
name: string,
|
|
375
|
+
op: Op<Ctx, [A1, A2], S, E>,
|
|
376
|
+
a1: A1,
|
|
377
|
+
a2: A2,
|
|
378
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
379
|
+
spanAuto3<S, E, A1, A2, A3>(
|
|
380
|
+
line: number,
|
|
381
|
+
name: string,
|
|
382
|
+
op: Op<Ctx, [A1, A2, A3], S, E>,
|
|
383
|
+
a1: A1,
|
|
384
|
+
a2: A2,
|
|
385
|
+
a3: A3,
|
|
386
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
387
|
+
spanAuto4<S, E, A1, A2, A3, A4>(
|
|
388
|
+
line: number,
|
|
389
|
+
name: string,
|
|
390
|
+
op: Op<Ctx, [A1, A2, A3, A4], S, E>,
|
|
391
|
+
a1: A1,
|
|
392
|
+
a2: A2,
|
|
393
|
+
a3: A3,
|
|
394
|
+
a4: A4,
|
|
395
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
396
|
+
spanAuto5<S, E, A1, A2, A3, A4, A5>(
|
|
397
|
+
line: number,
|
|
398
|
+
name: string,
|
|
399
|
+
op: Op<Ctx, [A1, A2, A3, A4, A5], S, E>,
|
|
400
|
+
a1: A1,
|
|
401
|
+
a2: A2,
|
|
402
|
+
a3: A3,
|
|
403
|
+
a4: A4,
|
|
404
|
+
a5: A5,
|
|
405
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
406
|
+
spanAuto6<S, E, A1, A2, A3, A4, A5, A6>(
|
|
407
|
+
line: number,
|
|
408
|
+
name: string,
|
|
409
|
+
op: Op<Ctx, [A1, A2, A3, A4, A5, A6], S, E>,
|
|
410
|
+
a1: A1,
|
|
411
|
+
a2: A2,
|
|
412
|
+
a3: A3,
|
|
413
|
+
a4: A4,
|
|
414
|
+
a5: A5,
|
|
415
|
+
a6: A6,
|
|
416
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
417
|
+
spanAuto7<S, E, A1, A2, A3, A4, A5, A6, A7>(
|
|
418
|
+
line: number,
|
|
419
|
+
name: string,
|
|
420
|
+
op: Op<Ctx, [A1, A2, A3, A4, A5, A6, A7], S, E>,
|
|
421
|
+
a1: A1,
|
|
422
|
+
a2: A2,
|
|
423
|
+
a3: A3,
|
|
424
|
+
a4: A4,
|
|
425
|
+
a5: A5,
|
|
426
|
+
a6: A6,
|
|
427
|
+
a7: A7,
|
|
428
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
429
|
+
spanAuto8<S, E, A1, A2, A3, A4, A5, A6, A7, A8>(
|
|
430
|
+
line: number,
|
|
431
|
+
name: string,
|
|
432
|
+
op: Op<Ctx, [A1, A2, A3, A4, A5, A6, A7, A8], S, E>,
|
|
433
|
+
a1: A1,
|
|
434
|
+
a2: A2,
|
|
435
|
+
a3: A3,
|
|
436
|
+
a4: A4,
|
|
437
|
+
a5: A5,
|
|
438
|
+
a6: A6,
|
|
439
|
+
a7: A7,
|
|
440
|
+
a8: A8,
|
|
441
|
+
): Result<S, E> | Promise<Result<S, E>>;
|
|
442
|
+
|
|
362
443
|
/**
|
|
363
444
|
* Set scoped attributes that auto-propagate to all subsequent log entries.
|
|
364
445
|
*
|
|
@@ -52,7 +52,7 @@ export type {
|
|
|
52
52
|
UnionToIntersection,
|
|
53
53
|
} from './opGroupTypes.js';
|
|
54
54
|
// Op types (metadata, function signature, instance)
|
|
55
|
-
export type { Op, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
55
|
+
export type { Op, OpCompileMetadata, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
56
56
|
// SpanContext types (tag writer, logger, span function, full context)
|
|
57
57
|
export type { FluentLogEntry, SpanContext, SpanFn, SpanLogger, SpanSyncFn, TagWriter } from './spanContextTypes.js';
|
|
58
58
|
|
|
@@ -120,7 +120,7 @@ import type { SchemaFields } from '../schema/types.js';
|
|
|
120
120
|
import type { ValidateUserContext } from './contextTypes.js';
|
|
121
121
|
import type { FeatureFlagSchema } from './featureFlagTypes.js';
|
|
122
122
|
import type { DepsConfig, OpGroup } from './opGroupTypes.js';
|
|
123
|
-
import type { Op, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
123
|
+
import type { Op, OpCompileMetadata, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
124
124
|
|
|
125
125
|
/**
|
|
126
126
|
* Configuration for defineOpContext
|
|
@@ -351,6 +351,7 @@ export interface OpContextFactory<
|
|
|
351
351
|
name: string,
|
|
352
352
|
fn: OpFn<OpContext<T, FF, Deps, UserCtx>, Args, S, E>,
|
|
353
353
|
metadata?: Partial<OpMetadata>,
|
|
354
|
+
compileMetadata?: OpCompileMetadata,
|
|
354
355
|
): Op<OpContext<T, FF, Deps, UserCtx>, Args, S, E>;
|
|
355
356
|
|
|
356
357
|
/**
|
|
@@ -399,5 +400,8 @@ export interface OpContextFactory<
|
|
|
399
400
|
| OpFn<OpContext<T, FF, Deps, UserCtx>, unknown[], unknown, unknown>
|
|
400
401
|
| Op<OpContext<T, FF, Deps, UserCtx>, unknown[], unknown, unknown>
|
|
401
402
|
>,
|
|
402
|
-
>(
|
|
403
|
+
>(
|
|
404
|
+
definitions: Defs,
|
|
405
|
+
compileMetadataByKey?: Partial<Record<keyof Defs, OpCompileMetadata>>,
|
|
406
|
+
): OpGroup<OpContext<T, FF, Deps, UserCtx>, OpsFromRecord<OpContext<T, FF, Deps, UserCtx>, Defs>>;
|
|
403
407
|
}
|