@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,67 @@
|
|
|
1
|
+
import { batchType, bool, Column } from '@uwdata/flechette';
|
|
2
|
+
const EMPTY_VALIDITY = new Uint8Array(0);
|
|
3
|
+
const BOOL_TYPE_ID = bool().typeId;
|
|
4
|
+
export function hasTypeId(value) {
|
|
5
|
+
return typeof value === 'object' && value !== null && 'typeId' in value;
|
|
6
|
+
}
|
|
7
|
+
export function isBoolType(value) {
|
|
8
|
+
return hasTypeId(value) && value.typeId === BOOL_TYPE_ID;
|
|
9
|
+
}
|
|
10
|
+
function isArrowIndexArrayConstructor(value) {
|
|
11
|
+
return value === Uint8Array || value === Uint16Array || value === Uint32Array;
|
|
12
|
+
}
|
|
13
|
+
export function hasArrowIndexType(value) {
|
|
14
|
+
return typeof value === 'object' && value !== null && '__arrow_index_type' in value;
|
|
15
|
+
}
|
|
16
|
+
export function hasArrowIndexMetadata(value) {
|
|
17
|
+
return (hasArrowIndexType(value) && '__index_array_ctor' in value && isArrowIndexArrayConstructor(value.__index_array_ctor));
|
|
18
|
+
}
|
|
19
|
+
export function getArrowIndexTypeOr(value, fallback) {
|
|
20
|
+
return hasArrowIndexType(value) ? value.__arrow_index_type : fallback;
|
|
21
|
+
}
|
|
22
|
+
export function getArrowIndexArrayConstructorOr(value, fallback = Uint8Array) {
|
|
23
|
+
return hasArrowIndexMetadata(value) ? value.__index_array_ctor : fallback;
|
|
24
|
+
}
|
|
25
|
+
export function makeArrowColumn(data) {
|
|
26
|
+
const validity = data.validity ?? EMPTY_VALIDITY;
|
|
27
|
+
if ('dictionary' in data) {
|
|
28
|
+
const batch = new (batchType(data.type))({
|
|
29
|
+
type: data.type,
|
|
30
|
+
length: data.length,
|
|
31
|
+
nullCount: data.nullCount,
|
|
32
|
+
validity,
|
|
33
|
+
values: data.values,
|
|
34
|
+
});
|
|
35
|
+
batch.setDictionary(data.dictionary);
|
|
36
|
+
return new Column([batch]);
|
|
37
|
+
}
|
|
38
|
+
if ('offsets' in data) {
|
|
39
|
+
const batch = new (batchType(data.type))({
|
|
40
|
+
type: data.type,
|
|
41
|
+
length: data.length,
|
|
42
|
+
nullCount: data.nullCount,
|
|
43
|
+
validity,
|
|
44
|
+
offsets: data.offsets,
|
|
45
|
+
values: data.values,
|
|
46
|
+
});
|
|
47
|
+
return new Column([batch]);
|
|
48
|
+
}
|
|
49
|
+
if (isBoolType(data.type)) {
|
|
50
|
+
const batch = new (batchType(data.type))({
|
|
51
|
+
type: data.type,
|
|
52
|
+
length: data.length,
|
|
53
|
+
nullCount: data.nullCount,
|
|
54
|
+
validity,
|
|
55
|
+
values: data.values,
|
|
56
|
+
});
|
|
57
|
+
return new Column([batch]);
|
|
58
|
+
}
|
|
59
|
+
const batch = new (batchType(data.type))({
|
|
60
|
+
type: data.type,
|
|
61
|
+
length: data.length,
|
|
62
|
+
nullCount: data.nullCount,
|
|
63
|
+
validity,
|
|
64
|
+
values: data.values,
|
|
65
|
+
});
|
|
66
|
+
return new Column([batch]);
|
|
67
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for Arrow conversion
|
|
3
|
+
*/
|
|
4
|
+
import type { AnySpanBuffer } from '../types.js';
|
|
5
|
+
type ConcatenatedNullBitmaps = {
|
|
6
|
+
nullBitmap: Uint8Array | undefined;
|
|
7
|
+
nullCount: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Encode an array of strings into a single UTF-8 Uint8Array
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodeUtf8Strings(strings: readonly string[]): Uint8Array;
|
|
13
|
+
/**
|
|
14
|
+
* Calculate UTF-8 byte offsets for an array of strings
|
|
15
|
+
*/
|
|
16
|
+
export declare function calculateUtf8Offsets(strings: readonly string[]): Int32Array;
|
|
17
|
+
/**
|
|
18
|
+
* Concatenate Uint8 arrays without type casting.
|
|
19
|
+
*/
|
|
20
|
+
export declare function concatenateUint8Arrays(arrays: Uint8Array[]): Uint8Array;
|
|
21
|
+
/**
|
|
22
|
+
* Concatenate Float64 arrays without type casting.
|
|
23
|
+
*/
|
|
24
|
+
export declare function concatenateFloat64Arrays(arrays: Float64Array[]): Float64Array;
|
|
25
|
+
/**
|
|
26
|
+
* Concatenate null bitmaps from multiple buffers
|
|
27
|
+
*/
|
|
28
|
+
export declare function concatenateNullBitmaps(buffers: AnySpanBuffer[], columnName: string): ConcatenatedNullBitmaps;
|
|
29
|
+
/**
|
|
30
|
+
* Get Arrow field name from LMAO field name
|
|
31
|
+
*/
|
|
32
|
+
export declare function getArrowFieldName(fieldName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Walk a SpanBuffer tree (including overflow chains and children)
|
|
35
|
+
*/
|
|
36
|
+
export declare function walkSpanTree(root: AnySpanBuffer, visitor: (buffer: AnySpanBuffer) => void): void;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/arrow/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,KAAK,uBAAuB,GAAG;IAAE,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAUxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAWvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAW7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,uBAAuB,CA8B5G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAShG"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for Arrow conversion
|
|
3
|
+
*/
|
|
4
|
+
import { copyBits, countNulls } from '@smoothbricks/arrow-builder';
|
|
5
|
+
const UTF8_ENCODER = new TextEncoder();
|
|
6
|
+
/**
|
|
7
|
+
* Encode an array of strings into a single UTF-8 Uint8Array
|
|
8
|
+
*/
|
|
9
|
+
export function encodeUtf8Strings(strings) {
|
|
10
|
+
const encoded = strings.map((s) => UTF8_ENCODER.encode(s));
|
|
11
|
+
const totalLength = encoded.reduce((sum, arr) => sum + arr.length, 0);
|
|
12
|
+
const result = new Uint8Array(totalLength);
|
|
13
|
+
let offset = 0;
|
|
14
|
+
for (const arr of encoded) {
|
|
15
|
+
result.set(arr, offset);
|
|
16
|
+
offset += arr.length;
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Calculate UTF-8 byte offsets for an array of strings
|
|
22
|
+
*/
|
|
23
|
+
export function calculateUtf8Offsets(strings) {
|
|
24
|
+
const offsets = new Int32Array(strings.length + 1);
|
|
25
|
+
offsets[0] = 0;
|
|
26
|
+
for (let i = 0; i < strings.length; i++) {
|
|
27
|
+
const byteLength = UTF8_ENCODER.encode(strings[i]).length;
|
|
28
|
+
offsets[i + 1] = offsets[i] + byteLength;
|
|
29
|
+
}
|
|
30
|
+
return offsets;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Concatenate Uint8 arrays without type casting.
|
|
34
|
+
*/
|
|
35
|
+
export function concatenateUint8Arrays(arrays) {
|
|
36
|
+
if (arrays.length === 0)
|
|
37
|
+
throw new Error('Cannot concatenate empty array list');
|
|
38
|
+
if (arrays.length === 1)
|
|
39
|
+
return arrays[0];
|
|
40
|
+
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
41
|
+
const result = new Uint8Array(totalLength);
|
|
42
|
+
let offset = 0;
|
|
43
|
+
for (const arr of arrays) {
|
|
44
|
+
result.set(arr, offset);
|
|
45
|
+
offset += arr.length;
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Concatenate Float64 arrays without type casting.
|
|
51
|
+
*/
|
|
52
|
+
export function concatenateFloat64Arrays(arrays) {
|
|
53
|
+
if (arrays.length === 0)
|
|
54
|
+
throw new Error('Cannot concatenate empty array list');
|
|
55
|
+
if (arrays.length === 1)
|
|
56
|
+
return arrays[0];
|
|
57
|
+
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
58
|
+
const result = new Float64Array(totalLength);
|
|
59
|
+
let offset = 0;
|
|
60
|
+
for (const arr of arrays) {
|
|
61
|
+
result.set(arr, offset);
|
|
62
|
+
offset += arr.length;
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Concatenate null bitmaps from multiple buffers
|
|
68
|
+
*/
|
|
69
|
+
export function concatenateNullBitmaps(buffers, columnName) {
|
|
70
|
+
const hasAnyNulls = buffers.some((buf) => buf.getNullsIfAllocated(columnName) !== undefined);
|
|
71
|
+
if (!hasAnyNulls)
|
|
72
|
+
return { nullBitmap: undefined, nullCount: 0 };
|
|
73
|
+
const totalRows = buffers.reduce((sum, buf) => sum + buf._writeIndex, 0);
|
|
74
|
+
const bitmapBytes = Math.ceil(totalRows / 8);
|
|
75
|
+
const nullBitmap = new Uint8Array(bitmapBytes);
|
|
76
|
+
nullBitmap.fill(0xff); // Default all valid
|
|
77
|
+
// Buffer chains: all buffers except the last are full (writeIndex == capacity).
|
|
78
|
+
// If capacity is a multiple of 8, each buffer starts at a byte boundary.
|
|
79
|
+
let rowOffset = 0;
|
|
80
|
+
let nullCount = 0;
|
|
81
|
+
for (const buf of buffers) {
|
|
82
|
+
const sourceBitmap = buf.getNullsIfAllocated(columnName);
|
|
83
|
+
const rowCount = buf._writeIndex;
|
|
84
|
+
if (sourceBitmap) {
|
|
85
|
+
copyBits(nullBitmap, rowOffset, sourceBitmap, 0, rowCount);
|
|
86
|
+
// Count nulls using countNulls from arrow-builder
|
|
87
|
+
nullCount += countNulls(sourceBitmap, rowCount);
|
|
88
|
+
}
|
|
89
|
+
// If no sourceBitmap, leave as 0xff (all valid)
|
|
90
|
+
rowOffset += rowCount;
|
|
91
|
+
}
|
|
92
|
+
return { nullBitmap, nullCount };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get Arrow field name from LMAO field name
|
|
96
|
+
*/
|
|
97
|
+
export function getArrowFieldName(fieldName) {
|
|
98
|
+
return fieldName;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Walk a SpanBuffer tree (including overflow chains and children)
|
|
102
|
+
*/
|
|
103
|
+
export function walkSpanTree(root, visitor) {
|
|
104
|
+
let current = root;
|
|
105
|
+
while (current) {
|
|
106
|
+
visitor(current);
|
|
107
|
+
current = current._overflow;
|
|
108
|
+
}
|
|
109
|
+
for (const child of root._children) {
|
|
110
|
+
walkSpanTree(child, visitor);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nanoseconds branded type for type-safe timestamp handling
|
|
3
|
+
*
|
|
4
|
+
* Prevents accidental unit mixing (milliseconds vs nanoseconds) and provides
|
|
5
|
+
* a centralized location for timestamp conversion utilities.
|
|
6
|
+
*
|
|
7
|
+
* This is a generic buffer concept used for high-precision time-series data.
|
|
8
|
+
*
|
|
9
|
+
* **Benefits:**
|
|
10
|
+
* - Type safety prevents mixing time units
|
|
11
|
+
* - Self-documenting code - units clear from type
|
|
12
|
+
* - Zero runtime overhead on hot path (BigInt operations are fast)
|
|
13
|
+
* - Conversion functions centralized and tested
|
|
14
|
+
* - Works with Arrow's TimestampNanosecond type
|
|
15
|
+
*
|
|
16
|
+
* **Precision:**
|
|
17
|
+
* - BigInt can represent arbitrarily large integers
|
|
18
|
+
* - Nanoseconds since epoch will never overflow
|
|
19
|
+
* - Node.js: Native nanosecond precision via process.hrtime.bigint()
|
|
20
|
+
* - Browser: Microsecond precision via performance.now() (last 3 digits are 000)
|
|
21
|
+
*
|
|
22
|
+
* @module nanoseconds
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { Nanoseconds } from '@smoothbricks/arrow-builder';
|
|
27
|
+
*
|
|
28
|
+
* // Node.js: Native nanoseconds
|
|
29
|
+
* const timestamp = Nanoseconds.now();
|
|
30
|
+
*
|
|
31
|
+
* // Store in buffer (BigInt64Array)
|
|
32
|
+
* buffer.timestamps[idx] = timestamp; // Type-safe!
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Nanoseconds branded type
|
|
37
|
+
*
|
|
38
|
+
* A `bigint` with a compile-time brand that prevents accidental mixing of time units.
|
|
39
|
+
* The brand is erased at runtime, so there is zero overhead.
|
|
40
|
+
*/
|
|
41
|
+
declare const nanosecondsBrand: unique symbol;
|
|
42
|
+
export type Nanoseconds = bigint & {
|
|
43
|
+
readonly [nanosecondsBrand]: 'Nanoseconds';
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Utility functions for working with Nanoseconds
|
|
47
|
+
*/
|
|
48
|
+
export declare namespace Nanoseconds {
|
|
49
|
+
/**
|
|
50
|
+
* Get current timestamp in nanoseconds since Unix epoch.
|
|
51
|
+
*
|
|
52
|
+
* Uses the most efficient method available:
|
|
53
|
+
* - Browser/generic: performance.timeOrigin + performance.now() (microsecond precision)
|
|
54
|
+
* - Browsers typically provide 5-20 microsecond precision
|
|
55
|
+
*
|
|
56
|
+
* For Node.js with true nanosecond precision, use the /node entry point.
|
|
57
|
+
*
|
|
58
|
+
* **Precision handling:**
|
|
59
|
+
* - Epoch milliseconds (~1.7 trillion) is safe as Number
|
|
60
|
+
* - Multiply by 1000 to get microseconds (~1.7 quadrillion) - still safe
|
|
61
|
+
* - Convert to BigInt, then multiply by 1000n for nanoseconds
|
|
62
|
+
*
|
|
63
|
+
* @returns Current timestamp in nanoseconds since Unix epoch
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* buffer.timestamps[idx] = Nanoseconds.now();
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
function now(): Nanoseconds;
|
|
71
|
+
/**
|
|
72
|
+
* Convert milliseconds to nanoseconds.
|
|
73
|
+
*
|
|
74
|
+
* @param millis - Time in milliseconds (e.g., from Date.now())
|
|
75
|
+
* @returns Time in nanoseconds
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const epochNanos = Nanoseconds.fromMillis(Date.now());
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
function fromMillis(millis: number): Nanoseconds;
|
|
83
|
+
/**
|
|
84
|
+
* Cast a raw bigint to Nanoseconds (use with caution).
|
|
85
|
+
*
|
|
86
|
+
* **Warning:** This bypasses type safety. Only use when you're certain
|
|
87
|
+
* the value is already in nanoseconds.
|
|
88
|
+
*
|
|
89
|
+
* @param value - Raw bigint value in nanoseconds
|
|
90
|
+
* @returns Branded Nanoseconds value
|
|
91
|
+
*/
|
|
92
|
+
function unsafe(value: bigint): Nanoseconds;
|
|
93
|
+
/**
|
|
94
|
+
* Convert nanoseconds to milliseconds.
|
|
95
|
+
*
|
|
96
|
+
* @param nanos - Time in nanoseconds
|
|
97
|
+
* @returns Time in milliseconds (as number)
|
|
98
|
+
*/
|
|
99
|
+
function toMillis(nanos: Nanoseconds): number;
|
|
100
|
+
/**
|
|
101
|
+
* Convert nanoseconds to microseconds.
|
|
102
|
+
*
|
|
103
|
+
* @param nanos - Time in nanoseconds
|
|
104
|
+
* @returns Time in microseconds (as bigint)
|
|
105
|
+
*/
|
|
106
|
+
function toMicros(nanos: Nanoseconds): bigint;
|
|
107
|
+
}
|
|
108
|
+
export {};
|
|
109
|
+
//# sourceMappingURL=Nanoseconds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Nanoseconds.d.ts","sourceRoot":"","sources":["../../../src/lib/buffer/Nanoseconds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;GAKG;AACH,OAAO,CAAC,MAAM,gBAAgB,EAAE,OAAO,MAAM,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAA;CAAE,CAAC;AAOlF;;GAEG;AACH,yBAAiB,WAAW,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAgB,GAAG,IAAI,WAAW,CAMjC;IAED;;;;;;;;;;OAUG;IACH,SAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAEtD;IAED;;;;;;;;OAQG;IACH,SAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAEjD;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEnD;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEnD;CACF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
function toNanoseconds(value) {
|
|
2
|
+
return value;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Utility functions for working with Nanoseconds
|
|
6
|
+
*/
|
|
7
|
+
export var Nanoseconds;
|
|
8
|
+
(function (Nanoseconds) {
|
|
9
|
+
/**
|
|
10
|
+
* Get current timestamp in nanoseconds since Unix epoch.
|
|
11
|
+
*
|
|
12
|
+
* Uses the most efficient method available:
|
|
13
|
+
* - Browser/generic: performance.timeOrigin + performance.now() (microsecond precision)
|
|
14
|
+
* - Browsers typically provide 5-20 microsecond precision
|
|
15
|
+
*
|
|
16
|
+
* For Node.js with true nanosecond precision, use the /node entry point.
|
|
17
|
+
*
|
|
18
|
+
* **Precision handling:**
|
|
19
|
+
* - Epoch milliseconds (~1.7 trillion) is safe as Number
|
|
20
|
+
* - Multiply by 1000 to get microseconds (~1.7 quadrillion) - still safe
|
|
21
|
+
* - Convert to BigInt, then multiply by 1000n for nanoseconds
|
|
22
|
+
*
|
|
23
|
+
* @returns Current timestamp in nanoseconds since Unix epoch
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* buffer.timestamps[idx] = Nanoseconds.now();
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
function now() {
|
|
31
|
+
// performance.timeOrigin + performance.now() gives epoch time in milliseconds
|
|
32
|
+
// with sub-millisecond precision (e.g., 1702789123456.789)
|
|
33
|
+
// Convert to microseconds first (safe as Number), then to nanoseconds as BigInt
|
|
34
|
+
const epochMicros = Math.round((performance.timeOrigin + performance.now()) * 1000);
|
|
35
|
+
return toNanoseconds(BigInt(epochMicros) * 1000n);
|
|
36
|
+
}
|
|
37
|
+
Nanoseconds.now = now;
|
|
38
|
+
/**
|
|
39
|
+
* Convert milliseconds to nanoseconds.
|
|
40
|
+
*
|
|
41
|
+
* @param millis - Time in milliseconds (e.g., from Date.now())
|
|
42
|
+
* @returns Time in nanoseconds
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const epochNanos = Nanoseconds.fromMillis(Date.now());
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
function fromMillis(millis) {
|
|
50
|
+
return toNanoseconds(BigInt(Math.trunc(millis)) * 1000000n);
|
|
51
|
+
}
|
|
52
|
+
Nanoseconds.fromMillis = fromMillis;
|
|
53
|
+
/**
|
|
54
|
+
* Cast a raw bigint to Nanoseconds (use with caution).
|
|
55
|
+
*
|
|
56
|
+
* **Warning:** This bypasses type safety. Only use when you're certain
|
|
57
|
+
* the value is already in nanoseconds.
|
|
58
|
+
*
|
|
59
|
+
* @param value - Raw bigint value in nanoseconds
|
|
60
|
+
* @returns Branded Nanoseconds value
|
|
61
|
+
*/
|
|
62
|
+
function unsafe(value) {
|
|
63
|
+
return toNanoseconds(value);
|
|
64
|
+
}
|
|
65
|
+
Nanoseconds.unsafe = unsafe;
|
|
66
|
+
/**
|
|
67
|
+
* Convert nanoseconds to milliseconds.
|
|
68
|
+
*
|
|
69
|
+
* @param nanos - Time in nanoseconds
|
|
70
|
+
* @returns Time in milliseconds (as number)
|
|
71
|
+
*/
|
|
72
|
+
function toMillis(nanos) {
|
|
73
|
+
return Number(nanos / 1000000n);
|
|
74
|
+
}
|
|
75
|
+
Nanoseconds.toMillis = toMillis;
|
|
76
|
+
/**
|
|
77
|
+
* Convert nanoseconds to microseconds.
|
|
78
|
+
*
|
|
79
|
+
* @param nanos - Time in nanoseconds
|
|
80
|
+
* @returns Time in microseconds (as bigint)
|
|
81
|
+
*/
|
|
82
|
+
function toMicros(nanos) {
|
|
83
|
+
return nanos / 1000n;
|
|
84
|
+
}
|
|
85
|
+
Nanoseconds.toMicros = toMicros;
|
|
86
|
+
})(Nanoseconds || (Nanoseconds = {}));
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BufferStrategy - Abstraction for SpanBuffer memory management and Arrow conversion.
|
|
3
|
+
*
|
|
4
|
+
* This interface separates memory management concerns from sink concerns (Tracer):
|
|
5
|
+
* - BufferStrategy: HOW buffers are allocated and converted (JS TypedArrays vs WASM)
|
|
6
|
+
* - Tracer (sink): WHAT happens with completed buffers (stdio, queue, test accumulation)
|
|
7
|
+
*
|
|
8
|
+
* Key responsibilities:
|
|
9
|
+
* 1. Buffer creation (root, child, overflow)
|
|
10
|
+
* 2. Arrow conversion (strategy knows optimal path)
|
|
11
|
+
* 3. Buffer release (GC for JS, freelist for WASM)
|
|
12
|
+
*
|
|
13
|
+
* The sink (Tracer subclass) controls WHEN to convert and release:
|
|
14
|
+
* - StdioTracer: prints then releases immediately
|
|
15
|
+
* - TestTracer: holds buffers until clear()
|
|
16
|
+
* - SqsTracer: accumulates, converts on flush(), then releases
|
|
17
|
+
*
|
|
18
|
+
* @module bufferStrategy
|
|
19
|
+
*/
|
|
20
|
+
import type { Table } from '@uwdata/flechette';
|
|
21
|
+
import type { OpMetadata } from './opContext/opTypes.js';
|
|
22
|
+
import type { LogSchema } from './schema/LogSchema.js';
|
|
23
|
+
import type { ITraceRoot } from './traceRoot.js';
|
|
24
|
+
import type { AnySpanBuffer, SpanBuffer } from './types.js';
|
|
25
|
+
/**
|
|
26
|
+
* BufferStrategy interface for memory management and Arrow conversion.
|
|
27
|
+
*
|
|
28
|
+
* Implementations:
|
|
29
|
+
* - JsBufferStrategy: GC-managed JS TypedArrays, zero-copy Arrow via flechette
|
|
30
|
+
* - WasmBufferStrategy: WASM memory with freelist, Arrow built in WASM
|
|
31
|
+
* - (future) NapiBufferStrategy: Native code with SharedArrayBuffer
|
|
32
|
+
*
|
|
33
|
+
* @typeParam T - LogSchema type for type-safe buffer access
|
|
34
|
+
*/
|
|
35
|
+
export interface BufferStrategy<T extends LogSchema = LogSchema> {
|
|
36
|
+
/**
|
|
37
|
+
* Create a root SpanBuffer for a new trace.
|
|
38
|
+
*
|
|
39
|
+
* @param schema - LogSchema defining column types
|
|
40
|
+
* @param traceRoot - Platform-specific trace root with timestamp anchors
|
|
41
|
+
* @param opMetadata - Metadata for the executing op
|
|
42
|
+
* @param capacity - Optional capacity override
|
|
43
|
+
* @returns New SpanBuffer for the root span
|
|
44
|
+
*/
|
|
45
|
+
createSpanBuffer(schema: T, traceRoot: ITraceRoot, opMetadata: OpMetadata, capacity?: number): SpanBuffer<T>;
|
|
46
|
+
/**
|
|
47
|
+
* Create a child span buffer linked to a parent.
|
|
48
|
+
*
|
|
49
|
+
* @param parentBuffer - Parent buffer for tree linkage
|
|
50
|
+
* Note: Caller must call writeSpanStart() after this to set span name in message_values[0].
|
|
51
|
+
*
|
|
52
|
+
* @param callsiteMetadata - Metadata for WHERE span() was called (row 0)
|
|
53
|
+
* @param opMetadata - Metadata for WHAT op is executing (rows 1+)
|
|
54
|
+
* @param capacity - Optional capacity override
|
|
55
|
+
* @param schema - Optional schema for the child (if different from parent, e.g., library ops)
|
|
56
|
+
* @returns New SpanBuffer linked to parent
|
|
57
|
+
*/
|
|
58
|
+
createChildSpanBuffer(parentBuffer: SpanBuffer<T>, callsiteMetadata: OpMetadata, opMetadata: OpMetadata, capacity?: number, schema?: T): SpanBuffer<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Create an overflow buffer when current buffer is full.
|
|
61
|
+
*
|
|
62
|
+
* @param buffer - Full buffer that needs overflow storage
|
|
63
|
+
* @returns New SpanBuffer linked via buffer._overflow
|
|
64
|
+
*/
|
|
65
|
+
createOverflowBuffer(buffer: SpanBuffer<T>): SpanBuffer<T>;
|
|
66
|
+
/**
|
|
67
|
+
* Convert a SpanBuffer tree to Arrow Table.
|
|
68
|
+
*
|
|
69
|
+
* Each strategy knows the optimal conversion path:
|
|
70
|
+
* - JS: Zero-copy wrap TypedArrays via flechette
|
|
71
|
+
* - WASM: Build Arrow in WASM memory, return table
|
|
72
|
+
* - NAPI: Call into native code for parallel conversion
|
|
73
|
+
*
|
|
74
|
+
* @param buffer - Root buffer to convert (includes children and overflow chain)
|
|
75
|
+
* @returns Arrow Table (sync) or Promise<Table> (async)
|
|
76
|
+
*/
|
|
77
|
+
toArrowTable(buffer: AnySpanBuffer): Table | Promise<Table>;
|
|
78
|
+
/**
|
|
79
|
+
* Release a SpanBuffer's memory resources.
|
|
80
|
+
*
|
|
81
|
+
* Called by the sink when it's done with a buffer.
|
|
82
|
+
*
|
|
83
|
+
* - JsBufferStrategy: No-op (GC handles it)
|
|
84
|
+
* - WasmBufferStrategy: Returns blocks to freelist
|
|
85
|
+
*
|
|
86
|
+
* The sink decides WHEN to release:
|
|
87
|
+
* - After printing (StdioTracer)
|
|
88
|
+
* - On clear() (TestTracer)
|
|
89
|
+
* - After Arrow conversion (SqsTracer)
|
|
90
|
+
*
|
|
91
|
+
* @param buffer - Buffer to release (and its entire tree)
|
|
92
|
+
*/
|
|
93
|
+
releaseBuffer(buffer: AnySpanBuffer): void;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=bufferStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bufferStrategy.d.ts","sourceRoot":"","sources":["../../src/lib/bufferStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE7G;;;;;;;;;;;OAWG;IACH,qBAAqB,CACnB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,EAC3B,gBAAgB,EAAE,UAAU,EAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,CAAC,GACT,UAAU,CAAC,CAAC,CAAC,CAAC;IAEjB;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE5D;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capacity Tuning - Self-tuning buffer capacity based on utilization
|
|
3
|
+
*
|
|
4
|
+
* Per specs/lmao/01b2_buffer_self_tuning.md:
|
|
5
|
+
* - Track row utilization = totalWrites / (spansCreated * usableRowsPerSpan)
|
|
6
|
+
* - Increase capacity if utilization > 150% (regularly overflowing)
|
|
7
|
+
* - Decrease capacity if utilization < 50% (wasting space)
|
|
8
|
+
* - Maintain power-of-2 capacities between 8 and 1024
|
|
9
|
+
*
|
|
10
|
+
* ## Utilization Model
|
|
11
|
+
*
|
|
12
|
+
* - 100% = exactly filling first buffer per span (ideal)
|
|
13
|
+
* - 150% = filling 1.5x first buffer (some spans overflow)
|
|
14
|
+
* - 200% = filling 2x first buffer (every span overflows once)
|
|
15
|
+
* - 50% = only using half the first buffer (wasting space)
|
|
16
|
+
*
|
|
17
|
+
* The 3x gap between shrink (50%) and grow (150%) thresholds prevents flip-flopping:
|
|
18
|
+
* - After grow: utilization halves → lands in stable zone
|
|
19
|
+
* - After shrink: utilization doubles → lands in stable zone
|
|
20
|
+
*
|
|
21
|
+
* ## Architecture Note
|
|
22
|
+
*
|
|
23
|
+
* Stats are on SpanBufferClass.stats (static property), NOT on LogBinding.
|
|
24
|
+
* This reduces per-instance memory and avoids sync bugs from having two stat objects.
|
|
25
|
+
*/
|
|
26
|
+
import type { SpanBufferStats } from './spanBufferStats.js';
|
|
27
|
+
/**
|
|
28
|
+
* Check if capacity should be tuned after an overflow event.
|
|
29
|
+
*
|
|
30
|
+
* Called when a buffer overflows and needs to chain to a new buffer.
|
|
31
|
+
*
|
|
32
|
+
* @param stats - SpanBufferStats from SpanBufferClass.stats
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkCapacityTuning(stats: SpanBufferStats): void;
|
|
36
|
+
/**
|
|
37
|
+
* Check if capacity should be tuned based on utilization.
|
|
38
|
+
*
|
|
39
|
+
* Algorithm:
|
|
40
|
+
* - Requires minimum 10 spans before tuning
|
|
41
|
+
* - Compute utilization = totalWrites / (spansCreated * usableRowsPerSpan)
|
|
42
|
+
* - Increase capacity (×2, max 1024) if utilization > 150%
|
|
43
|
+
* - Decrease capacity (÷2, min 8) if utilization < 50%
|
|
44
|
+
* - Reset stats after tuning to start fresh measurement window
|
|
45
|
+
*
|
|
46
|
+
* @param stats - SpanBufferStats from SpanBufferClass.stats
|
|
47
|
+
* @internal Exported for testing
|
|
48
|
+
*/
|
|
49
|
+
export declare function shouldTuneCapacity(stats: SpanBufferStats): void;
|
|
50
|
+
//# sourceMappingURL=capacityTuning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacityTuning.d.ts","sourceRoot":"","sources":["../../src/lib/capacityTuning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiB5D;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEhE;AAgBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAmB/D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Minimum spans needed before tuning decisions */
|
|
2
|
+
const MIN_SPANS_FOR_TUNING = 10;
|
|
3
|
+
/** Grow capacity when utilization exceeds this (150% = regularly overflowing) */
|
|
4
|
+
const GROW_THRESHOLD = 1.5;
|
|
5
|
+
/** Shrink capacity when utilization falls below this (50% = wasting space) */
|
|
6
|
+
const SHRINK_THRESHOLD = 0.5;
|
|
7
|
+
/** Minimum capacity (must be power of 2, >= 8 for alignment) */
|
|
8
|
+
const MIN_CAPACITY = 8;
|
|
9
|
+
/** Maximum capacity (must be power of 2) */
|
|
10
|
+
const MAX_CAPACITY = 1024;
|
|
11
|
+
/**
|
|
12
|
+
* Check if capacity should be tuned after an overflow event.
|
|
13
|
+
*
|
|
14
|
+
* Called when a buffer overflows and needs to chain to a new buffer.
|
|
15
|
+
*
|
|
16
|
+
* @param stats - SpanBufferStats from SpanBufferClass.stats
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export function checkCapacityTuning(stats) {
|
|
20
|
+
shouldTuneCapacity(stats);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Reset stats after capacity tuning.
|
|
24
|
+
*
|
|
25
|
+
* Called after a tuning decision to start fresh measurement window.
|
|
26
|
+
* This ensures the tuning algorithm responds to recent behavior, not cumulative history.
|
|
27
|
+
*
|
|
28
|
+
* Note: Tracer.onStatsWillResetFor() is called BEFORE this reset (in spanLoggerGenerator's
|
|
29
|
+
* _getNextBuffer method) to capture stats for observability before they're lost.
|
|
30
|
+
*/
|
|
31
|
+
function resetStats(stats) {
|
|
32
|
+
stats.totalWrites = 0;
|
|
33
|
+
stats.spansCreated = 0;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if capacity should be tuned based on utilization.
|
|
37
|
+
*
|
|
38
|
+
* Algorithm:
|
|
39
|
+
* - Requires minimum 10 spans before tuning
|
|
40
|
+
* - Compute utilization = totalWrites / (spansCreated * usableRowsPerSpan)
|
|
41
|
+
* - Increase capacity (×2, max 1024) if utilization > 150%
|
|
42
|
+
* - Decrease capacity (÷2, min 8) if utilization < 50%
|
|
43
|
+
* - Reset stats after tuning to start fresh measurement window
|
|
44
|
+
*
|
|
45
|
+
* @param stats - SpanBufferStats from SpanBufferClass.stats
|
|
46
|
+
* @internal Exported for testing
|
|
47
|
+
*/
|
|
48
|
+
export function shouldTuneCapacity(stats) {
|
|
49
|
+
if (stats.spansCreated < MIN_SPANS_FOR_TUNING)
|
|
50
|
+
return;
|
|
51
|
+
// Usable rows per span = capacity - 2 (rows 0-1 reserved for span-start/end)
|
|
52
|
+
const usableRowsPerSpan = stats.capacity - 2;
|
|
53
|
+
const utilization = stats.totalWrites / (stats.spansCreated * usableRowsPerSpan);
|
|
54
|
+
// Grow if utilization > 150% (regularly overflowing)
|
|
55
|
+
if (utilization > GROW_THRESHOLD && stats.capacity < MAX_CAPACITY) {
|
|
56
|
+
stats.capacity = Math.min(stats.capacity * 2, MAX_CAPACITY);
|
|
57
|
+
resetStats(stats);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Shrink if utilization < 50% (wasting space)
|
|
61
|
+
if (utilization < SHRINK_THRESHOLD && stats.capacity > MIN_CAPACITY) {
|
|
62
|
+
stats.capacity = Math.max(MIN_CAPACITY, stats.capacity / 2);
|
|
63
|
+
resetStats(stats);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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 type { OpContext } from '../opContext/types.js';
|
|
8
|
+
import type { FeatureFlagSchema } from '../schema/defineFeatureFlags.js';
|
|
9
|
+
import type { FlagEvaluator, InferFeatureFlagsWithContext, SpanContextWithoutFf } from '../schema/evaluator.js';
|
|
10
|
+
import type { Schema } from '../schema/types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Base interface for generated evaluator classes.
|
|
13
|
+
*/
|
|
14
|
+
export interface GeneratedEvaluatorBase<Ctx extends OpContext> {
|
|
15
|
+
get<K extends keyof InferFeatureFlagsWithContext<Ctx> & string>(flag: K): Promise<InferFeatureFlagsWithContext<Ctx>[K]>;
|
|
16
|
+
get(flag: string): Promise<unknown>;
|
|
17
|
+
forContext(ctx: SpanContextWithoutFf<Ctx>): GeneratedEvaluatorInstance<Ctx>;
|
|
18
|
+
readonly evaluator: FlagEvaluator<Ctx>;
|
|
19
|
+
}
|
|
20
|
+
export type GeneratedEvaluatorInstance<Ctx extends OpContext> = GeneratedEvaluatorBase<Ctx> & InferFeatureFlagsWithContext<Ctx>;
|
|
21
|
+
type GeneratedEvaluatorConstructor<Ctx extends OpContext> = new (spanContext: SpanContextWithoutFf<Ctx>, evaluator: FlagEvaluator<Ctx>) => GeneratedEvaluatorInstance<Ctx>;
|
|
22
|
+
type ValidateFlagValue = (value: unknown, schema: Schema<unknown, unknown>, defaultValue: unknown) => unknown;
|
|
23
|
+
/**
|
|
24
|
+
* Render a debug view of the worker-safe generated class.
|
|
25
|
+
*
|
|
26
|
+
* This exists for snapshots/tests only; runtime assembly happens without eval.
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateEvaluatorClass<T extends FeatureFlagSchema>(schema: T, className?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Create evaluator class constructor from schema.
|
|
31
|
+
* This is the cold-path function called at schema definition time.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createEvaluatorClass<Ctx extends OpContext>(schema: Ctx['flags'], validateFlagValue: ValidateFlagValue, ENTRY_TYPE_FF_ACCESS: number): GeneratedEvaluatorConstructor<Ctx>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=evaluatorGenerator.d.ts.map
|