@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,537 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for background flush scheduler
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, mock } from 'bun:test';
|
|
6
|
+
import {
|
|
7
|
+
type FlushHandler,
|
|
8
|
+
type FlushMetadata,
|
|
9
|
+
FlushScheduler,
|
|
10
|
+
type FlushSchedulerConfig,
|
|
11
|
+
FlushSchedulerTestUtils,
|
|
12
|
+
} from '../flushScheduler.js';
|
|
13
|
+
import { createSpanBuffer } from '../spanBuffer.js';
|
|
14
|
+
|
|
15
|
+
import type { AnySpanBuffer } from '../types.js';
|
|
16
|
+
import { createTestOpMetadata, createTestSchema, createTestTraceRoot } from './test-helpers.js';
|
|
17
|
+
|
|
18
|
+
function createTestBuffer(): AnySpanBuffer {
|
|
19
|
+
const schema = createTestSchema({});
|
|
20
|
+
const opMetadata = createTestOpMetadata();
|
|
21
|
+
const buffer = createSpanBuffer(schema, createTestTraceRoot('test-trace'), opMetadata);
|
|
22
|
+
// Write some test data
|
|
23
|
+
buffer._writeIndex = 5;
|
|
24
|
+
for (let i = 0; i < buffer._writeIndex; i++) {
|
|
25
|
+
buffer.timestamp[i] = BigInt(Date.now()) * 1_000_000n;
|
|
26
|
+
buffer.entry_type[i] = 1;
|
|
27
|
+
}
|
|
28
|
+
return buffer;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
describe('FlushScheduler', () => {
|
|
32
|
+
let scheduler: FlushScheduler;
|
|
33
|
+
let flushHandler: FlushHandler;
|
|
34
|
+
let flushCalls: Array<{ metadata: FlushMetadata }>;
|
|
35
|
+
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
flushCalls = [];
|
|
38
|
+
flushHandler = mock((_table, metadata) => {
|
|
39
|
+
flushCalls.push({ metadata });
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
scheduler = new FlushScheduler(flushHandler);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
afterEach(() => {
|
|
46
|
+
if (scheduler) {
|
|
47
|
+
scheduler.stop();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('register', () => {
|
|
52
|
+
describe('success cases', () => {
|
|
53
|
+
it('should register a buffer for automatic flushing', () => {
|
|
54
|
+
const buffer = createTestBuffer();
|
|
55
|
+
|
|
56
|
+
expect(() => {
|
|
57
|
+
scheduler.register(buffer);
|
|
58
|
+
}).not.toThrow();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should start scheduler when first buffer is registered', () => {
|
|
62
|
+
const buffer = createTestBuffer();
|
|
63
|
+
scheduler.register(buffer);
|
|
64
|
+
|
|
65
|
+
// Scheduler should be running (internal state check)
|
|
66
|
+
expect(scheduler).toBeDefined();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should register multiple buffers', () => {
|
|
70
|
+
const buffer1 = createTestBuffer();
|
|
71
|
+
const buffer2 = createTestBuffer();
|
|
72
|
+
const buffer3 = createTestBuffer();
|
|
73
|
+
|
|
74
|
+
scheduler.register(buffer1);
|
|
75
|
+
scheduler.register(buffer2);
|
|
76
|
+
scheduler.register(buffer3);
|
|
77
|
+
|
|
78
|
+
expect(scheduler).toBeDefined();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
describe('edge cases', () => {
|
|
83
|
+
it('should handle registering same buffer multiple times', () => {
|
|
84
|
+
const buffer = createTestBuffer();
|
|
85
|
+
|
|
86
|
+
scheduler.register(buffer);
|
|
87
|
+
scheduler.register(buffer);
|
|
88
|
+
scheduler.register(buffer);
|
|
89
|
+
|
|
90
|
+
expect(scheduler).toBeDefined();
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('should handle buffer with zero writeIndex', () => {
|
|
94
|
+
const buffer = createTestBuffer();
|
|
95
|
+
buffer._writeIndex = 0;
|
|
96
|
+
|
|
97
|
+
scheduler.register(buffer);
|
|
98
|
+
expect(scheduler).toBeDefined();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('should handle buffer at full capacity', () => {
|
|
102
|
+
const buffer = createTestBuffer();
|
|
103
|
+
buffer._writeIndex = buffer._capacity;
|
|
104
|
+
|
|
105
|
+
scheduler.register(buffer);
|
|
106
|
+
expect(scheduler).toBeDefined();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe('failure cases', () => {
|
|
111
|
+
it('should handle buffer with invalid writeIndex', () => {
|
|
112
|
+
const buffer = createTestBuffer();
|
|
113
|
+
buffer._writeIndex = -1;
|
|
114
|
+
|
|
115
|
+
expect(() => {
|
|
116
|
+
scheduler.register(buffer);
|
|
117
|
+
}).not.toThrow();
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('should handle buffer with writeIndex > capacity', () => {
|
|
121
|
+
const buffer = createTestBuffer();
|
|
122
|
+
buffer._writeIndex = buffer._capacity + 100;
|
|
123
|
+
|
|
124
|
+
expect(() => {
|
|
125
|
+
scheduler.register(buffer);
|
|
126
|
+
}).not.toThrow();
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it('should handle buffer with missing properties', () => {
|
|
130
|
+
const buffer = createTestBuffer();
|
|
131
|
+
Reflect.set(buffer, 'timestamp', undefined);
|
|
132
|
+
|
|
133
|
+
expect(() => {
|
|
134
|
+
scheduler.register(buffer);
|
|
135
|
+
}).not.toThrow();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe('start and stop', () => {
|
|
141
|
+
describe('success cases', () => {
|
|
142
|
+
it('should start the scheduler', () => {
|
|
143
|
+
expect(() => {
|
|
144
|
+
scheduler.start();
|
|
145
|
+
}).not.toThrow();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('should stop the scheduler', () => {
|
|
149
|
+
scheduler.start();
|
|
150
|
+
|
|
151
|
+
expect(() => {
|
|
152
|
+
scheduler.stop();
|
|
153
|
+
}).not.toThrow();
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('should allow restart after stop', () => {
|
|
157
|
+
scheduler.start();
|
|
158
|
+
scheduler.stop();
|
|
159
|
+
|
|
160
|
+
expect(() => {
|
|
161
|
+
scheduler.start();
|
|
162
|
+
}).not.toThrow();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe('edge cases', () => {
|
|
167
|
+
it('should handle multiple start calls', () => {
|
|
168
|
+
scheduler.start();
|
|
169
|
+
scheduler.start();
|
|
170
|
+
scheduler.start();
|
|
171
|
+
|
|
172
|
+
expect(scheduler).toBeDefined();
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it('should handle multiple stop calls', () => {
|
|
176
|
+
scheduler.start();
|
|
177
|
+
scheduler.stop();
|
|
178
|
+
scheduler.stop();
|
|
179
|
+
scheduler.stop();
|
|
180
|
+
|
|
181
|
+
expect(scheduler).toBeDefined();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('should handle stop without start', () => {
|
|
185
|
+
expect(() => {
|
|
186
|
+
scheduler.stop();
|
|
187
|
+
}).not.toThrow();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
describe('failure cases', () => {
|
|
192
|
+
it('should not throw if timers fail to clear', () => {
|
|
193
|
+
scheduler.start();
|
|
194
|
+
|
|
195
|
+
// Force internal state corruption - accessing private property for testing
|
|
196
|
+
FlushSchedulerTestUtils.setFlushTimer(scheduler, undefined);
|
|
197
|
+
|
|
198
|
+
expect(() => {
|
|
199
|
+
scheduler.stop();
|
|
200
|
+
}).not.toThrow();
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
describe('flush', () => {
|
|
206
|
+
describe('success cases', () => {
|
|
207
|
+
it('should manually trigger a flush', async () => {
|
|
208
|
+
const buffer = createTestBuffer();
|
|
209
|
+
scheduler.register(buffer);
|
|
210
|
+
|
|
211
|
+
await scheduler.flush();
|
|
212
|
+
|
|
213
|
+
// Handler should have been called
|
|
214
|
+
expect(flushCalls.length).toBeGreaterThan(0);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('should flush with correct metadata', async () => {
|
|
218
|
+
const buffer = createTestBuffer();
|
|
219
|
+
scheduler.register(buffer);
|
|
220
|
+
|
|
221
|
+
await scheduler.flush();
|
|
222
|
+
|
|
223
|
+
expect(flushCalls[0].metadata.flushReason).toBe('manual');
|
|
224
|
+
expect(flushCalls[0].metadata.totalRows).toBeGreaterThan(0);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('should flush multiple buffers together', async () => {
|
|
228
|
+
const buffer1 = createTestBuffer();
|
|
229
|
+
const buffer2 = createTestBuffer();
|
|
230
|
+
|
|
231
|
+
// Buffers created from the same schema share the same SpanBufferClass
|
|
232
|
+
// and can be flushed together (schema compatibility is automatic)
|
|
233
|
+
|
|
234
|
+
buffer1._writeIndex = 10;
|
|
235
|
+
buffer2._writeIndex = 20;
|
|
236
|
+
|
|
237
|
+
scheduler.register(buffer1);
|
|
238
|
+
scheduler.register(buffer2);
|
|
239
|
+
|
|
240
|
+
await scheduler.flush();
|
|
241
|
+
|
|
242
|
+
expect(flushCalls[0].metadata.totalRows).toBeGreaterThan(0);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('should require re-registering a buffer after successful flush', async () => {
|
|
246
|
+
const buffer = createTestBuffer();
|
|
247
|
+
scheduler.register(buffer);
|
|
248
|
+
|
|
249
|
+
await scheduler.flush();
|
|
250
|
+
expect(flushCalls.length).toBe(1);
|
|
251
|
+
|
|
252
|
+
// Simulate later writes without re-registering.
|
|
253
|
+
buffer._writeIndex = 3;
|
|
254
|
+
await scheduler.flush();
|
|
255
|
+
|
|
256
|
+
// Buffer should have been removed from pending set after first successful flush.
|
|
257
|
+
expect(flushCalls.length).toBe(1);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
describe('edge cases', () => {
|
|
262
|
+
it('should handle flush with no registered buffers', async () => {
|
|
263
|
+
// Should complete without throwing
|
|
264
|
+
await scheduler.flush();
|
|
265
|
+
expect(flushCalls.length).toBe(0); // No flush should occur
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
it('should handle flush with empty buffers', async () => {
|
|
269
|
+
const buffer = createTestBuffer();
|
|
270
|
+
buffer._writeIndex = 0;
|
|
271
|
+
|
|
272
|
+
scheduler.register(buffer);
|
|
273
|
+
|
|
274
|
+
// Should complete without throwing
|
|
275
|
+
await scheduler.flush();
|
|
276
|
+
expect(flushCalls.length).toBe(0); // No flush should occur for empty buffers
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it('should handle concurrent flush calls', async () => {
|
|
280
|
+
const buffer = createTestBuffer();
|
|
281
|
+
scheduler.register(buffer);
|
|
282
|
+
|
|
283
|
+
await Promise.all([scheduler.flush(), scheduler.flush(), scheduler.flush()]);
|
|
284
|
+
|
|
285
|
+
expect(flushCalls.length).toBeGreaterThanOrEqual(1);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
describe('failure cases', () => {
|
|
290
|
+
it('should handle flush when handler throws error', async () => {
|
|
291
|
+
const errorMessages: unknown[] = [];
|
|
292
|
+
const originalError = console.error;
|
|
293
|
+
console.error = (...args: unknown[]) => {
|
|
294
|
+
errorMessages.push(...args);
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
try {
|
|
298
|
+
const errorHandler: FlushHandler = () => {
|
|
299
|
+
throw new Error('Flush failed');
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
const errorScheduler = new FlushScheduler(errorHandler);
|
|
303
|
+
|
|
304
|
+
const buffer = createTestBuffer();
|
|
305
|
+
const originalWriteIndex = buffer._writeIndex;
|
|
306
|
+
errorScheduler.register(buffer);
|
|
307
|
+
|
|
308
|
+
// Should complete without throwing (error is caught and logged)
|
|
309
|
+
await errorScheduler.flush();
|
|
310
|
+
|
|
311
|
+
// Verify error was logged
|
|
312
|
+
expect(errorMessages.length).toBeGreaterThan(0);
|
|
313
|
+
expect(errorMessages.some((msg) => String(msg).includes('Error in flush handler'))).toBe(true);
|
|
314
|
+
|
|
315
|
+
// Verify buffers are NOT reset on failure (to avoid data loss)
|
|
316
|
+
expect(buffer._writeIndex).toBe(originalWriteIndex);
|
|
317
|
+
|
|
318
|
+
errorScheduler.stop();
|
|
319
|
+
} finally {
|
|
320
|
+
console.error = originalError;
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
it('should handle flush with corrupted buffer', async () => {
|
|
325
|
+
const errorMessages: unknown[] = [];
|
|
326
|
+
const originalError = console.error;
|
|
327
|
+
console.error = (...args: unknown[]) => {
|
|
328
|
+
errorMessages.push(...args);
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
const buffer = createTestBuffer();
|
|
333
|
+
Reflect.set(buffer, 'timestamp', undefined);
|
|
334
|
+
|
|
335
|
+
scheduler.register(buffer);
|
|
336
|
+
|
|
337
|
+
// Should complete without throwing (error is caught and logged)
|
|
338
|
+
await scheduler.flush();
|
|
339
|
+
|
|
340
|
+
// Verify error was logged for buffer conversion failure
|
|
341
|
+
expect(errorMessages.length).toBeGreaterThan(0);
|
|
342
|
+
expect(errorMessages.some((msg) => String(msg).includes('Error converting buffer to Arrow table'))).toBe(
|
|
343
|
+
true,
|
|
344
|
+
);
|
|
345
|
+
} finally {
|
|
346
|
+
console.error = originalError;
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
it('should handle handler that returns rejected promise', async () => {
|
|
351
|
+
const errorMessages: unknown[] = [];
|
|
352
|
+
const originalError = console.error;
|
|
353
|
+
console.error = (...args: unknown[]) => {
|
|
354
|
+
errorMessages.push(...args);
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
try {
|
|
358
|
+
const rejectedHandler: FlushHandler = async () => {
|
|
359
|
+
throw new Error('Async error');
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
const rejectedScheduler = new FlushScheduler(rejectedHandler);
|
|
363
|
+
|
|
364
|
+
const buffer = createTestBuffer();
|
|
365
|
+
const originalWriteIndex = buffer._writeIndex;
|
|
366
|
+
rejectedScheduler.register(buffer);
|
|
367
|
+
|
|
368
|
+
// Should complete without throwing (error is caught and logged)
|
|
369
|
+
await rejectedScheduler.flush();
|
|
370
|
+
|
|
371
|
+
// Verify error was logged
|
|
372
|
+
expect(errorMessages.length).toBeGreaterThan(0);
|
|
373
|
+
expect(errorMessages.some((msg) => String(msg).includes('Error in flush handler'))).toBe(true);
|
|
374
|
+
|
|
375
|
+
// Verify buffers are NOT reset on failure (to avoid data loss)
|
|
376
|
+
expect(buffer._writeIndex).toBe(originalWriteIndex);
|
|
377
|
+
|
|
378
|
+
rejectedScheduler.stop();
|
|
379
|
+
} finally {
|
|
380
|
+
console.error = originalError;
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
describe('recordActivity', () => {
|
|
387
|
+
describe('success cases', () => {
|
|
388
|
+
it('should record activity timestamp', () => {
|
|
389
|
+
expect(() => {
|
|
390
|
+
scheduler.recordActivity();
|
|
391
|
+
}).not.toThrow();
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
it('should update activity timestamp on multiple calls', () => {
|
|
395
|
+
scheduler.recordActivity();
|
|
396
|
+
scheduler.recordActivity();
|
|
397
|
+
scheduler.recordActivity();
|
|
398
|
+
|
|
399
|
+
expect(scheduler).toBeDefined();
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
describe('edge cases', () => {
|
|
404
|
+
it('should handle rapid consecutive calls', () => {
|
|
405
|
+
for (let i = 0; i < 1000; i++) {
|
|
406
|
+
scheduler.recordActivity();
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
expect(scheduler).toBeDefined();
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
describe('failure cases', () => {
|
|
414
|
+
it('should not throw even if internal state is corrupted', () => {
|
|
415
|
+
FlushSchedulerTestUtils.setLastActivityTime(scheduler, null);
|
|
416
|
+
|
|
417
|
+
expect(() => {
|
|
418
|
+
scheduler.recordActivity();
|
|
419
|
+
}).not.toThrow();
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
describe('configuration', () => {
|
|
425
|
+
describe('success cases', () => {
|
|
426
|
+
it('should accept custom configuration', () => {
|
|
427
|
+
const config: FlushSchedulerConfig = {
|
|
428
|
+
maxFlushInterval: 5000,
|
|
429
|
+
minFlushInterval: 500,
|
|
430
|
+
capacityThreshold: 0.9,
|
|
431
|
+
idleDetection: false,
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
const customScheduler = new FlushScheduler(flushHandler, config);
|
|
435
|
+
|
|
436
|
+
expect(customScheduler).toBeDefined();
|
|
437
|
+
customScheduler.stop();
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
it('should use default config when not provided', () => {
|
|
441
|
+
const defaultScheduler = new FlushScheduler(flushHandler);
|
|
442
|
+
|
|
443
|
+
expect(defaultScheduler).toBeDefined();
|
|
444
|
+
defaultScheduler.stop();
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
it('should accept partial configuration', () => {
|
|
448
|
+
const config: FlushSchedulerConfig = {
|
|
449
|
+
maxFlushInterval: 20000,
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
const partialScheduler = new FlushScheduler(flushHandler, config);
|
|
453
|
+
|
|
454
|
+
expect(partialScheduler).toBeDefined();
|
|
455
|
+
partialScheduler.stop();
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
describe('edge cases', () => {
|
|
460
|
+
it('should handle zero intervals', () => {
|
|
461
|
+
const config: FlushSchedulerConfig = {
|
|
462
|
+
maxFlushInterval: 0,
|
|
463
|
+
minFlushInterval: 0,
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
const zeroScheduler = new FlushScheduler(flushHandler, config);
|
|
467
|
+
|
|
468
|
+
expect(zeroScheduler).toBeDefined();
|
|
469
|
+
zeroScheduler.stop();
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
it('should handle very large intervals', () => {
|
|
473
|
+
const config: FlushSchedulerConfig = {
|
|
474
|
+
maxFlushInterval: Number.MAX_SAFE_INTEGER,
|
|
475
|
+
minFlushInterval: Number.MAX_SAFE_INTEGER - 1,
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
const largeScheduler = new FlushScheduler(flushHandler, config);
|
|
479
|
+
|
|
480
|
+
expect(largeScheduler).toBeDefined();
|
|
481
|
+
largeScheduler.stop();
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
it('should handle capacity threshold at boundaries', () => {
|
|
485
|
+
const config1: FlushSchedulerConfig = { capacityThreshold: 0.0 };
|
|
486
|
+
const config2: FlushSchedulerConfig = { capacityThreshold: 1.0 };
|
|
487
|
+
|
|
488
|
+
const scheduler1 = new FlushScheduler(flushHandler, config1);
|
|
489
|
+
|
|
490
|
+
const scheduler2 = new FlushScheduler(flushHandler, config2);
|
|
491
|
+
|
|
492
|
+
expect(scheduler1).toBeDefined();
|
|
493
|
+
expect(scheduler2).toBeDefined();
|
|
494
|
+
|
|
495
|
+
scheduler1.stop();
|
|
496
|
+
scheduler2.stop();
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
describe('failure cases', () => {
|
|
501
|
+
it('should handle negative intervals', () => {
|
|
502
|
+
const config: FlushSchedulerConfig = {
|
|
503
|
+
maxFlushInterval: -1000,
|
|
504
|
+
minFlushInterval: -500,
|
|
505
|
+
};
|
|
506
|
+
|
|
507
|
+
const negativeScheduler = new FlushScheduler(flushHandler, config);
|
|
508
|
+
|
|
509
|
+
expect(negativeScheduler).toBeDefined();
|
|
510
|
+
negativeScheduler.stop();
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
it('should handle capacity threshold > 1', () => {
|
|
514
|
+
const config: FlushSchedulerConfig = {
|
|
515
|
+
capacityThreshold: 1.5,
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
const overScheduler = new FlushScheduler(flushHandler, config);
|
|
519
|
+
|
|
520
|
+
expect(overScheduler).toBeDefined();
|
|
521
|
+
overScheduler.stop();
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
it('should handle NaN in configuration', () => {
|
|
525
|
+
const config: FlushSchedulerConfig = {
|
|
526
|
+
maxFlushInterval: Number.NaN,
|
|
527
|
+
capacityThreshold: Number.NaN,
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
const nanScheduler = new FlushScheduler(flushHandler, config);
|
|
531
|
+
|
|
532
|
+
expect(nanScheduler).toBeDefined();
|
|
533
|
+
nanScheduler.stop();
|
|
534
|
+
});
|
|
535
|
+
});
|
|
536
|
+
});
|
|
537
|
+
});
|