@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
package/dist/lib/op.d.ts
CHANGED
|
@@ -13,11 +13,16 @@
|
|
|
13
13
|
* - Op name is used for metrics tracking (separate from span names)
|
|
14
14
|
*/
|
|
15
15
|
import type { PreEncodedEntry } from '@smoothbricks/arrow-builder';
|
|
16
|
-
import type {
|
|
16
|
+
import type { RemapDescriptor } from './logBinding.js';
|
|
17
17
|
import type { SpanContext } from './opContext/spanContextTypes.js';
|
|
18
18
|
import type { OpContext, OpContextBinding } from './opContext/types.js';
|
|
19
|
+
import type { ArrowExposurePlan, CallsitePlan, EagerColumnDescriptor, PhysicalAppenders } from './physicalLayoutPlan.js';
|
|
19
20
|
import type { Result } from './result.js';
|
|
21
|
+
import type { LogSchema } from './schema/LogSchema.js';
|
|
20
22
|
import type { SpanBufferConstructor } from './spanBuffer.js';
|
|
23
|
+
import type { TimestampAppendPrimitive } from './traceRoot.js';
|
|
24
|
+
import type { VocabularyGeneration } from './vocabularyRegistry.js';
|
|
25
|
+
import type { WasmLayoutTemplate } from './wasm/wasmPhysicalLayout.js';
|
|
21
26
|
/**
|
|
22
27
|
* Metadata injected by the transformer into each Op.
|
|
23
28
|
* These values are determined at compile time from the source location.
|
|
@@ -25,7 +30,14 @@ import type { SpanBufferConstructor } from './spanBuffer.js';
|
|
|
25
30
|
* Includes pre-encoded UTF-8 entries for Arrow dictionary building -
|
|
26
31
|
* encode once at Op definition time, reuse for every span conversion.
|
|
27
32
|
*/
|
|
28
|
-
export interface
|
|
33
|
+
export interface OpCompileMetadata {
|
|
34
|
+
readonly runtimeHint: number;
|
|
35
|
+
readonly eagerColumns?: readonly string[];
|
|
36
|
+
readonly localMessageDictionary?: readonly number[];
|
|
37
|
+
/** ttsc-only startup hook that installs the source-emitted physical buffer constructor. */
|
|
38
|
+
readonly materializeSpanBufferClass?: (schema: LogSchema) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface OpMetadata<T extends LogSchema = LogSchema> {
|
|
29
41
|
/** Op name for metrics tracking (distinct from span names which are provided at call sites) */
|
|
30
42
|
readonly name: string;
|
|
31
43
|
/** Package name from package.json */
|
|
@@ -42,6 +54,18 @@ export interface OpMetadata {
|
|
|
42
54
|
readonly package_file_entry: PreEncodedEntry;
|
|
43
55
|
/** Pre-encoded git_sha for Arrow dictionary building */
|
|
44
56
|
readonly git_sha_entry: PreEncodedEntry;
|
|
57
|
+
/** Startup-resolved physical layout used by span setup; absent only on raw fallback metadata. */
|
|
58
|
+
readonly _physicalLayoutPlan?: {
|
|
59
|
+
readonly SpanBufferClass: SpanBufferConstructor<T>;
|
|
60
|
+
readonly eagerColumns: EagerColumnDescriptor;
|
|
61
|
+
readonly vocabularyGeneration: VocabularyGeneration;
|
|
62
|
+
readonly localMessageDictionary: readonly number[];
|
|
63
|
+
readonly encodeLocalMessage: (globalDenseIndex: number) => number;
|
|
64
|
+
readonly wasmLayout: WasmLayoutTemplate;
|
|
65
|
+
readonly appendLogEntry: TimestampAppendPrimitive;
|
|
66
|
+
readonly arrowExposure: ArrowExposurePlan;
|
|
67
|
+
readonly appenders: PhysicalAppenders;
|
|
68
|
+
};
|
|
45
69
|
}
|
|
46
70
|
/**
|
|
47
71
|
* Op - Traced operation (Phase 2 architecture)
|
|
@@ -63,7 +87,7 @@ export interface OpMetadata {
|
|
|
63
87
|
*
|
|
64
88
|
* Phase 2 architecture:
|
|
65
89
|
* - SpanBufferClass carries static schema + stats (shared by all ops from same defineOpContext)
|
|
66
|
-
* -
|
|
90
|
+
* - remapDescriptor is an immutable cold-path binding for prefixed/mapped ops
|
|
67
91
|
* - No LogBinding - stats accessed via SpanBufferClass.stats
|
|
68
92
|
*
|
|
69
93
|
* @typeParam Ctx - OpContext with deps, ff, env (contravariant position)
|
|
@@ -72,34 +96,10 @@ export interface OpMetadata {
|
|
|
72
96
|
* @typeParam E - Error type of the Result
|
|
73
97
|
*/
|
|
74
98
|
export declare class Op<Ctx extends OpContext, Args extends unknown[], S, E> {
|
|
75
|
-
/** Op name for metrics, telemetry, and debugging */
|
|
76
99
|
readonly metadata: OpMetadata;
|
|
77
|
-
|
|
78
|
-
readonly SpanBufferClass: SpanBufferConstructor;
|
|
79
|
-
/** The user function to execute - called by span_op after context creation (can be sync or async) */
|
|
100
|
+
readonly callsitePlan: CallsitePlan<Ctx['logSchema'], Ctx>;
|
|
80
101
|
readonly fn: (ctx: SpanContext<Ctx>, ...args: Args) => Result<S, E> | Promise<Result<S, E>>;
|
|
81
|
-
|
|
82
|
-
readonly
|
|
83
|
-
/**
|
|
84
|
-
* WHY: Carries the OpContextBinding from the factory that created this Op.
|
|
85
|
-
* Enables downstream consumers (defineAgentOps, OpRegistry) to extract the
|
|
86
|
-
* LMAO schema for context merging and conflict detection.
|
|
87
|
-
*/
|
|
88
|
-
readonly _opContextBinding?: OpContextBinding | undefined;
|
|
89
|
-
constructor(
|
|
90
|
-
/** Op name for metrics, telemetry, and debugging */
|
|
91
|
-
metadata: OpMetadata,
|
|
92
|
-
/** Op owns buffer creation - class has static schema + stats shared by all instances */
|
|
93
|
-
SpanBufferClass: SpanBufferConstructor,
|
|
94
|
-
/** The user function to execute - called by span_op after context creation (can be sync or async) */
|
|
95
|
-
fn: (ctx: SpanContext<Ctx>, ...args: Args) => Result<S, E> | Promise<Result<S, E>>,
|
|
96
|
-
/** Only set for prefixed ops - wraps child buffers during registration */
|
|
97
|
-
remappedViewClass?: RemappedViewConstructor | undefined,
|
|
98
|
-
/**
|
|
99
|
-
* WHY: Carries the OpContextBinding from the factory that created this Op.
|
|
100
|
-
* Enables downstream consumers (defineAgentOps, OpRegistry) to extract the
|
|
101
|
-
* LMAO schema for context merging and conflict detection.
|
|
102
|
-
*/
|
|
103
|
-
_opContextBinding?: OpContextBinding | undefined);
|
|
102
|
+
readonly _opContextBinding?: OpContextBinding<Ctx['logSchema'], Ctx['flags'], Ctx['deps'], Ctx['userCtx']>;
|
|
103
|
+
constructor(metadata: OpMetadata, SpanBufferClass: SpanBufferConstructor<Ctx['logSchema']>, fn: (ctx: SpanContext<Ctx>, ...args: Args) => Result<S, E> | Promise<Result<S, E>>, remapDescriptor?: RemapDescriptor, opContextBinding?: OpContextBinding<Ctx['logSchema'], Ctx['flags'], Ctx['deps'], Ctx['userCtx']>, runtimeHint?: number, eagerColumns?: readonly string[], localMessageDictionary?: readonly number[]);
|
|
104
104
|
}
|
|
105
105
|
//# sourceMappingURL=op.d.ts.map
|
package/dist/lib/op.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../src/lib/op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../src/lib/op.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/op.js
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* - fn is called by span_op() after span_op creates the SpanBuffer/SpanContext
|
|
13
13
|
* - Op name is used for metrics tracking (separate from span names)
|
|
14
14
|
*/
|
|
15
|
+
import { getPhysicalLayoutPlan, sealCallsitePlan } from './physicalLayoutPlan.js';
|
|
16
|
+
import { decodeRuntimeHint } from './runtimeHint.js';
|
|
17
|
+
import { createSpanContextClass } from './spanContext.js';
|
|
15
18
|
//#endregion smoo/lmao!n/opcontext-hierarchy
|
|
16
19
|
// =============================================================================
|
|
17
20
|
// Op Class
|
|
@@ -37,7 +40,7 @@
|
|
|
37
40
|
*
|
|
38
41
|
* Phase 2 architecture:
|
|
39
42
|
* - SpanBufferClass carries static schema + stats (shared by all ops from same defineOpContext)
|
|
40
|
-
* -
|
|
43
|
+
* - remapDescriptor is an immutable cold-path binding for prefixed/mapped ops
|
|
41
44
|
* - No LogBinding - stats accessed via SpanBufferClass.stats
|
|
42
45
|
*
|
|
43
46
|
* @typeParam Ctx - OpContext with deps, ff, env (contravariant position)
|
|
@@ -47,30 +50,20 @@
|
|
|
47
50
|
*/
|
|
48
51
|
export class Op {
|
|
49
52
|
metadata;
|
|
50
|
-
|
|
53
|
+
callsitePlan;
|
|
51
54
|
fn;
|
|
52
|
-
remappedViewClass;
|
|
53
55
|
_opContextBinding;
|
|
54
|
-
constructor(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* WHY: Carries the OpContextBinding from the factory that created this Op.
|
|
65
|
-
* Enables downstream consumers (defineAgentOps, OpRegistry) to extract the
|
|
66
|
-
* LMAO schema for context merging and conflict detection.
|
|
67
|
-
*/
|
|
68
|
-
_opContextBinding) {
|
|
69
|
-
this.metadata = metadata;
|
|
70
|
-
this.SpanBufferClass = SpanBufferClass;
|
|
56
|
+
constructor(metadata, SpanBufferClass, fn, remapDescriptor, opContextBinding, runtimeHint = 0, eagerColumns = [], localMessageDictionary = Object.freeze([])) {
|
|
57
|
+
const userContextKeys = Object.keys(opContextBinding?.ctxDefaults ?? {}).sort();
|
|
58
|
+
const layoutKey = userContextKeys.join('\u0000');
|
|
59
|
+
const capabilities = decodeRuntimeHint(runtimeHint).capabilities;
|
|
60
|
+
const SpanContextClass = createSpanContextClass(SpanBufferClass.schema, opContextBinding?.logBinding ?? { logSchema: SpanBufferClass.schema }, capabilities, userContextKeys);
|
|
61
|
+
const physicalLayoutPlan = getPhysicalLayoutPlan(SpanBufferClass, runtimeHint, SpanContextClass, remapDescriptor, 'strategy-selected', layoutKey, eagerColumns, localMessageDictionary);
|
|
62
|
+
const resolvedMetadata = Object.freeze({ ...metadata, _physicalLayoutPlan: physicalLayoutPlan });
|
|
63
|
+
this.callsitePlan = sealCallsitePlan(physicalLayoutPlan, resolvedMetadata);
|
|
64
|
+
this.metadata = resolvedMetadata;
|
|
71
65
|
this.fn = fn;
|
|
72
|
-
this.
|
|
73
|
-
this._opContextBinding = _opContextBinding;
|
|
66
|
+
this._opContextBinding = opContextBinding;
|
|
74
67
|
}
|
|
75
68
|
}
|
|
76
69
|
//#endregion smoo/lmao!n/op-class
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Private fields (#columnMapping) don't affect hidden class (truly hidden, no enumeration)
|
|
9
9
|
* - Ops as own properties enable direct access and predictable object shape
|
|
10
10
|
* - prefix()/mapColumns() create new instances with same SpanBufferClass (shared stats)
|
|
11
|
-
* - Only
|
|
11
|
+
* - Only immutable remap metadata differs between original and mapped op instances
|
|
12
12
|
*
|
|
13
13
|
* Internal properties (_logSchema, _flags, etc.) are prefixed with underscore to avoid
|
|
14
14
|
* collision with user-defined op names. Public interfaces hide these from intellisense.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOpGroup.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/createOpGroup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"createOpGroup.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/createOpGroup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAKV,OAAO,EAEP,UAAU,EAGX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA+X5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,aAAa,CAAC,GAAG,SAAS,SAAS,EAAE,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,EAC9E,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,EAC3B,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EACnB,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAInB"}
|
|
@@ -8,22 +8,22 @@
|
|
|
8
8
|
* - Private fields (#columnMapping) don't affect hidden class (truly hidden, no enumeration)
|
|
9
9
|
* - Ops as own properties enable direct access and predictable object shape
|
|
10
10
|
* - prefix()/mapColumns() create new instances with same SpanBufferClass (shared stats)
|
|
11
|
-
* - Only
|
|
11
|
+
* - Only immutable remap metadata differs between original and mapped op instances
|
|
12
12
|
*
|
|
13
13
|
* Internal properties (_logSchema, _flags, etc.) are prefixed with underscore to avoid
|
|
14
14
|
* collision with user-defined op names. Public interfaces hide these from intellisense.
|
|
15
15
|
*
|
|
16
16
|
* @module opContext/createOpGroup
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
18
|
+
import { createRemapDescriptor } from '../library.js';
|
|
19
19
|
import { Op } from '../op.js';
|
|
20
20
|
import { SYSTEM_SCHEMA_FIELD_NAMES } from '../schema/systemSchema.js';
|
|
21
21
|
import { validateOpName } from './opGroupTypes.js';
|
|
22
22
|
//#region smoo/lmao!n/column-mapping-api
|
|
23
23
|
// 01l "Dependencies with Column Mapping" + 01e "Column Mapping API": .prefix(name) and
|
|
24
|
-
// .mapColumns({ col: 'new' | 'shared' | null }) are
|
|
25
|
-
// OpGroup's ops with
|
|
26
|
-
//
|
|
24
|
+
// .mapColumns({ col: 'new' | 'shared' | null }) are composed here. Each call clones the
|
|
25
|
+
// OpGroup's ops with one immutable descriptor; child buffers remain canonical and Arrow
|
|
26
|
+
// interprets the descriptor only on its cold traversal path.
|
|
27
27
|
// =============================================================================
|
|
28
28
|
// INTERNAL HELPERS
|
|
29
29
|
// =============================================================================
|
|
@@ -31,12 +31,8 @@ function getSchemaFields(fieldsSchema) {
|
|
|
31
31
|
return fieldsSchema.fields;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* Create
|
|
35
|
-
* Input: clean ->
|
|
36
|
-
* Output: prefixed -> clean mapping (e.g., { http_status: 'status' })
|
|
37
|
-
*
|
|
38
|
-
* Why reverse: RemappedBufferView wraps child buffer at registration time.
|
|
39
|
-
* Arrow conversion asks for 'http_status', view needs to find 'status' in raw buffer.
|
|
34
|
+
* Create the fully composed Arrow output-to-canonical-source mapping.
|
|
35
|
+
* Input: clean -> output mapping; output: output -> clean mapping.
|
|
40
36
|
*/
|
|
41
37
|
function createReverseMapping(mapping) {
|
|
42
38
|
const reverse = {};
|
|
@@ -50,10 +46,10 @@ function createReverseMapping(mapping) {
|
|
|
50
46
|
function isOpInstance(value) {
|
|
51
47
|
return value instanceof Op;
|
|
52
48
|
}
|
|
53
|
-
function
|
|
49
|
+
function copyOpsWithDescriptor(source, target, remapDescriptor) {
|
|
54
50
|
for (const [key, value] of Object.entries(source)) {
|
|
55
51
|
if (isOpInstance(value)) {
|
|
56
|
-
target[key] = new Op(value.metadata, value.SpanBufferClass, value.fn,
|
|
52
|
+
target[key] = new Op(value.metadata, value.callsitePlan.SpanBufferClass, value.fn, remapDescriptor, value._opContextBinding, value.callsitePlan.runtimeHint, value.callsitePlan.eagerColumns.names, value.callsitePlan.localMessageDictionary);
|
|
57
53
|
}
|
|
58
54
|
}
|
|
59
55
|
}
|
|
@@ -64,15 +60,17 @@ function assertGroupCarriesOps(group, ops) {
|
|
|
64
60
|
}
|
|
65
61
|
}
|
|
66
62
|
}
|
|
67
|
-
function
|
|
63
|
+
function cloneOpsWithDescriptor(source, remapDescriptor) {
|
|
68
64
|
const cloned = {};
|
|
69
|
-
|
|
65
|
+
copyOpsWithDescriptor(source, cloned, remapDescriptor);
|
|
70
66
|
assertGroupCarriesOps(cloned, source);
|
|
71
67
|
return cloned;
|
|
72
68
|
}
|
|
73
69
|
function prefixContributedSchema(fields, prefix) {
|
|
74
70
|
const result = {};
|
|
75
71
|
for (const [key, value] of Object.entries(fields)) {
|
|
72
|
+
if (SYSTEM_SCHEMA_FIELD_NAMES.has(key))
|
|
73
|
+
continue;
|
|
76
74
|
result[`${prefix}_${key}`] = value;
|
|
77
75
|
}
|
|
78
76
|
assertMappedSchema(result);
|
|
@@ -182,7 +180,7 @@ function validateAllOpNames(ops) {
|
|
|
182
180
|
* 2. Ops spread as own properties for direct access (`.request` not `.ops.request`)
|
|
183
181
|
* 3. Prototype methods (prefix/mapColumns) shared across instances
|
|
184
182
|
* 4. Same SpanBufferClass preserved across prefix() calls (shared schema + stats)
|
|
185
|
-
* 5. Only
|
|
183
|
+
* 5. Only immutable remap metadata differs between original and mapped ops
|
|
186
184
|
*
|
|
187
185
|
* Structure enables V8 optimization:
|
|
188
186
|
* - All OpGroup instances with same ops have same hidden class
|
|
@@ -218,25 +216,22 @@ class OpGroupImpl {
|
|
|
218
216
|
const newMapping = hasMapping
|
|
219
217
|
? prefixMapping(this.#columnMapping, p)
|
|
220
218
|
: buildPrefixMapping(this._logSchema._columnNames, p);
|
|
221
|
-
// Generate RemappedBufferView for this prefix
|
|
222
|
-
// Why reverse mapping: Arrow conversion asks for 'http_status', needs to find 'status'
|
|
223
219
|
const reverseMapping = createReverseMapping(newMapping);
|
|
224
|
-
const
|
|
220
|
+
const remapDescriptor = createRemapDescriptor(this._logSchema, reverseMapping);
|
|
225
221
|
// Create new OpGroup with prefixed ops
|
|
226
|
-
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags,
|
|
222
|
+
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags, cloneOpsWithDescriptor(this.#ops, remapDescriptor), newMapping, prefixContributedSchema(getSchemaFields(this._logSchema), p));
|
|
227
223
|
assertGroupCarriesOps(newGroup, this.#ops);
|
|
228
224
|
return newGroup;
|
|
229
225
|
}
|
|
230
226
|
mapColumns(mapping) {
|
|
231
227
|
// Override/extend the existing mapping with new mapping
|
|
232
228
|
const newMapping = { ...this.#columnMapping, ...mapping };
|
|
233
|
-
// Generate RemappedBufferView for this mapping
|
|
234
229
|
const reverseMapping = createReverseMapping(newMapping);
|
|
235
|
-
const
|
|
230
|
+
const remapDescriptor = createRemapDescriptor(this._logSchema, reverseMapping);
|
|
236
231
|
// Build contributed schema from original fields with new mapping
|
|
237
232
|
const newContributed = buildContributedSchema(getSchemaFields(this._logSchema), newMapping);
|
|
238
233
|
// Create new OpGroup with mapped ops
|
|
239
|
-
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags,
|
|
234
|
+
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags, cloneOpsWithDescriptor(this.#ops, remapDescriptor), newMapping, newContributed);
|
|
240
235
|
assertGroupCarriesOps(newGroup, this.#ops);
|
|
241
236
|
return newGroup;
|
|
242
237
|
}
|
|
@@ -276,26 +271,24 @@ class MappedOpGroupImpl {
|
|
|
276
271
|
prefix(p) {
|
|
277
272
|
// Apply prefix to the current mapping's target names
|
|
278
273
|
const newMapping = prefixMapping(this.#columnMapping, p);
|
|
279
|
-
// Generate RemappedBufferView
|
|
280
274
|
const reverseMapping = createReverseMapping(newMapping);
|
|
281
|
-
const
|
|
275
|
+
const remapDescriptor = createRemapDescriptor(this._logSchema, reverseMapping);
|
|
282
276
|
// Build new contributed schema by prefixing current contributed schema
|
|
283
277
|
const newContributed = prefixContributedSchema(this._contributedSchema, p);
|
|
284
278
|
// Create new MappedOpGroup
|
|
285
|
-
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags,
|
|
279
|
+
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags, cloneOpsWithDescriptor(this.#ops, remapDescriptor), newMapping, newContributed);
|
|
286
280
|
assertGroupCarriesOps(newGroup, this.#ops);
|
|
287
281
|
return newGroup;
|
|
288
282
|
}
|
|
289
283
|
mapColumns(mapping) {
|
|
290
284
|
// Override/extend the existing mapping
|
|
291
285
|
const newMapping = { ...this.#columnMapping, ...mapping };
|
|
292
|
-
// Generate RemappedBufferView
|
|
293
286
|
const reverseMapping = createReverseMapping(newMapping);
|
|
294
|
-
const
|
|
287
|
+
const remapDescriptor = createRemapDescriptor(this._logSchema, reverseMapping);
|
|
295
288
|
// Build contributed schema from current contributed fields so chained maps stay typed to the public surface.
|
|
296
289
|
const newContributed = buildContributedSchema(this._contributedSchema, mapping);
|
|
297
290
|
// Create new MappedOpGroup
|
|
298
|
-
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags,
|
|
291
|
+
const newGroup = new MappedOpGroupImpl(this._logSchema, this._flags, cloneOpsWithDescriptor(this.#ops, remapDescriptor), newMapping, newContributed);
|
|
299
292
|
assertGroupCarriesOps(newGroup, this.#ops);
|
|
300
293
|
return newGroup;
|
|
301
294
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @module opContext/defineOp
|
|
8
8
|
*/
|
|
9
9
|
import type { OpGroup, OpGroupOps } from './opGroupTypes.js';
|
|
10
|
-
import type { Op, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
10
|
+
import type { Op, OpCompileMetadata, OpFn, OpMetadata, OpsFromRecord } from './opTypes.js';
|
|
11
11
|
import type { OpContext } from './types.js';
|
|
12
12
|
/**
|
|
13
13
|
* Create OpMetadata with pre-encoded entries for Arrow dictionary building.
|
|
@@ -54,13 +54,13 @@ type CreateOpGroupFn<Ctx extends OpContext> = <Ops extends OpGroupOps<Ctx>>(logS
|
|
|
54
54
|
* - metadata: includes name + merged with defaults
|
|
55
55
|
* - SpanBufferClass: from getSpanBufferClass(logSchema) - has static schema + stats
|
|
56
56
|
* - fn(ctx, ...args): the user function to execute
|
|
57
|
-
* -
|
|
57
|
+
* - remapDescriptor: undefined for original ops (set by .prefix()/.mapColumns())
|
|
58
58
|
*
|
|
59
59
|
* @template Ctx - Bundled OpContext (logSchema, flags, deps, userCtx)
|
|
60
60
|
* @param factoryConfig - Configuration containing logSchema and flags
|
|
61
61
|
* @returns A defineOp function for creating Op instances
|
|
62
62
|
*/
|
|
63
|
-
export declare function createDefineOp<Ctx extends OpContext>(factoryConfig: DefineOpFactoryConfig<Ctx>): <Args extends unknown[], S, E>(name: string, fn: OpFn<Ctx, Args, S, E>, metadata?: Partial<OpMetadata
|
|
63
|
+
export declare function createDefineOp<Ctx extends OpContext>(factoryConfig: DefineOpFactoryConfig<Ctx>): <Args extends unknown[], S, E>(name: string, fn: OpFn<Ctx, Args, S, E>, metadata?: Partial<OpMetadata>, compileMetadata?: OpCompileMetadata) => Op<Ctx, Args, S, E>;
|
|
64
64
|
/**
|
|
65
65
|
* Creates a defineOps function bound to a specific factory config.
|
|
66
66
|
*
|
|
@@ -78,6 +78,6 @@ export declare function createDefineOp<Ctx extends OpContext>(factoryConfig: Def
|
|
|
78
78
|
* @param createOpGroup - Factory function for creating OpGroups
|
|
79
79
|
* @returns A defineOps function for creating OpGroups
|
|
80
80
|
*/
|
|
81
|
-
export declare function createDefineOps<Ctx extends OpContext>(factoryConfig: DefineOpFactoryConfig<Ctx>, createOpGroup: CreateOpGroupFn<Ctx>): <Defs extends Record<string, Op<Ctx, unknown[], unknown, unknown> | OpFn<Ctx, unknown[], unknown, unknown>>>(definitions: Defs & ThisType<OpsFromRecord<Ctx, Defs>>) => OpGroup<Ctx, OpsFromRecord<Ctx, Defs>>;
|
|
81
|
+
export declare function createDefineOps<Ctx extends OpContext>(factoryConfig: DefineOpFactoryConfig<Ctx>, createOpGroup: CreateOpGroupFn<Ctx>): <Defs extends Record<string, Op<Ctx, unknown[], unknown, unknown> | OpFn<Ctx, unknown[], unknown, unknown>>>(definitions: Defs & ThisType<OpsFromRecord<Ctx, Defs>>, compileMetadataByKey?: Partial<Record<keyof Defs, OpCompileMetadata>>) => OpGroup<Ctx, OpsFromRecord<Ctx, Defs>>;
|
|
82
82
|
export {};
|
|
83
83
|
//# sourceMappingURL=defineOp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineOp.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/defineOp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"defineOp.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/defineOp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,UAAU,CAYZ;AAMD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAA4E,CAAC;AA+B5G;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,SAAI,GAAG,UAAU,CA6DnE;AAOD;;;GAGG;AACH,UAAU,qBAAqB,CAAC,GAAG,SAAS,SAAS;IACnD,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,YAAY,EAAE,gBAAgB,CAAC;CACnE;AAED;;;GAGG;AACH,KAAK,eAAe,CAAC,GAAG,SAAS,SAAS,IAAI,CAAC,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,EACxE,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,EAC3B,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EACnB,GAAG,EAAE,GAAG,KACL,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAMvB;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAS,SAAS,EAClD,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,GACxC,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAC9B,eAAe,CAAC,EAAE,iBAAiB,KAChC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAoDvB;AAyBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,GAAG,SAAS,SAAS,EACnD,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,EACzC,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,GAClC,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAC5G,WAAW,EAAE,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EACtD,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAClE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAgD1C"}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { intern, PreEncodedEntry } from '@smoothbricks/arrow-builder';
|
|
10
10
|
import { Op as OpClass } from '../op.js';
|
|
11
|
+
import { resolveEagerColumns } from '../physicalLayoutPlan.js';
|
|
12
|
+
import { runtimeHintMessageLayoutFamily, runtimeHintMessagePhysicalLayout } from '../runtimeHint.js';
|
|
11
13
|
import { getSpanBufferClass } from '../spanBuffer.js';
|
|
12
14
|
//#region smoo/lmao!n/metadata-injection
|
|
13
15
|
// 01l "Metadata Injection (Transformer)": package_name/package_file/git_sha/line are the
|
|
@@ -42,6 +44,27 @@ export function createOpMetadata(name, package_name, package_file, git_sha, line
|
|
|
42
44
|
* These are placeholder values that will be replaced at compile time.
|
|
43
45
|
*/
|
|
44
46
|
export const DEFAULT_METADATA = createOpMetadata('unknown', 'unknown', 'unknown', 'unknown', 0);
|
|
47
|
+
const DEFAULT_COMPILE_METADATA = Object.freeze({
|
|
48
|
+
runtimeHint: 0,
|
|
49
|
+
});
|
|
50
|
+
const EMPTY_EAGER_COLUMNS = Object.freeze([]);
|
|
51
|
+
const EMPTY_LOCAL_MESSAGE_DICTIONARY = Object.freeze([]);
|
|
52
|
+
function normalizeCompileMetadata(compileMetadata) {
|
|
53
|
+
if (compileMetadata === undefined)
|
|
54
|
+
return DEFAULT_COMPILE_METADATA;
|
|
55
|
+
const eagerColumns = compileMetadata.eagerColumns;
|
|
56
|
+
const localMessageDictionary = compileMetadata.localMessageDictionary;
|
|
57
|
+
return Object.freeze({
|
|
58
|
+
runtimeHint: compileMetadata.runtimeHint,
|
|
59
|
+
eagerColumns: eagerColumns === undefined || eagerColumns.length === 0
|
|
60
|
+
? EMPTY_EAGER_COLUMNS
|
|
61
|
+
: Object.freeze([...new Set(eagerColumns)]),
|
|
62
|
+
localMessageDictionary: localMessageDictionary === undefined || localMessageDictionary.length === 0
|
|
63
|
+
? EMPTY_LOCAL_MESSAGE_DICTIONARY
|
|
64
|
+
: Object.freeze([...localMessageDictionary]),
|
|
65
|
+
materializeSpanBufferClass: compileMetadata.materializeSpanBufferClass,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
45
68
|
// =============================================================================
|
|
46
69
|
// STACK TRACE METADATA EXTRACTION
|
|
47
70
|
// =============================================================================
|
|
@@ -119,31 +142,39 @@ export function extractMetadataFromStack(skipFrames = 2) {
|
|
|
119
142
|
* - metadata: includes name + merged with defaults
|
|
120
143
|
* - SpanBufferClass: from getSpanBufferClass(logSchema) - has static schema + stats
|
|
121
144
|
* - fn(ctx, ...args): the user function to execute
|
|
122
|
-
* -
|
|
145
|
+
* - remapDescriptor: undefined for original ops (set by .prefix()/.mapColumns())
|
|
123
146
|
*
|
|
124
147
|
* @template Ctx - Bundled OpContext (logSchema, flags, deps, userCtx)
|
|
125
148
|
* @param factoryConfig - Configuration containing logSchema and flags
|
|
126
149
|
* @returns A defineOp function for creating Op instances
|
|
127
150
|
*/
|
|
128
151
|
export function createDefineOp(factoryConfig) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
152
|
+
return function defineOpImpl(name, fn, metadata, compileMetadata) {
|
|
153
|
+
const normalizedCompileMetadata = normalizeCompileMetadata(compileMetadata);
|
|
154
|
+
normalizedCompileMetadata.materializeSpanBufferClass?.(factoryConfig.logSchema);
|
|
155
|
+
const eagerColumns = resolveEagerColumns(factoryConfig.logSchema, normalizedCompileMetadata.eagerColumns ?? EMPTY_EAGER_COLUMNS);
|
|
156
|
+
const messageLayoutFamily = runtimeHintMessageLayoutFamily(normalizedCompileMetadata.runtimeHint);
|
|
157
|
+
const messagePhysicalLayout = runtimeHintMessagePhysicalLayout(normalizedCompileMetadata.runtimeHint);
|
|
158
|
+
const SelectedSpanBufferClass = getSpanBufferClass(factoryConfig.logSchema, messageLayoutFamily, messagePhysicalLayout, eagerColumns);
|
|
132
159
|
// When transformer is not installed, extract metadata from stack trace
|
|
133
160
|
// This provides useful file/line info for debugging even without build-time injection
|
|
134
161
|
// skipFrames=3: Error -> extractMetadataFromStack -> defineOpImpl -> caller
|
|
135
162
|
const baseMetadata = metadata?.package_file ? DEFAULT_METADATA : extractMetadataFromStack(3);
|
|
136
163
|
// Use name from: 1) explicit metadata.name (transformer), 2) defineOp('name', fn), 3) baseMetadata
|
|
137
|
-
const finalMetadata = {
|
|
164
|
+
const finalMetadata = {
|
|
165
|
+
...baseMetadata,
|
|
166
|
+
...metadata,
|
|
167
|
+
name: metadata?.name ?? name,
|
|
168
|
+
};
|
|
138
169
|
// Use the Op class which handles all span/buffer management:
|
|
139
170
|
// - Creates SpanBuffer for the op
|
|
140
171
|
// - Registers child buffers with parent
|
|
141
172
|
// - Sets _opMetadata and _callsiteMetadata
|
|
142
173
|
// - Writes span-start/span-ok/span-err entries
|
|
143
174
|
// - Handles exceptions with span-exception
|
|
144
|
-
// Why
|
|
145
|
-
//
|
|
146
|
-
return new OpClass(finalMetadata,
|
|
175
|
+
// Why SelectedSpanBufferClass: Ops with the same physical layout share one constructor and stats object.
|
|
176
|
+
// Base Ops have no remap descriptor; mapped OpGroups bind one during startup cloning.
|
|
177
|
+
return new OpClass(finalMetadata, SelectedSpanBufferClass, fn, undefined, factoryConfig.opContextBinding, normalizedCompileMetadata.runtimeHint, normalizedCompileMetadata.eagerColumns ?? EMPTY_EAGER_COLUMNS, normalizedCompileMetadata.localMessageDictionary ?? EMPTY_LOCAL_MESSAGE_DICTIONARY);
|
|
147
178
|
};
|
|
148
179
|
}
|
|
149
180
|
// =============================================================================
|
|
@@ -183,13 +214,25 @@ function hasAllDefinedOps(definitions, ops) {
|
|
|
183
214
|
export function createDefineOps(factoryConfig, createOpGroup) {
|
|
184
215
|
// Get the defineOp function for wrapping raw functions
|
|
185
216
|
const defineOp = createDefineOp(factoryConfig);
|
|
186
|
-
return function defineOpsImpl(definitions) {
|
|
217
|
+
return function defineOpsImpl(definitions, compileMetadataByKey) {
|
|
187
218
|
// Build the ops record by processing each definition.
|
|
188
219
|
// Keep the runtime container broad, then narrow once we've populated every key.
|
|
189
220
|
const ops = {};
|
|
190
221
|
for (const name in definitions) {
|
|
191
222
|
const def = definitions[name];
|
|
192
|
-
|
|
223
|
+
const compileMetadata = compileMetadataByKey?.[name];
|
|
224
|
+
if (isOp(def)) {
|
|
225
|
+
if (compileMetadata === undefined) {
|
|
226
|
+
ops[name] = def;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
const normalizedCompileMetadata = normalizeCompileMetadata(compileMetadata);
|
|
230
|
+
ops[name] = new OpClass(def.metadata, def.callsitePlan.SpanBufferClass, def.fn, def.callsitePlan.remapDescriptor ?? undefined, def._opContextBinding, normalizedCompileMetadata.runtimeHint, normalizedCompileMetadata.eagerColumns ?? EMPTY_EAGER_COLUMNS, normalizedCompileMetadata.localMessageDictionary ?? EMPTY_LOCAL_MESSAGE_DICTIONARY);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
ops[name] = defineOp(name, def, undefined, compileMetadata);
|
|
235
|
+
}
|
|
193
236
|
}
|
|
194
237
|
if (!hasAllDefinedOps(definitions, ops)) {
|
|
195
238
|
throw new Error('defineOps failed to normalize all op definitions');
|
|
@@ -124,8 +124,8 @@ export type OpGroup<Ctx extends OpContext, Ops extends object = NoOpMembers> = O
|
|
|
124
124
|
/**
|
|
125
125
|
* An OpGroup with column mapping applied.
|
|
126
126
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
127
|
+
* Wiring composes the mapping into immutable metadata interpreted only by cold
|
|
128
|
+
* Arrow conversion; library child buffers keep their canonical storage layout.
|
|
129
129
|
*
|
|
130
130
|
* Note: Ops are accessed directly as properties (`.opName` not `.ops.opName`)
|
|
131
131
|
* for V8 hidden class optimization and cleaner API ergonomics.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type { ExtractError, ExtractSuccess, Result } from '../result.js';
|
|
16
16
|
import type { SpanContext } from './spanContextTypes.js';
|
|
17
17
|
import type { OpContext } from './types.js';
|
|
18
|
-
export { Op, type OpMetadata } from '../op.js';
|
|
18
|
+
export { Op, type OpCompileMetadata, type OpMetadata } from '../op.js';
|
|
19
19
|
/**
|
|
20
20
|
* Op function signature - what the user provides to defineOp.
|
|
21
21
|
* MUST return Result<S, E> or Promise<Result<S, E>>.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/opTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS5C,OAAO,EAAE,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"opTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/opContext/opTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS5C,OAAO,EAAE,EAAE,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAMvE;;;;;;;;GAQG;AACH,MAAM,MAAM,IAAI,CAAC,GAAG,SAAS,SAAS,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CACtE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EACrB,GAAG,IAAI,EAAE,IAAI,KACV,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAO1C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC;;;GAGG;AACH,KAAK,OAAO,CAAC,GAAG,SAAS,SAAS,EAAE,GAAG,IACrC,GAAG,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAC7C,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GACnB,GAAG,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,MAAM,CAAC,GACjE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,GACjD,KAAK,CAAC;AAEd;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,CACvB,GAAG,SAAS,SAAS,EACrB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IACxG;KACD,CAAC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC"}
|
|
@@ -53,24 +53,29 @@ export type TagWriter<T extends LogSchema> = {
|
|
|
53
53
|
/**
|
|
54
54
|
* SpanLogger - public API surface for structured logging.
|
|
55
55
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
56
|
+
* Operational info/warn/error calls accept either a static template or the
|
|
57
|
+
* untransformed fallback form `(template, fields)`. Debug/trace retain the raw
|
|
58
|
+
* dynamic message API. The transformer lowers supported calls to direct writes;
|
|
59
|
+
* internal methods and buffers remain hidden from this type.
|
|
59
60
|
*
|
|
60
|
-
* Per specs/lmao/01h_entry_types_and_logging_primitives.md
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* - Generated at runtime via createSpanLoggerFromGenerator()
|
|
61
|
+
* Per specs/lmao/01h_entry_types_and_logging_primitives.md, each call creates
|
|
62
|
+
* exactly one log entry. The generated runtime implementation binds structured
|
|
63
|
+
* fallback fields to the schema-specific column writers.
|
|
64
64
|
*/
|
|
65
65
|
export interface SpanLogger<T extends LogSchema> {
|
|
66
|
-
/** Log
|
|
67
|
-
info(
|
|
66
|
+
/** Log a static info template, optionally with schema-bound fallback fields */
|
|
67
|
+
info(template: string): FluentLogEntry<T>;
|
|
68
|
+
info(template: string, fields: Partial<InferSchema<T>>): FluentLogEntry<T>;
|
|
68
69
|
/** Log at debug level */
|
|
69
70
|
debug(message: string): FluentLogEntry<T>;
|
|
70
|
-
/** Log
|
|
71
|
-
warn(
|
|
72
|
-
|
|
73
|
-
error
|
|
71
|
+
/** Log a static warn template, optionally with schema-bound fallback fields */
|
|
72
|
+
warn(template: string): FluentLogEntry<T>;
|
|
73
|
+
warn(template: string, fields: Partial<InferSchema<T>>): FluentLogEntry<T>;
|
|
74
|
+
/** Log a static error template, optionally with schema-bound fallback fields */
|
|
75
|
+
error(template: string): FluentLogEntry<T>;
|
|
76
|
+
error(template: string, fields: Partial<InferSchema<T>>): FluentLogEntry<T>;
|
|
77
|
+
/** Log at trace level */
|
|
78
|
+
trace(message: string): FluentLogEntry<T>;
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
76
81
|
* Fluent log entry - chainable attribute setters after log level.
|
|
@@ -174,7 +179,7 @@ export type SpanFn<Ctx extends OpContext> = {
|
|
|
174
179
|
* Use when the callback is guaranteed sync and should return immediately
|
|
175
180
|
* with a Result envelope.
|
|
176
181
|
*/
|
|
177
|
-
export type SpanSyncFn<Ctx extends OpContext> = <S, E>(name: string,
|
|
182
|
+
export type SpanSyncFn<Ctx extends OpContext> = <S, E>(name: string, op: Op<Ctx, [], S, E>) => Result<S, E>;
|
|
178
183
|
/**
|
|
179
184
|
* SpanContext - what op functions receive.
|
|
180
185
|
*
|
|
@@ -308,6 +313,16 @@ export type SpanContext<Ctx extends OpContext> = {
|
|
|
308
313
|
* It does not await or perform async retry/backoff behavior.
|
|
309
314
|
*/
|
|
310
315
|
spanSync: SpanSyncFn<Ctx>;
|
|
316
|
+
/** @internal Transformer-only fixed-arity sync-fast span ABI. */
|
|
317
|
+
spanAuto0<S, E>(line: number, name: string, op: Op<Ctx, [], S, E>): Result<S, E> | Promise<Result<S, E>>;
|
|
318
|
+
spanAuto1<S, E, A1>(line: number, name: string, op: Op<Ctx, [A1], S, E>, a1: A1): Result<S, E> | Promise<Result<S, E>>;
|
|
319
|
+
spanAuto2<S, E, A1, A2>(line: number, name: string, op: Op<Ctx, [A1, A2], S, E>, a1: A1, a2: A2): Result<S, E> | Promise<Result<S, E>>;
|
|
320
|
+
spanAuto3<S, E, A1, A2, A3>(line: number, name: string, op: Op<Ctx, [A1, A2, A3], S, E>, a1: A1, a2: A2, a3: A3): Result<S, E> | Promise<Result<S, E>>;
|
|
321
|
+
spanAuto4<S, E, A1, A2, A3, A4>(line: number, name: string, op: Op<Ctx, [A1, A2, A3, A4], S, E>, a1: A1, a2: A2, a3: A3, a4: A4): Result<S, E> | Promise<Result<S, E>>;
|
|
322
|
+
spanAuto5<S, E, A1, A2, A3, A4, A5>(line: number, name: string, op: Op<Ctx, [A1, A2, A3, A4, A5], S, E>, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): Result<S, E> | Promise<Result<S, E>>;
|
|
323
|
+
spanAuto6<S, E, A1, A2, A3, A4, A5, A6>(line: number, name: string, op: Op<Ctx, [A1, A2, A3, A4, A5, A6], S, E>, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): Result<S, E> | Promise<Result<S, E>>;
|
|
324
|
+
spanAuto7<S, E, A1, A2, A3, A4, A5, A6, A7>(line: number, name: string, op: Op<Ctx, [A1, A2, A3, A4, A5, A6, A7], S, E>, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): Result<S, E> | Promise<Result<S, E>>;
|
|
325
|
+
spanAuto8<S, E, A1, A2, A3, A4, A5, A6, A7, A8>(line: number, name: string, op: Op<Ctx, [A1, A2, A3, A4, A5, A6, A7, A8], S, E>, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): Result<S, E> | Promise<Result<S, E>>;
|
|
311
326
|
/**
|
|
312
327
|
* Set scoped attributes that auto-propagate to all subsequent log entries.
|
|
313
328
|
*
|