@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,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for null bitmap correctness in SpanLogger code generation
|
|
3
|
+
*
|
|
4
|
+
* These tests verify that the generated code sets null bitmap bits correctly
|
|
5
|
+
* for single writes and log entries with scoped attributes.
|
|
6
|
+
*
|
|
7
|
+
* Architecture changes (new design):
|
|
8
|
+
* - SpanLogger handles log entries (rows 2+), NOT tag writes (row 0)
|
|
9
|
+
* - Tag writing is done via ctx.tag which is a separate API (not on SpanLogger)
|
|
10
|
+
* - SpanLogger constructor: (buffer, createNextBuffer)
|
|
11
|
+
* - SpanLogger._writeIndex starts at 1 (rows 0/1 are reserved for span-start/end)
|
|
12
|
+
* - _setScope() stores scope values in buffer._scopeValues (immutable, frozen)
|
|
13
|
+
* - Scope filling happens at Arrow conversion time, NOT during span execution
|
|
14
|
+
* - Direct writes (tag/log) win over scope values on their respective rows
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { describe, expect, it } from 'bun:test';
|
|
18
|
+
import { createBuffer, createTestTraceRoot } from '../../__tests__/test-helpers.js';
|
|
19
|
+
import { DEFAULT_METADATA } from '../../opContext/defineOp.js';
|
|
20
|
+
import { S } from '../../schema/builder.js';
|
|
21
|
+
import { defineLogSchema } from '../../schema/defineLogSchema.js';
|
|
22
|
+
import type { LogSchema } from '../../schema/types.js';
|
|
23
|
+
import { createSpanBuffer, SpanBufferTestUtils } from '../../spanBuffer.js';
|
|
24
|
+
|
|
25
|
+
import type { AnySpanBuffer } from '../../types.js';
|
|
26
|
+
import { createSpanLoggerClass } from '../spanLoggerGenerator.js';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Create a test buffer from a schema
|
|
30
|
+
*/
|
|
31
|
+
function createTestBuffer(schema: LogSchema): AnySpanBuffer {
|
|
32
|
+
return createBuffer(schema);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Create a test buffer with a specific capacity
|
|
37
|
+
*/
|
|
38
|
+
function createTestBufferWithCapacity(schema: LogSchema, capacity: number): AnySpanBuffer {
|
|
39
|
+
return createSpanBuffer(schema, createTestTraceRoot('test-trace'), DEFAULT_METADATA, capacity);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
describe('null bitmap correctness', () => {
|
|
43
|
+
describe('immutable scope semantics', () => {
|
|
44
|
+
it('should store scope values in buffer._scopeValues as frozen object', () => {
|
|
45
|
+
const schema = defineLogSchema({
|
|
46
|
+
requestId: S.category(),
|
|
47
|
+
});
|
|
48
|
+
const buffer = createTestBuffer(schema);
|
|
49
|
+
|
|
50
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
51
|
+
const logger = new SpanLoggerClass(buffer);
|
|
52
|
+
|
|
53
|
+
// _setScope should store values in buffer._scopeValues (not fill buffer columns)
|
|
54
|
+
logger._setScope({ requestId: 'req-123' });
|
|
55
|
+
|
|
56
|
+
// Verify scope values are stored in buffer._scopeValues
|
|
57
|
+
expect(buffer._scopeValues).toBeDefined();
|
|
58
|
+
expect(buffer._scopeValues?.requestId).toBe('req-123');
|
|
59
|
+
|
|
60
|
+
// Verify the object is frozen (immutable)
|
|
61
|
+
expect(Object.isFrozen(buffer._scopeValues)).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should create new frozen object on each _setScope call (merge semantics)', () => {
|
|
65
|
+
const schema = defineLogSchema({
|
|
66
|
+
requestId: S.category(),
|
|
67
|
+
userId: S.category(),
|
|
68
|
+
});
|
|
69
|
+
const buffer = createTestBuffer(schema);
|
|
70
|
+
|
|
71
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
72
|
+
const logger = new SpanLoggerClass(buffer);
|
|
73
|
+
|
|
74
|
+
// First setScope call
|
|
75
|
+
logger._setScope({ requestId: 'req-123' });
|
|
76
|
+
const firstScopeValues = buffer._scopeValues;
|
|
77
|
+
expect(firstScopeValues?.requestId).toBe('req-123');
|
|
78
|
+
expect(firstScopeValues?.userId).toBeUndefined();
|
|
79
|
+
|
|
80
|
+
// Second setScope call - should merge with existing values
|
|
81
|
+
logger._setScope({ userId: 'user-456' });
|
|
82
|
+
const secondScopeValues = buffer._scopeValues;
|
|
83
|
+
|
|
84
|
+
// Should be a NEW object (immutable semantics)
|
|
85
|
+
expect(secondScopeValues).not.toBe(firstScopeValues);
|
|
86
|
+
|
|
87
|
+
// Should have merged values
|
|
88
|
+
expect(secondScopeValues?.requestId).toBe('req-123');
|
|
89
|
+
expect(secondScopeValues?.userId).toBe('user-456');
|
|
90
|
+
|
|
91
|
+
// Both should be frozen
|
|
92
|
+
expect(Object.isFrozen(firstScopeValues)).toBe(true);
|
|
93
|
+
expect(Object.isFrozen(secondScopeValues)).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('should clear keys when null is passed (null clears, undefined ignores)', () => {
|
|
97
|
+
const schema = defineLogSchema({
|
|
98
|
+
requestId: S.category(),
|
|
99
|
+
userId: S.category(),
|
|
100
|
+
});
|
|
101
|
+
const buffer = createTestBuffer(schema);
|
|
102
|
+
|
|
103
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
104
|
+
const logger = new SpanLoggerClass(buffer);
|
|
105
|
+
|
|
106
|
+
// Set initial values
|
|
107
|
+
logger._setScope({ requestId: 'req-123', userId: 'user-456' });
|
|
108
|
+
expect(buffer._scopeValues?.requestId).toBe('req-123');
|
|
109
|
+
expect(buffer._scopeValues?.userId).toBe('user-456');
|
|
110
|
+
|
|
111
|
+
// Pass null to clear requestId, undefined should be ignored
|
|
112
|
+
logger._setScope({ requestId: null, userId: undefined });
|
|
113
|
+
|
|
114
|
+
// requestId should be cleared (null), userId should remain (undefined ignored)
|
|
115
|
+
expect(buffer._scopeValues?.requestId).toBeUndefined();
|
|
116
|
+
expect(buffer._scopeValues?.userId).toBe('user-456');
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('should NOT fill buffer columns during _setScope (deferred to Arrow conversion)', () => {
|
|
120
|
+
const schema = defineLogSchema({
|
|
121
|
+
requestId: S.category(),
|
|
122
|
+
});
|
|
123
|
+
const buffer = createTestBuffer(schema);
|
|
124
|
+
|
|
125
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
126
|
+
const logger = new SpanLoggerClass(buffer);
|
|
127
|
+
|
|
128
|
+
// _setScope should NOT fill buffer columns
|
|
129
|
+
logger._setScope({ requestId: 'req-123' });
|
|
130
|
+
|
|
131
|
+
// Check null bitmap - should NOT be allocated (lazy allocation on first write)
|
|
132
|
+
const nulls = SpanBufferTestUtils.getNullBitmap(buffer, 'requestId');
|
|
133
|
+
|
|
134
|
+
// Null bitmap should NOT be allocated since we never directly wrote to requestId
|
|
135
|
+
// Scope filling happens at Arrow conversion time, not during span execution
|
|
136
|
+
expect(nulls).toBeUndefined();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe('log message writes (arbitrary index)', () => {
|
|
141
|
+
it('should NOT set null bitmap during info() - scope filling is deferred to Arrow conversion', () => {
|
|
142
|
+
// Per specs/lmao/01i_span_scope_attributes.md:
|
|
143
|
+
// - Scope values are stored in buffer._scopeValues as a plain object
|
|
144
|
+
// - Scope filling happens at Arrow conversion time, NOT during span execution
|
|
145
|
+
// - This is because scope values are "defaults" that fill null slots
|
|
146
|
+
const schema = defineLogSchema({
|
|
147
|
+
requestId: S.category(),
|
|
148
|
+
});
|
|
149
|
+
const buffer = createTestBuffer(schema);
|
|
150
|
+
|
|
151
|
+
// Set scope value via buffer._scopeValues directly for test setup
|
|
152
|
+
buffer._scopeValues = Object.freeze({ requestId: 'req-123' });
|
|
153
|
+
|
|
154
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
155
|
+
const logger = new SpanLoggerClass(buffer);
|
|
156
|
+
|
|
157
|
+
// Set _writeIndex to 4 so nextRow() makes it 5
|
|
158
|
+
logger._writeIndex = 4;
|
|
159
|
+
|
|
160
|
+
// Log a message - this does NOT write scoped attributes during execution
|
|
161
|
+
// Scope values are filled at Arrow conversion time
|
|
162
|
+
logger.info('test message');
|
|
163
|
+
|
|
164
|
+
// Verify that the null bitmap bit is NOT set (scope is deferred)
|
|
165
|
+
const nulls = SpanBufferTestUtils.getNullBitmap(buffer, 'requestId');
|
|
166
|
+
// Null bitmap might not even be allocated since we never directly wrote to requestId
|
|
167
|
+
if (nulls) {
|
|
168
|
+
// If allocated, the bits should be 0 (not written directly)
|
|
169
|
+
expect(nulls[0] & (1 << 5)).toBe(0);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it('should NOT set null bitmap at index 9 during info() - scope is deferred', () => {
|
|
174
|
+
// Same as above - scope values are NOT written during span execution
|
|
175
|
+
// They are stored in buffer._scopeValues and filled at Arrow conversion
|
|
176
|
+
const schema = defineLogSchema({
|
|
177
|
+
requestId: S.category(),
|
|
178
|
+
});
|
|
179
|
+
// Need capacity > 9 to test writing at index 9
|
|
180
|
+
const buffer = createTestBufferWithCapacity(schema, 16);
|
|
181
|
+
|
|
182
|
+
// Set scope value via buffer._scopeValues directly for test setup
|
|
183
|
+
buffer._scopeValues = Object.freeze({ requestId: 'req-456' });
|
|
184
|
+
|
|
185
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
186
|
+
const logger = new SpanLoggerClass(buffer);
|
|
187
|
+
|
|
188
|
+
// Set _writeIndex to 8 so nextRow() makes it 9
|
|
189
|
+
logger._writeIndex = 8;
|
|
190
|
+
|
|
191
|
+
// Log a message - does NOT write scoped attributes immediately
|
|
192
|
+
logger.info('test message');
|
|
193
|
+
|
|
194
|
+
// Verify scope values are stored correctly
|
|
195
|
+
expect(buffer._scopeValues.requestId).toBe('req-456');
|
|
196
|
+
|
|
197
|
+
// Null bitmap is not set during execution (deferred to Arrow conversion)
|
|
198
|
+
const nulls = SpanBufferTestUtils.getNullBitmap(buffer, 'requestId');
|
|
199
|
+
if (nulls) {
|
|
200
|
+
const byteIndex = 9 >>> 3; // = 1
|
|
201
|
+
const bitOffset = 9 & 7; // = 1
|
|
202
|
+
// Not set - scope filling is deferred
|
|
203
|
+
expect(nulls[byteIndex] & (1 << bitOffset)).toBe(0);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
});
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for SpanLogger code generation
|
|
3
|
+
*
|
|
4
|
+
* SpanLogger extends ColumnWriter from arrow-builder and adds:
|
|
5
|
+
* - info(), debug(), warn(), error() methods for log entries
|
|
6
|
+
* - _setScope() for setting scoped attributes
|
|
7
|
+
* - _getNextBuffer() override for SpanBuffer creation on overflow
|
|
8
|
+
*
|
|
9
|
+
* Note: Tag writing (row 0) is handled by TagWriter (not yet implemented).
|
|
10
|
+
* SpanLogger only handles log entries (rows 2+).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { describe, expect, it } from 'bun:test';
|
|
14
|
+
import { createTestLogger } from '../../__tests__/test-helpers.js';
|
|
15
|
+
import { S } from '../../schema/builder.js';
|
|
16
|
+
import { defineLogSchema } from '../../schema/defineLogSchema.js';
|
|
17
|
+
import {
|
|
18
|
+
ENTRY_TYPE_DEBUG,
|
|
19
|
+
ENTRY_TYPE_ERROR,
|
|
20
|
+
ENTRY_TYPE_INFO,
|
|
21
|
+
ENTRY_TYPE_TRACE,
|
|
22
|
+
ENTRY_TYPE_WARN,
|
|
23
|
+
} from '../../schema/systemSchema.js';
|
|
24
|
+
import { createSpanLoggerClass } from '../spanLoggerGenerator.js';
|
|
25
|
+
|
|
26
|
+
describe('createSpanLoggerClass', () => {
|
|
27
|
+
describe('class creation', () => {
|
|
28
|
+
it('should create a SpanLogger class for empty schema', () => {
|
|
29
|
+
const schema = defineLogSchema({});
|
|
30
|
+
const SpanLoggerClass = createSpanLoggerClass(schema);
|
|
31
|
+
|
|
32
|
+
expect(SpanLoggerClass).toBeDefined();
|
|
33
|
+
expect(typeof SpanLoggerClass).toBe('function');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should cache generated classes for the same schema', () => {
|
|
37
|
+
const schema = defineLogSchema({
|
|
38
|
+
userId: S.category(),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const Class1 = createSpanLoggerClass(schema);
|
|
42
|
+
const Class2 = createSpanLoggerClass(schema);
|
|
43
|
+
|
|
44
|
+
expect(Class1).toBe(Class2);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('should create different classes for different schemas', () => {
|
|
48
|
+
const schema1 = defineLogSchema({ userId: S.category() });
|
|
49
|
+
const schema2 = defineLogSchema({ requestId: S.category() });
|
|
50
|
+
|
|
51
|
+
const Class1 = createSpanLoggerClass(schema1);
|
|
52
|
+
const Class2 = createSpanLoggerClass(schema2);
|
|
53
|
+
|
|
54
|
+
expect(Class1).not.toBe(Class2);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe('instance creation', () => {
|
|
59
|
+
it('should create instance with buffer and createNextBuffer', () => {
|
|
60
|
+
const schema = defineLogSchema({ userId: S.category() });
|
|
61
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
62
|
+
|
|
63
|
+
expect(logger).toBeDefined();
|
|
64
|
+
expect(logger._buffer).toBe(buffer);
|
|
65
|
+
expect(buffer._scopeValues).toBeDefined();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('should start with _writeIndex = 1', () => {
|
|
69
|
+
const schema = defineLogSchema({});
|
|
70
|
+
const { logger } = createTestLogger(schema);
|
|
71
|
+
|
|
72
|
+
expect(logger._writeIndex).toBe(1);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe('logging methods', () => {
|
|
77
|
+
it('should increment _writeIndex on info()', () => {
|
|
78
|
+
const schema = defineLogSchema({ userId: S.category() });
|
|
79
|
+
const { logger } = createTestLogger(schema);
|
|
80
|
+
|
|
81
|
+
expect(logger._writeIndex).toBe(1);
|
|
82
|
+
logger.info('Test message');
|
|
83
|
+
expect(logger._writeIndex).toBe(2);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should write entry type for info()', () => {
|
|
87
|
+
const schema = defineLogSchema({});
|
|
88
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
89
|
+
|
|
90
|
+
logger.info('Test message');
|
|
91
|
+
expect(buffer.entry_type[2]).toBe(ENTRY_TYPE_INFO);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('should write entry type for debug()', () => {
|
|
95
|
+
const schema = defineLogSchema({});
|
|
96
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
97
|
+
|
|
98
|
+
logger.debug('Debug message');
|
|
99
|
+
expect(buffer.entry_type[2]).toBe(ENTRY_TYPE_DEBUG);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('should write entry type for warn()', () => {
|
|
103
|
+
const schema = defineLogSchema({});
|
|
104
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
105
|
+
|
|
106
|
+
logger.warn('Warning message');
|
|
107
|
+
expect(buffer.entry_type[2]).toBe(ENTRY_TYPE_WARN);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('should write entry type for error()', () => {
|
|
111
|
+
const schema = defineLogSchema({});
|
|
112
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
113
|
+
|
|
114
|
+
logger.error('Error message');
|
|
115
|
+
expect(buffer.entry_type[2]).toBe(ENTRY_TYPE_ERROR);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('should write entry type for trace()', () => {
|
|
119
|
+
const schema = defineLogSchema({});
|
|
120
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
121
|
+
|
|
122
|
+
logger.trace('Trace message');
|
|
123
|
+
expect(buffer.entry_type[2]).toBe(ENTRY_TYPE_TRACE);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should write timestamp for log entries', () => {
|
|
127
|
+
const schema = defineLogSchema({});
|
|
128
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
129
|
+
|
|
130
|
+
logger.info('Test message');
|
|
131
|
+
|
|
132
|
+
expect(buffer.timestamp[2]).not.toBe(0n);
|
|
133
|
+
expect(typeof buffer.timestamp[2]).toBe('bigint');
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('should return this for fluent chaining', () => {
|
|
137
|
+
const schema = defineLogSchema({});
|
|
138
|
+
const { logger } = createTestLogger(schema);
|
|
139
|
+
|
|
140
|
+
const result = logger.info('Test message');
|
|
141
|
+
|
|
142
|
+
// FluentLogEntry is same object at runtime (types differ but object identity is same)
|
|
143
|
+
expect(result === (logger as unknown)).toBe(true);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('should support chaining logging methods', () => {
|
|
147
|
+
const schema = defineLogSchema({});
|
|
148
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
149
|
+
|
|
150
|
+
// FluentLogEntry includes logging methods for continued chaining
|
|
151
|
+
logger.info('First').info('Second').warn('Third');
|
|
152
|
+
|
|
153
|
+
expect(logger._writeIndex).toBe(4);
|
|
154
|
+
expect(buffer.entry_type[2]).toBe(ENTRY_TYPE_INFO);
|
|
155
|
+
expect(buffer.entry_type[3]).toBe(ENTRY_TYPE_INFO);
|
|
156
|
+
expect(buffer.entry_type[4]).toBe(ENTRY_TYPE_WARN);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
describe('scope management', () => {
|
|
161
|
+
it('should update scope values via _setScope to buffer._scopeValues', () => {
|
|
162
|
+
const schema = defineLogSchema({
|
|
163
|
+
userId: S.category(),
|
|
164
|
+
requestId: S.category(),
|
|
165
|
+
});
|
|
166
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
167
|
+
|
|
168
|
+
logger._setScope({ userId: 'user123' });
|
|
169
|
+
|
|
170
|
+
expect(buffer._scopeValues?.userId).toBe('user123');
|
|
171
|
+
expect(buffer._scopeValues?.requestId).toBeUndefined();
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('should access scope via logger.scope getter', () => {
|
|
175
|
+
const schema = defineLogSchema({ userId: S.category() });
|
|
176
|
+
const { logger } = createTestLogger(schema);
|
|
177
|
+
|
|
178
|
+
logger._setScope({ userId: 'test123' });
|
|
179
|
+
|
|
180
|
+
expect(logger.scope?.userId).toBe('test123');
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
describe('fluent attribute setters', () => {
|
|
185
|
+
it('should have attribute setter methods from ColumnWriter', () => {
|
|
186
|
+
const schema = defineLogSchema({
|
|
187
|
+
userId: S.category(),
|
|
188
|
+
count: S.number(),
|
|
189
|
+
enabled: S.boolean(),
|
|
190
|
+
});
|
|
191
|
+
const { logger } = createTestLogger(schema);
|
|
192
|
+
|
|
193
|
+
// Log an entry first to advance writeIndex
|
|
194
|
+
logger.info('Test');
|
|
195
|
+
|
|
196
|
+
// Verify methods exist and are callable - types come from ColumnWriter<T>
|
|
197
|
+
expect(typeof logger.userId).toBe('function');
|
|
198
|
+
expect(typeof logger.count).toBe('function');
|
|
199
|
+
expect(typeof logger.enabled).toBe('function');
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('should write attribute values at current _writeIndex', () => {
|
|
203
|
+
const schema = defineLogSchema({ userId: S.category() });
|
|
204
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
205
|
+
|
|
206
|
+
// Log an entry and chain attribute
|
|
207
|
+
logger.info('Test').userId('user123');
|
|
208
|
+
|
|
209
|
+
// Value should be at index 2 (after info() incremented from 1 to 2)
|
|
210
|
+
expect(buffer.userId_values[2]).toBe('user123');
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it('should support fluent chaining with attributes', () => {
|
|
214
|
+
const schema = defineLogSchema({
|
|
215
|
+
userId: S.category(),
|
|
216
|
+
count: S.number(),
|
|
217
|
+
});
|
|
218
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
219
|
+
|
|
220
|
+
logger.info('Test').userId('user123').count(42);
|
|
221
|
+
|
|
222
|
+
expect(buffer.userId_values[2]).toBe('user123');
|
|
223
|
+
expect(buffer.count_values[2]).toBe(42);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('should write multiple log entries with different attributes', () => {
|
|
227
|
+
const schema = defineLogSchema({ userId: S.category() });
|
|
228
|
+
const { buffer, logger } = createTestLogger(schema);
|
|
229
|
+
|
|
230
|
+
logger.info('First').userId('user1');
|
|
231
|
+
logger.info('Second').userId('user2');
|
|
232
|
+
|
|
233
|
+
expect(buffer.userId_values[2]).toBe('user1');
|
|
234
|
+
expect(buffer.userId_values[3]).toBe('user2');
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
});
|