@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,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LogSchema class for logging-specific schema functionality
|
|
3
|
+
*
|
|
4
|
+
* Extends ColumnSchema from arrow-builder with logging-specific features:
|
|
5
|
+
* - Schema extension with reserved name validation
|
|
6
|
+
* - Integration with lmao's logging system
|
|
7
|
+
*
|
|
8
|
+
* The base ColumnSchema provides generic cached field access.
|
|
9
|
+
* LogSchema adds logging-specific extension capabilities.
|
|
10
|
+
*/
|
|
11
|
+
import { ColumnSchema } from '@smoothbricks/arrow-builder';
|
|
12
|
+
import type { SchemaFields } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* LogSchema class - extends ColumnSchema with logging-specific features
|
|
15
|
+
*
|
|
16
|
+
* Provides all the generic schema functionality from ColumnSchema plus
|
|
17
|
+
* logging-specific extension with reserved name validation.
|
|
18
|
+
*
|
|
19
|
+
* @template T - The schema fields type (SchemaFields)
|
|
20
|
+
*/
|
|
21
|
+
export declare class LogSchema<T extends SchemaFields = SchemaFields> extends ColumnSchema<T> {
|
|
22
|
+
/**
|
|
23
|
+
* Assert that user-provided field names don't conflict with reserved names
|
|
24
|
+
* and don't start with underscore (reserved for system properties)
|
|
25
|
+
*
|
|
26
|
+
* @throws Error if any field name is reserved or starts with _
|
|
27
|
+
*/
|
|
28
|
+
static assertUserFieldNames(fieldNames: readonly string[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Extend this schema with additional fields
|
|
31
|
+
*
|
|
32
|
+
* Creates a new LogSchema instance with merged fields.
|
|
33
|
+
* Validates that extension fields don't conflict with existing fields
|
|
34
|
+
* and don't use reserved names (logging-specific validation).
|
|
35
|
+
*
|
|
36
|
+
* @param extension - Additional schema fields to add
|
|
37
|
+
* @returns New LogSchema instance with merged fields
|
|
38
|
+
* @throws Error if field names conflict or reserved names are used
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const base = new LogSchema({ requestId: S.category() });
|
|
43
|
+
* const extended = base.extend({ duration: S.number() });
|
|
44
|
+
* // extended.fields = { requestId: ..., duration: ... }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
extend<U extends SchemaFields>(extension: U): LogSchema<T & U>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if this is a LogSchema instance
|
|
50
|
+
*
|
|
51
|
+
* Used for type guards and instanceof checks
|
|
52
|
+
*/
|
|
53
|
+
static isLogSchema(value: unknown): value is LogSchema;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Type guard to check if a value is a LogSchema instance
|
|
57
|
+
*
|
|
58
|
+
* @param value - Value to check
|
|
59
|
+
* @returns True if value is a LogSchema instance
|
|
60
|
+
*/
|
|
61
|
+
export declare function isLogSchema(value: unknown): value is LogSchema;
|
|
62
|
+
//# sourceMappingURL=LogSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogSchema.d.ts","sourceRoot":"","sources":["../../../src/lib/schema/LogSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6C/C;;;;;;;GAOG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACnF;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAchE;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;IA8B9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS;CAGvD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LogSchema class for logging-specific schema functionality
|
|
3
|
+
*
|
|
4
|
+
* Extends ColumnSchema from arrow-builder with logging-specific features:
|
|
5
|
+
* - Schema extension with reserved name validation
|
|
6
|
+
* - Integration with lmao's logging system
|
|
7
|
+
*
|
|
8
|
+
* The base ColumnSchema provides generic cached field access.
|
|
9
|
+
* LogSchema adds logging-specific extension capabilities.
|
|
10
|
+
*/
|
|
11
|
+
import { ColumnSchema } from '@smoothbricks/arrow-builder';
|
|
12
|
+
/**
|
|
13
|
+
* Reserved method names that cannot be used as attribute names
|
|
14
|
+
*
|
|
15
|
+
* These names are reserved to prevent conflicts or confusion:
|
|
16
|
+
* - Technically conflicting: Names that would shadow actual methods/properties
|
|
17
|
+
* on TagWriter, SpanLogger, FluentLogEntry, or result objects
|
|
18
|
+
* - Confusing: Names that would create confusing code patterns even though
|
|
19
|
+
* they don't technically conflict (e.g., ctx.tag.tag() or ctx.scope.scope)
|
|
20
|
+
*/
|
|
21
|
+
const RESERVED_NAMES = new Set([
|
|
22
|
+
// Technically conflicting - methods on TagWriter/FluentLogEntry/result objects
|
|
23
|
+
'with', // Used on TagWriter, FluentLogEntry, Ok, Err
|
|
24
|
+
'message', // Used on Ok, Err
|
|
25
|
+
// Technically conflicting - log level methods on SpanLogger
|
|
26
|
+
'info', // ctx.log.info()
|
|
27
|
+
'debug', // ctx.log.debug()
|
|
28
|
+
'warn', // ctx.log.warn()
|
|
29
|
+
'error', // ctx.log.error()
|
|
30
|
+
'trace', // ctx.log.trace()
|
|
31
|
+
// Internal SpanLogger methods (prefixed with _ but included for completeness)
|
|
32
|
+
'_nextRow', // Internal row advancement
|
|
33
|
+
'_buffer', // Internal buffer reference
|
|
34
|
+
'_writeIndex', // Internal write position
|
|
35
|
+
'_getNextBuffer', // Internal buffer chaining
|
|
36
|
+
'_setScope', // Internal scope setter
|
|
37
|
+
'_prefillScopedAttributes', // Internal scope prefill
|
|
38
|
+
// Internal FF logging methods (called by evaluator, not on public type)
|
|
39
|
+
'ffAccess', // Feature flag access logging
|
|
40
|
+
'ffUsage', // Feature flag usage logging
|
|
41
|
+
// Confusing - properties on SpanContext (not technically conflicting)
|
|
42
|
+
'tag', // ctx.tag is TagWriter; ctx.tag.tag() would be confusing
|
|
43
|
+
'scope', // ctx.scope is readonly; ctx.scope.scope would be confusing
|
|
44
|
+
// Confusing - methods on SpanContext (not technically conflicting)
|
|
45
|
+
'ok', // ctx.ok() is method; ctx.tag.ok() or ctx.ok(result).ok() would be confusing
|
|
46
|
+
'err', // ctx.err() is method; ctx.tag.err() or ctx.err(code, details).err() would be confusing
|
|
47
|
+
'span', // ctx.span() is method; ctx.tag.span() would be confusing
|
|
48
|
+
]);
|
|
49
|
+
/**
|
|
50
|
+
* LogSchema class - extends ColumnSchema with logging-specific features
|
|
51
|
+
*
|
|
52
|
+
* Provides all the generic schema functionality from ColumnSchema plus
|
|
53
|
+
* logging-specific extension with reserved name validation.
|
|
54
|
+
*
|
|
55
|
+
* @template T - The schema fields type (SchemaFields)
|
|
56
|
+
*/
|
|
57
|
+
export class LogSchema extends ColumnSchema {
|
|
58
|
+
/**
|
|
59
|
+
* Assert that user-provided field names don't conflict with reserved names
|
|
60
|
+
* and don't start with underscore (reserved for system properties)
|
|
61
|
+
*
|
|
62
|
+
* @throws Error if any field name is reserved or starts with _
|
|
63
|
+
*/
|
|
64
|
+
static assertUserFieldNames(fieldNames) {
|
|
65
|
+
for (const name of fieldNames) {
|
|
66
|
+
if (name.startsWith('_')) {
|
|
67
|
+
throw new Error(`Field name '${name}' cannot start with '_' - this prefix is reserved for system properties`);
|
|
68
|
+
}
|
|
69
|
+
if (RESERVED_NAMES.has(name)) {
|
|
70
|
+
throw new Error(`Attribute name '${name}' is reserved and cannot be used. ` +
|
|
71
|
+
`Reserved names: ${Array.from(RESERVED_NAMES).join(', ')}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Extend this schema with additional fields
|
|
77
|
+
*
|
|
78
|
+
* Creates a new LogSchema instance with merged fields.
|
|
79
|
+
* Validates that extension fields don't conflict with existing fields
|
|
80
|
+
* and don't use reserved names (logging-specific validation).
|
|
81
|
+
*
|
|
82
|
+
* @param extension - Additional schema fields to add
|
|
83
|
+
* @returns New LogSchema instance with merged fields
|
|
84
|
+
* @throws Error if field names conflict or reserved names are used
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const base = new LogSchema({ requestId: S.category() });
|
|
89
|
+
* const extended = base.extend({ duration: S.number() });
|
|
90
|
+
* // extended.fields = { requestId: ..., duration: ... }
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
extend(extension) {
|
|
94
|
+
// Check for field name conflicts
|
|
95
|
+
const extensionKeys = Object.keys(extension);
|
|
96
|
+
for (const key of extensionKeys) {
|
|
97
|
+
if (this._columnNames.includes(key)) {
|
|
98
|
+
throw new Error(`Schema conflict: attribute '${key}' already exists in base schema. ` +
|
|
99
|
+
`Base schema has: ${this._columnNames.join(', ')}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Assert extension doesn't use reserved names (logging-specific)
|
|
103
|
+
LogSchema.assertUserFieldNames(extensionKeys);
|
|
104
|
+
// Perform shallow merge
|
|
105
|
+
// Create merged via explicit property assignment to preserve property order for V8 hidden class stability
|
|
106
|
+
const merged = Object.create(null);
|
|
107
|
+
for (const key of this._columnNames) {
|
|
108
|
+
// Use prototypeless object for stable prototype, prevents hidden class deopt
|
|
109
|
+
merged[key] = this.fields[key];
|
|
110
|
+
}
|
|
111
|
+
for (const key of extensionKeys) {
|
|
112
|
+
merged[key] = extension[key];
|
|
113
|
+
}
|
|
114
|
+
// Return new LogSchema instance
|
|
115
|
+
return new LogSchema(merged);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if this is a LogSchema instance
|
|
119
|
+
*
|
|
120
|
+
* Used for type guards and instanceof checks
|
|
121
|
+
*/
|
|
122
|
+
static isLogSchema(value) {
|
|
123
|
+
return value instanceof LogSchema;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Type guard to check if a value is a LogSchema instance
|
|
128
|
+
*
|
|
129
|
+
* @param value - Value to check
|
|
130
|
+
* @returns True if value is a LogSchema instance
|
|
131
|
+
*/
|
|
132
|
+
export function isLogSchema(value) {
|
|
133
|
+
return LogSchema.isLogSchema(value);
|
|
134
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema builder for lmao - extends arrow-builder's schema builder with feature flags, masking, and binary sugar
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports the S object from arrow-builder and adds:
|
|
5
|
+
* - Feature flag support via .default().sync()/.async() pattern
|
|
6
|
+
* - Masking transformations for sensitive data
|
|
7
|
+
* - S.unknown() and S.object<T>() sugar for msgpack-encoded binary columns
|
|
8
|
+
* - S.binary() passthrough to arrow-builder's S.binary()
|
|
9
|
+
*/
|
|
10
|
+
import type { SchemaBuilder } from './types.js';
|
|
11
|
+
export declare const S: SchemaBuilder;
|
|
12
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/lib/schema/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,OAAO,KAAK,EAAiD,aAAa,EAAuB,MAAM,YAAY,CAAC;AAoLpH,eAAO,MAAM,CAAC,eAAoB,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema builder for lmao - extends arrow-builder's schema builder with feature flags, masking, and binary sugar
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports the S object from arrow-builder and adds:
|
|
5
|
+
* - Feature flag support via .default().sync()/.async() pattern
|
|
6
|
+
* - Masking transformations for sensitive data
|
|
7
|
+
* - S.unknown() and S.object<T>() sugar for msgpack-encoded binary columns
|
|
8
|
+
* - S.binary() passthrough to arrow-builder's S.binary()
|
|
9
|
+
*/
|
|
10
|
+
import { encode } from '@msgpack/msgpack';
|
|
11
|
+
import { S as ArrowS, } from '@smoothbricks/arrow-builder';
|
|
12
|
+
/**
|
|
13
|
+
* Msgpack encoder singleton -- per-value, synchronous.
|
|
14
|
+
* Encodes at flush time (cold path), not on the hot write path.
|
|
15
|
+
* @msgpack/msgpack already handles most types; functions/symbols become undefined (dropped silently).
|
|
16
|
+
*
|
|
17
|
+
* Both wrap @msgpack/msgpack's encode(). This encoder is private to the schema builder;
|
|
18
|
+
*/
|
|
19
|
+
const msgpackEncoder = {
|
|
20
|
+
encode(value) {
|
|
21
|
+
return encode(value);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
function createSchemaWithFlagBuilder(schema) {
|
|
25
|
+
const schemaWithBuilder = Object.assign(schema, {
|
|
26
|
+
default(defaultValue) {
|
|
27
|
+
return {
|
|
28
|
+
sync() {
|
|
29
|
+
return {
|
|
30
|
+
schema,
|
|
31
|
+
defaultValue,
|
|
32
|
+
evaluationType: 'sync',
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
async() {
|
|
36
|
+
return {
|
|
37
|
+
schema,
|
|
38
|
+
defaultValue,
|
|
39
|
+
evaluationType: 'async',
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return schemaWithBuilder;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Schema builder that wraps arrow-builder's S with feature flag support
|
|
49
|
+
*
|
|
50
|
+
* STRING TYPE SYSTEM (See specs/lmao/01a_trace_schema_system.md):
|
|
51
|
+
* Three distinct string types, each with different storage strategies:
|
|
52
|
+
* - S.enum(['A', 'B', 'C']) - Known values at compile time (Uint8Array, 1 byte)
|
|
53
|
+
* - S.category() - Repeated values (raw string storage, dictionary built at Arrow conversion)
|
|
54
|
+
* - S.text() - Unique values (no dictionary overhead)
|
|
55
|
+
*/
|
|
56
|
+
const schemaBuilderImpl = {
|
|
57
|
+
/**
|
|
58
|
+
* Create number schema
|
|
59
|
+
*
|
|
60
|
+
* Usage:
|
|
61
|
+
* - S.number() - any number for tag attributes
|
|
62
|
+
* - S.number().default(0).sync() - feature flag
|
|
63
|
+
*/
|
|
64
|
+
number: () => {
|
|
65
|
+
const schema = ArrowS.number();
|
|
66
|
+
return createSchemaWithFlagBuilder(schema);
|
|
67
|
+
},
|
|
68
|
+
/**
|
|
69
|
+
* Create boolean schema
|
|
70
|
+
*
|
|
71
|
+
* Usage:
|
|
72
|
+
* - S.boolean() - for tag attributes
|
|
73
|
+
* - S.boolean().default(false).sync() - feature flag
|
|
74
|
+
*/
|
|
75
|
+
boolean: () => {
|
|
76
|
+
const schema = ArrowS.boolean();
|
|
77
|
+
return createSchemaWithFlagBuilder(schema);
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* Wrap schema to make it optional
|
|
81
|
+
*
|
|
82
|
+
* Usage:
|
|
83
|
+
* - SchemaBuilder.optional(SchemaBuilder.string()) - string | undefined
|
|
84
|
+
*/
|
|
85
|
+
optional: (schema) => {
|
|
86
|
+
return ArrowS.optional(schema);
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* Create union of multiple schemas
|
|
90
|
+
*
|
|
91
|
+
* Usage:
|
|
92
|
+
* - SchemaBuilder.union([SchemaBuilder.string(), SchemaBuilder.number()]) - string | number
|
|
93
|
+
*/
|
|
94
|
+
union: (schemas) => {
|
|
95
|
+
return ArrowS.union(schemas);
|
|
96
|
+
},
|
|
97
|
+
/**
|
|
98
|
+
* Enum - Known values at compile time
|
|
99
|
+
*
|
|
100
|
+
* Storage: Uint8Array (1 byte) with compile-time mapping
|
|
101
|
+
* Arrow: Dictionary with pre-defined values (UTF-8 pre-computed at definition time)
|
|
102
|
+
* Use for: Operations, HTTP methods, entry types, status enums
|
|
103
|
+
*
|
|
104
|
+
* Usage:
|
|
105
|
+
* - S.enum(['CREATE', 'READ', 'UPDATE', 'DELETE']) - for tag attributes
|
|
106
|
+
* - S.enum(['dev', 'staging', 'prod']).default('dev').sync() - feature flag
|
|
107
|
+
*/
|
|
108
|
+
enum: (values) => {
|
|
109
|
+
const schema = ArrowS.enum(values);
|
|
110
|
+
return createSchemaWithFlagBuilder(schema);
|
|
111
|
+
},
|
|
112
|
+
/**
|
|
113
|
+
* Category - Values that often repeat (limited cardinality)
|
|
114
|
+
*
|
|
115
|
+
* Storage: Raw strings (no hot-path interning)
|
|
116
|
+
* Arrow: Dictionary built dynamically from values at Arrow conversion
|
|
117
|
+
* Use for: userIds, sessionIds, moduleNames, spanNames, table names
|
|
118
|
+
*/
|
|
119
|
+
category: () => {
|
|
120
|
+
const schema = ArrowS.category();
|
|
121
|
+
return createSchemaWithFlagBuilder(schema);
|
|
122
|
+
},
|
|
123
|
+
/**
|
|
124
|
+
* Text - Unique values that rarely repeat
|
|
125
|
+
*
|
|
126
|
+
* Storage: Raw strings without interning
|
|
127
|
+
* Arrow: Plain string column (no dictionary overhead)
|
|
128
|
+
* Use for: Unique error messages, URLs, request bodies, masked queries
|
|
129
|
+
*/
|
|
130
|
+
text: () => {
|
|
131
|
+
const schema = ArrowS.text();
|
|
132
|
+
return createSchemaWithFlagBuilder(schema);
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Binary - Raw bytes or encoder-wrapped values
|
|
136
|
+
*
|
|
137
|
+
* Passthrough to arrow-builder's S.binary().
|
|
138
|
+
* Without encoder: accepts Uint8Array (raw binary).
|
|
139
|
+
* With encoder: accepts any value T (encoded to bytes at flush time).
|
|
140
|
+
*/
|
|
141
|
+
binary: ((options) => {
|
|
142
|
+
if (options?.encoder) {
|
|
143
|
+
return ArrowS.binary(options);
|
|
144
|
+
}
|
|
145
|
+
return ArrowS.binary();
|
|
146
|
+
}),
|
|
147
|
+
/**
|
|
148
|
+
* Unknown - accepts any value, msgpack-encoded at flush time
|
|
149
|
+
*
|
|
150
|
+
* Sugar for S.binary({ encoder: msgpackEncoder }).
|
|
151
|
+
* Use for: arbitrary objects, request bodies, error context, unknown-shape data.
|
|
152
|
+
* Hot path stores frozen object reference; flush path encodes via @msgpack/msgpack.
|
|
153
|
+
*/
|
|
154
|
+
unknown: () => {
|
|
155
|
+
return ArrowS.binary({ encoder: msgpackEncoder });
|
|
156
|
+
},
|
|
157
|
+
/**
|
|
158
|
+
* Object<T> - typed variant of unknown, same underlying binary storage with msgpack encoding
|
|
159
|
+
*
|
|
160
|
+
* TypeScript enforces shape at compile time; no runtime validation on hot path.
|
|
161
|
+
* Sugar for S.binary<T>({ encoder: msgpackEncoder }).
|
|
162
|
+
*/
|
|
163
|
+
object: () => {
|
|
164
|
+
return ArrowS.binary({ encoder: msgpackEncoder });
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
// Export as S for convenience
|
|
168
|
+
// Note: The SchemaBuilder type is exported from types.ts
|
|
169
|
+
export const S = schemaBuilderImpl;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Output } from '@smoothbricks/arrow-builder';
|
|
2
|
+
import type { FeatureFlagDefinition } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Feature flag schema with sync/async markers
|
|
5
|
+
*/
|
|
6
|
+
export interface FeatureFlagSchema {
|
|
7
|
+
[key: string]: FeatureFlagDefinition<string | number | boolean>;
|
|
8
|
+
}
|
|
9
|
+
type DefinedFeatureFlags<T extends FeatureFlagSchema> = {
|
|
10
|
+
schema: T;
|
|
11
|
+
syncFlags: SyncFlagKeys<T>[];
|
|
12
|
+
asyncFlags: AsyncFlagKeys<T>[];
|
|
13
|
+
readonly type?: InferFeatureFlags<T>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Define feature flags with type-safe access patterns
|
|
17
|
+
*
|
|
18
|
+
* @param schema - Object mapping flag names to flag definitions
|
|
19
|
+
* @returns Feature flag definition object for use with evaluator
|
|
20
|
+
*/
|
|
21
|
+
export declare function defineFeatureFlags<T extends FeatureFlagSchema>(schema: T): DefinedFeatureFlags<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Extract sync flag keys
|
|
24
|
+
*/
|
|
25
|
+
export type SyncFlagKeys<T extends FeatureFlagSchema> = {
|
|
26
|
+
[K in keyof T]: T[K]['evaluationType'] extends 'sync' ? K : never;
|
|
27
|
+
}[keyof T];
|
|
28
|
+
/**
|
|
29
|
+
* Extract async flag keys
|
|
30
|
+
*/
|
|
31
|
+
export type AsyncFlagKeys<T extends FeatureFlagSchema> = {
|
|
32
|
+
[K in keyof T]: T[K]['evaluationType'] extends 'async' ? K : never;
|
|
33
|
+
}[keyof T];
|
|
34
|
+
/**
|
|
35
|
+
* Infer TypeScript types from feature flag schema
|
|
36
|
+
*/
|
|
37
|
+
export type InferFeatureFlags<T extends FeatureFlagSchema> = {
|
|
38
|
+
[K in keyof T]: Output<T[K]['schema']>;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Evaluation context for feature flag decisions
|
|
42
|
+
*/
|
|
43
|
+
export interface EvaluationContext {
|
|
44
|
+
userId?: string;
|
|
45
|
+
requestId?: string;
|
|
46
|
+
userPlan?: string;
|
|
47
|
+
region?: string;
|
|
48
|
+
[key: string]: string | number | boolean | undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Usage tracking context for A/B testing analytics
|
|
52
|
+
*/
|
|
53
|
+
export interface UsageContext {
|
|
54
|
+
action?: string;
|
|
55
|
+
outcome?: 'success' | 'failure';
|
|
56
|
+
value?: number;
|
|
57
|
+
metadata?: Record<string, string | number | boolean>;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=defineFeatureFlags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineFeatureFlags.d.ts","sourceRoot":"","sources":["../../../src/lib/schema/defineFeatureFlags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACjE;AAED,KAAK,mBAAmB,CAAC,CAAC,SAAS,iBAAiB,IAAI;IACtD,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;CACtC,CAAC;AAUF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,iBAAiB,EAAE,MAAM,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAiBjG;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,iBAAiB,IAAI;KACrD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAClE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,iBAAiB,IAAI;KACtD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,KAAK;CACnE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,IAAI;KAC1D,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACtD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function isSyncFlagKey(schema, key) {
|
|
2
|
+
return schema[key].evaluationType === 'sync';
|
|
3
|
+
}
|
|
4
|
+
function isAsyncFlagKey(schema, key) {
|
|
5
|
+
return schema[key].evaluationType === 'async';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Define feature flags with type-safe access patterns
|
|
9
|
+
*
|
|
10
|
+
* @param schema - Object mapping flag names to flag definitions
|
|
11
|
+
* @returns Feature flag definition object for use with evaluator
|
|
12
|
+
*/
|
|
13
|
+
export function defineFeatureFlags(schema) {
|
|
14
|
+
const syncFlags = [];
|
|
15
|
+
const asyncFlags = [];
|
|
16
|
+
for (const key in schema) {
|
|
17
|
+
if (isSyncFlagKey(schema, key)) {
|
|
18
|
+
syncFlags.push(key);
|
|
19
|
+
}
|
|
20
|
+
else if (isAsyncFlagKey(schema, key)) {
|
|
21
|
+
asyncFlags.push(key);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
schema,
|
|
26
|
+
syncFlags,
|
|
27
|
+
asyncFlags,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Define log schema with runtime validation and type inference
|
|
3
|
+
*
|
|
4
|
+
* This module leverages __schema_type metadata on schema objects for:
|
|
5
|
+
* - Runtime validation via schema-type dispatch
|
|
6
|
+
* - Automatic TypeScript inference
|
|
7
|
+
* - Schema transformations (masking)
|
|
8
|
+
* - Extension composition
|
|
9
|
+
*/
|
|
10
|
+
import { LogSchema } from './LogSchema.js';
|
|
11
|
+
import type { InferSchema, SchemaFields } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Brand symbol for DefinedLogSchema - used to detect this type in conditionals.
|
|
14
|
+
* Must be exported so types.ts can import it for ExtractOriginalSchema.
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFINED_LOG_SCHEMA_BRAND: unique symbol;
|
|
17
|
+
/**
|
|
18
|
+
* Define log schema with runtime validation and type inference
|
|
19
|
+
*
|
|
20
|
+
* Example:
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const schema = defineLogSchema({
|
|
23
|
+
* requestId: S.category(),
|
|
24
|
+
* userId: S.optional(S.category()),
|
|
25
|
+
* httpStatus: S.number(),
|
|
26
|
+
* operation: S.enum(['SELECT', 'INSERT', 'UPDATE'])
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Validate data
|
|
30
|
+
* const result = schema.validate({
|
|
31
|
+
* requestId: 'req-123',
|
|
32
|
+
* userId: 'user-456',
|
|
33
|
+
* httpStatus: 200,
|
|
34
|
+
* operation: 'SELECT'
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @param schema - Object mapping field names to schema objects
|
|
39
|
+
* @returns Extended schema with validation and extension methods
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* DefinedLogSchema type - result of defineLogSchema()
|
|
43
|
+
*
|
|
44
|
+
* Includes:
|
|
45
|
+
* - All original schema fields (T)
|
|
46
|
+
* - Extension methods (extend)
|
|
47
|
+
* - Validation methods (validate, parse, safeParse)
|
|
48
|
+
* - LogSchema methods (fieldEntries, fieldCount, fieldNames, fields)
|
|
49
|
+
* - Brand marker for type detection in InferSchema
|
|
50
|
+
*/
|
|
51
|
+
export type DefinedLogSchema<T extends SchemaFields> = LogSchema<T> & {
|
|
52
|
+
/** Brand marker - never actually set, only for type discrimination */
|
|
53
|
+
readonly [DEFINED_LOG_SCHEMA_BRAND]?: T;
|
|
54
|
+
};
|
|
55
|
+
type SafeParseResult<T extends SchemaFields> = {
|
|
56
|
+
success: true;
|
|
57
|
+
value: InferSchema<T>;
|
|
58
|
+
} | {
|
|
59
|
+
success: false;
|
|
60
|
+
error: Error;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Options for defineLogSchema
|
|
64
|
+
*/
|
|
65
|
+
export interface DefineLogSchemaOptions {
|
|
66
|
+
/**
|
|
67
|
+
* Skip validation of reserved names.
|
|
68
|
+
* Only used internally for defining system schema columns.
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
_skipReservedNameValidation?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* LogSchema with validation methods added by defineLogSchema.
|
|
75
|
+
* These methods are added via Object.assign at runtime.
|
|
76
|
+
*/
|
|
77
|
+
export type ValidatedLogSchema<T extends SchemaFields> = LogSchema<T> & {
|
|
78
|
+
/** Validate data and throw on error */
|
|
79
|
+
validate(data: unknown): InferSchema<T>;
|
|
80
|
+
/** Validate data and return null on error */
|
|
81
|
+
parse(data: unknown): InferSchema<T> | null;
|
|
82
|
+
/** Safe parse with detailed error information */
|
|
83
|
+
safeParse(data: unknown): SafeParseResult<T>;
|
|
84
|
+
};
|
|
85
|
+
export declare function defineLogSchema<T extends SchemaFields>(schema: T, options?: DefineLogSchemaOptions): ValidatedLogSchema<T>;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=defineLogSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineLogSchema.d.ts","sourceRoot":"","sources":["../../../src/lib/schema/defineLogSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG;IACpE,sEAAsE;IACtE,QAAQ,CAAC,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;CACzC,CAAC;AAEF,KAAK,eAAe,CAAC,CAAC,SAAS,YAAY,IACvC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE,GACxC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG;IACtE,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACxC,6CAA6C;IAC7C,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5C,iDAAiD;IACjD,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;CAC9C,CAAC;AAgJF,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,EACpD,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,sBAAsB,GAC/B,kBAAkB,CAAC,CAAC,CAAC,CAwDvB"}
|