@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,91 @@
|
|
|
1
|
+
import type { Output } from '@smoothbricks/arrow-builder';
|
|
2
|
+
import type { FeatureFlagDefinition } from './types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Feature flag schema with sync/async markers
|
|
6
|
+
*/
|
|
7
|
+
export interface FeatureFlagSchema {
|
|
8
|
+
[key: string]: FeatureFlagDefinition<string | number | boolean>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type DefinedFeatureFlags<T extends FeatureFlagSchema> = {
|
|
12
|
+
schema: T;
|
|
13
|
+
syncFlags: SyncFlagKeys<T>[];
|
|
14
|
+
asyncFlags: AsyncFlagKeys<T>[];
|
|
15
|
+
readonly type?: InferFeatureFlags<T>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
function isSyncFlagKey<T extends FeatureFlagSchema>(schema: T, key: keyof T): key is SyncFlagKeys<T> {
|
|
19
|
+
return schema[key].evaluationType === 'sync';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isAsyncFlagKey<T extends FeatureFlagSchema>(schema: T, key: keyof T): key is AsyncFlagKeys<T> {
|
|
23
|
+
return schema[key].evaluationType === 'async';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Define feature flags with type-safe access patterns
|
|
28
|
+
*
|
|
29
|
+
* @param schema - Object mapping flag names to flag definitions
|
|
30
|
+
* @returns Feature flag definition object for use with evaluator
|
|
31
|
+
*/
|
|
32
|
+
export function defineFeatureFlags<T extends FeatureFlagSchema>(schema: T): DefinedFeatureFlags<T> {
|
|
33
|
+
const syncFlags: SyncFlagKeys<T>[] = [];
|
|
34
|
+
const asyncFlags: AsyncFlagKeys<T>[] = [];
|
|
35
|
+
|
|
36
|
+
for (const key in schema) {
|
|
37
|
+
if (isSyncFlagKey(schema, key)) {
|
|
38
|
+
syncFlags.push(key);
|
|
39
|
+
} else if (isAsyncFlagKey(schema, key)) {
|
|
40
|
+
asyncFlags.push(key);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
schema,
|
|
46
|
+
syncFlags,
|
|
47
|
+
asyncFlags,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Extract sync flag keys
|
|
53
|
+
*/
|
|
54
|
+
export type SyncFlagKeys<T extends FeatureFlagSchema> = {
|
|
55
|
+
[K in keyof T]: T[K]['evaluationType'] extends 'sync' ? K : never;
|
|
56
|
+
}[keyof T];
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Extract async flag keys
|
|
60
|
+
*/
|
|
61
|
+
export type AsyncFlagKeys<T extends FeatureFlagSchema> = {
|
|
62
|
+
[K in keyof T]: T[K]['evaluationType'] extends 'async' ? K : never;
|
|
63
|
+
}[keyof T];
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Infer TypeScript types from feature flag schema
|
|
67
|
+
*/
|
|
68
|
+
export type InferFeatureFlags<T extends FeatureFlagSchema> = {
|
|
69
|
+
[K in keyof T]: Output<T[K]['schema']>;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Evaluation context for feature flag decisions
|
|
74
|
+
*/
|
|
75
|
+
export interface EvaluationContext {
|
|
76
|
+
userId?: string;
|
|
77
|
+
requestId?: string;
|
|
78
|
+
userPlan?: string;
|
|
79
|
+
region?: string;
|
|
80
|
+
[key: string]: string | number | boolean | undefined;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Usage tracking context for A/B testing analytics
|
|
85
|
+
*/
|
|
86
|
+
export interface UsageContext {
|
|
87
|
+
action?: string;
|
|
88
|
+
outcome?: 'success' | 'failure';
|
|
89
|
+
value?: number;
|
|
90
|
+
metadata?: Record<string, string | number | boolean>;
|
|
91
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
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
|
+
|
|
11
|
+
import type { SchemaWithMetadata } from '@smoothbricks/arrow-builder';
|
|
12
|
+
import { LogSchema } from './LogSchema.js';
|
|
13
|
+
import type { InferSchema, SchemaFields } from './types.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Brand symbol for DefinedLogSchema - used to detect this type in conditionals.
|
|
17
|
+
* Must be exported so types.ts can import it for ExtractOriginalSchema.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DEFINED_LOG_SCHEMA_BRAND: unique symbol;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Define log schema with runtime validation and type inference
|
|
23
|
+
*
|
|
24
|
+
* Example:
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const schema = defineLogSchema({
|
|
27
|
+
* requestId: S.category(),
|
|
28
|
+
* userId: S.optional(S.category()),
|
|
29
|
+
* httpStatus: S.number(),
|
|
30
|
+
* operation: S.enum(['SELECT', 'INSERT', 'UPDATE'])
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // Validate data
|
|
34
|
+
* const result = schema.validate({
|
|
35
|
+
* requestId: 'req-123',
|
|
36
|
+
* userId: 'user-456',
|
|
37
|
+
* httpStatus: 200,
|
|
38
|
+
* operation: 'SELECT'
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @param schema - Object mapping field names to schema objects
|
|
43
|
+
* @returns Extended schema with validation and extension methods
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* DefinedLogSchema type - result of defineLogSchema()
|
|
48
|
+
*
|
|
49
|
+
* Includes:
|
|
50
|
+
* - All original schema fields (T)
|
|
51
|
+
* - Extension methods (extend)
|
|
52
|
+
* - Validation methods (validate, parse, safeParse)
|
|
53
|
+
* - LogSchema methods (fieldEntries, fieldCount, fieldNames, fields)
|
|
54
|
+
* - Brand marker for type detection in InferSchema
|
|
55
|
+
*/
|
|
56
|
+
export type DefinedLogSchema<T extends SchemaFields> = LogSchema<T> & {
|
|
57
|
+
/** Brand marker - never actually set, only for type discrimination */
|
|
58
|
+
readonly [DEFINED_LOG_SCHEMA_BRAND]?: T;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
type SafeParseResult<T extends SchemaFields> =
|
|
62
|
+
| { success: true; value: InferSchema<T> }
|
|
63
|
+
| { success: false; error: Error };
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Options for defineLogSchema
|
|
67
|
+
*/
|
|
68
|
+
export interface DefineLogSchemaOptions {
|
|
69
|
+
/**
|
|
70
|
+
* Skip validation of reserved names.
|
|
71
|
+
* Only used internally for defining system schema columns.
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
_skipReservedNameValidation?: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* LogSchema with validation methods added by defineLogSchema.
|
|
79
|
+
* These methods are added via Object.assign at runtime.
|
|
80
|
+
*/
|
|
81
|
+
export type ValidatedLogSchema<T extends SchemaFields> = LogSchema<T> & {
|
|
82
|
+
/** Validate data and throw on error */
|
|
83
|
+
validate(data: unknown): InferSchema<T>;
|
|
84
|
+
/** Validate data and return null on error */
|
|
85
|
+
parse(data: unknown): InferSchema<T> | null;
|
|
86
|
+
/** Safe parse with detailed error information */
|
|
87
|
+
safeParse(data: unknown): SafeParseResult<T>;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Extended schema shape covering optional, refine, union, and key wrappers.
|
|
92
|
+
* Avoids repetitive inline casts throughout validateField.
|
|
93
|
+
*
|
|
94
|
+
* define additional schema types (e.g. 'key') beyond the columnar SchemaType union.
|
|
95
|
+
*/
|
|
96
|
+
interface ExtendedSchema extends Omit<SchemaWithMetadata, '__schema_type'> {
|
|
97
|
+
__schema_type?: string;
|
|
98
|
+
__optional?: boolean;
|
|
99
|
+
__inner?: SchemaWithMetadata;
|
|
100
|
+
__refiner?: (value: unknown, fail: { fail(msg: string): never }) => unknown;
|
|
101
|
+
__union?: SchemaWithMetadata[];
|
|
102
|
+
__key_name?: string;
|
|
103
|
+
__key_validator?: (value: string) => string;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Validate a single field value against its schema metadata.
|
|
108
|
+
* Uses __schema_type for type dispatch — no Sury dependency.
|
|
109
|
+
*
|
|
110
|
+
* Handles all schema compositions: optional, refine, union, key.
|
|
111
|
+
* Throws on unknown __schema_type to prevent silent acceptance of invalid data.
|
|
112
|
+
*/
|
|
113
|
+
function validateField(key: string, value: unknown, schema: SchemaWithMetadata): unknown {
|
|
114
|
+
const s = schema as ExtendedSchema;
|
|
115
|
+
|
|
116
|
+
// Handle optional schemas (created via S.optional())
|
|
117
|
+
if (s.__optional) {
|
|
118
|
+
if (value === undefined || value === null) return undefined;
|
|
119
|
+
// Value is present — recursively validate against the inner schema
|
|
120
|
+
if (s.__inner) {
|
|
121
|
+
return validateField(key, value, s.__inner);
|
|
122
|
+
}
|
|
123
|
+
// Optional with no inner schema — accept the value as-is
|
|
124
|
+
// (shouldn't happen with well-formed schemas, but defensive)
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (value === undefined || value === null) {
|
|
129
|
+
throw new Error(`Field "${key}": expected a value, got ${value === null ? 'null' : 'undefined'}`);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Handle refine() schemas — invoke the stored refiner function
|
|
133
|
+
if (s.__refiner) {
|
|
134
|
+
try {
|
|
135
|
+
return s.__refiner(value, {
|
|
136
|
+
fail(msg: string): never {
|
|
137
|
+
throw new Error(`Field "${key}": refinement failed — ${msg}`);
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
} catch (err) {
|
|
141
|
+
if (err instanceof Error && err.message.startsWith(`Field "${key}":`)) throw err;
|
|
142
|
+
throw new Error(`Field "${key}": refinement failed — ${err instanceof Error ? err.message : String(err)}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Handle union() schemas — try each member, accept if any matches
|
|
147
|
+
if (s.__union) {
|
|
148
|
+
const errors: string[] = [];
|
|
149
|
+
for (const member of s.__union) {
|
|
150
|
+
try {
|
|
151
|
+
return validateField(key, value, member);
|
|
152
|
+
} catch (err) {
|
|
153
|
+
errors.push(err instanceof Error ? err.message : String(err));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
throw new Error(
|
|
157
|
+
`Field "${key}": value does not match any union member. Tried ${s.__union.length}: ${errors.join('; ')}`,
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
switch (s.__schema_type) {
|
|
162
|
+
case 'number':
|
|
163
|
+
if (typeof value !== 'number') throw new Error(`Field "${key}": expected number, got ${typeof value}`);
|
|
164
|
+
return value;
|
|
165
|
+
case 'boolean':
|
|
166
|
+
if (typeof value !== 'boolean') throw new Error(`Field "${key}": expected boolean, got ${typeof value}`);
|
|
167
|
+
return value;
|
|
168
|
+
case 'text':
|
|
169
|
+
case 'category':
|
|
170
|
+
if (typeof value !== 'string') throw new Error(`Field "${key}": expected string, got ${typeof value}`);
|
|
171
|
+
return value;
|
|
172
|
+
case 'enum':
|
|
173
|
+
if (typeof value !== 'string') throw new Error(`Field "${key}": expected string, got ${typeof value}`);
|
|
174
|
+
if (s.__enum_values && !s.__enum_values.includes(value)) {
|
|
175
|
+
throw new Error(`Field "${key}": expected one of [${s.__enum_values.join(', ')}], got "${value}"`);
|
|
176
|
+
}
|
|
177
|
+
return value;
|
|
178
|
+
case 'bigUint64':
|
|
179
|
+
if (typeof value !== 'bigint') throw new Error(`Field "${key}": expected bigint, got ${typeof value}`);
|
|
180
|
+
return value;
|
|
181
|
+
case 'binary':
|
|
182
|
+
// Binary accepts any value (raw bytes or encoder-wrapped)
|
|
183
|
+
return value;
|
|
184
|
+
case 'key':
|
|
185
|
+
// Key schema — validate the runtime value using the stored validator
|
|
186
|
+
if (typeof value !== 'string') throw new Error(`Field "${key}": expected string key value, got ${typeof value}`);
|
|
187
|
+
if (s.__key_validator) {
|
|
188
|
+
return s.__key_validator(value);
|
|
189
|
+
}
|
|
190
|
+
return value;
|
|
191
|
+
default:
|
|
192
|
+
throw new Error(
|
|
193
|
+
`Field "${key}": unknown schema type "${s.__schema_type ?? '<none>'}". ` +
|
|
194
|
+
'All schema types must be explicitly handled in validateField.',
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Validate an object against a set of schema columns.
|
|
201
|
+
*/
|
|
202
|
+
function validateObject<T extends SchemaFields>(
|
|
203
|
+
data: unknown,
|
|
204
|
+
columns: Iterable<readonly [string, SchemaWithMetadata]>,
|
|
205
|
+
): InferSchema<T> {
|
|
206
|
+
if (!isUnknownRecord(data)) {
|
|
207
|
+
throw new Error(`Expected object, got ${data === null ? 'null' : typeof data}`);
|
|
208
|
+
}
|
|
209
|
+
const result: Record<string, unknown> = {};
|
|
210
|
+
for (const [key, schema] of columns) {
|
|
211
|
+
result[key] = validateField(key, data[key], schema);
|
|
212
|
+
}
|
|
213
|
+
assertValidatedObject<T>(result, columns);
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function isUnknownRecord(value: unknown): value is Record<string, unknown> {
|
|
218
|
+
return typeof value === 'object' && value !== null;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function assertValidatedObject<T extends SchemaFields>(
|
|
222
|
+
value: Record<string, unknown>,
|
|
223
|
+
columns: Iterable<readonly [string, SchemaWithMetadata]>,
|
|
224
|
+
): asserts value is InferSchema<T> {
|
|
225
|
+
for (const [key] of columns) {
|
|
226
|
+
if (!(key in value)) {
|
|
227
|
+
throw new Error(`Missing validated field "${key}"`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export function defineLogSchema<T extends SchemaFields>(
|
|
233
|
+
schema: T,
|
|
234
|
+
options?: DefineLogSchemaOptions,
|
|
235
|
+
): ValidatedLogSchema<T> {
|
|
236
|
+
// Wrap user input into LogSchema first
|
|
237
|
+
const logSchema = schema instanceof LogSchema ? schema : new LogSchema(schema);
|
|
238
|
+
|
|
239
|
+
// Assert attribute names don't use reserved names
|
|
240
|
+
if (!options?._skipReservedNameValidation) {
|
|
241
|
+
LogSchema.assertUserFieldNames(logSchema._columnNames);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Add validation methods directly to logSchema (preserves LogSchema instance)
|
|
245
|
+
// Use Object.assign to mutate logSchema in place, preserving prototype chain
|
|
246
|
+
const result: ValidatedLogSchema<T> = Object.assign(logSchema, {
|
|
247
|
+
/**
|
|
248
|
+
* Validate data and throw on error
|
|
249
|
+
*
|
|
250
|
+
* @throws Error if validation fails
|
|
251
|
+
*/
|
|
252
|
+
validate: (data: unknown): InferSchema<T> => {
|
|
253
|
+
return validateObject<T>(data, logSchema._columns);
|
|
254
|
+
},
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Validate data and return null on error
|
|
258
|
+
*
|
|
259
|
+
* @returns Validated data or null if invalid
|
|
260
|
+
*/
|
|
261
|
+
parse: (data: unknown): InferSchema<T> | null => {
|
|
262
|
+
try {
|
|
263
|
+
return validateObject<T>(data, logSchema._columns);
|
|
264
|
+
} catch {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Safe parse with detailed error information
|
|
271
|
+
*
|
|
272
|
+
* @returns Result object with success flag
|
|
273
|
+
*/
|
|
274
|
+
safeParse: (data: unknown) => {
|
|
275
|
+
try {
|
|
276
|
+
return { success: true as const, value: validateObject<T>(data, logSchema._columns) };
|
|
277
|
+
} catch (err) {
|
|
278
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
279
|
+
return { success: false as const, error };
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
// Verify result is still a LogSchema instance (Object.assign returns the mutated target)
|
|
285
|
+
if (!(result instanceof LogSchema)) {
|
|
286
|
+
throw new Error('defineLogSchema: Object.assign broke LogSchema instance');
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Return logSchema (still a LogSchema instance with added methods)
|
|
290
|
+
return result;
|
|
291
|
+
}
|