observability-toolkit 1.8.5 → 2.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 +167 -281
- package/dist/__tests__/find-constant-dedup.test.d.ts +11 -0
- package/dist/__tests__/find-constant-dedup.test.d.ts.map +1 -0
- package/dist/__tests__/find-constant-dedup.test.js +132 -0
- package/dist/__tests__/find-constant-dedup.test.js.map +1 -0
- package/dist/backends/backend-schemas.d.ts +309 -0
- package/dist/backends/backend-schemas.d.ts.map +1 -0
- package/dist/backends/backend-schemas.js +215 -0
- package/dist/backends/backend-schemas.js.map +1 -0
- package/dist/backends/cloud.d.ts +46 -0
- package/dist/backends/cloud.d.ts.map +1 -0
- package/dist/backends/cloud.js +520 -0
- package/dist/backends/cloud.js.map +1 -0
- package/dist/backends/cloud.test.d.ts +2 -0
- package/dist/backends/cloud.test.d.ts.map +1 -0
- package/dist/backends/cloud.test.js +436 -0
- package/dist/backends/cloud.test.js.map +1 -0
- package/dist/backends/index.d.ts +672 -236
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +334 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/index.test.js +606 -31
- package/dist/backends/index.test.js.map +1 -1
- package/dist/backends/local-jsonl-boolean-search.test.js +8 -7
- package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
- package/dist/backends/local-jsonl-cache.test.js +33 -31
- package/dist/backends/local-jsonl-cache.test.js.map +1 -1
- package/dist/backends/local-jsonl-circuit-breaker.test.js +9 -7
- package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -1
- package/dist/backends/local-jsonl-export.test.js +73 -58
- package/dist/backends/local-jsonl-export.test.js.map +1 -1
- package/dist/backends/local-jsonl-index.test.js +52 -50
- package/dist/backends/local-jsonl-index.test.js.map +1 -1
- package/dist/backends/local-jsonl-logs.test.js +47 -31
- package/dist/backends/local-jsonl-logs.test.js.map +1 -1
- package/dist/backends/local-jsonl-metrics.test.js +85 -82
- package/dist/backends/local-jsonl-metrics.test.js.map +1 -1
- package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts +2 -0
- package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts.map +1 -0
- package/dist/backends/local-jsonl-otlp-unwrap.test.js +602 -0
- package/dist/backends/local-jsonl-otlp-unwrap.test.js.map +1 -0
- package/dist/backends/local-jsonl-traces.test.js +161 -147
- package/dist/backends/local-jsonl-traces.test.js.map +1 -1
- package/dist/backends/local-jsonl.d.ts +64 -5
- package/dist/backends/local-jsonl.d.ts.map +1 -1
- package/dist/backends/local-jsonl.js +1821 -612
- package/dist/backends/local-jsonl.js.map +1 -1
- package/dist/backends/shared.d.ts +9 -0
- package/dist/backends/shared.d.ts.map +1 -0
- package/dist/backends/shared.js +9 -0
- package/dist/backends/shared.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts +40 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js +27 -0
- package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts +106 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js +43 -0
- package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts +111 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js +42 -0
- package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts +106 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js +43 -0
- package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts +243 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.js +49 -0
- package/dist/generated/opentelemetry/proto/common/v1/common_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts +90 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js +66 -0
- package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts +1134 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js +223 -0
- package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts +678 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js +107 -0
- package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts +46 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js +25 -0
- package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js.map +1 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts +569 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts.map +1 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js +195 -0
- package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.d.ts +157 -0
- package/dist/lib/agent-judge/agent-as-judge.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.js +137 -0
- package/dist/lib/agent-judge/agent-as-judge.js.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.test.d.ts +5 -0
- package/dist/lib/agent-judge/agent-as-judge.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-as-judge.test.js +839 -0
- package/dist/lib/agent-judge/agent-as-judge.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.d.ts +293 -0
- package/dist/lib/agent-judge/agent-eval-metrics.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.js +715 -0
- package/dist/lib/agent-judge/agent-eval-metrics.js.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts +5 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.js +676 -0
- package/dist/lib/agent-judge/agent-eval-metrics.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.d.ts +95 -0
- package/dist/lib/agent-judge/agent-judge-classes.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.js +222 -0
- package/dist/lib/agent-judge/agent-judge-classes.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.d.ts +6 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.js +271 -0
- package/dist/lib/agent-judge/agent-judge-classes.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.d.ts +58 -0
- package/dist/lib/agent-judge/agent-judge-consensus.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.js +149 -0
- package/dist/lib/agent-judge/agent-judge-consensus.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts +2 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.js +170 -0
- package/dist/lib/agent-judge/agent-judge-consensus.test.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.d.ts +89 -0
- package/dist/lib/agent-judge/agent-judge-verification.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.js +235 -0
- package/dist/lib/agent-judge/agent-judge-verification.js.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.d.ts +5 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.d.ts.map +1 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.js +399 -0
- package/dist/lib/agent-judge/agent-judge-verification.test.js.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.d.ts +167 -0
- package/dist/lib/audit/agent-auditor-scoring.d.ts.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.js +338 -0
- package/dist/lib/audit/agent-auditor-scoring.js.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.test.d.ts +2 -0
- package/dist/lib/audit/agent-auditor-scoring.test.d.ts.map +1 -0
- package/dist/lib/audit/agent-auditor-scoring.test.js +576 -0
- package/dist/lib/audit/agent-auditor-scoring.test.js.map +1 -0
- package/dist/lib/audit/audit-record.d.ts +139 -0
- package/dist/lib/audit/audit-record.d.ts.map +1 -0
- package/dist/lib/audit/audit-record.js +288 -0
- package/dist/lib/audit/audit-record.js.map +1 -0
- package/dist/lib/audit/audit-record.test.d.ts +5 -0
- package/dist/lib/audit/audit-record.test.d.ts.map +1 -0
- package/dist/lib/audit/audit-record.test.js +258 -0
- package/dist/lib/audit/audit-record.test.js.map +1 -0
- package/dist/lib/audit/audit-scoring-constants.d.ts +57 -0
- package/dist/lib/audit/audit-scoring-constants.d.ts.map +1 -0
- package/dist/lib/audit/audit-scoring-constants.js +59 -0
- package/dist/lib/audit/audit-scoring-constants.js.map +1 -0
- package/dist/lib/audit/compliance-report.d.ts +125 -0
- package/dist/lib/audit/compliance-report.d.ts.map +1 -0
- package/dist/lib/audit/compliance-report.js +205 -0
- package/dist/lib/audit/compliance-report.js.map +1 -0
- package/dist/lib/audit/compliance-report.test.d.ts +5 -0
- package/dist/lib/audit/compliance-report.test.d.ts.map +1 -0
- package/dist/lib/audit/compliance-report.test.js +290 -0
- package/dist/lib/audit/compliance-report.test.js.map +1 -0
- package/dist/lib/audit/retention-guard.d.ts +41 -0
- package/dist/lib/audit/retention-guard.d.ts.map +1 -0
- package/dist/lib/audit/retention-guard.js +103 -0
- package/dist/lib/audit/retention-guard.js.map +1 -0
- package/dist/lib/audit/retention-guard.test.d.ts +5 -0
- package/dist/lib/audit/retention-guard.test.d.ts.map +1 -0
- package/dist/lib/audit/retention-guard.test.js +109 -0
- package/dist/lib/audit/retention-guard.test.js.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.d.ts +69 -0
- package/dist/lib/audit/skill-auditor-scoring.d.ts.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.js +149 -0
- package/dist/lib/audit/skill-auditor-scoring.js.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.test.d.ts +2 -0
- package/dist/lib/audit/skill-auditor-scoring.test.d.ts.map +1 -0
- package/dist/lib/audit/skill-auditor-scoring.test.js +369 -0
- package/dist/lib/audit/skill-auditor-scoring.test.js.map +1 -0
- package/dist/lib/audit/verification-events.d.ts +119 -0
- package/dist/lib/audit/verification-events.d.ts.map +1 -0
- package/dist/lib/audit/verification-events.js +175 -0
- package/dist/lib/audit/verification-events.js.map +1 -0
- package/dist/lib/audit/verification-events.test.d.ts +5 -0
- package/dist/lib/audit/verification-events.test.d.ts.map +1 -0
- package/dist/lib/audit/verification-events.test.js +197 -0
- package/dist/lib/audit/verification-events.test.js.map +1 -0
- package/dist/lib/core/constants-models.d.ts +90 -0
- package/dist/lib/core/constants-models.d.ts.map +1 -0
- package/dist/lib/core/constants-models.js +208 -0
- package/dist/lib/core/constants-models.js.map +1 -0
- package/dist/lib/core/constants-otel.d.ts +68 -0
- package/dist/lib/core/constants-otel.d.ts.map +1 -0
- package/dist/lib/core/constants-otel.js +128 -0
- package/dist/lib/core/constants-otel.js.map +1 -0
- package/dist/lib/core/constants-symlink.test.d.ts.map +1 -0
- package/dist/lib/{constants-symlink.test.js → core/constants-symlink.test.js} +25 -24
- package/dist/lib/core/constants-symlink.test.js.map +1 -0
- package/dist/lib/core/constants-telemetry.d.ts +21 -0
- package/dist/lib/core/constants-telemetry.d.ts.map +1 -0
- package/dist/lib/core/constants-telemetry.js +162 -0
- package/dist/lib/core/constants-telemetry.js.map +1 -0
- package/dist/lib/core/constants.d.ts +152 -0
- package/dist/lib/core/constants.d.ts.map +1 -0
- package/dist/lib/core/constants.js +223 -0
- package/dist/lib/core/constants.js.map +1 -0
- package/dist/lib/core/constants.test.d.ts.map +1 -0
- package/dist/lib/{constants.test.js → core/constants.test.js} +198 -82
- package/dist/lib/core/constants.test.js.map +1 -0
- package/dist/lib/core/doc-sync.test.d.ts +9 -0
- package/dist/lib/core/doc-sync.test.d.ts.map +1 -0
- package/dist/lib/core/doc-sync.test.js +159 -0
- package/dist/lib/core/doc-sync.test.js.map +1 -0
- package/dist/lib/core/edge-cases.test.d.ts.map +1 -0
- package/dist/lib/{edge-cases.test.js → core/edge-cases.test.js} +76 -73
- package/dist/lib/core/edge-cases.test.js.map +1 -0
- package/dist/lib/{file-utils.d.ts → core/file-utils.d.ts} +63 -8
- package/dist/lib/core/file-utils.d.ts.map +1 -0
- package/dist/lib/{file-utils.js → core/file-utils.js} +186 -93
- package/dist/lib/core/file-utils.js.map +1 -0
- package/dist/lib/core/file-utils.test-constants.d.ts +38 -0
- package/dist/lib/core/file-utils.test-constants.d.ts.map +1 -0
- package/dist/lib/core/file-utils.test-constants.js +40 -0
- package/dist/lib/core/file-utils.test-constants.js.map +1 -0
- package/dist/lib/core/file-utils.test.d.ts.map +1 -0
- package/dist/lib/{file-utils.test.js → core/file-utils.test.js} +240 -214
- package/dist/lib/core/file-utils.test.js.map +1 -0
- package/dist/lib/{input-validator.d.ts → core/input-validator.d.ts} +30 -20
- package/dist/lib/core/input-validator.d.ts.map +1 -0
- package/dist/lib/core/input-validator.fuzz.test.d.ts.map +1 -0
- package/dist/lib/{input-validator.fuzz.test.js → core/input-validator.fuzz.test.js} +41 -29
- package/dist/lib/core/input-validator.fuzz.test.js.map +1 -0
- package/dist/lib/{input-validator.js → core/input-validator.js} +83 -39
- package/dist/lib/core/input-validator.js.map +1 -0
- package/dist/lib/core/input-validator.test.d.ts.map +1 -0
- package/dist/lib/{input-validator.test.js → core/input-validator.test.js} +95 -45
- package/dist/lib/core/input-validator.test.js.map +1 -0
- package/dist/lib/{logger.d.ts → core/logger.d.ts} +4 -18
- package/dist/lib/core/logger.d.ts.map +1 -0
- package/dist/lib/core/logger.js +104 -0
- package/dist/lib/core/logger.js.map +1 -0
- package/dist/lib/core/logger.test.d.ts.map +1 -0
- package/dist/lib/core/logger.test.js.map +1 -0
- package/dist/lib/core/schema-types.d.ts +37 -0
- package/dist/lib/core/schema-types.d.ts.map +1 -0
- package/dist/lib/core/schema-types.js +29 -0
- package/dist/lib/core/schema-types.js.map +1 -0
- package/dist/lib/{server-utils.d.ts → core/server-utils.d.ts} +11 -1
- package/dist/lib/core/server-utils.d.ts.map +1 -0
- package/dist/lib/{server-utils.js → core/server-utils.js} +25 -5
- package/dist/lib/core/server-utils.js.map +1 -0
- package/dist/lib/core/shared-schemas.d.ts +301 -0
- package/dist/lib/core/shared-schemas.d.ts.map +1 -0
- package/dist/lib/core/shared-schemas.js +222 -0
- package/dist/lib/core/shared-schemas.js.map +1 -0
- package/dist/lib/core/shared-schemas.test.d.ts.map +1 -0
- package/dist/lib/{shared-schemas.test.js → core/shared-schemas.test.js} +48 -18
- package/dist/lib/core/shared-schemas.test.js.map +1 -0
- package/dist/lib/core/units.d.ts +67 -0
- package/dist/lib/core/units.d.ts.map +1 -0
- package/dist/lib/core/units.js +88 -0
- package/dist/lib/core/units.js.map +1 -0
- package/dist/lib/cost/cost-estimation.d.ts +264 -0
- package/dist/lib/cost/cost-estimation.d.ts.map +1 -0
- package/dist/lib/cost/cost-estimation.js +541 -0
- package/dist/lib/cost/cost-estimation.js.map +1 -0
- package/dist/lib/cost/cost-estimation.test.d.ts +5 -0
- package/dist/lib/cost/cost-estimation.test.d.ts.map +1 -0
- package/dist/lib/cost/cost-estimation.test.js +701 -0
- package/dist/lib/cost/cost-estimation.test.js.map +1 -0
- package/dist/lib/cost/pricing-cache.d.ts +59 -0
- package/dist/lib/cost/pricing-cache.d.ts.map +1 -0
- package/dist/lib/cost/pricing-cache.js +120 -0
- package/dist/lib/cost/pricing-cache.js.map +1 -0
- package/dist/lib/cost/pricing-cache.test.d.ts +5 -0
- package/dist/lib/cost/pricing-cache.test.d.ts.map +1 -0
- package/dist/lib/cost/pricing-cache.test.js +176 -0
- package/dist/lib/cost/pricing-cache.test.js.map +1 -0
- package/dist/lib/dashboard-file-utils.d.ts +35 -0
- package/dist/lib/dashboard-file-utils.d.ts.map +1 -0
- package/dist/lib/dashboard-file-utils.js +94 -0
- package/dist/lib/dashboard-file-utils.js.map +1 -0
- package/dist/lib/{error-sanitizer.d.ts → errors/error-sanitizer.d.ts} +5 -0
- package/dist/lib/errors/error-sanitizer.d.ts.map +1 -0
- package/dist/lib/{error-sanitizer.js → errors/error-sanitizer.js} +8 -6
- package/dist/lib/errors/error-sanitizer.js.map +1 -0
- package/dist/lib/errors/error-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/{error-sanitizer.test.js → errors/error-sanitizer.test.js} +17 -11
- package/dist/lib/errors/error-sanitizer.test.js.map +1 -0
- package/dist/lib/{error-types.d.ts → errors/error-types.d.ts} +5 -0
- package/dist/lib/errors/error-types.d.ts.map +1 -0
- package/dist/lib/{error-types.js → errors/error-types.js} +34 -1
- package/dist/lib/errors/error-types.js.map +1 -0
- package/dist/lib/errors/error-types.test.d.ts.map +1 -0
- package/dist/lib/{error-types.test.js → errors/error-types.test.js} +51 -1
- package/dist/lib/errors/error-types.test.js.map +1 -0
- package/dist/lib/errors/query-sanitizer.d.ts.map +1 -0
- package/dist/lib/{query-sanitizer.js → errors/query-sanitizer.js} +9 -1
- package/dist/lib/errors/query-sanitizer.js.map +1 -0
- package/dist/lib/errors/query-sanitizer.test.d.ts.map +1 -0
- package/dist/lib/{query-sanitizer.test.js → errors/query-sanitizer.test.js} +9 -6
- package/dist/lib/errors/query-sanitizer.test.js.map +1 -0
- package/dist/lib/exports/confident-export.d.ts +105 -0
- package/dist/lib/exports/confident-export.d.ts.map +1 -0
- package/dist/lib/exports/confident-export.js +385 -0
- package/dist/lib/exports/confident-export.js.map +1 -0
- package/dist/lib/exports/confident-export.test.d.ts +7 -0
- package/dist/lib/exports/confident-export.test.d.ts.map +1 -0
- package/dist/lib/exports/confident-export.test.js +848 -0
- package/dist/lib/exports/confident-export.test.js.map +1 -0
- package/dist/lib/exports/datadog-export.d.ts +200 -0
- package/dist/lib/exports/datadog-export.d.ts.map +1 -0
- package/dist/lib/exports/datadog-export.js +488 -0
- package/dist/lib/exports/datadog-export.js.map +1 -0
- package/dist/lib/exports/datadog-export.test.d.ts +2 -0
- package/dist/lib/exports/datadog-export.test.d.ts.map +1 -0
- package/dist/lib/exports/datadog-export.test.js +890 -0
- package/dist/lib/exports/datadog-export.test.js.map +1 -0
- package/dist/lib/exports/export-config-schemas.d.ts +67 -0
- package/dist/lib/exports/export-config-schemas.d.ts.map +1 -0
- package/dist/lib/exports/export-config-schemas.js +120 -0
- package/dist/lib/exports/export-config-schemas.js.map +1 -0
- package/dist/lib/exports/export-config-schemas.test.d.ts +8 -0
- package/dist/lib/exports/export-config-schemas.test.d.ts.map +1 -0
- package/dist/lib/exports/export-config-schemas.test.js +503 -0
- package/dist/lib/exports/export-config-schemas.test.js.map +1 -0
- package/dist/lib/exports/export-utils.d.ts +127 -0
- package/dist/lib/exports/export-utils.d.ts.map +1 -0
- package/dist/lib/exports/export-utils.js +303 -0
- package/dist/lib/exports/export-utils.js.map +1 -0
- package/dist/lib/exports/export-utils.test.d.ts +5 -0
- package/dist/lib/exports/export-utils.test.d.ts.map +1 -0
- package/dist/lib/exports/export-utils.test.js +344 -0
- package/dist/lib/exports/export-utils.test.js.map +1 -0
- package/dist/lib/exports/langfuse-export.d.ts +129 -0
- package/dist/lib/exports/langfuse-export.d.ts.map +1 -0
- package/dist/lib/exports/langfuse-export.js +370 -0
- package/dist/lib/exports/langfuse-export.js.map +1 -0
- package/dist/lib/exports/langfuse-export.test.d.ts +7 -0
- package/dist/lib/exports/langfuse-export.test.d.ts.map +1 -0
- package/dist/lib/exports/langfuse-export.test.js +1020 -0
- package/dist/lib/exports/langfuse-export.test.js.map +1 -0
- package/dist/lib/{otlp-export.d.ts → exports/otlp-export.d.ts} +3 -2
- package/dist/lib/exports/otlp-export.d.ts.map +1 -0
- package/dist/lib/{otlp-export.js → exports/otlp-export.js} +51 -36
- package/dist/lib/exports/otlp-export.js.map +1 -0
- package/dist/lib/exports/otlp-format-converter.d.ts +70 -0
- package/dist/lib/exports/otlp-format-converter.d.ts.map +1 -0
- package/dist/lib/exports/otlp-format-converter.js +401 -0
- package/dist/lib/exports/otlp-format-converter.js.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.d.ts +53 -0
- package/dist/lib/exports/otlp-proto-encode.d.ts.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.js +165 -0
- package/dist/lib/exports/otlp-proto-encode.js.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.test.d.ts +7 -0
- package/dist/lib/exports/otlp-proto-encode.test.d.ts.map +1 -0
- package/dist/lib/exports/otlp-proto-encode.test.js +997 -0
- package/dist/lib/exports/otlp-proto-encode.test.js.map +1 -0
- package/dist/lib/exports/phoenix-export.d.ts +119 -0
- package/dist/lib/exports/phoenix-export.d.ts.map +1 -0
- package/dist/lib/exports/phoenix-export.js +448 -0
- package/dist/lib/exports/phoenix-export.js.map +1 -0
- package/dist/lib/exports/phoenix-export.test.d.ts +11 -0
- package/dist/lib/exports/phoenix-export.test.d.ts.map +1 -0
- package/dist/lib/exports/phoenix-export.test.js +816 -0
- package/dist/lib/exports/phoenix-export.test.js.map +1 -0
- package/dist/lib/index.d.ts +16 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +31 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/judge/evaluation-hooks-schemas.d.ts +186 -0
- package/dist/lib/judge/evaluation-hooks-schemas.d.ts.map +1 -0
- package/dist/lib/judge/evaluation-hooks-schemas.js +125 -0
- package/dist/lib/judge/evaluation-hooks-schemas.js.map +1 -0
- package/dist/lib/judge/evaluation-hooks.d.ts +88 -0
- package/dist/lib/judge/evaluation-hooks.d.ts.map +1 -0
- package/dist/lib/judge/evaluation-hooks.js +658 -0
- package/dist/lib/judge/evaluation-hooks.js.map +1 -0
- package/dist/lib/judge/evaluation-hooks.test.d.ts +8 -0
- package/dist/lib/judge/evaluation-hooks.test.d.ts.map +1 -0
- package/dist/lib/judge/evaluation-hooks.test.js +934 -0
- package/dist/lib/judge/evaluation-hooks.test.js.map +1 -0
- package/dist/lib/judge/llm-as-judge.d.ts +138 -0
- package/dist/lib/judge/llm-as-judge.d.ts.map +1 -0
- package/dist/lib/judge/llm-as-judge.js +103 -0
- package/dist/lib/judge/llm-as-judge.js.map +1 -0
- package/dist/lib/judge/llm-as-judge.test.d.ts +2 -0
- package/dist/lib/judge/llm-as-judge.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-as-judge.test.js +2179 -0
- package/dist/lib/judge/llm-as-judge.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-bias.d.ts +44 -0
- package/dist/lib/judge/llm-judge-bias.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-bias.js +130 -0
- package/dist/lib/judge/llm-judge-bias.js.map +1 -0
- package/dist/lib/judge/llm-judge-bias.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-bias.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-bias.test.js +380 -0
- package/dist/lib/judge/llm-judge-bias.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-code.d.ts +99 -0
- package/dist/lib/judge/llm-judge-code.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-code.js +261 -0
- package/dist/lib/judge/llm-judge-code.js.map +1 -0
- package/dist/lib/judge/llm-judge-code.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-code.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-code.test.js +981 -0
- package/dist/lib/judge/llm-judge-code.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-config.d.ts +241 -0
- package/dist/lib/judge/llm-judge-config.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-config.js +390 -0
- package/dist/lib/judge/llm-judge-config.js.map +1 -0
- package/dist/lib/judge/llm-judge-config.test.d.ts +5 -0
- package/dist/lib/judge/llm-judge-config.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-config.test.js +392 -0
- package/dist/lib/judge/llm-judge-config.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-constants.d.ts +111 -0
- package/dist/lib/judge/llm-judge-constants.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-constants.js +150 -0
- package/dist/lib/judge/llm-judge-constants.js.map +1 -0
- package/dist/lib/judge/llm-judge-dag.d.ts +57 -0
- package/dist/lib/judge/llm-judge-dag.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-dag.js +217 -0
- package/dist/lib/judge/llm-judge-dag.js.map +1 -0
- package/dist/lib/judge/llm-judge-dag.test.d.ts +8 -0
- package/dist/lib/judge/llm-judge-dag.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-dag.test.js +973 -0
- package/dist/lib/judge/llm-judge-dag.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-domain.d.ts +42 -0
- package/dist/lib/judge/llm-judge-domain.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-domain.js +167 -0
- package/dist/lib/judge/llm-judge-domain.js.map +1 -0
- package/dist/lib/judge/llm-judge-domain.test.d.ts +6 -0
- package/dist/lib/judge/llm-judge-domain.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-domain.test.js +337 -0
- package/dist/lib/judge/llm-judge-domain.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-geval.d.ts +42 -0
- package/dist/lib/judge/llm-judge-geval.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-geval.js +213 -0
- package/dist/lib/judge/llm-judge-geval.js.map +1 -0
- package/dist/lib/judge/llm-judge-geval.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-geval.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-geval.test.js +556 -0
- package/dist/lib/judge/llm-judge-geval.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-otel.test.d.ts +9 -0
- package/dist/lib/judge/llm-judge-otel.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-otel.test.js +91 -0
- package/dist/lib/judge/llm-judge-otel.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-qag.d.ts +38 -0
- package/dist/lib/judge/llm-judge-qag.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-qag.js +205 -0
- package/dist/lib/judge/llm-judge-qag.js.map +1 -0
- package/dist/lib/judge/llm-judge-qag.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-qag.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-qag.test.js +386 -0
- package/dist/lib/judge/llm-judge-qag.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.d.ts +74 -0
- package/dist/lib/judge/llm-judge-resilience.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.js +146 -0
- package/dist/lib/judge/llm-judge-resilience.js.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-resilience.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-resilience.test.js +353 -0
- package/dist/lib/judge/llm-judge-resilience.test.js.map +1 -0
- package/dist/lib/judge/llm-judge-security.d.ts +106 -0
- package/dist/lib/judge/llm-judge-security.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-security.js +314 -0
- package/dist/lib/judge/llm-judge-security.js.map +1 -0
- package/dist/lib/judge/llm-judge-security.test.d.ts +2 -0
- package/dist/lib/judge/llm-judge-security.test.d.ts.map +1 -0
- package/dist/lib/judge/llm-judge-security.test.js +1011 -0
- package/dist/lib/judge/llm-judge-security.test.js.map +1 -0
- package/dist/lib/observability/context-accumulator.d.ts +32 -0
- package/dist/lib/observability/context-accumulator.d.ts.map +1 -0
- package/dist/lib/observability/context-accumulator.js +87 -0
- package/dist/lib/observability/context-accumulator.js.map +1 -0
- package/dist/lib/observability/evaluation-events.d.ts +35 -0
- package/dist/lib/observability/evaluation-events.d.ts.map +1 -0
- package/dist/lib/observability/evaluation-events.js +90 -0
- package/dist/lib/observability/evaluation-events.js.map +1 -0
- package/dist/lib/observability/file-span-exporter.d.ts +17 -0
- package/dist/lib/observability/file-span-exporter.d.ts.map +1 -0
- package/dist/lib/observability/file-span-exporter.js +49 -0
- package/dist/lib/observability/file-span-exporter.js.map +1 -0
- package/dist/lib/observability/histogram-bucket-constants.d.ts +25 -0
- package/dist/lib/observability/histogram-bucket-constants.d.ts.map +1 -0
- package/dist/lib/observability/histogram-bucket-constants.js +60 -0
- package/dist/lib/observability/histogram-bucket-constants.js.map +1 -0
- package/dist/lib/observability/histogram.d.ts +112 -0
- package/dist/lib/observability/histogram.d.ts.map +1 -0
- package/dist/lib/observability/histogram.js +170 -0
- package/dist/lib/observability/histogram.js.map +1 -0
- package/dist/lib/observability/histogram.test.d.ts +5 -0
- package/dist/lib/observability/histogram.test.d.ts.map +1 -0
- package/dist/lib/observability/histogram.test.js +385 -0
- package/dist/lib/observability/histogram.test.js.map +1 -0
- package/dist/lib/observability/indexer.d.ts +114 -0
- package/dist/lib/observability/indexer.d.ts.map +1 -0
- package/dist/lib/{indexer.js → observability/indexer.js} +65 -16
- package/dist/lib/observability/indexer.js.map +1 -0
- package/dist/lib/observability/indexer.test.d.ts.map +1 -0
- package/dist/lib/{indexer.test.js → observability/indexer.test.js} +94 -77
- package/dist/lib/observability/indexer.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-eval.test.d.ts +5 -0
- package/dist/lib/observability/instrumentation-eval.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-eval.test.js +63 -0
- package/dist/lib/observability/instrumentation-eval.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-init-errors.test.d.ts +13 -0
- package/dist/lib/observability/instrumentation-init-errors.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-init-errors.test.js +194 -0
- package/dist/lib/observability/instrumentation-init-errors.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts +15 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.js +188 -0
- package/dist/lib/observability/instrumentation-retry-timeout.test.js.map +1 -0
- package/dist/lib/observability/instrumentation-set-otel.test.d.ts +5 -0
- package/dist/lib/observability/instrumentation-set-otel.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation-set-otel.test.js +59 -0
- package/dist/lib/observability/instrumentation-set-otel.test.js.map +1 -0
- package/dist/lib/observability/instrumentation.d.ts +158 -0
- package/dist/lib/observability/instrumentation.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation.integration.test.d.ts +2 -0
- package/dist/lib/observability/instrumentation.integration.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation.integration.test.js +590 -0
- package/dist/lib/observability/instrumentation.integration.test.js.map +1 -0
- package/dist/lib/observability/instrumentation.js +512 -0
- package/dist/lib/observability/instrumentation.js.map +1 -0
- package/dist/lib/observability/instrumentation.test.d.ts +2 -0
- package/dist/lib/observability/instrumentation.test.d.ts.map +1 -0
- package/dist/lib/observability/instrumentation.test.js +822 -0
- package/dist/lib/observability/instrumentation.test.js.map +1 -0
- package/dist/lib/observability/mcp-semconv-constants.d.ts +98 -0
- package/dist/lib/observability/mcp-semconv-constants.d.ts.map +1 -0
- package/dist/lib/observability/mcp-semconv-constants.js +102 -0
- package/dist/lib/observability/mcp-semconv-constants.js.map +1 -0
- package/dist/lib/observability/mcp-semconv.d.ts +37 -0
- package/dist/lib/observability/mcp-semconv.d.ts.map +1 -0
- package/dist/lib/observability/mcp-semconv.js +87 -0
- package/dist/lib/observability/mcp-semconv.js.map +1 -0
- package/dist/lib/observability/mcp-semconv.test.d.ts +2 -0
- package/dist/lib/observability/mcp-semconv.test.d.ts.map +1 -0
- package/dist/lib/observability/mcp-semconv.test.js +168 -0
- package/dist/lib/observability/mcp-semconv.test.js.map +1 -0
- package/dist/lib/observability/metrics.d.ts +100 -0
- package/dist/lib/observability/metrics.d.ts.map +1 -0
- package/dist/lib/observability/metrics.js +429 -0
- package/dist/lib/observability/metrics.js.map +1 -0
- package/dist/lib/observability/metrics.test.d.ts +5 -0
- package/dist/lib/observability/metrics.test.d.ts.map +1 -0
- package/dist/lib/observability/metrics.test.js +191 -0
- package/dist/lib/observability/metrics.test.js.map +1 -0
- package/dist/lib/observability/observability-test-constants.d.ts +34 -0
- package/dist/lib/observability/observability-test-constants.d.ts.map +1 -0
- package/dist/lib/observability/observability-test-constants.js +55 -0
- package/dist/lib/observability/observability-test-constants.js.map +1 -0
- package/dist/lib/observability/opentelemetry-resources.test.d.ts +2 -0
- package/dist/lib/observability/opentelemetry-resources.test.d.ts.map +1 -0
- package/dist/lib/observability/opentelemetry-resources.test.js +19 -0
- package/dist/lib/observability/opentelemetry-resources.test.js.map +1 -0
- package/dist/lib/observability/parse-stats.d.ts +119 -0
- package/dist/lib/observability/parse-stats.d.ts.map +1 -0
- package/dist/lib/observability/parse-stats.js +207 -0
- package/dist/lib/observability/parse-stats.js.map +1 -0
- package/dist/lib/observability/parse-stats.test.d.ts +5 -0
- package/dist/lib/observability/parse-stats.test.d.ts.map +1 -0
- package/dist/lib/observability/parse-stats.test.js +287 -0
- package/dist/lib/observability/parse-stats.test.js.map +1 -0
- package/dist/lib/observability/render-trace-tree.d.ts +31 -0
- package/dist/lib/observability/render-trace-tree.d.ts.map +1 -0
- package/dist/lib/observability/render-trace-tree.js +95 -0
- package/dist/lib/observability/render-trace-tree.js.map +1 -0
- package/dist/lib/observability/render-trace-tree.test.d.ts +5 -0
- package/dist/lib/observability/render-trace-tree.test.d.ts.map +1 -0
- package/dist/lib/observability/render-trace-tree.test.js +97 -0
- package/dist/lib/observability/render-trace-tree.test.js.map +1 -0
- package/dist/lib/observability/span-attributes.d.ts +27 -0
- package/dist/lib/observability/span-attributes.d.ts.map +1 -0
- package/dist/lib/observability/span-attributes.js +85 -0
- package/dist/lib/observability/span-attributes.js.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.d.ts +23 -0
- package/dist/lib/observability/trace-anomaly-detector.d.ts.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.js +211 -0
- package/dist/lib/observability/trace-anomaly-detector.js.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.test.d.ts +5 -0
- package/dist/lib/observability/trace-anomaly-detector.test.d.ts.map +1 -0
- package/dist/lib/observability/trace-anomaly-detector.test.js +224 -0
- package/dist/lib/observability/trace-anomaly-detector.test.js.map +1 -0
- package/dist/lib/observability/trace-anomaly-schemas.d.ts +189 -0
- package/dist/lib/observability/trace-anomaly-schemas.d.ts.map +1 -0
- package/dist/lib/observability/trace-anomaly-schemas.js +167 -0
- package/dist/lib/observability/trace-anomaly-schemas.js.map +1 -0
- package/dist/lib/privacy/content-redaction.d.ts +141 -0
- package/dist/lib/privacy/content-redaction.d.ts.map +1 -0
- package/dist/lib/privacy/content-redaction.js +210 -0
- package/dist/lib/privacy/content-redaction.js.map +1 -0
- package/dist/lib/privacy/content-redaction.test.d.ts +2 -0
- package/dist/lib/privacy/content-redaction.test.d.ts.map +1 -0
- package/dist/lib/privacy/content-redaction.test.js +302 -0
- package/dist/lib/privacy/content-redaction.test.js.map +1 -0
- package/dist/lib/quality/bucket-utils.d.ts +17 -0
- package/dist/lib/quality/bucket-utils.d.ts.map +1 -0
- package/dist/lib/quality/bucket-utils.js +31 -0
- package/dist/lib/quality/bucket-utils.js.map +1 -0
- package/dist/lib/quality/bucket-utils.test.d.ts +2 -0
- package/dist/lib/quality/bucket-utils.test.d.ts.map +1 -0
- package/dist/lib/quality/bucket-utils.test.js +42 -0
- package/dist/lib/quality/bucket-utils.test.js.map +1 -0
- package/dist/lib/quality/qfe-backtest-detail.test.d.ts +5 -0
- package/dist/lib/quality/qfe-backtest-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-backtest-detail.test.js +179 -0
- package/dist/lib/quality/qfe-backtest-detail.test.js.map +1 -0
- package/dist/lib/quality/qfe-calibration-paths.test.d.ts +5 -0
- package/dist/lib/quality/qfe-calibration-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-calibration-paths.test.js +203 -0
- package/dist/lib/quality/qfe-calibration-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.d.ts +6 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.js +143 -0
- package/dist/lib/quality/qfe-correlation-helpers.test.js.map +1 -0
- package/dist/lib/quality/qfe-cqi-paths.test.d.ts +6 -0
- package/dist/lib/quality/qfe-cqi-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-cqi-paths.test.js +231 -0
- package/dist/lib/quality/qfe-cqi-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-critic-internals.test.d.ts +6 -0
- package/dist/lib/quality/qfe-critic-internals.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-critic-internals.test.js +191 -0
- package/dist/lib/quality/qfe-critic-internals.test.js.map +1 -0
- package/dist/lib/quality/qfe-derived-paths.test.d.ts +2 -0
- package/dist/lib/quality/qfe-derived-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-derived-paths.test.js +372 -0
- package/dist/lib/quality/qfe-derived-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.d.ts +8 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.js +223 -0
- package/dist/lib/quality/qfe-dynamics-paths.test.js.map +1 -0
- package/dist/lib/quality/qfe-granger-internals.test.d.ts +6 -0
- package/dist/lib/quality/qfe-granger-internals.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-granger-internals.test.js +158 -0
- package/dist/lib/quality/qfe-granger-internals.test.js.map +1 -0
- package/dist/lib/quality/qfe-label-normalize.test.d.ts +7 -0
- package/dist/lib/quality/qfe-label-normalize.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-label-normalize.test.js +332 -0
- package/dist/lib/quality/qfe-label-normalize.test.js.map +1 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.d.ts +6 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.js +98 -0
- package/dist/lib/quality/qfe-ordinal-edge.test.js.map +1 -0
- package/dist/lib/quality/qfe-roles-detail.test.d.ts +5 -0
- package/dist/lib/quality/qfe-roles-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-roles-detail.test.js +115 -0
- package/dist/lib/quality/qfe-roles-detail.test.js.map +1 -0
- package/dist/lib/quality/qfe-rolling-detail.test.d.ts +7 -0
- package/dist/lib/quality/qfe-rolling-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-rolling-detail.test.js +249 -0
- package/dist/lib/quality/qfe-rolling-detail.test.js.map +1 -0
- package/dist/lib/quality/qfe-stats-internals.test.d.ts +7 -0
- package/dist/lib/quality/qfe-stats-internals.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-stats-internals.test.js +143 -0
- package/dist/lib/quality/qfe-stats-internals.test.js.map +1 -0
- package/dist/lib/quality/qfe-streaming.test.d.ts +5 -0
- package/dist/lib/quality/qfe-streaming.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-streaming.test.js +239 -0
- package/dist/lib/quality/qfe-streaming.test.js.map +1 -0
- package/dist/lib/quality/qfe-sweep-detail.test.d.ts +6 -0
- package/dist/lib/quality/qfe-sweep-detail.test.d.ts.map +1 -0
- package/dist/lib/quality/qfe-sweep-detail.test.js +291 -0
- package/dist/lib/quality/qfe-sweep-detail.test.js.map +1 -0
- package/dist/lib/quality/quality-alerts.d.ts +23 -0
- package/dist/lib/quality/quality-alerts.d.ts.map +1 -0
- package/dist/lib/quality/quality-alerts.js +89 -0
- package/dist/lib/quality/quality-alerts.js.map +1 -0
- package/dist/lib/quality/quality-alerts.test.d.ts +2 -0
- package/dist/lib/quality/quality-alerts.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-alerts.test.js +86 -0
- package/dist/lib/quality/quality-alerts.test.js.map +1 -0
- package/dist/lib/quality/quality-constants.d.ts +294 -0
- package/dist/lib/quality/quality-constants.d.ts.map +1 -0
- package/dist/lib/quality/quality-constants.js +335 -0
- package/dist/lib/quality/quality-constants.js.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.d.ts +1071 -0
- package/dist/lib/quality/quality-feature-engineering.d.ts.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.js +2076 -0
- package/dist/lib/quality/quality-feature-engineering.js.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.test.d.ts +5 -0
- package/dist/lib/quality/quality-feature-engineering.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-feature-engineering.test.js +2908 -0
- package/dist/lib/quality/quality-feature-engineering.test.js.map +1 -0
- package/dist/lib/quality/quality-metrics.d.ts +943 -0
- package/dist/lib/quality/quality-metrics.d.ts.map +1 -0
- package/dist/lib/quality/quality-metrics.js +1151 -0
- package/dist/lib/quality/quality-metrics.js.map +1 -0
- package/dist/lib/quality/quality-metrics.test.d.ts +5 -0
- package/dist/lib/quality/quality-metrics.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-metrics.test.js +2766 -0
- package/dist/lib/quality/quality-metrics.test.js.map +1 -0
- package/dist/lib/quality/quality-multi-agent.d.ts +106 -0
- package/dist/lib/quality/quality-multi-agent.d.ts.map +1 -0
- package/dist/lib/quality/quality-multi-agent.js +124 -0
- package/dist/lib/quality/quality-multi-agent.js.map +1 -0
- package/dist/lib/quality/quality-multi-agent.test.d.ts +6 -0
- package/dist/lib/quality/quality-multi-agent.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-multi-agent.test.js +163 -0
- package/dist/lib/quality/quality-multi-agent.test.js.map +1 -0
- package/dist/lib/quality/quality-sla.d.ts +35 -0
- package/dist/lib/quality/quality-sla.d.ts.map +1 -0
- package/dist/lib/quality/quality-sla.js +62 -0
- package/dist/lib/quality/quality-sla.js.map +1 -0
- package/dist/lib/quality/quality-sla.test.d.ts +5 -0
- package/dist/lib/quality/quality-sla.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-sla.test.js +144 -0
- package/dist/lib/quality/quality-sla.test.js.map +1 -0
- package/dist/lib/quality/quality-test-constants.d.ts +23 -0
- package/dist/lib/quality/quality-test-constants.d.ts.map +1 -0
- package/dist/lib/quality/quality-test-constants.js +25 -0
- package/dist/lib/quality/quality-test-constants.js.map +1 -0
- package/dist/lib/quality/quality-trends.d.ts +101 -0
- package/dist/lib/quality/quality-trends.d.ts.map +1 -0
- package/dist/lib/quality/quality-trends.js +299 -0
- package/dist/lib/quality/quality-trends.js.map +1 -0
- package/dist/lib/quality/quality-trends.test.d.ts +6 -0
- package/dist/lib/quality/quality-trends.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-trends.test.js +377 -0
- package/dist/lib/quality/quality-trends.test.js.map +1 -0
- package/dist/lib/quality/quality-views.d.ts +966 -0
- package/dist/lib/quality/quality-views.d.ts.map +1 -0
- package/dist/lib/quality/quality-views.js +367 -0
- package/dist/lib/quality/quality-views.js.map +1 -0
- package/dist/lib/quality/quality-views.test.d.ts +6 -0
- package/dist/lib/quality/quality-views.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-views.test.js +262 -0
- package/dist/lib/quality/quality-views.test.js.map +1 -0
- package/dist/lib/quality/quality-visualization.d.ts +112 -0
- package/dist/lib/quality/quality-visualization.d.ts.map +1 -0
- package/dist/lib/quality/quality-visualization.js +136 -0
- package/dist/lib/quality/quality-visualization.js.map +1 -0
- package/dist/lib/quality/quality-visualization.test.d.ts +5 -0
- package/dist/lib/quality/quality-visualization.test.d.ts.map +1 -0
- package/dist/lib/quality/quality-visualization.test.js +189 -0
- package/dist/lib/quality/quality-visualization.test.js.map +1 -0
- package/dist/lib/resilience/cache.d.ts +56 -0
- package/dist/lib/resilience/cache.d.ts.map +1 -0
- package/dist/lib/resilience/cache.js +96 -0
- package/dist/lib/resilience/cache.js.map +1 -0
- package/dist/lib/resilience/cache.test.d.ts.map +1 -0
- package/dist/lib/{cache.test.js → resilience/cache.test.js} +21 -20
- package/dist/lib/resilience/cache.test.js.map +1 -0
- package/dist/lib/resilience/circuit-breaker.d.ts +147 -0
- package/dist/lib/resilience/circuit-breaker.d.ts.map +1 -0
- package/dist/lib/resilience/circuit-breaker.js +251 -0
- package/dist/lib/resilience/circuit-breaker.js.map +1 -0
- package/dist/lib/resilience/circuit-breaker.test.d.ts.map +1 -0
- package/dist/lib/{circuit-breaker.test.js → resilience/circuit-breaker.test.js} +29 -26
- package/dist/lib/resilience/circuit-breaker.test.js.map +1 -0
- package/dist/lib/{toon-encoder.d.ts → resilience/toon-encoder.d.ts} +6 -1
- package/dist/lib/resilience/toon-encoder.d.ts.map +1 -0
- package/dist/lib/{toon-encoder.js → resilience/toon-encoder.js} +7 -2
- package/dist/lib/resilience/toon-encoder.js.map +1 -0
- package/dist/lib/resilience/toon-encoder.test.d.ts.map +1 -0
- package/dist/lib/{toon-encoder.test.js → resilience/toon-encoder.test.js} +7 -6
- package/dist/lib/resilience/toon-encoder.test.js.map +1 -0
- package/dist/lib/testing/mock-llm-builder.d.ts +139 -0
- package/dist/lib/testing/mock-llm-builder.d.ts.map +1 -0
- package/dist/lib/testing/mock-llm-builder.js +254 -0
- package/dist/lib/testing/mock-llm-builder.js.map +1 -0
- package/dist/lib/testing/mock-llm-builder.test.d.ts +5 -0
- package/dist/lib/testing/mock-llm-builder.test.d.ts.map +1 -0
- package/dist/lib/testing/mock-llm-builder.test.js +304 -0
- package/dist/lib/testing/mock-llm-builder.test.js.map +1 -0
- package/dist/lib/validation/api-schemas.d.ts +705 -0
- package/dist/lib/validation/api-schemas.d.ts.map +1 -0
- package/dist/lib/validation/api-schemas.js +351 -0
- package/dist/lib/validation/api-schemas.js.map +1 -0
- package/dist/lib/validation/api-schemas.test.d.ts +5 -0
- package/dist/lib/validation/api-schemas.test.d.ts.map +1 -0
- package/dist/lib/validation/api-schemas.test.js +427 -0
- package/dist/lib/validation/api-schemas.test.js.map +1 -0
- package/dist/lib/validation/dashboard-schemas.d.ts +203 -0
- package/dist/lib/validation/dashboard-schemas.d.ts.map +1 -0
- package/dist/lib/validation/dashboard-schemas.js +186 -0
- package/dist/lib/validation/dashboard-schemas.js.map +1 -0
- package/dist/lib/validation/dashboard-schemas.test.d.ts +5 -0
- package/dist/lib/validation/dashboard-schemas.test.d.ts.map +1 -0
- package/dist/lib/validation/dashboard-schemas.test.js +353 -0
- package/dist/lib/validation/dashboard-schemas.test.js.map +1 -0
- package/dist/server.d.ts +7 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +172 -102
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +102 -95
- package/dist/server.test.js.map +1 -1
- package/dist/test-helpers/assertions.d.ts +6 -0
- package/dist/test-helpers/assertions.d.ts.map +1 -0
- package/dist/test-helpers/assertions.js +11 -0
- package/dist/test-helpers/assertions.js.map +1 -0
- package/dist/test-helpers/env-utils.d.ts +0 -64
- package/dist/test-helpers/env-utils.d.ts.map +1 -1
- package/dist/test-helpers/env-utils.js +0 -100
- package/dist/test-helpers/env-utils.js.map +1 -1
- package/dist/test-helpers/fuzz-generators.d.ts.map +1 -1
- package/dist/test-helpers/fuzz-generators.js +62 -22
- package/dist/test-helpers/fuzz-generators.js.map +1 -1
- package/dist/test-helpers/index.d.ts +3 -2
- package/dist/test-helpers/index.d.ts.map +1 -1
- package/dist/test-helpers/index.js +4 -2
- package/dist/test-helpers/index.js.map +1 -1
- package/dist/test-helpers/memfs-utils.test.js +81 -76
- package/dist/test-helpers/memfs-utils.test.js.map +1 -1
- package/dist/test-helpers/mock-backends.d.ts +19 -17
- package/dist/test-helpers/mock-backends.d.ts.map +1 -1
- package/dist/test-helpers/mock-backends.js +16 -4
- package/dist/test-helpers/mock-backends.js.map +1 -1
- package/dist/test-helpers/mock-backends.test.js +43 -112
- package/dist/test-helpers/mock-backends.test.js.map +1 -1
- package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -1
- package/dist/test-helpers/race-condition-helpers.js +3 -2
- package/dist/test-helpers/race-condition-helpers.js.map +1 -1
- package/dist/test-helpers/schema-validators.d.ts +2 -2
- package/dist/test-helpers/schema-validators.d.ts.map +1 -1
- package/dist/test-helpers/schema-validators.js +35 -31
- package/dist/test-helpers/schema-validators.js.map +1 -1
- package/dist/test-helpers/test-constants.d.ts +74 -0
- package/dist/test-helpers/test-constants.d.ts.map +1 -0
- package/dist/test-helpers/test-constants.js +78 -0
- package/dist/test-helpers/test-constants.js.map +1 -0
- package/dist/test-helpers/test-data-builders.d.ts +25 -7
- package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
- package/dist/test-helpers/test-data-builders.js +32 -9
- package/dist/test-helpers/test-data-builders.js.map +1 -1
- package/dist/test-helpers/test-data-builders.test.js +116 -107
- package/dist/test-helpers/test-data-builders.test.js.map +1 -1
- package/dist/test-helpers/tool-validators.d.ts +1 -1
- package/dist/test-helpers/tool-validators.d.ts.map +1 -1
- package/dist/test-helpers/tool-validators.js +10 -10
- package/dist/test-helpers/tool-validators.js.map +1 -1
- package/dist/tools/audit-trail.d.ts +170 -0
- package/dist/tools/audit-trail.d.ts.map +1 -0
- package/dist/tools/audit-trail.js +109 -0
- package/dist/tools/audit-trail.js.map +1 -0
- package/dist/tools/audit-trail.test.d.ts +5 -0
- package/dist/tools/audit-trail.test.d.ts.map +1 -0
- package/dist/tools/audit-trail.test.js +122 -0
- package/dist/tools/audit-trail.test.js.map +1 -0
- package/dist/tools/context-stats.d.ts +6 -20
- package/dist/tools/context-stats.d.ts.map +1 -1
- package/dist/tools/context-stats.js +106 -90
- package/dist/tools/context-stats.js.map +1 -1
- package/dist/tools/context-stats.test.js +109 -60
- package/dist/tools/context-stats.test.js.map +1 -1
- package/dist/tools/detect-trace-anomalies.d.ts +123 -0
- package/dist/tools/detect-trace-anomalies.d.ts.map +1 -0
- package/dist/tools/detect-trace-anomalies.js +66 -0
- package/dist/tools/detect-trace-anomalies.js.map +1 -0
- package/dist/tools/estimate-cost.d.ts +77 -0
- package/dist/tools/estimate-cost.d.ts.map +1 -0
- package/dist/tools/estimate-cost.js +104 -0
- package/dist/tools/estimate-cost.js.map +1 -0
- package/dist/tools/estimate-cost.test.d.ts +5 -0
- package/dist/tools/estimate-cost.test.d.ts.map +1 -0
- package/dist/tools/estimate-cost.test.js +343 -0
- package/dist/tools/estimate-cost.test.js.map +1 -0
- package/dist/tools/export-base.d.ts +77 -0
- package/dist/tools/export-base.d.ts.map +1 -0
- package/dist/tools/export-base.js +150 -0
- package/dist/tools/export-base.js.map +1 -0
- package/dist/tools/export-base.test.d.ts +18 -0
- package/dist/tools/export-base.test.d.ts.map +1 -0
- package/dist/tools/export-base.test.js +220 -0
- package/dist/tools/export-base.test.js.map +1 -0
- package/dist/tools/export-confident.d.ts +149 -0
- package/dist/tools/export-confident.d.ts.map +1 -0
- package/dist/tools/export-confident.js +36 -0
- package/dist/tools/export-confident.js.map +1 -0
- package/dist/tools/export-confident.test.d.ts +7 -0
- package/dist/tools/export-confident.test.d.ts.map +1 -0
- package/dist/tools/export-confident.test.js +336 -0
- package/dist/tools/export-confident.test.js.map +1 -0
- package/dist/tools/export-datadog.d.ts +121 -0
- package/dist/tools/export-datadog.d.ts.map +1 -0
- package/dist/tools/export-datadog.js +158 -0
- package/dist/tools/export-datadog.js.map +1 -0
- package/dist/tools/export-datadog.test.d.ts +8 -0
- package/dist/tools/export-datadog.test.d.ts.map +1 -0
- package/dist/tools/export-datadog.test.js +376 -0
- package/dist/tools/export-datadog.test.js.map +1 -0
- package/dist/tools/export-jaeger.d.ts +100 -0
- package/dist/tools/export-jaeger.d.ts.map +1 -0
- package/dist/tools/export-jaeger.js +154 -0
- package/dist/tools/export-jaeger.js.map +1 -0
- package/dist/tools/export-jaeger.test.d.ts +2 -0
- package/dist/tools/export-jaeger.test.d.ts.map +1 -0
- package/dist/tools/export-jaeger.test.js +113 -0
- package/dist/tools/export-jaeger.test.js.map +1 -0
- package/dist/tools/export-langfuse.d.ts +135 -0
- package/dist/tools/export-langfuse.d.ts.map +1 -0
- package/dist/tools/export-langfuse.js +33 -0
- package/dist/tools/export-langfuse.js.map +1 -0
- package/dist/tools/export-langfuse.test.d.ts +7 -0
- package/dist/tools/export-langfuse.test.d.ts.map +1 -0
- package/dist/tools/export-langfuse.test.js +292 -0
- package/dist/tools/export-langfuse.test.js.map +1 -0
- package/dist/tools/export-phoenix.d.ts +170 -0
- package/dist/tools/export-phoenix.d.ts.map +1 -0
- package/dist/tools/export-phoenix.js +47 -0
- package/dist/tools/export-phoenix.js.map +1 -0
- package/dist/tools/export-phoenix.test.d.ts +7 -0
- package/dist/tools/export-phoenix.test.d.ts.map +1 -0
- package/dist/tools/export-phoenix.test.js +317 -0
- package/dist/tools/export-phoenix.test.js.map +1 -0
- package/dist/tools/get-trace-url.d.ts +2 -10
- package/dist/tools/get-trace-url.d.ts.map +1 -1
- package/dist/tools/get-trace-url.js +5 -8
- package/dist/tools/get-trace-url.js.map +1 -1
- package/dist/tools/get-trace-url.test.js +81 -399
- package/dist/tools/get-trace-url.test.js.map +1 -1
- package/dist/tools/hallucination-detection.d.ts +203 -0
- package/dist/tools/hallucination-detection.d.ts.map +1 -0
- package/dist/tools/hallucination-detection.js +189 -0
- package/dist/tools/hallucination-detection.js.map +1 -0
- package/dist/tools/hallucination-detection.test.d.ts +5 -0
- package/dist/tools/hallucination-detection.test.d.ts.map +1 -0
- package/dist/tools/hallucination-detection.test.js +529 -0
- package/dist/tools/hallucination-detection.test.js.map +1 -0
- package/dist/tools/health-check.d.ts +35 -16
- package/dist/tools/health-check.d.ts.map +1 -1
- package/dist/tools/health-check.js +101 -85
- package/dist/tools/health-check.js.map +1 -1
- package/dist/tools/health-check.test.js +72 -165
- package/dist/tools/health-check.test.js.map +1 -1
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +19 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/ingest-constants.d.ts +8 -0
- package/dist/tools/ingest-constants.d.ts.map +1 -0
- package/dist/tools/ingest-constants.js +8 -0
- package/dist/tools/ingest-constants.js.map +1 -0
- package/dist/tools/ingest-spans.d.ts +45 -0
- package/dist/tools/ingest-spans.d.ts.map +1 -0
- package/dist/tools/ingest-spans.js +129 -0
- package/dist/tools/ingest-spans.js.map +1 -0
- package/dist/tools/ingest-spans.test.d.ts +5 -0
- package/dist/tools/ingest-spans.test.d.ts.map +1 -0
- package/dist/tools/ingest-spans.test.js +250 -0
- package/dist/tools/ingest-spans.test.js.map +1 -0
- package/dist/tools/ingest-traces.d.ts +76 -0
- package/dist/tools/ingest-traces.d.ts.map +1 -0
- package/dist/tools/ingest-traces.js +164 -0
- package/dist/tools/ingest-traces.js.map +1 -0
- package/dist/tools/ingest-traces.test.d.ts +5 -0
- package/dist/tools/ingest-traces.test.d.ts.map +1 -0
- package/dist/tools/ingest-traces.test.js +483 -0
- package/dist/tools/ingest-traces.test.js.map +1 -0
- package/dist/tools/inject-evaluations.d.ts +254 -0
- package/dist/tools/inject-evaluations.d.ts.map +1 -0
- package/dist/tools/inject-evaluations.js +133 -0
- package/dist/tools/inject-evaluations.js.map +1 -0
- package/dist/tools/inject-evaluations.test.d.ts +5 -0
- package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
- package/dist/tools/inject-evaluations.test.js +371 -0
- package/dist/tools/inject-evaluations.test.js.map +1 -0
- package/dist/tools/manage-datasets.d.ts +850 -0
- package/dist/tools/manage-datasets.d.ts.map +1 -0
- package/dist/tools/manage-datasets.js +139 -0
- package/dist/tools/manage-datasets.js.map +1 -0
- package/dist/tools/manage-datasets.test.d.ts +5 -0
- package/dist/tools/manage-datasets.test.d.ts.map +1 -0
- package/dist/tools/manage-datasets.test.js +430 -0
- package/dist/tools/manage-datasets.test.js.map +1 -0
- package/dist/tools/multi-agent-coordination.d.ts +178 -0
- package/dist/tools/multi-agent-coordination.d.ts.map +1 -0
- package/dist/tools/multi-agent-coordination.js +270 -0
- package/dist/tools/multi-agent-coordination.js.map +1 -0
- package/dist/tools/multi-agent-coordination.test.d.ts +5 -0
- package/dist/tools/multi-agent-coordination.test.d.ts.map +1 -0
- package/dist/tools/multi-agent-coordination.test.js +530 -0
- package/dist/tools/multi-agent-coordination.test.js.map +1 -0
- package/dist/tools/query-evaluations.d.ts +154 -91
- package/dist/tools/query-evaluations.d.ts.map +1 -1
- package/dist/tools/query-evaluations.js +206 -169
- package/dist/tools/query-evaluations.js.map +1 -1
- package/dist/tools/query-evaluations.test.js +386 -391
- package/dist/tools/query-evaluations.test.js.map +1 -1
- package/dist/tools/query-llm-events.d.ts +100 -75
- package/dist/tools/query-llm-events.d.ts.map +1 -1
- package/dist/tools/query-llm-events.js +106 -80
- package/dist/tools/query-llm-events.js.map +1 -1
- package/dist/tools/query-llm-events.test.js +183 -346
- package/dist/tools/query-llm-events.test.js.map +1 -1
- package/dist/tools/query-logs.d.ts +45 -58
- package/dist/tools/query-logs.d.ts.map +1 -1
- package/dist/tools/query-logs.js +54 -101
- package/dist/tools/query-logs.js.map +1 -1
- package/dist/tools/query-logs.test.js +118 -314
- package/dist/tools/query-logs.test.js.map +1 -1
- package/dist/tools/query-metric-histograms.d.ts +112 -0
- package/dist/tools/query-metric-histograms.d.ts.map +1 -0
- package/dist/tools/query-metric-histograms.js +69 -0
- package/dist/tools/query-metric-histograms.js.map +1 -0
- package/dist/tools/query-metric-histograms.test.d.ts +5 -0
- package/dist/tools/query-metric-histograms.test.d.ts.map +1 -0
- package/dist/tools/query-metric-histograms.test.js +209 -0
- package/dist/tools/query-metric-histograms.test.js.map +1 -0
- package/dist/tools/query-metrics.d.ts +159 -60
- package/dist/tools/query-metrics.d.ts.map +1 -1
- package/dist/tools/query-metrics.js +133 -111
- package/dist/tools/query-metrics.js.map +1 -1
- package/dist/tools/query-metrics.test.js +314 -389
- package/dist/tools/query-metrics.test.js.map +1 -1
- package/dist/tools/query-regressions.d.ts +76 -0
- package/dist/tools/query-regressions.d.ts.map +1 -0
- package/dist/tools/query-regressions.js +122 -0
- package/dist/tools/query-regressions.js.map +1 -0
- package/dist/tools/query-regressions.test.d.ts +8 -0
- package/dist/tools/query-regressions.test.d.ts.map +1 -0
- package/dist/tools/query-regressions.test.js +129 -0
- package/dist/tools/query-regressions.test.js.map +1 -0
- package/dist/tools/query-traces.d.ts +103 -71
- package/dist/tools/query-traces.d.ts.map +1 -1
- package/dist/tools/query-traces.js +75 -106
- package/dist/tools/query-traces.js.map +1 -1
- package/dist/tools/query-traces.test.js +140 -846
- package/dist/tools/query-traces.test.js.map +1 -1
- package/dist/tools/query-verifications.d.ts +123 -0
- package/dist/tools/query-verifications.d.ts.map +1 -0
- package/dist/tools/query-verifications.js +102 -0
- package/dist/tools/query-verifications.js.map +1 -0
- package/dist/tools/query-verifications.test.d.ts +5 -0
- package/dist/tools/query-verifications.test.d.ts.map +1 -0
- package/dist/tools/query-verifications.test.js +163 -0
- package/dist/tools/query-verifications.test.js.map +1 -0
- package/dist/tools/routing-telemetry.d.ts +168 -0
- package/dist/tools/routing-telemetry.d.ts.map +1 -0
- package/dist/tools/routing-telemetry.js +267 -0
- package/dist/tools/routing-telemetry.js.map +1 -0
- package/dist/tools/routing-telemetry.test.d.ts +5 -0
- package/dist/tools/routing-telemetry.test.d.ts.map +1 -0
- package/dist/tools/routing-telemetry.test.js +747 -0
- package/dist/tools/routing-telemetry.test.js.map +1 -0
- package/dist/tools/setup-claudeignore.d.ts +4 -32
- package/dist/tools/setup-claudeignore.d.ts.map +1 -1
- package/dist/tools/setup-claudeignore.js +18 -22
- package/dist/tools/setup-claudeignore.js.map +1 -1
- package/dist/tools/setup-claudeignore.test.js +50 -49
- package/dist/tools/setup-claudeignore.test.js.map +1 -1
- package/dist/tools/token-budget.d.ts +170 -0
- package/dist/tools/token-budget.d.ts.map +1 -0
- package/dist/tools/token-budget.js +219 -0
- package/dist/tools/token-budget.js.map +1 -0
- package/dist/tools/token-budget.test.d.ts +5 -0
- package/dist/tools/token-budget.test.d.ts.map +1 -0
- package/dist/tools/token-budget.test.js +293 -0
- package/dist/tools/token-budget.test.js.map +1 -0
- package/package.json +76 -6
- package/dist/backends/local-jsonl.test.d.ts +0 -2
- package/dist/backends/local-jsonl.test.d.ts.map +0 -1
- package/dist/backends/local-jsonl.test.js +0 -4651
- package/dist/backends/local-jsonl.test.js.map +0 -1
- package/dist/backends/signoz-api-circuit-breaker.test.d.ts +0 -6
- package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +0 -1
- package/dist/backends/signoz-api-circuit-breaker.test.js +0 -548
- package/dist/backends/signoz-api-circuit-breaker.test.js.map +0 -1
- package/dist/backends/signoz-api-rate-limiter.test.d.ts +0 -6
- package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +0 -1
- package/dist/backends/signoz-api-rate-limiter.test.js +0 -389
- package/dist/backends/signoz-api-rate-limiter.test.js.map +0 -1
- package/dist/backends/signoz-api-ssrf.test.d.ts +0 -6
- package/dist/backends/signoz-api-ssrf.test.d.ts.map +0 -1
- package/dist/backends/signoz-api-ssrf.test.js +0 -216
- package/dist/backends/signoz-api-ssrf.test.js.map +0 -1
- package/dist/backends/signoz-api-test-helpers.d.ts +0 -80
- package/dist/backends/signoz-api-test-helpers.d.ts.map +0 -1
- package/dist/backends/signoz-api-test-helpers.js +0 -79
- package/dist/backends/signoz-api-test-helpers.js.map +0 -1
- package/dist/backends/signoz-api.d.ts +0 -95
- package/dist/backends/signoz-api.d.ts.map +0 -1
- package/dist/backends/signoz-api.integration.test.d.ts +0 -8
- package/dist/backends/signoz-api.integration.test.d.ts.map +0 -1
- package/dist/backends/signoz-api.integration.test.js +0 -137
- package/dist/backends/signoz-api.integration.test.js.map +0 -1
- package/dist/backends/signoz-api.js +0 -1016
- package/dist/backends/signoz-api.js.map +0 -1
- package/dist/backends/signoz-api.test.d.ts +0 -11
- package/dist/backends/signoz-api.test.d.ts.map +0 -1
- package/dist/backends/signoz-api.test.js +0 -831
- package/dist/backends/signoz-api.test.js.map +0 -1
- package/dist/lib/cache.d.ts +0 -77
- package/dist/lib/cache.d.ts.map +0 -1
- package/dist/lib/cache.js +0 -119
- package/dist/lib/cache.js.map +0 -1
- package/dist/lib/cache.test.d.ts.map +0 -1
- package/dist/lib/cache.test.js.map +0 -1
- package/dist/lib/circuit-breaker.d.ts +0 -83
- package/dist/lib/circuit-breaker.d.ts.map +0 -1
- package/dist/lib/circuit-breaker.js +0 -125
- package/dist/lib/circuit-breaker.js.map +0 -1
- package/dist/lib/circuit-breaker.test.d.ts.map +0 -1
- package/dist/lib/circuit-breaker.test.js.map +0 -1
- package/dist/lib/constants-symlink.test.d.ts.map +0 -1
- package/dist/lib/constants-symlink.test.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -108
- package/dist/lib/constants.d.ts.map +0 -1
- package/dist/lib/constants.js +0 -350
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/constants.test.d.ts.map +0 -1
- package/dist/lib/constants.test.js.map +0 -1
- package/dist/lib/edge-cases.test.d.ts.map +0 -1
- package/dist/lib/edge-cases.test.js.map +0 -1
- package/dist/lib/error-sanitizer.d.ts.map +0 -1
- package/dist/lib/error-sanitizer.js.map +0 -1
- package/dist/lib/error-sanitizer.test.d.ts.map +0 -1
- package/dist/lib/error-sanitizer.test.js.map +0 -1
- package/dist/lib/error-types.d.ts.map +0 -1
- package/dist/lib/error-types.js.map +0 -1
- package/dist/lib/error-types.test.d.ts.map +0 -1
- package/dist/lib/error-types.test.js.map +0 -1
- package/dist/lib/file-utils.d.ts.map +0 -1
- package/dist/lib/file-utils.js.map +0 -1
- package/dist/lib/file-utils.test.d.ts.map +0 -1
- package/dist/lib/file-utils.test.js.map +0 -1
- package/dist/lib/indexer.d.ts +0 -96
- package/dist/lib/indexer.d.ts.map +0 -1
- package/dist/lib/indexer.js.map +0 -1
- package/dist/lib/indexer.test.d.ts.map +0 -1
- package/dist/lib/indexer.test.js.map +0 -1
- package/dist/lib/input-validator.d.ts.map +0 -1
- package/dist/lib/input-validator.fuzz.test.d.ts.map +0 -1
- package/dist/lib/input-validator.fuzz.test.js.map +0 -1
- package/dist/lib/input-validator.js.map +0 -1
- package/dist/lib/input-validator.test.d.ts.map +0 -1
- package/dist/lib/input-validator.test.js.map +0 -1
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js +0 -81
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/logger.test.d.ts.map +0 -1
- package/dist/lib/logger.test.js.map +0 -1
- package/dist/lib/otlp-export.d.ts.map +0 -1
- package/dist/lib/otlp-export.js.map +0 -1
- package/dist/lib/query-sanitizer.d.ts.map +0 -1
- package/dist/lib/query-sanitizer.js.map +0 -1
- package/dist/lib/query-sanitizer.test.d.ts.map +0 -1
- package/dist/lib/query-sanitizer.test.js.map +0 -1
- package/dist/lib/server-utils.d.ts.map +0 -1
- package/dist/lib/server-utils.js.map +0 -1
- package/dist/lib/shared-schemas.d.ts +0 -81
- package/dist/lib/shared-schemas.d.ts.map +0 -1
- package/dist/lib/shared-schemas.js +0 -80
- package/dist/lib/shared-schemas.js.map +0 -1
- package/dist/lib/shared-schemas.test.d.ts.map +0 -1
- package/dist/lib/shared-schemas.test.js.map +0 -1
- package/dist/lib/toon-encoder.d.ts.map +0 -1
- package/dist/lib/toon-encoder.js.map +0 -1
- package/dist/lib/toon-encoder.test.d.ts.map +0 -1
- package/dist/lib/toon-encoder.test.js.map +0 -1
- package/dist/tools/signoz.integration.test.d.ts +0 -8
- package/dist/tools/signoz.integration.test.d.ts.map +0 -1
- package/dist/tools/signoz.integration.test.js +0 -141
- package/dist/tools/signoz.integration.test.js.map +0 -1
- /package/dist/lib/{constants-symlink.test.d.ts → core/constants-symlink.test.d.ts} +0 -0
- /package/dist/lib/{constants.test.d.ts → core/constants.test.d.ts} +0 -0
- /package/dist/lib/{edge-cases.test.d.ts → core/edge-cases.test.d.ts} +0 -0
- /package/dist/lib/{file-utils.test.d.ts → core/file-utils.test.d.ts} +0 -0
- /package/dist/lib/{input-validator.fuzz.test.d.ts → core/input-validator.fuzz.test.d.ts} +0 -0
- /package/dist/lib/{input-validator.test.d.ts → core/input-validator.test.d.ts} +0 -0
- /package/dist/lib/{logger.test.d.ts → core/logger.test.d.ts} +0 -0
- /package/dist/lib/{logger.test.js → core/logger.test.js} +0 -0
- /package/dist/lib/{shared-schemas.test.d.ts → core/shared-schemas.test.d.ts} +0 -0
- /package/dist/lib/{error-sanitizer.test.d.ts → errors/error-sanitizer.test.d.ts} +0 -0
- /package/dist/lib/{error-types.test.d.ts → errors/error-types.test.d.ts} +0 -0
- /package/dist/lib/{query-sanitizer.d.ts → errors/query-sanitizer.d.ts} +0 -0
- /package/dist/lib/{query-sanitizer.test.d.ts → errors/query-sanitizer.test.d.ts} +0 -0
- /package/dist/lib/{indexer.test.d.ts → observability/indexer.test.d.ts} +0 -0
- /package/dist/lib/{cache.test.d.ts → resilience/cache.test.d.ts} +0 -0
- /package/dist/lib/{circuit-breaker.test.d.ts → resilience/circuit-breaker.test.d.ts} +0 -0
- /package/dist/lib/{toon-encoder.test.d.ts → resilience/toon-encoder.test.d.ts} +0 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { describe, it, beforeEach, afterEach } from '
|
|
1
|
+
import { describe, it, beforeEach, afterEach } from 'vitest';
|
|
2
2
|
import assert from 'node:assert';
|
|
3
|
+
import { FLOAT_TOLERANCE } from '../../test-helpers/test-data-builders.js';
|
|
4
|
+
import { DEFAULT_LIMIT_10, SAMPLE_SIZE_100, COUNT_FOUR, COUNT_FIFTEEN, COUNT_FIVE, COUNT_NINE, COUNT_SIX, COUNT_THREE, COUNT_TWO, VALUE_FORTY_TWO, } from '../../test-helpers/test-constants.js';
|
|
5
|
+
import { MAX_RESULTS_IN_MEMORY, RETENTION_DAYS_DEFAULT, STREAMING_THRESHOLD, } from './constants.js';
|
|
6
|
+
import { TIME_MS, } from './units.js';
|
|
7
|
+
import { ESTIMATED_SIZE_MAX_BYTES, ESTIMATED_SIZE_MIN_BYTES, LARGE_ARRAY_SAMPLE_SIZE, LARGE_JSONL_LINE_COUNT, LARGE_RESERVOIR_DATASET_SIZE, LARGE_RESERVOIR_P50_EXPECTED, LARGE_RESERVOIR_P95_EXPECTED, LARGE_RESERVOIR_SUM_UPPER_TERM, MIXED_ARRAY_CIRCULAR_ITEMS, MIXED_ARRAY_NORMAL_ITEMS, MOSTLY_CIRCULAR_ITEMS, MOSTLY_CIRCULAR_NORMAL_ITEMS, PERCENTILE_P50_EXPECTED, PERCENTILE_P95_EXPECTED, PERCENTILE_P99_EXPECTED, PERCENTILE_TEST_SAMPLE_SIZE, RESULT_COUNT_EIGHT, RESULT_COUNT_TEN, NUMERIC_SEQUENCE_FIVE_TWO_EIGHT, NUMERIC_SEQUENCE_NEGATIVE_TEN_TO_TEN, NUMERIC_SEQUENCE_ONE_TO_FIVE, NUMERIC_SEQUENCE_ONE_TO_TEN, NUMERIC_SEQUENCE_ONE_TO_THREE, NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY, RELATIVE_ERROR_TEN_PERCENT, STREAMING_COUNT_CUSTOM_HIGH, STREAMING_COUNT_CUSTOM_LOW, STREAMING_COUNT_CUSTOM_THRESHOLD, STREAMING_COUNT_DEFAULT_THRESHOLD, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_TEN, WINDOW_LIMIT_THREE, WINDOW_OFFSET_TWO, } from './file-utils.test-constants.js';
|
|
3
8
|
import * as fs from 'fs';
|
|
4
9
|
import * as path from 'path';
|
|
5
10
|
import * as os from 'os';
|
|
@@ -41,7 +46,7 @@ describe('file-utils', () => {
|
|
|
41
46
|
});
|
|
42
47
|
describe('loadJson', () => {
|
|
43
48
|
it('should load and parse valid JSON file', () => {
|
|
44
|
-
const testData = { key: 'value', num:
|
|
49
|
+
const testData = { key: 'value', num: VALUE_FORTY_TWO };
|
|
45
50
|
const filePath = path.join(testDir, 'test.json');
|
|
46
51
|
fs.writeFileSync(filePath, JSON.stringify(testData));
|
|
47
52
|
const result = loadJson(filePath);
|
|
@@ -78,7 +83,7 @@ describe('file-utils', () => {
|
|
|
78
83
|
it('should parse complex nested JSON', () => {
|
|
79
84
|
const testData = {
|
|
80
85
|
nested: { deep: { value: 'test' } },
|
|
81
|
-
array: [1,
|
|
86
|
+
array: [1, COUNT_TWO, COUNT_THREE],
|
|
82
87
|
};
|
|
83
88
|
const filePath = path.join(testDir, 'complex.json');
|
|
84
89
|
fs.writeFileSync(filePath, JSON.stringify(testData));
|
|
@@ -152,7 +157,7 @@ describe('file-utils', () => {
|
|
|
152
157
|
fs.writeFileSync(path.join(testDir, 'file3.txt'), 'text');
|
|
153
158
|
fs.writeFileSync(path.join(testDir, 'file4.json'), '{}');
|
|
154
159
|
const result = listFiles(testDir, /\.json$/);
|
|
155
|
-
assert.strictEqual(result.length,
|
|
160
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
156
161
|
assert(result.every(f => f.endsWith('.json')));
|
|
157
162
|
});
|
|
158
163
|
it('should return full paths', () => {
|
|
@@ -168,9 +173,9 @@ describe('file-utils', () => {
|
|
|
168
173
|
const file3 = path.join(testDir, 'file3.json');
|
|
169
174
|
fs.writeFileSync(file1, '{}');
|
|
170
175
|
// Small delay to ensure different mtimes
|
|
171
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
176
|
+
await new Promise(resolve => setTimeout(resolve, STREAMING_COUNT_CUSTOM_LOW));
|
|
172
177
|
fs.writeFileSync(file2, '{}');
|
|
173
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
178
|
+
await new Promise(resolve => setTimeout(resolve, STREAMING_COUNT_CUSTOM_LOW));
|
|
174
179
|
fs.writeFileSync(file3, '{}');
|
|
175
180
|
const result = listFiles(testDir, /\.json$/);
|
|
176
181
|
assert.strictEqual(result[0], file3); // newest first
|
|
@@ -187,7 +192,7 @@ describe('file-utils', () => {
|
|
|
187
192
|
fs.writeFileSync(path.join(testDir, 'logs-2026-01-28.jsonl'), '{}');
|
|
188
193
|
fs.writeFileSync(path.join(testDir, 'other.txt'), 'text');
|
|
189
194
|
const result = listFiles(testDir, /^\w+-\d{4}-\d{2}-\d{2}\.jsonl$/);
|
|
190
|
-
assert.strictEqual(result.length,
|
|
195
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
191
196
|
});
|
|
192
197
|
});
|
|
193
198
|
describe('parseDateFromFilename', () => {
|
|
@@ -265,7 +270,7 @@ describe('file-utils', () => {
|
|
|
265
270
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
266
271
|
fs.writeFileSync(filePath, '{"id":1,"name":"first"}\n{"id":2,"name":"second"}\n{"id":3,"name":"third"}');
|
|
267
272
|
const result = readJsonlSync(filePath);
|
|
268
|
-
assert.strictEqual(result.length,
|
|
273
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
269
274
|
assert.deepStrictEqual(result[0], { id: 1, name: 'first' });
|
|
270
275
|
assert.deepStrictEqual(result[1], { id: 2, name: 'second' });
|
|
271
276
|
assert.deepStrictEqual(result[2], { id: 3, name: 'third' });
|
|
@@ -274,34 +279,34 @@ describe('file-utils', () => {
|
|
|
274
279
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
275
280
|
fs.writeFileSync(filePath, '{"id":1}\n\n{"id":2}\n \n{"id":3}');
|
|
276
281
|
const result = readJsonlSync(filePath);
|
|
277
|
-
assert.strictEqual(result.length,
|
|
282
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
278
283
|
});
|
|
279
284
|
it('should skip malformed JSON lines', () => {
|
|
280
285
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
281
286
|
fs.writeFileSync(filePath, '{"id":1}\n{invalid json}\n{"id":2}');
|
|
282
287
|
const result = readJsonlSync(filePath);
|
|
283
|
-
assert.strictEqual(result.length,
|
|
288
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
284
289
|
assert.deepStrictEqual(result[0], { id: 1 });
|
|
285
290
|
assert.deepStrictEqual(result[1], { id: 2 });
|
|
286
291
|
});
|
|
287
292
|
it('should respect limit parameter', () => {
|
|
288
293
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
289
294
|
fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n{"id":3}\n{"id":4}\n{"id":5}');
|
|
290
|
-
const result = readJsonlSync(filePath,
|
|
291
|
-
assert.strictEqual(result.length,
|
|
295
|
+
const result = readJsonlSync(filePath, COUNT_THREE);
|
|
296
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
292
297
|
});
|
|
293
298
|
it('should stop reading at limit even with more lines', () => {
|
|
294
299
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
295
300
|
fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n{"id":3}\n{"id":4}');
|
|
296
|
-
const result = readJsonlSync(filePath,
|
|
297
|
-
assert.strictEqual(result.length,
|
|
301
|
+
const result = readJsonlSync(filePath, COUNT_TWO);
|
|
302
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
298
303
|
assert.deepStrictEqual(result[1], { id: 2 });
|
|
299
304
|
});
|
|
300
305
|
it('should handle file with trailing whitespace', () => {
|
|
301
306
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
302
307
|
fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n ');
|
|
303
308
|
const result = readJsonlSync(filePath);
|
|
304
|
-
assert.strictEqual(result.length,
|
|
309
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
305
310
|
});
|
|
306
311
|
it('should handle single line file', () => {
|
|
307
312
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
@@ -315,7 +320,7 @@ describe('file-utils', () => {
|
|
|
315
320
|
fs.writeFileSync(filePath, '{"nested":{"deep":{"value":1}}}\n{"array":[1,2,3]}');
|
|
316
321
|
const result = readJsonlSync(filePath);
|
|
317
322
|
assert.deepStrictEqual(result[0], { nested: { deep: { value: 1 } } });
|
|
318
|
-
assert.deepStrictEqual(result[1], { array: [1,
|
|
323
|
+
assert.deepStrictEqual(result[1], { array: [1, COUNT_TWO, COUNT_THREE] });
|
|
319
324
|
});
|
|
320
325
|
});
|
|
321
326
|
describe('isGzipFile', () => {
|
|
@@ -373,7 +378,7 @@ describe('file-utils', () => {
|
|
|
373
378
|
for await (const item of streamJsonl(filePath)) {
|
|
374
379
|
results.push(item);
|
|
375
380
|
}
|
|
376
|
-
assert.strictEqual(results.length,
|
|
381
|
+
assert.strictEqual(results.length, COUNT_THREE);
|
|
377
382
|
assert.deepStrictEqual(results[0], { id: 1 });
|
|
378
383
|
assert.deepStrictEqual(results[1], { id: 2 });
|
|
379
384
|
assert.deepStrictEqual(results[2], { id: 3 });
|
|
@@ -385,7 +390,7 @@ describe('file-utils', () => {
|
|
|
385
390
|
for await (const item of streamJsonl(filePath)) {
|
|
386
391
|
results.push(item);
|
|
387
392
|
}
|
|
388
|
-
assert.strictEqual(results.length,
|
|
393
|
+
assert.strictEqual(results.length, COUNT_TWO);
|
|
389
394
|
});
|
|
390
395
|
it('should skip malformed JSON lines', async () => {
|
|
391
396
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
@@ -394,19 +399,19 @@ describe('file-utils', () => {
|
|
|
394
399
|
for await (const item of streamJsonl(filePath)) {
|
|
395
400
|
results.push(item);
|
|
396
401
|
}
|
|
397
|
-
assert.strictEqual(results.length,
|
|
402
|
+
assert.strictEqual(results.length, COUNT_TWO);
|
|
398
403
|
assert.deepStrictEqual(results[0], { id: 1 });
|
|
399
404
|
assert.deepStrictEqual(results[1], { id: 2 });
|
|
400
405
|
});
|
|
401
406
|
it('should handle large JSONL files efficiently', async () => {
|
|
402
407
|
const filePath = path.join(testDir, 'large.jsonl');
|
|
403
|
-
const lines = Array.from({ length:
|
|
408
|
+
const lines = Array.from({ length: LARGE_JSONL_LINE_COUNT }, (_, i) => JSON.stringify({ id: i })).join('\n');
|
|
404
409
|
fs.writeFileSync(filePath, lines);
|
|
405
410
|
let count = 0;
|
|
406
411
|
for await (const _item of streamJsonl(filePath)) {
|
|
407
412
|
count++;
|
|
408
413
|
}
|
|
409
|
-
assert.strictEqual(count,
|
|
414
|
+
assert.strictEqual(count, LARGE_JSONL_LINE_COUNT);
|
|
410
415
|
});
|
|
411
416
|
it('should stream gzipped JSONL file', async () => {
|
|
412
417
|
const filePath = path.join(testDir, 'test.jsonl.gz');
|
|
@@ -416,7 +421,7 @@ describe('file-utils', () => {
|
|
|
416
421
|
for await (const item of streamJsonl(filePath)) {
|
|
417
422
|
results.push(item);
|
|
418
423
|
}
|
|
419
|
-
assert.strictEqual(results.length,
|
|
424
|
+
assert.strictEqual(results.length, COUNT_THREE);
|
|
420
425
|
assert.deepStrictEqual(results[0], { id: 1 });
|
|
421
426
|
assert.deepStrictEqual(results[1], { id: 2 });
|
|
422
427
|
assert.deepStrictEqual(results[2], { id: 3 });
|
|
@@ -429,10 +434,40 @@ describe('file-utils', () => {
|
|
|
429
434
|
for await (const item of streamJsonl(filePath)) {
|
|
430
435
|
results.push(item);
|
|
431
436
|
}
|
|
432
|
-
assert.strictEqual(results.length,
|
|
437
|
+
assert.strictEqual(results.length, COUNT_TWO);
|
|
433
438
|
assert.deepStrictEqual(results[0], { id: 1 });
|
|
434
439
|
assert.deepStrictEqual(results[1], { id: 2 });
|
|
435
440
|
});
|
|
441
|
+
it('should track parse stats when statsTracker is provided', async () => {
|
|
442
|
+
const filePath = path.join(testDir, 'test.jsonl');
|
|
443
|
+
// 2 valid, 1 invalid, 2 empty
|
|
444
|
+
fs.writeFileSync(filePath, '{"id":1}\n\n{invalid}\n \n{"id":2}');
|
|
445
|
+
const tracker = {
|
|
446
|
+
successes: 0,
|
|
447
|
+
failures: 0,
|
|
448
|
+
empties: 0,
|
|
449
|
+
recordSuccess(_path) { this.successes++; },
|
|
450
|
+
recordFailure(_path) { this.failures++; },
|
|
451
|
+
recordEmpty(_path) { this.empties++; },
|
|
452
|
+
};
|
|
453
|
+
const results = [];
|
|
454
|
+
for await (const item of streamJsonl(filePath, { statsTracker: tracker })) {
|
|
455
|
+
results.push(item);
|
|
456
|
+
}
|
|
457
|
+
assert.strictEqual(results.length, COUNT_TWO);
|
|
458
|
+
assert.strictEqual(tracker.successes, COUNT_TWO);
|
|
459
|
+
assert.strictEqual(tracker.failures, 1);
|
|
460
|
+
assert.strictEqual(tracker.empties, COUNT_TWO);
|
|
461
|
+
});
|
|
462
|
+
it('should work without statsTracker (backward compatible)', async () => {
|
|
463
|
+
const filePath = path.join(testDir, 'test.jsonl');
|
|
464
|
+
fs.writeFileSync(filePath, '{"id":1}\n{"id":2}');
|
|
465
|
+
const results = [];
|
|
466
|
+
for await (const item of streamJsonl(filePath)) {
|
|
467
|
+
results.push(item);
|
|
468
|
+
}
|
|
469
|
+
assert.strictEqual(results.length, COUNT_TWO);
|
|
470
|
+
});
|
|
436
471
|
});
|
|
437
472
|
describe('filterByDateRange', () => {
|
|
438
473
|
const items = [
|
|
@@ -443,31 +478,31 @@ describe('file-utils', () => {
|
|
|
443
478
|
];
|
|
444
479
|
it('should return all items if no date range specified', () => {
|
|
445
480
|
const result = filterByDateRange(items);
|
|
446
|
-
assert.strictEqual(result.length,
|
|
481
|
+
assert.strictEqual(result.length, WINDOW_LIMIT_FIVE - 1);
|
|
447
482
|
});
|
|
448
483
|
it('should filter items after startDate', () => {
|
|
449
484
|
const result = filterByDateRange(items, '2026-01-15');
|
|
450
|
-
assert.strictEqual(result.length,
|
|
485
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
451
486
|
assert.deepStrictEqual(result[0], { id: 2, timestamp: '2026-01-15' });
|
|
452
487
|
});
|
|
453
488
|
it('should filter items before endDate', () => {
|
|
454
489
|
const result = filterByDateRange(items, undefined, '2026-01-20');
|
|
455
|
-
assert.strictEqual(result.length,
|
|
490
|
+
assert.strictEqual(result.length, COUNT_THREE);
|
|
456
491
|
assert.deepStrictEqual(result[2], { id: 3, timestamp: '2026-01-20' });
|
|
457
492
|
});
|
|
458
493
|
it('should filter items between startDate and endDate', () => {
|
|
459
494
|
const result = filterByDateRange(items, '2026-01-12', '2026-01-22');
|
|
460
|
-
assert.strictEqual(result.length,
|
|
495
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
461
496
|
assert.deepStrictEqual(result[0], { id: 2, timestamp: '2026-01-15' });
|
|
462
497
|
assert.deepStrictEqual(result[1], { id: 3, timestamp: '2026-01-20' });
|
|
463
498
|
});
|
|
464
499
|
it('should include items with exact startDate', () => {
|
|
465
500
|
const result = filterByDateRange(items, '2026-01-15');
|
|
466
|
-
assert(result.some(item => item.id ===
|
|
501
|
+
assert(result.some(item => item.id === COUNT_TWO));
|
|
467
502
|
});
|
|
468
503
|
it('should include items with exact endDate', () => {
|
|
469
504
|
const result = filterByDateRange(items, undefined, '2026-01-15');
|
|
470
|
-
assert(result.some(item => item.id ===
|
|
505
|
+
assert(result.some(item => item.id === COUNT_TWO));
|
|
471
506
|
});
|
|
472
507
|
it('should include items without timestamp', () => {
|
|
473
508
|
const itemsWithoutTs = [
|
|
@@ -476,8 +511,8 @@ describe('file-utils', () => {
|
|
|
476
511
|
{ id: 3, timestamp: '2026-01-20' },
|
|
477
512
|
];
|
|
478
513
|
const result = filterByDateRange(itemsWithoutTs, '2026-01-15');
|
|
479
|
-
assert.strictEqual(result.length,
|
|
480
|
-
assert(result.some(item => item.id ===
|
|
514
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
515
|
+
assert(result.some(item => item.id === COUNT_TWO));
|
|
481
516
|
});
|
|
482
517
|
it('should return empty array if no items in range', () => {
|
|
483
518
|
const result = filterByDateRange(items, '2026-02-01', '2026-02-28');
|
|
@@ -496,7 +531,7 @@ describe('file-utils', () => {
|
|
|
496
531
|
// Note: filterByDateRange uses lexicographic comparison
|
|
497
532
|
// '2026-01-15T...' > '2026-01-15' due to 'T', so use end of day
|
|
498
533
|
const result = filterByDateRange(itemsWithTime, '2026-01-15', '2026-01-15T23:59:59');
|
|
499
|
-
assert.strictEqual(result.length,
|
|
534
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
500
535
|
});
|
|
501
536
|
it('should handle lexicographic string comparison correctly', () => {
|
|
502
537
|
const itemsWithDates = [
|
|
@@ -505,7 +540,7 @@ describe('file-utils', () => {
|
|
|
505
540
|
{ id: 3, timestamp: '2026-10-01' },
|
|
506
541
|
];
|
|
507
542
|
const result = filterByDateRange(itemsWithDates, '2026-02-01', '2026-10-01');
|
|
508
|
-
assert.strictEqual(result.length,
|
|
543
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
509
544
|
});
|
|
510
545
|
it('should handle generic type with optional timestamp', () => {
|
|
511
546
|
const customItems = [
|
|
@@ -513,60 +548,60 @@ describe('file-utils', () => {
|
|
|
513
548
|
{ name: 'item2' },
|
|
514
549
|
];
|
|
515
550
|
const result = filterByDateRange(customItems, '2026-01-09', '2026-01-11');
|
|
516
|
-
assert.strictEqual(result.length,
|
|
551
|
+
assert.strictEqual(result.length, COUNT_TWO);
|
|
517
552
|
});
|
|
518
553
|
});
|
|
519
554
|
describe('paginateResults', () => {
|
|
520
|
-
const items =
|
|
555
|
+
const items = NUMERIC_SEQUENCE_ONE_TO_TEN;
|
|
521
556
|
it('should return items from offset to offset + limit', () => {
|
|
522
|
-
const result = paginateResults(items,
|
|
523
|
-
assert.deepStrictEqual(result,
|
|
557
|
+
const result = paginateResults(items, WINDOW_OFFSET_TWO, WINDOW_LIMIT_THREE);
|
|
558
|
+
assert.deepStrictEqual(result, NUMERIC_SEQUENCE_ONE_TO_TEN.slice(WINDOW_LIMIT_THREE - 1, COUNT_SIX - 1));
|
|
524
559
|
});
|
|
525
560
|
it('should return from start when offset is 0', () => {
|
|
526
|
-
const result = paginateResults(items, 0,
|
|
527
|
-
assert.deepStrictEqual(result,
|
|
561
|
+
const result = paginateResults(items, 0, WINDOW_LIMIT_FIVE);
|
|
562
|
+
assert.deepStrictEqual(result, NUMERIC_SEQUENCE_ONE_TO_FIVE);
|
|
528
563
|
});
|
|
529
564
|
it('should handle offset at end of array', () => {
|
|
530
|
-
const result = paginateResults(items,
|
|
531
|
-
assert.deepStrictEqual(result, [
|
|
565
|
+
const result = paginateResults(items, RESULT_COUNT_EIGHT, WINDOW_LIMIT_FIVE);
|
|
566
|
+
assert.deepStrictEqual(result, [COUNT_NINE, DEFAULT_LIMIT_10]);
|
|
532
567
|
});
|
|
533
568
|
it('should return empty array when offset exceeds length', () => {
|
|
534
|
-
const result = paginateResults(items,
|
|
569
|
+
const result = paginateResults(items, COUNT_FIFTEEN, WINDOW_LIMIT_FIVE);
|
|
535
570
|
assert.deepStrictEqual(result, []);
|
|
536
571
|
});
|
|
537
572
|
it('should handle limit larger than remaining items', () => {
|
|
538
|
-
const result = paginateResults(items,
|
|
539
|
-
assert.deepStrictEqual(result, [
|
|
573
|
+
const result = paginateResults(items, COUNT_SIX + 1, WINDOW_LIMIT_TEN);
|
|
574
|
+
assert.deepStrictEqual(result, [RESULT_COUNT_EIGHT, COUNT_NINE, DEFAULT_LIMIT_10]);
|
|
540
575
|
});
|
|
541
576
|
it('should handle empty array', () => {
|
|
542
|
-
const result = paginateResults([], 0,
|
|
577
|
+
const result = paginateResults([], 0, WINDOW_LIMIT_TEN);
|
|
543
578
|
assert.deepStrictEqual(result, []);
|
|
544
579
|
});
|
|
545
580
|
it('should work with object arrays', () => {
|
|
546
|
-
const objs =
|
|
547
|
-
const result = paginateResults(objs, 1,
|
|
548
|
-
assert.deepStrictEqual(result,
|
|
581
|
+
const objs = NUMERIC_SEQUENCE_ONE_TO_THREE.map((id) => ({ id }));
|
|
582
|
+
const result = paginateResults(objs, 1, WINDOW_OFFSET_TWO);
|
|
583
|
+
assert.deepStrictEqual(result, objs.slice(1));
|
|
549
584
|
});
|
|
550
585
|
});
|
|
551
586
|
describe('hasReachedLimit', () => {
|
|
552
587
|
it('should return true when results equal offset + limit', () => {
|
|
553
|
-
const result = hasReachedLimit(
|
|
588
|
+
const result = hasReachedLimit(RESULT_COUNT_TEN, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_FIVE);
|
|
554
589
|
assert.strictEqual(result, true);
|
|
555
590
|
});
|
|
556
591
|
it('should return true when results exceed offset + limit', () => {
|
|
557
|
-
const result = hasReachedLimit(
|
|
592
|
+
const result = hasReachedLimit(COUNT_FIFTEEN, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_FIVE);
|
|
558
593
|
assert.strictEqual(result, true);
|
|
559
594
|
});
|
|
560
595
|
it('should return false when results are less than offset + limit', () => {
|
|
561
|
-
const result = hasReachedLimit(
|
|
596
|
+
const result = hasReachedLimit(RESULT_COUNT_EIGHT, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_FIVE);
|
|
562
597
|
assert.strictEqual(result, false);
|
|
563
598
|
});
|
|
564
599
|
it('should return false with zero results', () => {
|
|
565
|
-
const result = hasReachedLimit(0, 0,
|
|
600
|
+
const result = hasReachedLimit(0, 0, WINDOW_LIMIT_TEN);
|
|
566
601
|
assert.strictEqual(result, false);
|
|
567
602
|
});
|
|
568
603
|
it('should handle zero offset', () => {
|
|
569
|
-
const result = hasReachedLimit(
|
|
604
|
+
const result = hasReachedLimit(RESULT_COUNT_TEN, 0, WINDOW_LIMIT_TEN);
|
|
570
605
|
assert.strictEqual(result, true);
|
|
571
606
|
});
|
|
572
607
|
});
|
|
@@ -577,9 +612,9 @@ describe('file-utils', () => {
|
|
|
577
612
|
const result = readJsonlSyncWithStats(filePath);
|
|
578
613
|
assert.ok('data' in result);
|
|
579
614
|
assert.ok('stats' in result);
|
|
580
|
-
assert.strictEqual(result.data.length,
|
|
581
|
-
assert.strictEqual(result.stats.totalLines,
|
|
582
|
-
assert.strictEqual(result.stats.parsedLines,
|
|
615
|
+
assert.strictEqual(result.data.length, COUNT_THREE);
|
|
616
|
+
assert.strictEqual(result.stats.totalLines, COUNT_THREE);
|
|
617
|
+
assert.strictEqual(result.stats.parsedLines, COUNT_THREE);
|
|
583
618
|
assert.strictEqual(result.stats.skippedLines, 0);
|
|
584
619
|
assert.strictEqual(result.stats.emptyLines, 0);
|
|
585
620
|
});
|
|
@@ -587,24 +622,24 @@ describe('file-utils', () => {
|
|
|
587
622
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
588
623
|
fs.writeFileSync(filePath, '{"id":1}\n{invalid json}\n{"id":2}\n{also invalid}');
|
|
589
624
|
const result = readJsonlSyncWithStats(filePath);
|
|
590
|
-
assert.strictEqual(result.data.length,
|
|
591
|
-
assert.strictEqual(result.stats.parsedLines,
|
|
592
|
-
assert.strictEqual(result.stats.skippedLines,
|
|
625
|
+
assert.strictEqual(result.data.length, COUNT_TWO);
|
|
626
|
+
assert.strictEqual(result.stats.parsedLines, COUNT_TWO);
|
|
627
|
+
assert.strictEqual(result.stats.skippedLines, COUNT_TWO);
|
|
593
628
|
});
|
|
594
629
|
it('should count empty lines', () => {
|
|
595
630
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
596
631
|
// Note: trailing empty lines are removed by trim(), so only internal empty lines are counted
|
|
597
632
|
fs.writeFileSync(filePath, '{"id":1}\n\n \n{"id":2}');
|
|
598
633
|
const result = readJsonlSyncWithStats(filePath);
|
|
599
|
-
assert.strictEqual(result.data.length,
|
|
600
|
-
assert.strictEqual(result.stats.emptyLines,
|
|
634
|
+
assert.strictEqual(result.data.length, COUNT_TWO);
|
|
635
|
+
assert.strictEqual(result.stats.emptyLines, COUNT_TWO);
|
|
601
636
|
});
|
|
602
637
|
it('should respect limit parameter', () => {
|
|
603
638
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
604
639
|
fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n{"id":3}\n{"id":4}\n{"id":5}');
|
|
605
|
-
const result = readJsonlSyncWithStats(filePath,
|
|
606
|
-
assert.strictEqual(result.data.length,
|
|
607
|
-
assert.strictEqual(result.stats.parsedLines,
|
|
640
|
+
const result = readJsonlSyncWithStats(filePath, COUNT_THREE);
|
|
641
|
+
assert.strictEqual(result.data.length, COUNT_THREE);
|
|
642
|
+
assert.strictEqual(result.stats.parsedLines, COUNT_THREE);
|
|
608
643
|
});
|
|
609
644
|
it('should return empty stats for non-existent file', () => {
|
|
610
645
|
const result = readJsonlSyncWithStats(path.join(testDir, 'nonexistent.jsonl'));
|
|
@@ -616,11 +651,11 @@ describe('file-utils', () => {
|
|
|
616
651
|
const filePath = path.join(testDir, 'test.jsonl');
|
|
617
652
|
fs.writeFileSync(filePath, '{"id":1}\n\n{bad}\n{"id":2}\n \n{invalid}\n{"id":3}');
|
|
618
653
|
const result = readJsonlSyncWithStats(filePath);
|
|
619
|
-
assert.strictEqual(result.data.length,
|
|
620
|
-
assert.strictEqual(result.stats.totalLines,
|
|
621
|
-
assert.strictEqual(result.stats.parsedLines,
|
|
622
|
-
assert.strictEqual(result.stats.skippedLines,
|
|
623
|
-
assert.strictEqual(result.stats.emptyLines,
|
|
654
|
+
assert.strictEqual(result.data.length, COUNT_THREE);
|
|
655
|
+
assert.strictEqual(result.stats.totalLines, COUNT_FIVE + COUNT_TWO);
|
|
656
|
+
assert.strictEqual(result.stats.parsedLines, COUNT_THREE);
|
|
657
|
+
assert.strictEqual(result.stats.skippedLines, COUNT_TWO);
|
|
658
|
+
assert.strictEqual(result.stats.emptyLines, COUNT_TWO);
|
|
624
659
|
});
|
|
625
660
|
});
|
|
626
661
|
describe('cleanupOldFiles', () => {
|
|
@@ -636,8 +671,8 @@ describe('file-utils', () => {
|
|
|
636
671
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
|
|
637
672
|
fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl`), '{}');
|
|
638
673
|
fs.writeFileSync(path.join(testDir, `traces-${recentDate}.jsonl`), '{}');
|
|
639
|
-
const result = cleanupOldFiles(testDir,
|
|
640
|
-
assert.strictEqual(result.deleted,
|
|
674
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
675
|
+
assert.strictEqual(result.deleted, COUNT_TWO);
|
|
641
676
|
assert.deepStrictEqual(result.errors, []);
|
|
642
677
|
// Verify old files are deleted
|
|
643
678
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl`)), false);
|
|
@@ -647,17 +682,17 @@ describe('file-utils', () => {
|
|
|
647
682
|
});
|
|
648
683
|
it('should not delete files within retention period', () => {
|
|
649
684
|
const today = new Date();
|
|
650
|
-
const yesterday = new Date(today.getTime() -
|
|
685
|
+
const yesterday = new Date(today.getTime() - TIME_MS.DAY);
|
|
651
686
|
const yesterdayStr = yesterday.toISOString().split('T')[0];
|
|
652
687
|
fs.writeFileSync(path.join(testDir, `traces-${yesterdayStr}.jsonl`), '{}');
|
|
653
|
-
const result = cleanupOldFiles(testDir,
|
|
688
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
654
689
|
assert.strictEqual(result.deleted, 0);
|
|
655
690
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${yesterdayStr}.jsonl`)), true);
|
|
656
691
|
});
|
|
657
692
|
it('should skip files without parseable dates', () => {
|
|
658
693
|
fs.writeFileSync(path.join(testDir, 'some-random-file.jsonl'), '{}');
|
|
659
694
|
fs.writeFileSync(path.join(testDir, 'no-date.jsonl'), '{}');
|
|
660
|
-
const result = cleanupOldFiles(testDir,
|
|
695
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
661
696
|
assert.strictEqual(result.deleted, 0);
|
|
662
697
|
assert.strictEqual(fs.existsSync(path.join(testDir, 'some-random-file.jsonl')), true);
|
|
663
698
|
assert.strictEqual(fs.existsSync(path.join(testDir, 'no-date.jsonl')), true);
|
|
@@ -667,7 +702,7 @@ describe('file-utils', () => {
|
|
|
667
702
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
|
|
668
703
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.json`), '{}');
|
|
669
704
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.txt`), 'text');
|
|
670
|
-
const result = cleanupOldFiles(testDir,
|
|
705
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
671
706
|
assert.strictEqual(result.deleted, 1);
|
|
672
707
|
// Only .jsonl file should be deleted
|
|
673
708
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl`)), false);
|
|
@@ -677,20 +712,20 @@ describe('file-utils', () => {
|
|
|
677
712
|
it('should respect custom retention period', () => {
|
|
678
713
|
const today = new Date();
|
|
679
714
|
// Create file from 5 days ago
|
|
680
|
-
const fiveDaysAgo = new Date(today.getTime() -
|
|
715
|
+
const fiveDaysAgo = new Date(today.getTime() - COUNT_FIVE * TIME_MS.DAY);
|
|
681
716
|
const fiveDaysAgoStr = fiveDaysAgo.toISOString().split('T')[0];
|
|
682
717
|
fs.writeFileSync(path.join(testDir, `traces-${fiveDaysAgoStr}.jsonl`), '{}');
|
|
683
718
|
// With 7 day retention, file should be kept
|
|
684
|
-
let result = cleanupOldFiles(testDir,
|
|
719
|
+
let result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
685
720
|
assert.strictEqual(result.deleted, 0);
|
|
686
721
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${fiveDaysAgoStr}.jsonl`)), true);
|
|
687
722
|
// With 3 day retention, file should be deleted
|
|
688
|
-
result = cleanupOldFiles(testDir,
|
|
723
|
+
result = cleanupOldFiles(testDir, COUNT_THREE);
|
|
689
724
|
assert.strictEqual(result.deleted, 1);
|
|
690
725
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${fiveDaysAgoStr}.jsonl`)), false);
|
|
691
726
|
});
|
|
692
727
|
it('should handle empty directory', () => {
|
|
693
|
-
const result = cleanupOldFiles(testDir,
|
|
728
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
694
729
|
assert.strictEqual(result.deleted, 0);
|
|
695
730
|
assert.deepStrictEqual(result.errors, []);
|
|
696
731
|
});
|
|
@@ -698,7 +733,7 @@ describe('file-utils', () => {
|
|
|
698
733
|
const outsideDir = fs.mkdtempSync(path.join(os.tmpdir(), 'outside-'));
|
|
699
734
|
try {
|
|
700
735
|
fs.writeFileSync(path.join(outsideDir, 'traces-2020-01-01.jsonl'), '{}');
|
|
701
|
-
const result = cleanupOldFiles(outsideDir,
|
|
736
|
+
const result = cleanupOldFiles(outsideDir, RETENTION_DAYS_DEFAULT, [testDir]);
|
|
702
737
|
assert.strictEqual(result.deleted, 0);
|
|
703
738
|
assert.strictEqual(result.errors.length, 1);
|
|
704
739
|
assert(result.errors[0].includes('not within allowed paths'));
|
|
@@ -713,7 +748,7 @@ describe('file-utils', () => {
|
|
|
713
748
|
const subDir = path.join(testDir, 'subdir');
|
|
714
749
|
fs.mkdirSync(subDir);
|
|
715
750
|
fs.writeFileSync(path.join(subDir, 'traces-2020-01-01.jsonl'), '{}');
|
|
716
|
-
const result = cleanupOldFiles(subDir,
|
|
751
|
+
const result = cleanupOldFiles(subDir, RETENTION_DAYS_DEFAULT, [testDir]);
|
|
717
752
|
assert.strictEqual(result.deleted, 1);
|
|
718
753
|
assert.deepStrictEqual(result.errors, []);
|
|
719
754
|
});
|
|
@@ -722,17 +757,17 @@ describe('file-utils', () => {
|
|
|
722
757
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
|
|
723
758
|
fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl`), '{}');
|
|
724
759
|
fs.writeFileSync(path.join(testDir, `metrics-${oldDate}.jsonl`), '{}');
|
|
725
|
-
const result = cleanupOldFiles(testDir,
|
|
726
|
-
assert.strictEqual(result.deleted,
|
|
760
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
761
|
+
assert.strictEqual(result.deleted, COUNT_THREE);
|
|
727
762
|
assert.deepStrictEqual(result.errors, []);
|
|
728
763
|
});
|
|
729
764
|
it('should use default retention of 7 days', () => {
|
|
730
765
|
const today = new Date();
|
|
731
766
|
// Create file from 8 days ago
|
|
732
|
-
const eightDaysAgo = new Date(today.getTime() -
|
|
767
|
+
const eightDaysAgo = new Date(today.getTime() - RESULT_COUNT_EIGHT * TIME_MS.DAY);
|
|
733
768
|
const eightDaysAgoStr = eightDaysAgo.toISOString().split('T')[0];
|
|
734
|
-
// Create file from
|
|
735
|
-
const sixDaysAgo = new Date(today.getTime() -
|
|
769
|
+
// Create file from COUNT_SIX days ago
|
|
770
|
+
const sixDaysAgo = new Date(today.getTime() - COUNT_SIX * TIME_MS.DAY);
|
|
736
771
|
const sixDaysAgoStr = sixDaysAgo.toISOString().split('T')[0];
|
|
737
772
|
fs.writeFileSync(path.join(testDir, `traces-${eightDaysAgoStr}.jsonl`), '{}');
|
|
738
773
|
fs.writeFileSync(path.join(testDir, `traces-${sixDaysAgoStr}.jsonl`), '{}');
|
|
@@ -748,8 +783,8 @@ describe('file-utils', () => {
|
|
|
748
783
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl.gz`), gzipSync('{}'));
|
|
749
784
|
fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`), gzipSync('{}'));
|
|
750
785
|
fs.writeFileSync(path.join(testDir, `traces-${recentDate}.jsonl.gz`), gzipSync('{}'));
|
|
751
|
-
const result = cleanupOldFiles(testDir,
|
|
752
|
-
assert.strictEqual(result.deleted,
|
|
786
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
787
|
+
assert.strictEqual(result.deleted, COUNT_TWO);
|
|
753
788
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl.gz`)), false);
|
|
754
789
|
assert.strictEqual(fs.existsSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`)), false);
|
|
755
790
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${recentDate}.jsonl.gz`)), true);
|
|
@@ -758,8 +793,8 @@ describe('file-utils', () => {
|
|
|
758
793
|
const oldDate = '2020-01-01';
|
|
759
794
|
fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
|
|
760
795
|
fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`), gzipSync('{}'));
|
|
761
|
-
const result = cleanupOldFiles(testDir,
|
|
762
|
-
assert.strictEqual(result.deleted,
|
|
796
|
+
const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
|
|
797
|
+
assert.strictEqual(result.deleted, COUNT_TWO);
|
|
763
798
|
assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl`)), false);
|
|
764
799
|
assert.strictEqual(fs.existsSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`)), false);
|
|
765
800
|
});
|
|
@@ -776,19 +811,19 @@ describe('file-utils', () => {
|
|
|
776
811
|
writer.close();
|
|
777
812
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
778
813
|
const lines = content.trim().split('\n');
|
|
779
|
-
assert.strictEqual(lines.length,
|
|
814
|
+
assert.strictEqual(lines.length, COUNT_THREE);
|
|
780
815
|
});
|
|
781
816
|
it('should flush remaining records on close', () => {
|
|
782
817
|
const filePath = path.join(testDir, 'batch.jsonl');
|
|
783
|
-
const writer = new BatchWriter(filePath, { batchSize:
|
|
818
|
+
const writer = new BatchWriter(filePath, { batchSize: DEFAULT_LIMIT_10 });
|
|
784
819
|
writer.write({ id: 1 });
|
|
785
820
|
writer.write({ id: 2 });
|
|
786
821
|
const stats = writer.close();
|
|
787
|
-
assert.strictEqual(stats.recordsWritten,
|
|
822
|
+
assert.strictEqual(stats.recordsWritten, COUNT_TWO);
|
|
788
823
|
assert.strictEqual(fs.existsSync(filePath), true);
|
|
789
824
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
790
825
|
const lines = content.trim().split('\n');
|
|
791
|
-
assert.strictEqual(lines.length,
|
|
826
|
+
assert.strictEqual(lines.length, COUNT_TWO);
|
|
792
827
|
});
|
|
793
828
|
it('should append to file on multiple flushes', () => {
|
|
794
829
|
const filePath = path.join(testDir, 'batch.jsonl');
|
|
@@ -801,14 +836,14 @@ describe('file-utils', () => {
|
|
|
801
836
|
writer.close(); // Flush 3
|
|
802
837
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
803
838
|
const lines = content.trim().split('\n');
|
|
804
|
-
assert.strictEqual(lines.length,
|
|
839
|
+
assert.strictEqual(lines.length, COUNT_FIVE);
|
|
805
840
|
// Verify content
|
|
806
841
|
assert.deepStrictEqual(JSON.parse(lines[0]), { id: 1 });
|
|
807
842
|
assert.deepStrictEqual(JSON.parse(lines[4]), { id: 5 });
|
|
808
843
|
});
|
|
809
844
|
it('should write gzip compressed output', () => {
|
|
810
845
|
const filePath = path.join(testDir, 'batch.jsonl.gz');
|
|
811
|
-
const writer = new BatchWriter(filePath, { batchSize:
|
|
846
|
+
const writer = new BatchWriter(filePath, { batchSize: DEFAULT_LIMIT_10, gzip: true });
|
|
812
847
|
writer.write({ id: 1 });
|
|
813
848
|
writer.write({ id: 2 });
|
|
814
849
|
writer.close();
|
|
@@ -816,7 +851,7 @@ describe('file-utils', () => {
|
|
|
816
851
|
const compressed = fs.readFileSync(filePath);
|
|
817
852
|
const decompressed = gunzipSync(compressed).toString('utf-8');
|
|
818
853
|
const lines = decompressed.trim().split('\n');
|
|
819
|
-
assert.strictEqual(lines.length,
|
|
854
|
+
assert.strictEqual(lines.length, COUNT_TWO);
|
|
820
855
|
});
|
|
821
856
|
it('should handle gzip append correctly', () => {
|
|
822
857
|
const filePath = path.join(testDir, 'batch.jsonl.gz');
|
|
@@ -828,7 +863,7 @@ describe('file-utils', () => {
|
|
|
828
863
|
const compressed = fs.readFileSync(filePath);
|
|
829
864
|
const decompressed = gunzipSync(compressed).toString('utf-8');
|
|
830
865
|
const lines = decompressed.trim().split('\n');
|
|
831
|
-
assert.strictEqual(lines.length,
|
|
866
|
+
assert.strictEqual(lines.length, COUNT_THREE);
|
|
832
867
|
});
|
|
833
868
|
it('should create parent directories if mkdirp is true', () => {
|
|
834
869
|
const filePath = path.join(testDir, 'nested', 'dir', 'batch.jsonl');
|
|
@@ -840,13 +875,14 @@ describe('file-utils', () => {
|
|
|
840
875
|
it('should use default batch size of 100', () => {
|
|
841
876
|
const filePath = path.join(testDir, 'batch.jsonl');
|
|
842
877
|
const writer = new BatchWriter(filePath);
|
|
878
|
+
const preFlushCount = SAMPLE_SIZE_100 - 1;
|
|
843
879
|
// Write 99 records - should not flush
|
|
844
|
-
for (let i = 0; i <
|
|
880
|
+
for (let i = 0; i < preFlushCount; i++) {
|
|
845
881
|
writer.write({ id: i });
|
|
846
882
|
}
|
|
847
883
|
assert.strictEqual(fs.existsSync(filePath), false);
|
|
848
884
|
// 100th record triggers flush
|
|
849
|
-
writer.write({ id:
|
|
885
|
+
writer.write({ id: preFlushCount });
|
|
850
886
|
assert.strictEqual(fs.existsSync(filePath), true);
|
|
851
887
|
writer.close();
|
|
852
888
|
});
|
|
@@ -857,8 +893,8 @@ describe('file-utils', () => {
|
|
|
857
893
|
writer.write({ id: 2 }); // Flush 1
|
|
858
894
|
writer.write({ id: 3 });
|
|
859
895
|
const stats = writer.close(); // Flush 2
|
|
860
|
-
assert.strictEqual(stats.recordsWritten,
|
|
861
|
-
assert.strictEqual(stats.flushCount,
|
|
896
|
+
assert.strictEqual(stats.recordsWritten, COUNT_THREE);
|
|
897
|
+
assert.strictEqual(stats.flushCount, COUNT_TWO);
|
|
862
898
|
assert.ok(stats.bytesWritten > 0);
|
|
863
899
|
});
|
|
864
900
|
it('should report buffered count correctly', () => {
|
|
@@ -868,18 +904,18 @@ describe('file-utils', () => {
|
|
|
868
904
|
writer.write({ id: 1 });
|
|
869
905
|
assert.strictEqual(writer.bufferedCount, 1);
|
|
870
906
|
writer.write({ id: 2 });
|
|
871
|
-
assert.strictEqual(writer.bufferedCount,
|
|
907
|
+
assert.strictEqual(writer.bufferedCount, COUNT_TWO);
|
|
872
908
|
writer.close();
|
|
873
909
|
assert.strictEqual(writer.bufferedCount, 0);
|
|
874
910
|
});
|
|
875
911
|
it('should handle writeAll for multiple records', () => {
|
|
876
912
|
const filePath = path.join(testDir, 'batch.jsonl');
|
|
877
|
-
const writer = new BatchWriter(filePath, { batchSize:
|
|
913
|
+
const writer = new BatchWriter(filePath, { batchSize: DEFAULT_LIMIT_10 });
|
|
878
914
|
writer.writeAll([{ id: 1 }, { id: 2 }, { id: 3 }]);
|
|
879
915
|
writer.close();
|
|
880
916
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
881
917
|
const lines = content.trim().split('\n');
|
|
882
|
-
assert.strictEqual(lines.length,
|
|
918
|
+
assert.strictEqual(lines.length, COUNT_THREE);
|
|
883
919
|
});
|
|
884
920
|
it('should handle empty close gracefully', () => {
|
|
885
921
|
const filePath = path.join(testDir, 'batch.jsonl');
|
|
@@ -893,70 +929,61 @@ describe('file-utils', () => {
|
|
|
893
929
|
describe('StreamingAggregator', () => {
|
|
894
930
|
it('should compute count correctly', () => {
|
|
895
931
|
const aggregator = new StreamingAggregator();
|
|
896
|
-
aggregator.
|
|
897
|
-
aggregator.
|
|
898
|
-
aggregator.
|
|
899
|
-
assert.strictEqual(aggregator.getResult('count'), 3);
|
|
900
|
-
assert.strictEqual(aggregator.getCount(), 3);
|
|
932
|
+
aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_THREE);
|
|
933
|
+
assert.strictEqual(aggregator.getResult('count'), COUNT_THREE);
|
|
934
|
+
assert.strictEqual(aggregator.getCount(), COUNT_THREE);
|
|
901
935
|
});
|
|
902
936
|
it('should compute sum correctly', () => {
|
|
903
937
|
const aggregator = new StreamingAggregator();
|
|
904
|
-
aggregator.
|
|
905
|
-
aggregator.
|
|
906
|
-
aggregator.add(30);
|
|
907
|
-
assert.strictEqual(aggregator.getResult('sum'), 60);
|
|
938
|
+
aggregator.addAll(NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY);
|
|
939
|
+
assert.strictEqual(aggregator.getResult('sum'), NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY.reduce((sum, value) => sum + value, 0));
|
|
908
940
|
});
|
|
909
941
|
it('should compute avg correctly', () => {
|
|
910
942
|
const aggregator = new StreamingAggregator();
|
|
911
|
-
aggregator.
|
|
912
|
-
aggregator.
|
|
913
|
-
|
|
914
|
-
assert.strictEqual(aggregator.getResult('avg'), 20);
|
|
943
|
+
aggregator.addAll(NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY);
|
|
944
|
+
assert.strictEqual(aggregator.getResult('avg'), NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY.reduce((sum, value) => sum + value, 0)
|
|
945
|
+
/ COUNT_THREE);
|
|
915
946
|
});
|
|
916
947
|
it('should compute min correctly', () => {
|
|
917
948
|
const aggregator = new StreamingAggregator();
|
|
918
|
-
aggregator.
|
|
919
|
-
aggregator.
|
|
920
|
-
aggregator.add(8);
|
|
921
|
-
assert.strictEqual(aggregator.getResult('min'), 2);
|
|
949
|
+
aggregator.addAll(NUMERIC_SEQUENCE_FIVE_TWO_EIGHT);
|
|
950
|
+
assert.strictEqual(aggregator.getResult('min'), COUNT_TWO);
|
|
922
951
|
});
|
|
923
952
|
it('should compute max correctly', () => {
|
|
924
953
|
const aggregator = new StreamingAggregator();
|
|
925
|
-
aggregator.
|
|
926
|
-
aggregator.
|
|
927
|
-
aggregator.add(8);
|
|
928
|
-
assert.strictEqual(aggregator.getResult('max'), 8);
|
|
954
|
+
aggregator.addAll(NUMERIC_SEQUENCE_FIVE_TWO_EIGHT);
|
|
955
|
+
assert.strictEqual(aggregator.getResult('max'), RESULT_COUNT_EIGHT);
|
|
929
956
|
});
|
|
930
957
|
it('should compute p50 (median) correctly', () => {
|
|
931
958
|
const aggregator = new StreamingAggregator();
|
|
932
959
|
// Add values 1-100 for predictable p50
|
|
933
|
-
for (let i = 1; i <=
|
|
960
|
+
for (let i = 1; i <= PERCENTILE_TEST_SAMPLE_SIZE; i++) {
|
|
934
961
|
aggregator.add(i);
|
|
935
962
|
}
|
|
936
963
|
const p50 = aggregator.getResult('p50');
|
|
937
964
|
assert.ok(p50 !== undefined);
|
|
938
965
|
// p50 should be close to 50.5 for 1-100
|
|
939
|
-
assert.ok(Math.abs(p50 -
|
|
966
|
+
assert.ok(Math.abs(p50 - PERCENTILE_P50_EXPECTED) < 1);
|
|
940
967
|
});
|
|
941
968
|
it('should compute p95 correctly', () => {
|
|
942
969
|
const aggregator = new StreamingAggregator();
|
|
943
|
-
for (let i = 1; i <=
|
|
970
|
+
for (let i = 1; i <= PERCENTILE_TEST_SAMPLE_SIZE; i++) {
|
|
944
971
|
aggregator.add(i);
|
|
945
972
|
}
|
|
946
973
|
const p95 = aggregator.getResult('p95');
|
|
947
974
|
assert.ok(p95 !== undefined);
|
|
948
975
|
// p95 should be close to 95.05 for 1-100
|
|
949
|
-
assert.ok(Math.abs(p95 -
|
|
976
|
+
assert.ok(Math.abs(p95 - PERCENTILE_P95_EXPECTED) < 1);
|
|
950
977
|
});
|
|
951
978
|
it('should compute p99 correctly', () => {
|
|
952
979
|
const aggregator = new StreamingAggregator();
|
|
953
|
-
for (let i = 1; i <=
|
|
980
|
+
for (let i = 1; i <= PERCENTILE_TEST_SAMPLE_SIZE; i++) {
|
|
954
981
|
aggregator.add(i);
|
|
955
982
|
}
|
|
956
983
|
const p99 = aggregator.getResult('p99');
|
|
957
984
|
assert.ok(p99 !== undefined);
|
|
958
985
|
// p99 should be close to 99.01 for 1-100
|
|
959
|
-
assert.ok(Math.abs(p99 -
|
|
986
|
+
assert.ok(Math.abs(p99 - PERCENTILE_P99_EXPECTED) < 1);
|
|
960
987
|
});
|
|
961
988
|
it('should return undefined for aggregations on empty aggregator', () => {
|
|
962
989
|
const aggregator = new StreamingAggregator();
|
|
@@ -969,47 +996,46 @@ describe('file-utils', () => {
|
|
|
969
996
|
});
|
|
970
997
|
it('should handle single value', () => {
|
|
971
998
|
const aggregator = new StreamingAggregator();
|
|
972
|
-
aggregator.add(
|
|
999
|
+
aggregator.add(VALUE_FORTY_TWO);
|
|
973
1000
|
assert.strictEqual(aggregator.getResult('count'), 1);
|
|
974
|
-
assert.strictEqual(aggregator.getResult('sum'),
|
|
975
|
-
assert.strictEqual(aggregator.getResult('avg'),
|
|
976
|
-
assert.strictEqual(aggregator.getResult('min'),
|
|
977
|
-
assert.strictEqual(aggregator.getResult('max'),
|
|
978
|
-
|
|
1001
|
+
assert.strictEqual(aggregator.getResult('sum'), VALUE_FORTY_TWO);
|
|
1002
|
+
assert.strictEqual(aggregator.getResult('avg'), VALUE_FORTY_TWO);
|
|
1003
|
+
assert.strictEqual(aggregator.getResult('min'), VALUE_FORTY_TWO);
|
|
1004
|
+
assert.strictEqual(aggregator.getResult('max'), VALUE_FORTY_TWO);
|
|
1005
|
+
// DDSketch uses relative error; approximate match for percentiles
|
|
1006
|
+
const p50Raw = aggregator.getResult('p50');
|
|
1007
|
+
assert(p50Raw !== undefined, 'p50 result should be defined');
|
|
1008
|
+
assert.ok(Math.abs(p50Raw - VALUE_FORTY_TWO) < VALUE_FORTY_TWO * 0.05, `p50 ${p50Raw} should approximate ${VALUE_FORTY_TWO}`);
|
|
979
1009
|
});
|
|
980
1010
|
it('should handle negative values', () => {
|
|
981
1011
|
const aggregator = new StreamingAggregator();
|
|
982
|
-
aggregator.
|
|
983
|
-
aggregator.add(-5);
|
|
984
|
-
aggregator.add(0);
|
|
985
|
-
aggregator.add(5);
|
|
986
|
-
aggregator.add(10);
|
|
1012
|
+
aggregator.addAll(NUMERIC_SEQUENCE_NEGATIVE_TEN_TO_TEN);
|
|
987
1013
|
assert.strictEqual(aggregator.getResult('sum'), 0);
|
|
988
|
-
assert.strictEqual(aggregator.getResult('min'), -
|
|
989
|
-
assert.strictEqual(aggregator.getResult('max'),
|
|
1014
|
+
assert.strictEqual(aggregator.getResult('min'), -RESULT_COUNT_TEN);
|
|
1015
|
+
assert.strictEqual(aggregator.getResult('max'), RESULT_COUNT_TEN);
|
|
990
1016
|
assert.strictEqual(aggregator.getResult('avg'), 0);
|
|
991
1017
|
});
|
|
992
1018
|
it('should skip non-finite values', () => {
|
|
993
1019
|
const aggregator = new StreamingAggregator();
|
|
994
|
-
aggregator.add(
|
|
1020
|
+
aggregator.add(RESULT_COUNT_TEN);
|
|
995
1021
|
aggregator.add(Infinity);
|
|
996
1022
|
aggregator.add(-Infinity);
|
|
997
1023
|
aggregator.add(NaN);
|
|
998
|
-
aggregator.add(
|
|
999
|
-
assert.strictEqual(aggregator.getResult('count'),
|
|
1000
|
-
assert.strictEqual(aggregator.getResult('sum'),
|
|
1001
|
-
assert.strictEqual(aggregator.getResult('avg'),
|
|
1024
|
+
aggregator.add(RESULT_COUNT_TEN * COUNT_TWO);
|
|
1025
|
+
assert.strictEqual(aggregator.getResult('count'), COUNT_TWO);
|
|
1026
|
+
assert.strictEqual(aggregator.getResult('sum'), RESULT_COUNT_TEN * COUNT_THREE);
|
|
1027
|
+
assert.strictEqual(aggregator.getResult('avg'), COUNT_FIFTEEN);
|
|
1002
1028
|
});
|
|
1003
1029
|
it('should support addAll for multiple values', () => {
|
|
1004
1030
|
const aggregator = new StreamingAggregator();
|
|
1005
|
-
aggregator.addAll(
|
|
1006
|
-
assert.strictEqual(aggregator.getResult('count'),
|
|
1007
|
-
assert.strictEqual(aggregator.getResult('sum'),
|
|
1008
|
-
assert.strictEqual(aggregator.getResult('avg'),
|
|
1031
|
+
aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_FIVE);
|
|
1032
|
+
assert.strictEqual(aggregator.getResult('count'), COUNT_FIVE);
|
|
1033
|
+
assert.strictEqual(aggregator.getResult('sum'), COUNT_FIFTEEN);
|
|
1034
|
+
assert.strictEqual(aggregator.getResult('avg'), COUNT_THREE);
|
|
1009
1035
|
});
|
|
1010
1036
|
it('should reset correctly', () => {
|
|
1011
1037
|
const aggregator = new StreamingAggregator();
|
|
1012
|
-
aggregator.addAll(
|
|
1038
|
+
aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_FIVE);
|
|
1013
1039
|
aggregator.reset();
|
|
1014
1040
|
assert.strictEqual(aggregator.getResult('count'), 0);
|
|
1015
1041
|
assert.strictEqual(aggregator.getResult('sum'), undefined);
|
|
@@ -1017,83 +1043,83 @@ describe('file-utils', () => {
|
|
|
1017
1043
|
});
|
|
1018
1044
|
it('should return all stats via getStats()', () => {
|
|
1019
1045
|
const aggregator = new StreamingAggregator();
|
|
1020
|
-
aggregator.addAll(
|
|
1046
|
+
aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_FIVE);
|
|
1021
1047
|
const stats = aggregator.getStats();
|
|
1022
|
-
assert.strictEqual(stats.count,
|
|
1023
|
-
assert.strictEqual(stats.sum,
|
|
1024
|
-
assert.strictEqual(stats.avg,
|
|
1048
|
+
assert.strictEqual(stats.count, COUNT_FIVE);
|
|
1049
|
+
assert.strictEqual(stats.sum, COUNT_FIFTEEN);
|
|
1050
|
+
assert.strictEqual(stats.avg, COUNT_THREE);
|
|
1025
1051
|
assert.strictEqual(stats.min, 1);
|
|
1026
|
-
assert.strictEqual(stats.max,
|
|
1052
|
+
assert.strictEqual(stats.max, COUNT_FIVE);
|
|
1027
1053
|
assert.ok(stats.p50 !== undefined);
|
|
1028
1054
|
});
|
|
1029
1055
|
it('should handle large datasets with reservoir sampling', () => {
|
|
1030
1056
|
const aggregator = new StreamingAggregator();
|
|
1031
1057
|
// Add 50000 values - larger than reservoir size
|
|
1032
|
-
for (let i = 1; i <=
|
|
1058
|
+
for (let i = 1; i <= LARGE_RESERVOIR_DATASET_SIZE; i++) {
|
|
1033
1059
|
aggregator.add(i);
|
|
1034
1060
|
}
|
|
1035
|
-
assert.strictEqual(aggregator.getResult('count'),
|
|
1036
|
-
assert.strictEqual(aggregator.getResult('sum'), (
|
|
1061
|
+
assert.strictEqual(aggregator.getResult('count'), LARGE_RESERVOIR_DATASET_SIZE);
|
|
1062
|
+
assert.strictEqual(aggregator.getResult('sum'), (LARGE_RESERVOIR_DATASET_SIZE * LARGE_RESERVOIR_SUM_UPPER_TERM) / COUNT_TWO);
|
|
1037
1063
|
assert.strictEqual(aggregator.getResult('min'), 1);
|
|
1038
|
-
assert.strictEqual(aggregator.getResult('max'),
|
|
1064
|
+
assert.strictEqual(aggregator.getResult('max'), LARGE_RESERVOIR_DATASET_SIZE);
|
|
1039
1065
|
// Percentiles should be approximately correct (within 10% error due to sampling)
|
|
1040
1066
|
const p50 = aggregator.getResult('p50');
|
|
1041
1067
|
assert.ok(p50 !== undefined);
|
|
1042
|
-
assert.ok(Math.abs(p50 -
|
|
1068
|
+
assert.ok(Math.abs(p50 - LARGE_RESERVOIR_P50_EXPECTED) / LARGE_RESERVOIR_P50_EXPECTED < RELATIVE_ERROR_TEN_PERCENT);
|
|
1043
1069
|
const p95 = aggregator.getResult('p95');
|
|
1044
1070
|
assert.ok(p95 !== undefined);
|
|
1045
|
-
assert.ok(Math.abs(p95 -
|
|
1071
|
+
assert.ok(Math.abs(p95 - LARGE_RESERVOIR_P95_EXPECTED) / LARGE_RESERVOIR_P95_EXPECTED < RELATIVE_ERROR_TEN_PERCENT);
|
|
1046
1072
|
});
|
|
1047
1073
|
it('should handle decimal values', () => {
|
|
1048
1074
|
const aggregator = new StreamingAggregator();
|
|
1049
|
-
aggregator.add(
|
|
1050
|
-
aggregator.add(
|
|
1051
|
-
aggregator.add(
|
|
1075
|
+
aggregator.add(RELATIVE_ERROR_TEN_PERCENT);
|
|
1076
|
+
aggregator.add(COUNT_TWO / DEFAULT_LIMIT_10);
|
|
1077
|
+
aggregator.add(COUNT_THREE / DEFAULT_LIMIT_10);
|
|
1052
1078
|
const sum = aggregator.getResult('sum');
|
|
1053
1079
|
assert.ok(sum !== undefined);
|
|
1054
|
-
assert.ok(Math.abs(sum -
|
|
1080
|
+
assert.ok(Math.abs(sum - (COUNT_SIX / DEFAULT_LIMIT_10)) < FLOAT_TOLERANCE);
|
|
1055
1081
|
});
|
|
1056
1082
|
});
|
|
1057
1083
|
describe('enforceMemoryLimit', () => {
|
|
1058
1084
|
it('should return results unchanged when under limit', () => {
|
|
1059
|
-
const items =
|
|
1060
|
-
const result = enforceMemoryLimit(items,
|
|
1085
|
+
const items = NUMERIC_SEQUENCE_ONE_TO_FIVE;
|
|
1086
|
+
const result = enforceMemoryLimit(items, WINDOW_LIMIT_TEN);
|
|
1061
1087
|
assert.deepStrictEqual(result.results, items);
|
|
1062
1088
|
assert.strictEqual(result.truncated, false);
|
|
1063
|
-
assert.strictEqual(result.originalCount,
|
|
1089
|
+
assert.strictEqual(result.originalCount, COUNT_FIVE);
|
|
1064
1090
|
});
|
|
1065
1091
|
it('should truncate results when over limit', () => {
|
|
1066
|
-
const items =
|
|
1067
|
-
const result = enforceMemoryLimit(items,
|
|
1068
|
-
assert.deepStrictEqual(result.results,
|
|
1092
|
+
const items = NUMERIC_SEQUENCE_ONE_TO_TEN;
|
|
1093
|
+
const result = enforceMemoryLimit(items, WINDOW_LIMIT_FIVE);
|
|
1094
|
+
assert.deepStrictEqual(result.results, NUMERIC_SEQUENCE_ONE_TO_FIVE);
|
|
1069
1095
|
assert.strictEqual(result.truncated, true);
|
|
1070
|
-
assert.strictEqual(result.originalCount,
|
|
1096
|
+
assert.strictEqual(result.originalCount, RESULT_COUNT_TEN);
|
|
1071
1097
|
});
|
|
1072
1098
|
it('should return exactly at limit without truncation', () => {
|
|
1073
|
-
const items =
|
|
1074
|
-
const result = enforceMemoryLimit(items,
|
|
1099
|
+
const items = NUMERIC_SEQUENCE_ONE_TO_FIVE;
|
|
1100
|
+
const result = enforceMemoryLimit(items, WINDOW_LIMIT_FIVE);
|
|
1075
1101
|
assert.deepStrictEqual(result.results, items);
|
|
1076
1102
|
assert.strictEqual(result.truncated, false);
|
|
1077
|
-
assert.strictEqual(result.originalCount,
|
|
1103
|
+
assert.strictEqual(result.originalCount, COUNT_FIVE);
|
|
1078
1104
|
});
|
|
1079
1105
|
it('should handle empty array', () => {
|
|
1080
|
-
const result = enforceMemoryLimit([],
|
|
1106
|
+
const result = enforceMemoryLimit([], WINDOW_LIMIT_TEN);
|
|
1081
1107
|
assert.deepStrictEqual(result.results, []);
|
|
1082
1108
|
assert.strictEqual(result.truncated, false);
|
|
1083
1109
|
assert.strictEqual(result.originalCount, 0);
|
|
1084
1110
|
});
|
|
1085
1111
|
it('should work with object arrays', () => {
|
|
1086
|
-
const items =
|
|
1087
|
-
const result = enforceMemoryLimit(items,
|
|
1088
|
-
assert.deepStrictEqual(result.results,
|
|
1112
|
+
const items = NUMERIC_SEQUENCE_ONE_TO_THREE.map((id) => ({ id }));
|
|
1113
|
+
const result = enforceMemoryLimit(items, WINDOW_OFFSET_TWO);
|
|
1114
|
+
assert.deepStrictEqual(result.results, items.slice(0, WINDOW_OFFSET_TWO));
|
|
1089
1115
|
assert.strictEqual(result.truncated, true);
|
|
1090
1116
|
});
|
|
1091
1117
|
it('should use default limit when not specified', () => {
|
|
1092
|
-
const items = Array.from({ length:
|
|
1118
|
+
const items = Array.from({ length: SAMPLE_SIZE_100 }, (_, i) => i);
|
|
1093
1119
|
const result = enforceMemoryLimit(items);
|
|
1094
1120
|
// Default is 10000, so 100 items should not be truncated
|
|
1095
1121
|
assert.strictEqual(result.truncated, false);
|
|
1096
|
-
assert.strictEqual(result.results.length,
|
|
1122
|
+
assert.strictEqual(result.results.length, SAMPLE_SIZE_100);
|
|
1097
1123
|
});
|
|
1098
1124
|
it('should log warning when truncating (verify via side effect)', () => {
|
|
1099
1125
|
// Store original console.warn
|
|
@@ -1105,10 +1131,10 @@ describe('file-utils', () => {
|
|
|
1105
1131
|
warnMessage = msg;
|
|
1106
1132
|
};
|
|
1107
1133
|
try {
|
|
1108
|
-
const items = [1,
|
|
1109
|
-
enforceMemoryLimit(items,
|
|
1134
|
+
const items = [1, COUNT_TWO, COUNT_THREE, COUNT_FOUR, COUNT_FIVE];
|
|
1135
|
+
enforceMemoryLimit(items, COUNT_THREE);
|
|
1110
1136
|
assert.strictEqual(warnCalled, true);
|
|
1111
|
-
assert.ok(warnMessage.includes('
|
|
1137
|
+
assert.ok(warnMessage.includes('"memory"') || warnMessage.includes('memory'), 'Warning should reference memory component');
|
|
1112
1138
|
assert.ok(warnMessage.includes('5'));
|
|
1113
1139
|
assert.ok(warnMessage.includes('3'));
|
|
1114
1140
|
}
|
|
@@ -1119,21 +1145,21 @@ describe('file-utils', () => {
|
|
|
1119
1145
|
});
|
|
1120
1146
|
describe('shouldUseStreamingAggregation', () => {
|
|
1121
1147
|
it('should return false when count is below threshold', () => {
|
|
1122
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1123
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1124
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1148
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_CUSTOM_THRESHOLD, STREAMING_THRESHOLD), false);
|
|
1149
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_THRESHOLD - 1, STREAMING_THRESHOLD), false);
|
|
1150
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_THRESHOLD, STREAMING_THRESHOLD), false);
|
|
1125
1151
|
});
|
|
1126
1152
|
it('should return true when count exceeds threshold', () => {
|
|
1127
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1128
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1153
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_THRESHOLD + 1, STREAMING_THRESHOLD), true);
|
|
1154
|
+
assert.strictEqual(shouldUseStreamingAggregation(MAX_RESULTS_IN_MEMORY, STREAMING_THRESHOLD), true);
|
|
1129
1155
|
});
|
|
1130
1156
|
it('should use default threshold when not specified', () => {
|
|
1131
|
-
// Default is
|
|
1132
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1157
|
+
// Default is STREAMING_THRESHOLD
|
|
1158
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_DEFAULT_THRESHOLD), false);
|
|
1133
1159
|
});
|
|
1134
1160
|
it('should work with custom threshold', () => {
|
|
1135
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1136
|
-
assert.strictEqual(shouldUseStreamingAggregation(
|
|
1161
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_CUSTOM_HIGH, STREAMING_COUNT_CUSTOM_THRESHOLD), true);
|
|
1162
|
+
assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_CUSTOM_LOW, STREAMING_COUNT_CUSTOM_THRESHOLD), false);
|
|
1137
1163
|
});
|
|
1138
1164
|
});
|
|
1139
1165
|
describe('getMemoryLimits', () => {
|
|
@@ -1151,7 +1177,7 @@ describe('file-utils', () => {
|
|
|
1151
1177
|
it('should return false for primitive values', () => {
|
|
1152
1178
|
assert.strictEqual(hasCircularReference(null), false);
|
|
1153
1179
|
assert.strictEqual(hasCircularReference(undefined), false);
|
|
1154
|
-
assert.strictEqual(hasCircularReference(
|
|
1180
|
+
assert.strictEqual(hasCircularReference(VALUE_FORTY_TWO), false);
|
|
1155
1181
|
assert.strictEqual(hasCircularReference('string'), false);
|
|
1156
1182
|
assert.strictEqual(hasCircularReference(true), false);
|
|
1157
1183
|
});
|
|
@@ -1160,7 +1186,7 @@ describe('file-utils', () => {
|
|
|
1160
1186
|
assert.strictEqual(hasCircularReference({ nested: { deep: { value: 1 } } }), false);
|
|
1161
1187
|
});
|
|
1162
1188
|
it('should return false for simple arrays', () => {
|
|
1163
|
-
assert.strictEqual(hasCircularReference([1,
|
|
1189
|
+
assert.strictEqual(hasCircularReference([1, COUNT_TWO, COUNT_THREE]), false);
|
|
1164
1190
|
assert.strictEqual(hasCircularReference([{ id: 1 }, { id: 2 }]), false);
|
|
1165
1191
|
});
|
|
1166
1192
|
it('should detect self-referencing object', () => {
|
|
@@ -1169,7 +1195,7 @@ describe('file-utils', () => {
|
|
|
1169
1195
|
assert.strictEqual(hasCircularReference(obj), true);
|
|
1170
1196
|
});
|
|
1171
1197
|
it('should detect self-referencing array', () => {
|
|
1172
|
-
const arr = [1,
|
|
1198
|
+
const arr = [1, COUNT_TWO, COUNT_THREE];
|
|
1173
1199
|
arr.push(arr);
|
|
1174
1200
|
assert.strictEqual(hasCircularReference(arr), true);
|
|
1175
1201
|
});
|
|
@@ -1209,7 +1235,7 @@ describe('file-utils', () => {
|
|
|
1209
1235
|
const circularObj = { id: 1 };
|
|
1210
1236
|
circularObj.self = circularObj;
|
|
1211
1237
|
const items = [];
|
|
1212
|
-
for (let i = 0; i <
|
|
1238
|
+
for (let i = 0; i < LARGE_ARRAY_SAMPLE_SIZE; i++) {
|
|
1213
1239
|
items.push(circularObj);
|
|
1214
1240
|
}
|
|
1215
1241
|
const result = estimateByteSize(items);
|
|
@@ -1221,11 +1247,11 @@ describe('file-utils', () => {
|
|
|
1221
1247
|
circularObj.self = circularObj;
|
|
1222
1248
|
const items = [];
|
|
1223
1249
|
// Add 150 normal items (75% of 200)
|
|
1224
|
-
for (let i = 0; i <
|
|
1250
|
+
for (let i = 0; i < MIXED_ARRAY_NORMAL_ITEMS; i++) {
|
|
1225
1251
|
items.push({ id: i, data: 'normal' });
|
|
1226
1252
|
}
|
|
1227
1253
|
// Add 50 circular items (25% of 200)
|
|
1228
|
-
for (let i = 0; i <
|
|
1254
|
+
for (let i = 0; i < MIXED_ARRAY_CIRCULAR_ITEMS; i++) {
|
|
1229
1255
|
items.push(circularObj);
|
|
1230
1256
|
}
|
|
1231
1257
|
// Since less than 50% failed, should extrapolate from successful samples
|
|
@@ -1240,11 +1266,11 @@ describe('file-utils', () => {
|
|
|
1240
1266
|
circularObj.self = circularObj;
|
|
1241
1267
|
const items = [];
|
|
1242
1268
|
// Add 40 normal items (20% of 200)
|
|
1243
|
-
for (let i = 0; i <
|
|
1269
|
+
for (let i = 0; i < MOSTLY_CIRCULAR_NORMAL_ITEMS; i++) {
|
|
1244
1270
|
items.push({ id: i });
|
|
1245
1271
|
}
|
|
1246
1272
|
// Add 160 circular items (80% of 200)
|
|
1247
|
-
for (let i = 0; i <
|
|
1273
|
+
for (let i = 0; i < MOSTLY_CIRCULAR_ITEMS; i++) {
|
|
1248
1274
|
items.push(circularObj);
|
|
1249
1275
|
}
|
|
1250
1276
|
const result = estimateByteSize(items);
|
|
@@ -1253,13 +1279,13 @@ describe('file-utils', () => {
|
|
|
1253
1279
|
});
|
|
1254
1280
|
it('should extrapolate size for large non-circular arrays', () => {
|
|
1255
1281
|
// Create array larger than sample size
|
|
1256
|
-
const items = Array.from({ length:
|
|
1282
|
+
const items = Array.from({ length: LARGE_ARRAY_SAMPLE_SIZE }, (_, i) => ({ id: i, name: `item-${i}` }));
|
|
1257
1283
|
const result = estimateByteSize(items);
|
|
1258
1284
|
// Result should be positive and reasonable
|
|
1259
1285
|
assert.ok(result > 0);
|
|
1260
1286
|
// Rough estimate: each item is ~25 bytes, so 200 items ~5000 bytes
|
|
1261
|
-
assert.ok(result >
|
|
1262
|
-
assert.ok(result <
|
|
1287
|
+
assert.ok(result > ESTIMATED_SIZE_MIN_BYTES);
|
|
1288
|
+
assert.ok(result < ESTIMATED_SIZE_MAX_BYTES);
|
|
1263
1289
|
});
|
|
1264
1290
|
});
|
|
1265
1291
|
describe('enforceMemoryLimit with circular references', () => {
|
|
@@ -1271,7 +1297,7 @@ describe('file-utils', () => {
|
|
|
1271
1297
|
// which exceeds the 50MB limit would not trigger, but the detection
|
|
1272
1298
|
// prevents bypass (the conservative estimate ensures the check works)
|
|
1273
1299
|
const items = [obj];
|
|
1274
|
-
const result = enforceMemoryLimit(items,
|
|
1300
|
+
const result = enforceMemoryLimit(items, MAX_RESULTS_IN_MEMORY);
|
|
1275
1301
|
// Since a single item with circular ref returns 1MB estimate,
|
|
1276
1302
|
// and 1MB < 50MB limit, it won't truncate
|
|
1277
1303
|
// But the important thing is it doesn't crash and returns valid result
|
|
@@ -1284,19 +1310,19 @@ describe('file-utils', () => {
|
|
|
1284
1310
|
obj1.ref = obj2;
|
|
1285
1311
|
obj2.ref = obj1;
|
|
1286
1312
|
const items = [obj1, obj2, { normal: 'object' }];
|
|
1287
|
-
const result = enforceMemoryLimit(items,
|
|
1313
|
+
const result = enforceMemoryLimit(items, MAX_RESULTS_IN_MEMORY);
|
|
1288
1314
|
assert.ok(Array.isArray(result.results));
|
|
1289
|
-
assert.strictEqual(result.originalCount,
|
|
1315
|
+
assert.strictEqual(result.originalCount, COUNT_THREE);
|
|
1290
1316
|
});
|
|
1291
1317
|
it('should not crash when JSON.stringify would throw', () => {
|
|
1292
1318
|
// Create an object that would cause JSON.stringify to throw
|
|
1293
1319
|
const obj = {};
|
|
1294
1320
|
obj.circular = obj;
|
|
1295
1321
|
const items = Array.from({ length: 50 }, () => obj);
|
|
1296
|
-
const result = enforceMemoryLimit(items,
|
|
1322
|
+
const result = enforceMemoryLimit(items, MAX_RESULTS_IN_MEMORY);
|
|
1297
1323
|
// Should not throw and should return valid result
|
|
1298
1324
|
assert.ok(Array.isArray(result.results));
|
|
1299
|
-
assert.strictEqual(result.originalCount,
|
|
1325
|
+
assert.strictEqual(result.originalCount, STREAMING_COUNT_CUSTOM_LOW);
|
|
1300
1326
|
});
|
|
1301
1327
|
});
|
|
1302
1328
|
});
|