@smoothbricks/lmao 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +269 -0
- package/dist/allocator.wasm +0 -0
- package/dist/bun/preload.d.ts +11 -0
- package/dist/bun/preload.d.ts.map +1 -0
- package/dist/bun/preload.js +10 -0
- package/dist/bun/trace-preload.d.ts +8 -0
- package/dist/bun/trace-preload.d.ts.map +1 -0
- package/dist/bun/trace-preload.js +12 -0
- package/dist/es.d.ts +8 -0
- package/dist/es.d.ts.map +1 -0
- package/dist/es.js +9 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/lib/JsBufferStrategy.d.ts +49 -0
- package/dist/lib/JsBufferStrategy.d.ts.map +1 -0
- package/dist/lib/JsBufferStrategy.js +60 -0
- package/dist/lib/archive/chunkCompaction.d.ts +15 -0
- package/dist/lib/archive/chunkCompaction.d.ts.map +1 -0
- package/dist/lib/archive/chunkCompaction.js +24 -0
- package/dist/lib/archive/chunkEnvelope.d.ts +21 -0
- package/dist/lib/archive/chunkEnvelope.d.ts.map +1 -0
- package/dist/lib/archive/chunkEnvelope.js +55 -0
- package/dist/lib/archive/chunkRouting.d.ts +10 -0
- package/dist/lib/archive/chunkRouting.d.ts.map +1 -0
- package/dist/lib/archive/chunkRouting.js +47 -0
- package/dist/lib/archive/chunkStats.d.ts +12 -0
- package/dist/lib/archive/chunkStats.d.ts.map +1 -0
- package/dist/lib/archive/chunkStats.js +10 -0
- package/dist/lib/archive/index.d.ts +5 -0
- package/dist/lib/archive/index.d.ts.map +1 -0
- package/dist/lib/archive/index.js +4 -0
- package/dist/lib/arrow/capacityStats.d.ts +9 -0
- package/dist/lib/arrow/capacityStats.d.ts.map +1 -0
- package/dist/lib/arrow/capacityStats.js +231 -0
- package/dist/lib/arrow/dictionaries.d.ts +27 -0
- package/dist/lib/arrow/dictionaries.d.ts.map +1 -0
- package/dist/lib/arrow/dictionaries.js +135 -0
- package/dist/lib/arrow/flechette.d.ts +40 -0
- package/dist/lib/arrow/flechette.d.ts.map +1 -0
- package/dist/lib/arrow/flechette.js +67 -0
- package/dist/lib/arrow/utils.d.ts +38 -0
- package/dist/lib/arrow/utils.d.ts.map +1 -0
- package/dist/lib/arrow/utils.js +112 -0
- package/dist/lib/buffer/Nanoseconds.d.ts +109 -0
- package/dist/lib/buffer/Nanoseconds.d.ts.map +1 -0
- package/dist/lib/buffer/Nanoseconds.js +86 -0
- package/dist/lib/bufferStrategy.d.ts +95 -0
- package/dist/lib/bufferStrategy.d.ts.map +1 -0
- package/dist/lib/bufferStrategy.js +1 -0
- package/dist/lib/capacityTuning.d.ts +50 -0
- package/dist/lib/capacityTuning.d.ts.map +1 -0
- package/dist/lib/capacityTuning.js +65 -0
- package/dist/lib/codegen/evaluatorGenerator.d.ts +35 -0
- package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -0
- package/dist/lib/codegen/evaluatorGenerator.js +199 -0
- package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +139 -0
- package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -0
- package/dist/lib/codegen/fixedPositionWriterGenerator.js +289 -0
- package/dist/lib/codegen/spanLoggerGenerator.d.ts +115 -0
- package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -0
- package/dist/lib/codegen/spanLoggerGenerator.js +575 -0
- package/dist/lib/convertToArrow.d.ts +40 -0
- package/dist/lib/convertToArrow.d.ts.map +1 -0
- package/dist/lib/convertToArrow.js +1467 -0
- package/dist/lib/defineOpContext.d.ts +96 -0
- package/dist/lib/defineOpContext.d.ts.map +1 -0
- package/dist/lib/defineOpContext.js +227 -0
- package/dist/lib/errors/Blocked.d.ts +113 -0
- package/dist/lib/errors/Blocked.d.ts.map +1 -0
- package/dist/lib/errors/Blocked.js +68 -0
- package/dist/lib/errors/CodeError.d.ts +101 -0
- package/dist/lib/errors/CodeError.d.ts.map +1 -0
- package/dist/lib/errors/CodeError.js +42 -0
- package/dist/lib/errors/RetriesExhausted.d.ts +67 -0
- package/dist/lib/errors/RetriesExhausted.d.ts.map +1 -0
- package/dist/lib/errors/RetriesExhausted.js +31 -0
- package/dist/lib/errors/Transient.d.ts +115 -0
- package/dist/lib/errors/Transient.d.ts.map +1 -0
- package/dist/lib/errors/Transient.js +54 -0
- package/dist/lib/errors/index.d.ts +14 -0
- package/dist/lib/errors/index.d.ts.map +1 -0
- package/dist/lib/errors/index.js +16 -0
- package/dist/lib/errors/retry-policy.d.ts +60 -0
- package/dist/lib/errors/retry-policy.d.ts.map +1 -0
- package/dist/lib/errors/retry-policy.js +54 -0
- package/dist/lib/flushScheduler.d.ts +162 -0
- package/dist/lib/flushScheduler.d.ts.map +1 -0
- package/dist/lib/flushScheduler.js +388 -0
- package/dist/lib/library.d.ts +149 -0
- package/dist/lib/library.d.ts.map +1 -0
- package/dist/lib/library.js +588 -0
- package/dist/lib/logApi.d.ts +61 -0
- package/dist/lib/logApi.d.ts.map +1 -0
- package/dist/lib/logApi.js +12 -0
- package/dist/lib/logBinding.d.ts +63 -0
- package/dist/lib/logBinding.d.ts.map +1 -0
- package/dist/lib/logBinding.js +1 -0
- package/dist/lib/op.d.ts +105 -0
- package/dist/lib/op.d.ts.map +1 -0
- package/dist/lib/op.js +59 -0
- package/dist/lib/opContext/contextTypes.d.ts +88 -0
- package/dist/lib/opContext/contextTypes.d.ts.map +1 -0
- package/dist/lib/opContext/contextTypes.js +34 -0
- package/dist/lib/opContext/createOpGroup.d.ts +57 -0
- package/dist/lib/opContext/createOpGroup.d.ts.map +1 -0
- package/dist/lib/opContext/createOpGroup.js +341 -0
- package/dist/lib/opContext/defineOp.d.ts +83 -0
- package/dist/lib/opContext/defineOp.d.ts.map +1 -0
- package/dist/lib/opContext/defineOp.js +197 -0
- package/dist/lib/opContext/featureFlagTypes.d.ts +58 -0
- package/dist/lib/opContext/featureFlagTypes.d.ts.map +1 -0
- package/dist/lib/opContext/featureFlagTypes.js +1 -0
- package/dist/lib/opContext/index.d.ts +13 -0
- package/dist/lib/opContext/index.d.ts.map +1 -0
- package/dist/lib/opContext/index.js +15 -0
- package/dist/lib/opContext/opGroupTypes.d.ts +250 -0
- package/dist/lib/opContext/opGroupTypes.d.ts.map +1 -0
- package/dist/lib/opContext/opGroupTypes.js +31 -0
- package/dist/lib/opContext/opTypes.d.ts +48 -0
- package/dist/lib/opContext/opTypes.d.ts.map +1 -0
- package/dist/lib/opContext/opTypes.js +7 -0
- package/dist/lib/opContext/spanContextTypes.d.ts +347 -0
- package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -0
- package/dist/lib/opContext/spanContextTypes.js +1 -0
- package/dist/lib/opContext/types.d.ts +297 -0
- package/dist/lib/opContext/types.d.ts.map +1 -0
- package/dist/lib/opContext/types.js +16 -0
- package/dist/lib/result.d.ts +308 -0
- package/dist/lib/result.d.ts.map +1 -0
- package/dist/lib/result.js +359 -0
- package/dist/lib/schema/LogSchema.d.ts +62 -0
- package/dist/lib/schema/LogSchema.d.ts.map +1 -0
- package/dist/lib/schema/LogSchema.js +134 -0
- package/dist/lib/schema/builder.d.ts +12 -0
- package/dist/lib/schema/builder.d.ts.map +1 -0
- package/dist/lib/schema/builder.js +169 -0
- package/dist/lib/schema/defineFeatureFlags.d.ts +60 -0
- package/dist/lib/schema/defineFeatureFlags.d.ts.map +1 -0
- package/dist/lib/schema/defineFeatureFlags.js +29 -0
- package/dist/lib/schema/defineLogSchema.d.ts +87 -0
- package/dist/lib/schema/defineLogSchema.d.ts.map +1 -0
- package/dist/lib/schema/defineLogSchema.js +171 -0
- package/dist/lib/schema/evaluator.d.ts +267 -0
- package/dist/lib/schema/evaluator.d.ts.map +1 -0
- package/dist/lib/schema/evaluator.js +169 -0
- package/dist/lib/schema/extend.d.ts +14 -0
- package/dist/lib/schema/extend.d.ts.map +1 -0
- package/dist/lib/schema/extend.js +51 -0
- package/dist/lib/schema/systemSchema.d.ts +112 -0
- package/dist/lib/schema/systemSchema.d.ts.map +1 -0
- package/dist/lib/schema/systemSchema.js +260 -0
- package/dist/lib/schema/typeGuards.d.ts +52 -0
- package/dist/lib/schema/typeGuards.d.ts.map +1 -0
- package/dist/lib/schema/typeGuards.js +127 -0
- package/dist/lib/schema/types.d.ts +156 -0
- package/dist/lib/schema/types.d.ts.map +1 -0
- package/dist/lib/schema/types.js +4 -0
- package/dist/lib/spanBuffer.d.ts +133 -0
- package/dist/lib/spanBuffer.d.ts.map +1 -0
- package/dist/lib/spanBuffer.js +442 -0
- package/dist/lib/spanBufferHelpers.d.ts +53 -0
- package/dist/lib/spanBufferHelpers.d.ts.map +1 -0
- package/dist/lib/spanBufferHelpers.js +65 -0
- package/dist/lib/spanBufferStats.d.ts +38 -0
- package/dist/lib/spanBufferStats.d.ts.map +1 -0
- package/dist/lib/spanBufferStats.js +1 -0
- package/dist/lib/spanContext.d.ts +141 -0
- package/dist/lib/spanContext.d.ts.map +1 -0
- package/dist/lib/spanContext.js +763 -0
- package/dist/lib/sqlite/index.d.ts +14 -0
- package/dist/lib/sqlite/index.d.ts.map +1 -0
- package/dist/lib/sqlite/index.js +12 -0
- package/dist/lib/sqlite/sqlite-async-writer.d.ts +24 -0
- package/dist/lib/sqlite/sqlite-async-writer.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-async-writer.js +65 -0
- package/dist/lib/sqlite/sqlite-common.d.ts +37 -0
- package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-common.js +207 -0
- package/dist/lib/sqlite/sqlite-d1.d.ts +25 -0
- package/dist/lib/sqlite/sqlite-d1.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-d1.js +67 -0
- package/dist/lib/sqlite/sqlite-db.d.ts +29 -0
- package/dist/lib/sqlite/sqlite-db.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-db.js +1 -0
- package/dist/lib/sqlite/sqlite-node.d.ts +16 -0
- package/dist/lib/sqlite/sqlite-node.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-node.js +68 -0
- package/dist/lib/sqlite/sqlite-writer.d.ts +39 -0
- package/dist/lib/sqlite/sqlite-writer.d.ts.map +1 -0
- package/dist/lib/sqlite/sqlite-writer.js +78 -0
- package/dist/lib/testing/bun-harness.d.ts +150 -0
- package/dist/lib/testing/bun-harness.d.ts.map +1 -0
- package/dist/lib/testing/bun-harness.js +729 -0
- package/dist/lib/testing/extractFacts.d.ts +73 -0
- package/dist/lib/testing/extractFacts.d.ts.map +1 -0
- package/dist/lib/testing/extractFacts.js +237 -0
- package/dist/lib/testing/facts.d.ts +235 -0
- package/dist/lib/testing/facts.d.ts.map +1 -0
- package/dist/lib/testing/facts.js +209 -0
- package/dist/lib/testing/index.d.ts +58 -0
- package/dist/lib/testing/index.d.ts.map +1 -0
- package/dist/lib/testing/index.js +74 -0
- package/dist/lib/testing/queryable-span.d.ts +39 -0
- package/dist/lib/testing/queryable-span.d.ts.map +1 -0
- package/dist/lib/testing/queryable-span.js +58 -0
- package/dist/lib/testing/span-query.d.ts +21 -0
- package/dist/lib/testing/span-query.d.ts.map +1 -0
- package/dist/lib/testing/span-query.js +47 -0
- package/dist/lib/testing/stdio-replay.d.ts +4 -0
- package/dist/lib/testing/stdio-replay.d.ts.map +1 -0
- package/dist/lib/testing/stdio-replay.js +42 -0
- package/dist/lib/testing/trace-query.d.ts +59 -0
- package/dist/lib/testing/trace-query.d.ts.map +1 -0
- package/dist/lib/testing/trace-query.js +462 -0
- package/dist/lib/testing/vitest-harness.d.ts +135 -0
- package/dist/lib/testing/vitest-harness.d.ts.map +1 -0
- package/dist/lib/testing/vitest-harness.js +486 -0
- package/dist/lib/threadId.d.ts +58 -0
- package/dist/lib/threadId.d.ts.map +1 -0
- package/dist/lib/threadId.js +123 -0
- package/dist/lib/traceContext.d.ts +116 -0
- package/dist/lib/traceContext.d.ts.map +1 -0
- package/dist/lib/traceContext.js +37 -0
- package/dist/lib/traceId.d.ts +78 -0
- package/dist/lib/traceId.d.ts.map +1 -0
- package/dist/lib/traceId.js +87 -0
- package/dist/lib/traceRoot.d.ts +133 -0
- package/dist/lib/traceRoot.d.ts.map +1 -0
- package/dist/lib/traceRoot.es.d.ts +75 -0
- package/dist/lib/traceRoot.es.d.ts.map +1 -0
- package/dist/lib/traceRoot.es.js +129 -0
- package/dist/lib/traceRoot.js +19 -0
- package/dist/lib/traceRoot.node.d.ts +77 -0
- package/dist/lib/traceRoot.node.d.ts.map +1 -0
- package/dist/lib/traceRoot.node.js +133 -0
- package/dist/lib/traceRoot.universal.d.ts +3 -0
- package/dist/lib/traceRoot.universal.d.ts.map +1 -0
- package/dist/lib/traceRoot.universal.js +17 -0
- package/dist/lib/tracer.d.ts +296 -0
- package/dist/lib/tracer.d.ts.map +1 -0
- package/dist/lib/tracer.js +346 -0
- package/dist/lib/tracers/ArrayQueueTracer.d.ts +56 -0
- package/dist/lib/tracers/ArrayQueueTracer.d.ts.map +1 -0
- package/dist/lib/tracers/ArrayQueueTracer.js +67 -0
- package/dist/lib/tracers/CompositeTracer.d.ts +24 -0
- package/dist/lib/tracers/CompositeTracer.d.ts.map +1 -0
- package/dist/lib/tracers/CompositeTracer.js +57 -0
- package/dist/lib/tracers/NoOpTracer.d.ts +58 -0
- package/dist/lib/tracers/NoOpTracer.d.ts.map +1 -0
- package/dist/lib/tracers/NoOpTracer.js +41 -0
- package/dist/lib/tracers/SQLiteTracer.d.ts +42 -0
- package/dist/lib/tracers/SQLiteTracer.d.ts.map +1 -0
- package/dist/lib/tracers/SQLiteTracer.js +84 -0
- package/dist/lib/tracers/StdioTracer.d.ts +83 -0
- package/dist/lib/tracers/StdioTracer.d.ts.map +1 -0
- package/dist/lib/tracers/StdioTracer.js +270 -0
- package/dist/lib/tracers/TestTracer.d.ts +95 -0
- package/dist/lib/tracers/TestTracer.d.ts.map +1 -0
- package/dist/lib/tracers/TestTracer.js +87 -0
- package/dist/lib/tracers/index.d.ts +12 -0
- package/dist/lib/tracers/index.d.ts.map +1 -0
- package/dist/lib/tracers/index.js +11 -0
- package/dist/lib/types.d.ts +366 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +1 -0
- package/dist/lib/utf8Cache.d.ts +111 -0
- package/dist/lib/utf8Cache.d.ts.map +1 -0
- package/dist/lib/utf8Cache.js +177 -0
- package/dist/lib/wasm/WasmBufferStrategy.d.ts +88 -0
- package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -0
- package/dist/lib/wasm/WasmBufferStrategy.js +138 -0
- package/dist/lib/wasm/wasmAllocator.d.ts +109 -0
- package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -0
- package/dist/lib/wasm/wasmAllocator.js +227 -0
- package/dist/lib/wasm/wasmSpanBuffer.d.ts +123 -0
- package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -0
- package/dist/lib/wasm/wasmSpanBuffer.js +772 -0
- package/dist/lib/wasm/wasmTraceRoot.d.ts +167 -0
- package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -0
- package/dist/lib/wasm/wasmTraceRoot.js +264 -0
- package/dist/node.d.ts +7 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +8 -0
- package/dist/testing.d.ts +18 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +17 -0
- package/package.json +193 -0
- package/src/bun/preload.ts +11 -0
- package/src/bun/trace-preload.ts +14 -0
- package/src/es.ts +11 -0
- package/src/index.ts +194 -0
- package/src/lib/JsBufferStrategy.ts +102 -0
- package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +485 -0
- package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +390 -0
- package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +647 -0
- package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +292 -0
- package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +354 -0
- package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +127 -0
- package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +392 -0
- package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +389 -0
- package/src/lib/__tests__/arrow-conversion-algorithms.test.ts +54 -0
- package/src/lib/__tests__/arrow-test-helpers.ts +71 -0
- package/src/lib/__tests__/binary-e2e.test.ts +203 -0
- package/src/lib/__tests__/buffer-overflow-op-api.test.ts +608 -0
- package/src/lib/__tests__/buffer-overflow.test.ts +612 -0
- package/src/lib/__tests__/capacity-tuning.test.ts +544 -0
- package/src/lib/__tests__/effective-schema.test.ts +439 -0
- package/src/lib/__tests__/flechette.test.ts +42 -0
- package/src/lib/__tests__/flushScheduler.test.ts +537 -0
- package/src/lib/__tests__/integration.test.ts +600 -0
- package/src/lib/__tests__/library.test.ts +934 -0
- package/src/lib/__tests__/nested-library-tasks.test.ts +849 -0
- package/src/lib/__tests__/op-context-binding.test.ts +135 -0
- package/src/lib/__tests__/op-metadata.test.ts +198 -0
- package/src/lib/__tests__/op-type-safety.test.ts +71 -0
- package/src/lib/__tests__/package-exports.test.ts +57 -0
- package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +319 -0
- package/src/lib/__tests__/remapped-buffer-view.test.ts +635 -0
- package/src/lib/__tests__/scope-attributes.test.ts +348 -0
- package/src/lib/__tests__/span-lifecycle.test.ts +680 -0
- package/src/lib/__tests__/sync-async-trace.test.ts +435 -0
- package/src/lib/__tests__/test-helpers.ts +318 -0
- package/src/lib/__tests__/timestamp.test.ts +259 -0
- package/src/lib/__tests__/trace-archive-primitives.test.ts +98 -0
- package/src/lib/__tests__/traceContext-type-enforcement.test.ts +271 -0
- package/src/lib/__tests__/tracer.test.ts +211 -0
- package/src/lib/__tests__/type-narrowing.test.ts +137 -0
- package/src/lib/archive/chunkCompaction.ts +44 -0
- package/src/lib/archive/chunkEnvelope.ts +79 -0
- package/src/lib/archive/chunkRouting.ts +70 -0
- package/src/lib/archive/chunkStats.ts +25 -0
- package/src/lib/archive/index.ts +4 -0
- package/src/lib/arrow/capacityStats.ts +340 -0
- package/src/lib/arrow/dictionaries.ts +159 -0
- package/src/lib/arrow/flechette.ts +114 -0
- package/src/lib/arrow/utils.ts +126 -0
- package/src/lib/buffer/Nanoseconds.ts +131 -0
- package/src/lib/bufferStrategy.ts +106 -0
- package/src/lib/capacityTuning.ts +102 -0
- package/src/lib/codegen/__tests__/__snapshots__/evaluatorGenerator.test.ts.snap +160 -0
- package/src/lib/codegen/__tests__/__snapshots__/scopeGenerator.test.ts.snap +196 -0
- package/src/lib/codegen/__tests__/__snapshots__/spanLoggerGenerator.test.ts.snap +1965 -0
- package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +516 -0
- package/src/lib/codegen/__tests__/nullBitmap.test.ts +207 -0
- package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +237 -0
- package/src/lib/codegen/evaluatorGenerator.ts +309 -0
- package/src/lib/codegen/fixedPositionWriterGenerator.ts +444 -0
- package/src/lib/codegen/spanLoggerGenerator.ts +715 -0
- package/src/lib/convertToArrow.ts +1805 -0
- package/src/lib/defineOpContext.ts +398 -0
- package/src/lib/errors/Blocked.ts +165 -0
- package/src/lib/errors/CodeError.ts +132 -0
- package/src/lib/errors/RetriesExhausted.ts +78 -0
- package/src/lib/errors/Transient.ts +168 -0
- package/src/lib/errors/__tests__/Blocked-config.test.ts +152 -0
- package/src/lib/errors/__tests__/Transient.test.ts +129 -0
- package/src/lib/errors/__tests__/retry-policy.test.ts +85 -0
- package/src/lib/errors/index.ts +24 -0
- package/src/lib/errors/retry-policy.ts +87 -0
- package/src/lib/flushScheduler.ts +509 -0
- package/src/lib/library.ts +682 -0
- package/src/lib/logApi.ts +70 -0
- package/src/lib/logBinding.ts +67 -0
- package/src/lib/op.ts +103 -0
- package/src/lib/opContext/__tests__/retry.test.ts +764 -0
- package/src/lib/opContext/contextTypes.ts +130 -0
- package/src/lib/opContext/createOpGroup.ts +456 -0
- package/src/lib/opContext/defineOp.ts +281 -0
- package/src/lib/opContext/featureFlagTypes.ts +54 -0
- package/src/lib/opContext/index.ts +16 -0
- package/src/lib/opContext/opGroupTypes.ts +342 -0
- package/src/lib/opContext/opTypes.ts +80 -0
- package/src/lib/opContext/spanContextTypes.ts +398 -0
- package/src/lib/opContext/types.ts +403 -0
- package/src/lib/result.ts +550 -0
- package/src/lib/schema/LogSchema.ts +153 -0
- package/src/lib/schema/__tests__/defineLogSchema.test.ts +342 -0
- package/src/lib/schema/__tests__/featureFlags.test.ts +443 -0
- package/src/lib/schema/builder.ts +201 -0
- package/src/lib/schema/defineFeatureFlags.ts +91 -0
- package/src/lib/schema/defineLogSchema.ts +291 -0
- package/src/lib/schema/evaluator.ts +404 -0
- package/src/lib/schema/extend.ts +69 -0
- package/src/lib/schema/systemSchema.ts +339 -0
- package/src/lib/schema/typeGuards.ts +163 -0
- package/src/lib/schema/types.ts +265 -0
- package/src/lib/spanBuffer.ts +571 -0
- package/src/lib/spanBufferHelpers.ts +73 -0
- package/src/lib/spanBufferStats.ts +40 -0
- package/src/lib/spanContext.ts +1566 -0
- package/src/lib/sqlite/__tests__/sqlite-common.test.ts +89 -0
- package/src/lib/sqlite/index.ts +26 -0
- package/src/lib/sqlite/sqlite-async-writer.ts +101 -0
- package/src/lib/sqlite/sqlite-common.ts +309 -0
- package/src/lib/sqlite/sqlite-d1.ts +104 -0
- package/src/lib/sqlite/sqlite-db.ts +32 -0
- package/src/lib/sqlite/sqlite-node.ts +83 -0
- package/src/lib/sqlite/sqlite-writer.ts +128 -0
- package/src/lib/testing/TRACE-TESTING.md +100 -0
- package/src/lib/testing/__tests__/bun-harness.test.ts +108 -0
- package/src/lib/testing/__tests__/extractFacts.test.ts +279 -0
- package/src/lib/testing/__tests__/facts.test.ts +324 -0
- package/src/lib/testing/__tests__/vitest-harness.test.ts +32 -0
- package/src/lib/testing/bun-harness.ts +990 -0
- package/src/lib/testing/extractFacts.ts +362 -0
- package/src/lib/testing/facts.ts +470 -0
- package/src/lib/testing/index.ts +141 -0
- package/src/lib/testing/queryable-span.ts +108 -0
- package/src/lib/testing/span-query.ts +65 -0
- package/src/lib/testing/stdio-replay.ts +50 -0
- package/src/lib/testing/trace-query.ts +329 -0
- package/src/lib/testing/vitest-harness.ts +691 -0
- package/src/lib/threadId.ts +135 -0
- package/src/lib/traceContext.ts +182 -0
- package/src/lib/traceId.ts +142 -0
- package/src/lib/traceRoot.es.ts +157 -0
- package/src/lib/traceRoot.node.ts +170 -0
- package/src/lib/traceRoot.ts +154 -0
- package/src/lib/traceRoot.universal.ts +22 -0
- package/src/lib/tracer.ts +896 -0
- package/src/lib/tracers/ArrayQueueTracer.ts +76 -0
- package/src/lib/tracers/CompositeTracer.ts +76 -0
- package/src/lib/tracers/NoOpTracer.ts +73 -0
- package/src/lib/tracers/SQLiteTracer.ts +115 -0
- package/src/lib/tracers/StdioTracer.ts +380 -0
- package/src/lib/tracers/TestTracer.ts +146 -0
- package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +184 -0
- package/src/lib/tracers/__tests__/NoOpTracer.test.ts +204 -0
- package/src/lib/tracers/__tests__/StdioTracer.test.ts +313 -0
- package/src/lib/tracers/__tests__/TestTracer.test.ts +200 -0
- package/src/lib/tracers/index.ts +12 -0
- package/src/lib/types.ts +498 -0
- package/src/lib/utf8Cache.ts +201 -0
- package/src/lib/wasm/WasmBufferStrategy.ts +219 -0
- package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +256 -0
- package/src/lib/wasm/__tests__/wasm-integration.test.ts +476 -0
- package/src/lib/wasm/__tests__/wasmAllocator.test.ts +699 -0
- package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +449 -0
- package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +390 -0
- package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +444 -0
- package/src/lib/wasm/allocator.zig +945 -0
- package/src/lib/wasm/wasmAllocator.ts +469 -0
- package/src/lib/wasm/wasmSpanBuffer.ts +1014 -0
- package/src/lib/wasm/wasmTraceRoot.ts +315 -0
- package/src/node.ts +10 -0
- package/src/testing.ts +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluatorGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/evaluatorGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EACV,aAAa,EAEb,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,GAAG,SAAS,SAAS;IAC3D,GAAG,CAAC,CAAC,SAAS,MAAM,4BAA4B,CAAC,GAAG,CAAC,GAAG,MAAM,EAC5D,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC5E,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,0BAA0B,CAAC,GAAG,SAAS,SAAS,IAAI,sBAAsB,CAAC,GAAG,CAAC,GACzF,4BAA4B,CAAC,GAAG,CAAC,CAAC;AAEpC,KAAK,6BAA6B,CAAC,GAAG,SAAS,SAAS,IAAI,KAC1D,WAAW,EAAE,oBAAoB,CAAC,GAAG,CAAC,EACtC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,KAC1B,0BAA0B,CAAC,GAAG,CAAC,CAAC;AAErC,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,OAAO,KAAK,OAAO,CAAC;AA4E9G;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,iBAAiB,EAChE,MAAM,EAAE,CAAC,EACT,SAAS,SAAuB,GAC/B,MAAM,CA2BR;AAwHD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,SAAS,SAAS,EACxD,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,oBAAoB,EAAE,MAAM,GAC3B,6BAA6B,CAAC,GAAG,CAAC,CA6BpC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker-safe feature-flag evaluator generation.
|
|
3
|
+
*
|
|
4
|
+
* Getter descriptors still live on the prototype, but the class is assembled with
|
|
5
|
+
* normal closures and `Object.defineProperties()` instead of `new Function(...)`.
|
|
6
|
+
*/
|
|
7
|
+
import { isRecord } from '@smoothbricks/validation';
|
|
8
|
+
/**
|
|
9
|
+
* Cache for generated evaluator classes by schema reference.
|
|
10
|
+
*/
|
|
11
|
+
const evaluatorClassCache = new WeakMap();
|
|
12
|
+
function isGeneratedEvaluatorConstructor(value) {
|
|
13
|
+
return typeof value === 'function';
|
|
14
|
+
}
|
|
15
|
+
function isGeneratedEvaluatorInstance(value) {
|
|
16
|
+
return isRecord(value);
|
|
17
|
+
}
|
|
18
|
+
function isAnySpanBuffer(value) {
|
|
19
|
+
return isRecord(value) && '_writeIndex' in value && 'entry_type' in value;
|
|
20
|
+
}
|
|
21
|
+
function isInternalSpanLogger(value) {
|
|
22
|
+
return isRecord(value) && 'ffAccess' in value && 'ffUsage' in value;
|
|
23
|
+
}
|
|
24
|
+
function getEvaluatorRuntimeContext(ctx) {
|
|
25
|
+
if (!isRecord(ctx) || !('_buffer' in ctx) || !('log' in ctx)) {
|
|
26
|
+
throw new Error('Feature-flag evaluator requires an internal span context');
|
|
27
|
+
}
|
|
28
|
+
if (!isAnySpanBuffer(ctx._buffer) || !isInternalSpanLogger(ctx.log)) {
|
|
29
|
+
throw new Error('Feature-flag evaluator requires runtime span buffer and logger internals');
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
...ctx,
|
|
33
|
+
_buffer: ctx._buffer,
|
|
34
|
+
log: ctx.log,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function createFlagGetter(flagName) {
|
|
38
|
+
return function generatedFlagGetter() {
|
|
39
|
+
return this.getFlag(flagName);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function buildGetterDescriptor(flagName) {
|
|
43
|
+
return {
|
|
44
|
+
configurable: true,
|
|
45
|
+
enumerable: false,
|
|
46
|
+
get: createFlagGetter(flagName),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function buildGetterDescriptors(flagNames) {
|
|
50
|
+
const descriptors = {};
|
|
51
|
+
for (const flagName of flagNames) {
|
|
52
|
+
descriptors[flagName] = buildGetterDescriptor(flagName);
|
|
53
|
+
}
|
|
54
|
+
return descriptors;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Render a debug view of the worker-safe generated class.
|
|
58
|
+
*
|
|
59
|
+
* This exists for snapshots/tests only; runtime assembly happens without eval.
|
|
60
|
+
*/
|
|
61
|
+
export function generateEvaluatorClass(schema, className = 'GeneratedEvaluator') {
|
|
62
|
+
const flagNames = Object.keys(schema);
|
|
63
|
+
const getterEntries = flagNames
|
|
64
|
+
.map((flagName) => ` ${flagName}: {
|
|
65
|
+
configurable: true,
|
|
66
|
+
enumerable: false,
|
|
67
|
+
get() {
|
|
68
|
+
return this.getFlag('${flagName}');
|
|
69
|
+
},
|
|
70
|
+
}`)
|
|
71
|
+
.join(',\n');
|
|
72
|
+
return `class ${className} extends WorkerSafeGeneratedEvaluator {
|
|
73
|
+
constructor(spanContext, evaluator) {
|
|
74
|
+
super(spanContext, evaluator, SCHEMA, validateFlagValue, ENTRY_TYPE_FF_ACCESS);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
forContext(ctx) {
|
|
78
|
+
return new ${className}(ctx, this.evaluator);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Object.defineProperties(${className}.prototype, {
|
|
83
|
+
${getterEntries}
|
|
84
|
+
});`;
|
|
85
|
+
}
|
|
86
|
+
class WorkerSafeGeneratedEvaluator {
|
|
87
|
+
#spanContext;
|
|
88
|
+
#evaluator;
|
|
89
|
+
#schema;
|
|
90
|
+
#validateFlagValue;
|
|
91
|
+
#entryTypeFfAccess;
|
|
92
|
+
constructor(spanContext, evaluator, schema, validateFlagValue, entryTypeFfAccess) {
|
|
93
|
+
this.#spanContext = getEvaluatorRuntimeContext(spanContext);
|
|
94
|
+
this.#evaluator = evaluator;
|
|
95
|
+
this.#schema = schema;
|
|
96
|
+
this.#validateFlagValue = validateFlagValue;
|
|
97
|
+
this.#entryTypeFfAccess = entryTypeFfAccess;
|
|
98
|
+
}
|
|
99
|
+
get evaluator() {
|
|
100
|
+
return this.#evaluator;
|
|
101
|
+
}
|
|
102
|
+
hasLoggedAccess(flagName) {
|
|
103
|
+
let buf = this.#spanContext._buffer;
|
|
104
|
+
while (buf) {
|
|
105
|
+
const limit = buf._writeIndex;
|
|
106
|
+
for (let i = limit - 1; i >= 0; i--) {
|
|
107
|
+
if (buf.entry_type[i] === this.#entryTypeFfAccess && buf.message_values && buf.message_values[i] === flagName) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
buf = buf._overflow;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
getFlag(flagName) {
|
|
116
|
+
const ctx = this.#spanContext;
|
|
117
|
+
const definition = this.getDefinition(flagName);
|
|
118
|
+
const rawValue = this.#evaluator.getSync(ctx, flagName);
|
|
119
|
+
const value = this.#validateFlagValue(rawValue, definition.schema, definition.defaultValue);
|
|
120
|
+
if (!this.hasLoggedAccess(flagName)) {
|
|
121
|
+
this.getLogger().ffAccess(flagName, rawValue);
|
|
122
|
+
}
|
|
123
|
+
if (!value) {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
return this.wrapValue(flagName, value);
|
|
127
|
+
}
|
|
128
|
+
async get(flag) {
|
|
129
|
+
const ctx = this.#spanContext;
|
|
130
|
+
const definition = this.getDefinition(flag);
|
|
131
|
+
const rawValue = await this.#evaluator.getAsync(ctx, flag);
|
|
132
|
+
const value = this.#validateFlagValue(rawValue, definition.schema, definition.defaultValue);
|
|
133
|
+
if (!this.hasLoggedAccess(flag)) {
|
|
134
|
+
this.getLogger().ffAccess(flag, rawValue);
|
|
135
|
+
}
|
|
136
|
+
if (!value) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
return this.wrapValue(flag, value);
|
|
140
|
+
}
|
|
141
|
+
forContext(_ctx) {
|
|
142
|
+
throw new Error('forContext() must be implemented by the schema-specific evaluator class');
|
|
143
|
+
}
|
|
144
|
+
getDefinition(flagName) {
|
|
145
|
+
const definition = this.#schema[flagName];
|
|
146
|
+
if (!definition) {
|
|
147
|
+
throw new Error(`Unknown feature flag: ${flagName}`);
|
|
148
|
+
}
|
|
149
|
+
return definition;
|
|
150
|
+
}
|
|
151
|
+
wrapValue(flagName, value) {
|
|
152
|
+
const track = (context) => this.logUsage(flagName, context);
|
|
153
|
+
if (typeof value === 'boolean') {
|
|
154
|
+
return { value: true, track };
|
|
155
|
+
}
|
|
156
|
+
if (typeof value === 'string') {
|
|
157
|
+
return { value, track };
|
|
158
|
+
}
|
|
159
|
+
if (typeof value === 'object' && value !== null) {
|
|
160
|
+
return { ...value, track };
|
|
161
|
+
}
|
|
162
|
+
return { value, track };
|
|
163
|
+
}
|
|
164
|
+
getLogger() {
|
|
165
|
+
return this.#spanContext.log;
|
|
166
|
+
}
|
|
167
|
+
logUsage(flagName, context) {
|
|
168
|
+
return this.getLogger().ffUsage(flagName, context ? { ...context } : undefined);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create evaluator class constructor from schema.
|
|
173
|
+
* This is the cold-path function called at schema definition time.
|
|
174
|
+
*/
|
|
175
|
+
export function createEvaluatorClass(schema, validateFlagValue, ENTRY_TYPE_FF_ACCESS) {
|
|
176
|
+
const cached = evaluatorClassCache.get(schema);
|
|
177
|
+
if (isGeneratedEvaluatorConstructor(cached)) {
|
|
178
|
+
return cached;
|
|
179
|
+
}
|
|
180
|
+
class GeneratedEvaluator extends WorkerSafeGeneratedEvaluator {
|
|
181
|
+
constructor(spanContext, evaluator) {
|
|
182
|
+
super(spanContext, evaluator, schema, validateFlagValue, ENTRY_TYPE_FF_ACCESS);
|
|
183
|
+
}
|
|
184
|
+
forContext(ctx) {
|
|
185
|
+
const nextEvaluator = new GeneratedEvaluator(ctx, this.evaluator);
|
|
186
|
+
if (!isGeneratedEvaluatorInstance(nextEvaluator)) {
|
|
187
|
+
throw new Error('Failed to create feature-flag evaluator instance');
|
|
188
|
+
}
|
|
189
|
+
return nextEvaluator;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
Object.defineProperties(GeneratedEvaluator.prototype, buildGetterDescriptors(Object.keys(schema)));
|
|
193
|
+
const generatedEvaluatorClass = GeneratedEvaluator;
|
|
194
|
+
evaluatorClassCache.set(schema, generatedEvaluatorClass);
|
|
195
|
+
if (!isGeneratedEvaluatorConstructor(generatedEvaluatorClass)) {
|
|
196
|
+
throw new Error('Failed to generate feature-flag evaluator constructor');
|
|
197
|
+
}
|
|
198
|
+
return generatedEvaluatorClass;
|
|
199
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime code generation for TagWriter and ResultWriter classes
|
|
3
|
+
*
|
|
4
|
+
* These classes provide fluent setter methods that write to a fixed position in a SpanBuffer:
|
|
5
|
+
* - TagWriter: writes to position 0 (span-start row) via ctx.tag.userId("123")
|
|
6
|
+
* - ResultWriter: writes to position 1 (result row) via ctx.ok(data).userId("123")
|
|
7
|
+
*
|
|
8
|
+
* Both share the same codegen since they only differ in:
|
|
9
|
+
* 1. The fixed position (0 vs 1)
|
|
10
|
+
* 2. ResultWriter has additional _result/_error properties
|
|
11
|
+
*
|
|
12
|
+
* WHY Fixed Positions:
|
|
13
|
+
* - Row 0: span-start entry (written at span creation, attributes set via ctx.tag)
|
|
14
|
+
* - Row 1: span-end entry (written at ctx.ok()/ctx.err(), attributes set via fluent API)
|
|
15
|
+
*
|
|
16
|
+
* Pattern:
|
|
17
|
+
* - Each setter calls this._buffer.columnName(this._pos, value) and returns this
|
|
18
|
+
* - Fluent chaining: ctx.tag.userId("123").requestId("abc")
|
|
19
|
+
* - Zero allocation: returns same object reference
|
|
20
|
+
*/
|
|
21
|
+
import type { InferSchema, LogSchema } from '../schema/types.js';
|
|
22
|
+
import type { AnySpanBuffer } from '../types.js';
|
|
23
|
+
/**
|
|
24
|
+
* Extension options for injecting custom code into generated writer classes.
|
|
25
|
+
*/
|
|
26
|
+
export interface FixedPositionWriterExtension {
|
|
27
|
+
/**
|
|
28
|
+
* Additional code to add to the constructor (after buffer assignment).
|
|
29
|
+
* Has access to `this` and constructorParams.
|
|
30
|
+
*/
|
|
31
|
+
constructorCode?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Additional methods to add to the class body.
|
|
34
|
+
*/
|
|
35
|
+
methods?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Constructor parameters beyond buffer.
|
|
38
|
+
* Added AFTER buffer in the constructor signature.
|
|
39
|
+
* @example "result, isError"
|
|
40
|
+
*/
|
|
41
|
+
constructorParams?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* TagWriter interface - fluent setter API for span-start attributes (row 0)
|
|
45
|
+
*/
|
|
46
|
+
export type TagWriter<T extends LogSchema> = {
|
|
47
|
+
/**
|
|
48
|
+
* Bulk set multiple attributes at once.
|
|
49
|
+
*/
|
|
50
|
+
with(attributes: Partial<InferSchema<T>>): TagWriter<T>;
|
|
51
|
+
} & {
|
|
52
|
+
[K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => TagWriter<T>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* ResultWriter interface - fluent setter API for result attributes (row 1)
|
|
56
|
+
*
|
|
57
|
+
* Includes _result and _error properties for accessing the return value or error.
|
|
58
|
+
*/
|
|
59
|
+
export type ResultWriter<T extends LogSchema, R = unknown, E = unknown> = {
|
|
60
|
+
/**
|
|
61
|
+
* The successful result value (set by ctx.ok(data))
|
|
62
|
+
*/
|
|
63
|
+
readonly _result: R | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* The error value (set by ctx.err(error))
|
|
66
|
+
*/
|
|
67
|
+
readonly _error: E | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Whether this is an error result
|
|
70
|
+
*/
|
|
71
|
+
readonly _isError: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Bulk set multiple attributes at once.
|
|
74
|
+
*/
|
|
75
|
+
with(attributes: Partial<InferSchema<T>>): ResultWriter<T, R, E>;
|
|
76
|
+
/**
|
|
77
|
+
* Set the result-row message (row 1).
|
|
78
|
+
*/
|
|
79
|
+
message(text: string): ResultWriter<T, R, E>;
|
|
80
|
+
/**
|
|
81
|
+
* Set the result-row source line (row 1).
|
|
82
|
+
*/
|
|
83
|
+
line(lineNumber: number): ResultWriter<T, R, E>;
|
|
84
|
+
} & {
|
|
85
|
+
[K in keyof InferSchema<T>]: (value: InferSchema<T>[K]) => ResultWriter<T, R, E>;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Generate the complete fixed-position writer class code.
|
|
89
|
+
*
|
|
90
|
+
* @param schema - Tag attribute schema defining columns
|
|
91
|
+
* @param position - Fixed position to write to (0 for TagWriter, 1 for ResultWriter)
|
|
92
|
+
* @param className - Name for the generated class
|
|
93
|
+
* @param extension - Optional extension for constructor code, methods, params
|
|
94
|
+
* @returns JavaScript code string for the class
|
|
95
|
+
*/
|
|
96
|
+
export declare function generateFixedPositionWriterClass(schema: LogSchema, position: number, className: string, extension?: FixedPositionWriterExtension): string;
|
|
97
|
+
/**
|
|
98
|
+
* Generate TagWriter class code for a schema.
|
|
99
|
+
* TagWriter writes to position 0 (span-start row).
|
|
100
|
+
*/
|
|
101
|
+
export declare function generateTagWriterClass(schema: LogSchema): string;
|
|
102
|
+
/**
|
|
103
|
+
* Get or create a cached TagWriter class for a schema.
|
|
104
|
+
*
|
|
105
|
+
* @param schema - Tag attribute schema
|
|
106
|
+
* @returns TagWriter class constructor
|
|
107
|
+
*/
|
|
108
|
+
export declare function getTagWriterClass<T extends LogSchema>(schema: T): new (buffer: AnySpanBuffer) => TagWriter<T>;
|
|
109
|
+
/**
|
|
110
|
+
* Create a TagWriter instance for a buffer.
|
|
111
|
+
*
|
|
112
|
+
* @param schema - Tag attribute schema
|
|
113
|
+
* @param buffer - SpanBuffer to write to
|
|
114
|
+
* @returns TagWriter instance bound to position 0
|
|
115
|
+
*/
|
|
116
|
+
export declare function createTagWriter<T extends LogSchema>(schema: T, buffer: AnySpanBuffer): TagWriter<T>;
|
|
117
|
+
/**
|
|
118
|
+
* Generate ResultWriter class code for a schema.
|
|
119
|
+
* ResultWriter writes to position 1 (result row).
|
|
120
|
+
*/
|
|
121
|
+
export declare function generateResultWriterClass(schema: LogSchema): string;
|
|
122
|
+
/**
|
|
123
|
+
* Get or create a cached ResultWriter class for a schema.
|
|
124
|
+
*
|
|
125
|
+
* @param schema - Tag attribute schema
|
|
126
|
+
* @returns ResultWriter class constructor
|
|
127
|
+
*/
|
|
128
|
+
export declare function getResultWriterClass<T extends LogSchema>(schema: T): new <R = unknown, E = unknown>(buffer: AnySpanBuffer, resultOrError: unknown, isError: boolean) => ResultWriter<T, R, E>;
|
|
129
|
+
/**
|
|
130
|
+
* Create a ResultWriter instance for a buffer.
|
|
131
|
+
*
|
|
132
|
+
* @param schema - Tag attribute schema
|
|
133
|
+
* @param buffer - SpanBuffer to write to
|
|
134
|
+
* @param resultOrError - The result value or error
|
|
135
|
+
* @param isError - Whether this is an error result
|
|
136
|
+
* @returns ResultWriter instance bound to position 1
|
|
137
|
+
*/
|
|
138
|
+
export declare function createResultWriter<T extends LogSchema, R = unknown, E = unknown>(schema: T, buffer: AnySpanBuffer, resultOrError: R | E, isError: boolean): ResultWriter<T, R, E>;
|
|
139
|
+
//# sourceMappingURL=fixedPositionWriterGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixedPositionWriterGenerator.d.ts","sourceRoot":"","sources":["../../../src/lib/codegen/fixedPositionWriterGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime code generation for TagWriter and ResultWriter classes
|
|
3
|
+
*
|
|
4
|
+
* These classes provide fluent setter methods that write to a fixed position in a SpanBuffer:
|
|
5
|
+
* - TagWriter: writes to position 0 (span-start row) via ctx.tag.userId("123")
|
|
6
|
+
* - ResultWriter: writes to position 1 (result row) via ctx.ok(data).userId("123")
|
|
7
|
+
*
|
|
8
|
+
* Both share the same codegen since they only differ in:
|
|
9
|
+
* 1. The fixed position (0 vs 1)
|
|
10
|
+
* 2. ResultWriter has additional _result/_error properties
|
|
11
|
+
*
|
|
12
|
+
* WHY Fixed Positions:
|
|
13
|
+
* - Row 0: span-start entry (written at span creation, attributes set via ctx.tag)
|
|
14
|
+
* - Row 1: span-end entry (written at ctx.ok()/ctx.err(), attributes set via fluent API)
|
|
15
|
+
*
|
|
16
|
+
* Pattern:
|
|
17
|
+
* - Each setter calls this._buffer.columnName(this._pos, value) and returns this
|
|
18
|
+
* - Fluent chaining: ctx.tag.userId("123").requestId("abc")
|
|
19
|
+
* - Zero allocation: returns same object reference
|
|
20
|
+
*/
|
|
21
|
+
import { bufferHelpers } from '@smoothbricks/arrow-builder';
|
|
22
|
+
import { getEnumValues, getSchemaType } from '../schema/typeGuards.js';
|
|
23
|
+
function isTagWriterConstructor(value) {
|
|
24
|
+
return typeof value === 'function';
|
|
25
|
+
}
|
|
26
|
+
function isResultWriterConstructor(value) {
|
|
27
|
+
return typeof value === 'function';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate enum value mapping code.
|
|
31
|
+
* Creates a switch-case statement for compile-time enum mapping.
|
|
32
|
+
*/
|
|
33
|
+
function generateEnumMapping(fieldName, enumValues) {
|
|
34
|
+
const cases = enumValues.map((value, index) => ` case ${JSON.stringify(value)}: return ${index};`).join('\n');
|
|
35
|
+
return `
|
|
36
|
+
function getEnumIndex_${fieldName}(value) {
|
|
37
|
+
switch(value) {
|
|
38
|
+
${cases}
|
|
39
|
+
default: return 0;
|
|
40
|
+
}
|
|
41
|
+
}`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Generate setter method code for a single attribute.
|
|
45
|
+
* Calls this._buffer.columnName(this._pos, value) and returns this.
|
|
46
|
+
*/
|
|
47
|
+
function generateSetterMethod(fieldName, schema, hasEnumMapping) {
|
|
48
|
+
const columnName = fieldName;
|
|
49
|
+
const lmaoType = getSchemaType(schema);
|
|
50
|
+
if (lmaoType === 'enum' && hasEnumMapping) {
|
|
51
|
+
return `
|
|
52
|
+
${fieldName}(value) {
|
|
53
|
+
this._buffer.${columnName}(this._pos, getEnumIndex_${fieldName}(value));
|
|
54
|
+
return this;
|
|
55
|
+
}`;
|
|
56
|
+
}
|
|
57
|
+
// All other types: direct pass-through to buffer setter
|
|
58
|
+
// The buffer's setter handles null bitmap and storage details
|
|
59
|
+
return `
|
|
60
|
+
${fieldName}(value) {
|
|
61
|
+
this._buffer.${columnName}(this._pos, value);
|
|
62
|
+
return this;
|
|
63
|
+
}`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate with() method code - bulk attribute setting.
|
|
67
|
+
* UNROLLED per-column code for zero Object.entries overhead.
|
|
68
|
+
*/
|
|
69
|
+
function generateWithMethod(schemaFields, enumFieldNames) {
|
|
70
|
+
const columnWrites = schemaFields.map(([fieldName]) => {
|
|
71
|
+
const hasEnumMapping = enumFieldNames.has(fieldName);
|
|
72
|
+
const valueExpr = hasEnumMapping ? `getEnumIndex_${fieldName}(attributes.${fieldName})` : `attributes.${fieldName}`;
|
|
73
|
+
return `
|
|
74
|
+
if ('${fieldName}' in attributes && attributes.${fieldName} !== null && attributes.${fieldName} !== undefined) {
|
|
75
|
+
this._buffer.${fieldName}(this._pos, ${valueExpr});
|
|
76
|
+
}`;
|
|
77
|
+
});
|
|
78
|
+
return `
|
|
79
|
+
with(attributes) {
|
|
80
|
+
${columnWrites.join('\n')}
|
|
81
|
+
return this;
|
|
82
|
+
}`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate the complete fixed-position writer class code.
|
|
86
|
+
*
|
|
87
|
+
* @param schema - Tag attribute schema defining columns
|
|
88
|
+
* @param position - Fixed position to write to (0 for TagWriter, 1 for ResultWriter)
|
|
89
|
+
* @param className - Name for the generated class
|
|
90
|
+
* @param extension - Optional extension for constructor code, methods, params
|
|
91
|
+
* @returns JavaScript code string for the class
|
|
92
|
+
*/
|
|
93
|
+
export function generateFixedPositionWriterClass(schema, position, className, extension) {
|
|
94
|
+
const schemaFields = schema._columns;
|
|
95
|
+
// Generate enum mapping functions
|
|
96
|
+
const enumMappings = [];
|
|
97
|
+
const enumFieldNames = new Set();
|
|
98
|
+
for (const [fieldName, fieldSchema] of schemaFields) {
|
|
99
|
+
const lmaoType = getSchemaType(fieldSchema);
|
|
100
|
+
const enumValues = getEnumValues(fieldSchema);
|
|
101
|
+
if (lmaoType === 'enum' && enumValues) {
|
|
102
|
+
enumMappings.push(generateEnumMapping(fieldName, enumValues));
|
|
103
|
+
enumFieldNames.add(fieldName);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Generate setter methods
|
|
107
|
+
const setterMethods = schemaFields.map(([fieldName, fieldSchema]) => generateSetterMethod(fieldName, fieldSchema, enumFieldNames.has(fieldName)));
|
|
108
|
+
// Generate with() method
|
|
109
|
+
const withMethod = generateWithMethod(schemaFields, enumFieldNames);
|
|
110
|
+
// Build constructor signature
|
|
111
|
+
const constructorSignature = extension?.constructorParams ? `buffer, ${extension.constructorParams}` : 'buffer';
|
|
112
|
+
// Build constructor body
|
|
113
|
+
// Generated structure: assigns _buffer and _pos, then runs extension constructor code if provided
|
|
114
|
+
const constructorBody = [' this._buffer = buffer;', ` this._pos = ${position};`];
|
|
115
|
+
if (extension?.constructorCode) {
|
|
116
|
+
constructorBody.push('');
|
|
117
|
+
// Extension constructor code runs after _buffer/_pos assignment
|
|
118
|
+
const extensionLines = extension.constructorCode
|
|
119
|
+
.trim()
|
|
120
|
+
.split('\n')
|
|
121
|
+
.map((line) => ` ${line.trim()}`);
|
|
122
|
+
constructorBody.push(...extensionLines);
|
|
123
|
+
}
|
|
124
|
+
// Build extension methods (additional methods injected by the caller)
|
|
125
|
+
const extensionMethods = extension?.methods
|
|
126
|
+
? '\n' +
|
|
127
|
+
extension.methods
|
|
128
|
+
.trim()
|
|
129
|
+
.split('\n')
|
|
130
|
+
.map((line) => ` ${line}`)
|
|
131
|
+
.join('\n')
|
|
132
|
+
: '';
|
|
133
|
+
// Generated class structure:
|
|
134
|
+
// - constructor: assigns _buffer, _pos, then extension code
|
|
135
|
+
// - with(): bulk attribute setting method
|
|
136
|
+
// - Individual setter methods for each schema field
|
|
137
|
+
// - Extension methods (if any)
|
|
138
|
+
const classCode = `
|
|
139
|
+
'use strict';
|
|
140
|
+
|
|
141
|
+
${enumMappings.join('\n')}
|
|
142
|
+
|
|
143
|
+
class ${className} {
|
|
144
|
+
constructor(${constructorSignature}) {
|
|
145
|
+
${constructorBody.join('\n')}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
${withMethod}
|
|
149
|
+
|
|
150
|
+
${setterMethods.join('\n')}
|
|
151
|
+
${extensionMethods}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return ${className};
|
|
155
|
+
`;
|
|
156
|
+
return classCode;
|
|
157
|
+
}
|
|
158
|
+
// ============================================================================
|
|
159
|
+
// Class Caches
|
|
160
|
+
// ============================================================================
|
|
161
|
+
/**
|
|
162
|
+
* Cache for TagWriter classes (position 0).
|
|
163
|
+
* WeakMap allows garbage collection when schema is no longer referenced.
|
|
164
|
+
*/
|
|
165
|
+
const tagWriterClassCache = new WeakMap();
|
|
166
|
+
/**
|
|
167
|
+
* Cache for ResultWriter classes (position 1).
|
|
168
|
+
*/
|
|
169
|
+
const resultWriterClassCache = new WeakMap();
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// TagWriter API
|
|
172
|
+
// ============================================================================
|
|
173
|
+
/**
|
|
174
|
+
* Generate TagWriter class code for a schema.
|
|
175
|
+
* TagWriter writes to position 0 (span-start row).
|
|
176
|
+
*/
|
|
177
|
+
export function generateTagWriterClass(schema) {
|
|
178
|
+
return generateFixedPositionWriterClass(schema, 0, 'GeneratedTagWriter');
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get or create a cached TagWriter class for a schema.
|
|
182
|
+
*
|
|
183
|
+
* @param schema - Tag attribute schema
|
|
184
|
+
* @returns TagWriter class constructor
|
|
185
|
+
*/
|
|
186
|
+
export function getTagWriterClass(schema) {
|
|
187
|
+
let WriterClass = tagWriterClassCache.get(schema);
|
|
188
|
+
if (!WriterClass) {
|
|
189
|
+
const classCode = generateTagWriterClass(schema).trim();
|
|
190
|
+
// Compile with new Function()
|
|
191
|
+
const factory = new Function('helpers', classCode);
|
|
192
|
+
WriterClass = factory(bufferHelpers);
|
|
193
|
+
if (!isTagWriterConstructor(WriterClass)) {
|
|
194
|
+
throw new Error('Failed to generate TagWriter constructor');
|
|
195
|
+
}
|
|
196
|
+
tagWriterClassCache.set(schema, WriterClass);
|
|
197
|
+
}
|
|
198
|
+
if (!isTagWriterConstructor(WriterClass)) {
|
|
199
|
+
throw new Error('Invalid cached TagWriter constructor');
|
|
200
|
+
}
|
|
201
|
+
return WriterClass;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Create a TagWriter instance for a buffer.
|
|
205
|
+
*
|
|
206
|
+
* @param schema - Tag attribute schema
|
|
207
|
+
* @param buffer - SpanBuffer to write to
|
|
208
|
+
* @returns TagWriter instance bound to position 0
|
|
209
|
+
*/
|
|
210
|
+
export function createTagWriter(schema, buffer) {
|
|
211
|
+
const WriterClass = getTagWriterClass(schema);
|
|
212
|
+
return new WriterClass(buffer);
|
|
213
|
+
}
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// ResultWriter API
|
|
216
|
+
// ============================================================================
|
|
217
|
+
/**
|
|
218
|
+
* ResultWriter extension - adds _result, _error, _isError properties
|
|
219
|
+
*
|
|
220
|
+
* Constructor sets _isError, _result, and _error based on the isError flag.
|
|
221
|
+
* Result/error values are already accessible via the properties set in constructor.
|
|
222
|
+
*/
|
|
223
|
+
const resultWriterExtension = {
|
|
224
|
+
constructorParams: 'resultOrError, isError',
|
|
225
|
+
constructorCode: `
|
|
226
|
+
this._isError = isError;
|
|
227
|
+
if (isError) {
|
|
228
|
+
this._error = resultOrError;
|
|
229
|
+
this._result = undefined;
|
|
230
|
+
} else {
|
|
231
|
+
this._result = resultOrError;
|
|
232
|
+
this._error = undefined;
|
|
233
|
+
}
|
|
234
|
+
`,
|
|
235
|
+
methods: `
|
|
236
|
+
message(text) {
|
|
237
|
+
this._buffer.message(this._pos, text);
|
|
238
|
+
return this;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
line(lineNumber) {
|
|
242
|
+
this._buffer.line(this._pos, lineNumber);
|
|
243
|
+
return this;
|
|
244
|
+
}
|
|
245
|
+
`,
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Generate ResultWriter class code for a schema.
|
|
249
|
+
* ResultWriter writes to position 1 (result row).
|
|
250
|
+
*/
|
|
251
|
+
export function generateResultWriterClass(schema) {
|
|
252
|
+
return generateFixedPositionWriterClass(schema, 1, 'GeneratedResultWriter', resultWriterExtension);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get or create a cached ResultWriter class for a schema.
|
|
256
|
+
*
|
|
257
|
+
* @param schema - Tag attribute schema
|
|
258
|
+
* @returns ResultWriter class constructor
|
|
259
|
+
*/
|
|
260
|
+
export function getResultWriterClass(schema) {
|
|
261
|
+
let WriterClass = resultWriterClassCache.get(schema);
|
|
262
|
+
if (!WriterClass) {
|
|
263
|
+
const classCode = generateResultWriterClass(schema).trim();
|
|
264
|
+
// Compile with new Function()
|
|
265
|
+
const factory = new Function('helpers', classCode);
|
|
266
|
+
WriterClass = factory(bufferHelpers);
|
|
267
|
+
if (!isResultWriterConstructor(WriterClass)) {
|
|
268
|
+
throw new Error('Failed to generate ResultWriter constructor');
|
|
269
|
+
}
|
|
270
|
+
resultWriterClassCache.set(schema, WriterClass);
|
|
271
|
+
}
|
|
272
|
+
if (!isResultWriterConstructor(WriterClass)) {
|
|
273
|
+
throw new Error('Invalid cached ResultWriter constructor');
|
|
274
|
+
}
|
|
275
|
+
return WriterClass;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Create a ResultWriter instance for a buffer.
|
|
279
|
+
*
|
|
280
|
+
* @param schema - Tag attribute schema
|
|
281
|
+
* @param buffer - SpanBuffer to write to
|
|
282
|
+
* @param resultOrError - The result value or error
|
|
283
|
+
* @param isError - Whether this is an error result
|
|
284
|
+
* @returns ResultWriter instance bound to position 1
|
|
285
|
+
*/
|
|
286
|
+
export function createResultWriter(schema, buffer, resultOrError, isError) {
|
|
287
|
+
const WriterClass = getResultWriterClass(schema);
|
|
288
|
+
return new WriterClass(buffer, resultOrError, isError);
|
|
289
|
+
}
|