@dotdo/postgres 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +868 -0
- package/dist/cdc/change-stream.d.ts +44 -0
- package/dist/cdc/change-stream.d.ts.map +1 -0
- package/dist/cdc/change-stream.js +95 -0
- package/dist/cdc/change-stream.js.map +1 -0
- package/dist/cdc/filter.d.ts +58 -0
- package/dist/cdc/filter.d.ts.map +1 -0
- package/dist/cdc/filter.js +520 -0
- package/dist/cdc/filter.js.map +1 -0
- package/dist/cdc/index.d.ts +47 -0
- package/dist/cdc/index.d.ts.map +1 -0
- package/dist/cdc/index.js +50 -0
- package/dist/cdc/index.js.map +1 -0
- package/dist/cdc/resume-token.d.ts +60 -0
- package/dist/cdc/resume-token.d.ts.map +1 -0
- package/dist/cdc/resume-token.js +228 -0
- package/dist/cdc/resume-token.js.map +1 -0
- package/dist/cdc/transport/index.d.ts +7 -0
- package/dist/cdc/transport/index.d.ts.map +1 -0
- package/dist/cdc/transport/index.js +7 -0
- package/dist/cdc/transport/index.js.map +1 -0
- package/dist/cdc/transport/sse.d.ts +120 -0
- package/dist/cdc/transport/sse.d.ts.map +1 -0
- package/dist/cdc/transport/sse.js +590 -0
- package/dist/cdc/transport/sse.js.map +1 -0
- package/dist/cdc/transport/websocket.d.ts +130 -0
- package/dist/cdc/transport/websocket.d.ts.map +1 -0
- package/dist/cdc/transport/websocket.js +688 -0
- package/dist/cdc/transport/websocket.js.map +1 -0
- package/dist/cdc/types.d.ts +306 -0
- package/dist/cdc/types.d.ts.map +1 -0
- package/dist/cdc/types.js +8 -0
- package/dist/cdc/types.js.map +1 -0
- package/dist/config/index.d.ts +25 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +25 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/memory.d.ts +139 -0
- package/dist/config/memory.d.ts.map +1 -0
- package/dist/config/memory.js +157 -0
- package/dist/config/memory.js.map +1 -0
- package/dist/config/storage.d.ts +157 -0
- package/dist/config/storage.d.ts.map +1 -0
- package/dist/config/storage.js +178 -0
- package/dist/config/storage.js.map +1 -0
- package/dist/config/streaming.d.ts +117 -0
- package/dist/config/streaming.d.ts.map +1 -0
- package/dist/config/streaming.js +132 -0
- package/dist/config/streaming.js.map +1 -0
- package/dist/config/timeouts.d.ts +168 -0
- package/dist/config/timeouts.d.ts.map +1 -0
- package/dist/config/timeouts.js +192 -0
- package/dist/config/timeouts.js.map +1 -0
- package/dist/extensions/config.d.ts +89 -0
- package/dist/extensions/config.d.ts.map +1 -0
- package/dist/extensions/config.js +216 -0
- package/dist/extensions/config.js.map +1 -0
- package/dist/extensions/geo.d.ts +452 -0
- package/dist/extensions/geo.d.ts.map +1 -0
- package/dist/extensions/geo.js +583 -0
- package/dist/extensions/geo.js.map +1 -0
- package/dist/extensions/index.d.ts +167 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +99 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +226 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +456 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/pgmq-lite.d.ts +330 -0
- package/dist/extensions/pgmq-lite.d.ts.map +1 -0
- package/dist/extensions/pgmq-lite.js +648 -0
- package/dist/extensions/pgmq-lite.js.map +1 -0
- package/dist/extensions/plugins.d.ts +260 -0
- package/dist/extensions/plugins.d.ts.map +1 -0
- package/dist/extensions/plugins.js +535 -0
- package/dist/extensions/plugins.js.map +1 -0
- package/dist/extensions/registry.d.ts +93 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +182 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/vector.d.ts +106 -0
- package/dist/extensions/vector.d.ts.map +1 -0
- package/dist/extensions/vector.js +129 -0
- package/dist/extensions/vector.js.map +1 -0
- package/dist/iceberg/analytics.d.ts +279 -0
- package/dist/iceberg/analytics.d.ts.map +1 -0
- package/dist/iceberg/analytics.js +448 -0
- package/dist/iceberg/analytics.js.map +1 -0
- package/dist/iceberg/catalog-api.d.ts +39 -0
- package/dist/iceberg/catalog-api.d.ts.map +1 -0
- package/dist/iceberg/catalog-api.js +388 -0
- package/dist/iceberg/catalog-api.js.map +1 -0
- package/dist/iceberg/catalog.d.ts +401 -0
- package/dist/iceberg/catalog.d.ts.map +1 -0
- package/dist/iceberg/catalog.js +677 -0
- package/dist/iceberg/catalog.js.map +1 -0
- package/dist/iceberg/duckdb-wasm.d.ts +447 -0
- package/dist/iceberg/duckdb-wasm.d.ts.map +1 -0
- package/dist/iceberg/duckdb-wasm.js +600 -0
- package/dist/iceberg/duckdb-wasm.js.map +1 -0
- package/dist/iceberg/index.d.ts +92 -0
- package/dist/iceberg/index.d.ts.map +1 -0
- package/dist/iceberg/index.js +119 -0
- package/dist/iceberg/index.js.map +1 -0
- package/dist/iceberg/metadata.d.ts +214 -0
- package/dist/iceberg/metadata.d.ts.map +1 -0
- package/dist/iceberg/metadata.js +535 -0
- package/dist/iceberg/metadata.js.map +1 -0
- package/dist/iceberg/optimizer.d.ts +296 -0
- package/dist/iceberg/optimizer.d.ts.map +1 -0
- package/dist/iceberg/optimizer.js +889 -0
- package/dist/iceberg/optimizer.js.map +1 -0
- package/dist/iceberg/parquet.d.ts +447 -0
- package/dist/iceberg/parquet.d.ts.map +1 -0
- package/dist/iceberg/parquet.js +1225 -0
- package/dist/iceberg/parquet.js.map +1 -0
- package/dist/iceberg/r2-organization.d.ts +422 -0
- package/dist/iceberg/r2-organization.d.ts.map +1 -0
- package/dist/iceberg/r2-organization.js +672 -0
- package/dist/iceberg/r2-organization.js.map +1 -0
- package/dist/iceberg/scheduler-do-example.d.ts +158 -0
- package/dist/iceberg/scheduler-do-example.d.ts.map +1 -0
- package/dist/iceberg/scheduler-do-example.js +261 -0
- package/dist/iceberg/scheduler-do-example.js.map +1 -0
- package/dist/iceberg/scheduler.d.ts +434 -0
- package/dist/iceberg/scheduler.d.ts.map +1 -0
- package/dist/iceberg/scheduler.js +818 -0
- package/dist/iceberg/scheduler.js.map +1 -0
- package/dist/iceberg/schema.d.ts +149 -0
- package/dist/iceberg/schema.d.ts.map +1 -0
- package/dist/iceberg/schema.js +525 -0
- package/dist/iceberg/schema.js.map +1 -0
- package/dist/iceberg/snapshot-manager.d.ts +406 -0
- package/dist/iceberg/snapshot-manager.d.ts.map +1 -0
- package/dist/iceberg/snapshot-manager.js +934 -0
- package/dist/iceberg/snapshot-manager.js.map +1 -0
- package/dist/iceberg/sql-router.d.ts +194 -0
- package/dist/iceberg/sql-router.d.ts.map +1 -0
- package/dist/iceberg/sql-router.js +180 -0
- package/dist/iceberg/sql-router.js.map +1 -0
- package/dist/iceberg/test-fixtures.d.ts +151 -0
- package/dist/iceberg/test-fixtures.d.ts.map +1 -0
- package/dist/iceberg/test-fixtures.js +446 -0
- package/dist/iceberg/test-fixtures.js.map +1 -0
- package/dist/iceberg/time-travel-api.d.ts +102 -0
- package/dist/iceberg/time-travel-api.d.ts.map +1 -0
- package/dist/iceberg/time-travel-api.js +437 -0
- package/dist/iceberg/time-travel-api.js.map +1 -0
- package/dist/iceberg/time-travel.d.ts +293 -0
- package/dist/iceberg/time-travel.d.ts.map +1 -0
- package/dist/iceberg/time-travel.js +689 -0
- package/dist/iceberg/time-travel.js.map +1 -0
- package/dist/iceberg/transformer.d.ts +356 -0
- package/dist/iceberg/transformer.d.ts.map +1 -0
- package/dist/iceberg/transformer.js +770 -0
- package/dist/iceberg/transformer.js.map +1 -0
- package/dist/iceberg/types.d.ts +318 -0
- package/dist/iceberg/types.d.ts.map +1 -0
- package/dist/iceberg/types.js +9 -0
- package/dist/iceberg/types.js.map +1 -0
- package/dist/iceberg/writer.d.ts +144 -0
- package/dist/iceberg/writer.d.ts.map +1 -0
- package/dist/iceberg/writer.js +452 -0
- package/dist/iceberg/writer.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/lineage/index.d.ts +11 -0
- package/dist/lineage/index.d.ts.map +1 -0
- package/dist/lineage/index.js +11 -0
- package/dist/lineage/index.js.map +1 -0
- package/dist/lineage/integration.d.ts +134 -0
- package/dist/lineage/integration.d.ts.map +1 -0
- package/dist/lineage/integration.js +258 -0
- package/dist/lineage/integration.js.map +1 -0
- package/dist/lineage/tracker.d.ts +189 -0
- package/dist/lineage/tracker.d.ts.map +1 -0
- package/dist/lineage/tracker.js +1352 -0
- package/dist/lineage/tracker.js.map +1 -0
- package/dist/lineage/types.d.ts +318 -0
- package/dist/lineage/types.d.ts.map +1 -0
- package/dist/lineage/types.js +9 -0
- package/dist/lineage/types.js.map +1 -0
- package/dist/middleware/index.d.ts +11 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +16 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +397 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +507 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/migration-tooling/external-migration.d.ts +601 -0
- package/dist/migration-tooling/external-migration.d.ts.map +1 -0
- package/dist/migration-tooling/external-migration.js +1612 -0
- package/dist/migration-tooling/external-migration.js.map +1 -0
- package/dist/migration-tooling/index.d.ts +19 -0
- package/dist/migration-tooling/index.d.ts.map +1 -0
- package/dist/migration-tooling/index.js +19 -0
- package/dist/migration-tooling/index.js.map +1 -0
- package/dist/migrations/auto-migrator.d.ts +289 -0
- package/dist/migrations/auto-migrator.d.ts.map +1 -0
- package/dist/migrations/auto-migrator.js +396 -0
- package/dist/migrations/auto-migrator.js.map +1 -0
- package/dist/migrations/bulk-orchestrator.d.ts +403 -0
- package/dist/migrations/bulk-orchestrator.d.ts.map +1 -0
- package/dist/migrations/bulk-orchestrator.js +646 -0
- package/dist/migrations/bulk-orchestrator.js.map +1 -0
- package/dist/migrations/compatibility.d.ts +216 -0
- package/dist/migrations/compatibility.d.ts.map +1 -0
- package/dist/migrations/compatibility.js +651 -0
- package/dist/migrations/compatibility.js.map +1 -0
- package/dist/migrations/do-migrations.d.ts +101 -0
- package/dist/migrations/do-migrations.d.ts.map +1 -0
- package/dist/migrations/do-migrations.js +1060 -0
- package/dist/migrations/do-migrations.js.map +1 -0
- package/dist/migrations/do-migrations.types.d.ts +550 -0
- package/dist/migrations/do-migrations.types.d.ts.map +1 -0
- package/dist/migrations/do-migrations.types.js +15 -0
- package/dist/migrations/do-migrations.types.js.map +1 -0
- package/dist/migrations/drizzle-compat.d.ts +163 -0
- package/dist/migrations/drizzle-compat.d.ts.map +1 -0
- package/dist/migrations/drizzle-compat.js +273 -0
- package/dist/migrations/drizzle-compat.js.map +1 -0
- package/dist/migrations/index.d.ts +109 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +127 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migration-api.d.ts +161 -0
- package/dist/migrations/migration-api.d.ts.map +1 -0
- package/dist/migrations/migration-api.js +499 -0
- package/dist/migrations/migration-api.js.map +1 -0
- package/dist/migrations/progress-tracker-do.d.ts +195 -0
- package/dist/migrations/progress-tracker-do.d.ts.map +1 -0
- package/dist/migrations/progress-tracker-do.js +339 -0
- package/dist/migrations/progress-tracker-do.js.map +1 -0
- package/dist/migrations/progress-tracker-kv.d.ts +103 -0
- package/dist/migrations/progress-tracker-kv.d.ts.map +1 -0
- package/dist/migrations/progress-tracker-kv.js +231 -0
- package/dist/migrations/progress-tracker-kv.js.map +1 -0
- package/dist/migrations/progress-tracker.d.ts +320 -0
- package/dist/migrations/progress-tracker.d.ts.map +1 -0
- package/dist/migrations/progress-tracker.js +443 -0
- package/dist/migrations/progress-tracker.js.map +1 -0
- package/dist/migrations/registry.d.ts +231 -0
- package/dist/migrations/registry.d.ts.map +1 -0
- package/dist/migrations/registry.js +376 -0
- package/dist/migrations/registry.js.map +1 -0
- package/dist/migrations/runner.d.ts +197 -0
- package/dist/migrations/runner.d.ts.map +1 -0
- package/dist/migrations/runner.js +1167 -0
- package/dist/migrations/runner.js.map +1 -0
- package/dist/migrations/schema-generator.d.ts +111 -0
- package/dist/migrations/schema-generator.d.ts.map +1 -0
- package/dist/migrations/schema-generator.js +335 -0
- package/dist/migrations/schema-generator.js.map +1 -0
- package/dist/migrations/testing.d.ts +321 -0
- package/dist/migrations/testing.d.ts.map +1 -0
- package/dist/migrations/testing.js +645 -0
- package/dist/migrations/testing.js.map +1 -0
- package/dist/migrations/types.d.ts +503 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +11 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/migrations/validator.d.ts +215 -0
- package/dist/migrations/validator.d.ts.map +1 -0
- package/dist/migrations/validator.js +494 -0
- package/dist/migrations/validator.js.map +1 -0
- package/dist/observability/alerting.d.ts +116 -0
- package/dist/observability/alerting.d.ts.map +1 -0
- package/dist/observability/alerting.js +353 -0
- package/dist/observability/alerting.js.map +1 -0
- package/dist/observability/analytics-engine.d.ts +357 -0
- package/dist/observability/analytics-engine.d.ts.map +1 -0
- package/dist/observability/analytics-engine.js +430 -0
- package/dist/observability/analytics-engine.js.map +1 -0
- package/dist/observability/cost-metrics.d.ts +269 -0
- package/dist/observability/cost-metrics.d.ts.map +1 -0
- package/dist/observability/cost-metrics.js +560 -0
- package/dist/observability/cost-metrics.js.map +1 -0
- package/dist/observability/cross-do-tracing.d.ts +305 -0
- package/dist/observability/cross-do-tracing.d.ts.map +1 -0
- package/dist/observability/cross-do-tracing.js +431 -0
- package/dist/observability/cross-do-tracing.js.map +1 -0
- package/dist/observability/error-rate-collector.d.ts +163 -0
- package/dist/observability/error-rate-collector.d.ts.map +1 -0
- package/dist/observability/error-rate-collector.js +306 -0
- package/dist/observability/error-rate-collector.js.map +1 -0
- package/dist/observability/exporters.d.ts +231 -0
- package/dist/observability/exporters.d.ts.map +1 -0
- package/dist/observability/exporters.js +479 -0
- package/dist/observability/exporters.js.map +1 -0
- package/dist/observability/health-check.d.ts +106 -0
- package/dist/observability/health-check.d.ts.map +1 -0
- package/dist/observability/health-check.js +243 -0
- package/dist/observability/health-check.js.map +1 -0
- package/dist/observability/index.d.ts +297 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +455 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/instrumentation.d.ts +222 -0
- package/dist/observability/instrumentation.d.ts.map +1 -0
- package/dist/observability/instrumentation.js +532 -0
- package/dist/observability/instrumentation.js.map +1 -0
- package/dist/observability/memory-metrics.d.ts +227 -0
- package/dist/observability/memory-metrics.d.ts.map +1 -0
- package/dist/observability/memory-metrics.js +688 -0
- package/dist/observability/memory-metrics.js.map +1 -0
- package/dist/observability/metrics-endpoint.d.ts +91 -0
- package/dist/observability/metrics-endpoint.d.ts.map +1 -0
- package/dist/observability/metrics-endpoint.js +246 -0
- package/dist/observability/metrics-endpoint.js.map +1 -0
- package/dist/observability/metrics.d.ts +88 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +253 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/observability-features.d.ts +488 -0
- package/dist/observability/observability-features.d.ts.map +1 -0
- package/dist/observability/observability-features.js +773 -0
- package/dist/observability/observability-features.js.map +1 -0
- package/dist/observability/prometheus.d.ts +39 -0
- package/dist/observability/prometheus.d.ts.map +1 -0
- package/dist/observability/prometheus.js +120 -0
- package/dist/observability/prometheus.js.map +1 -0
- package/dist/observability/propagation.d.ts +126 -0
- package/dist/observability/propagation.d.ts.map +1 -0
- package/dist/observability/propagation.js +234 -0
- package/dist/observability/propagation.js.map +1 -0
- package/dist/observability/query-latency.d.ts +243 -0
- package/dist/observability/query-latency.d.ts.map +1 -0
- package/dist/observability/query-latency.js +292 -0
- package/dist/observability/query-latency.js.map +1 -0
- package/dist/observability/query-performance.d.ts +169 -0
- package/dist/observability/query-performance.d.ts.map +1 -0
- package/dist/observability/query-performance.js +290 -0
- package/dist/observability/query-performance.js.map +1 -0
- package/dist/observability/storage-tier-metrics.d.ts +174 -0
- package/dist/observability/storage-tier-metrics.d.ts.map +1 -0
- package/dist/observability/storage-tier-metrics.js +306 -0
- package/dist/observability/storage-tier-metrics.js.map +1 -0
- package/dist/observability/tier-cost-optimizer.d.ts +155 -0
- package/dist/observability/tier-cost-optimizer.d.ts.map +1 -0
- package/dist/observability/tier-cost-optimizer.js +536 -0
- package/dist/observability/tier-cost-optimizer.js.map +1 -0
- package/dist/observability/tracer.d.ts +149 -0
- package/dist/observability/tracer.d.ts.map +1 -0
- package/dist/observability/tracer.js +435 -0
- package/dist/observability/tracer.js.map +1 -0
- package/dist/observability/types.d.ts +402 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +103 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/pglite/workers-pglite.d.ts +138 -0
- package/dist/pglite/workers-pglite.d.ts.map +1 -0
- package/dist/pglite/workers-pglite.js +143 -0
- package/dist/pglite/workers-pglite.js.map +1 -0
- package/dist/pglite-assets/pglite.data +0 -0
- package/dist/pglite-assets/pglite.wasm +0 -0
- package/dist/playground/index.d.ts +52 -0
- package/dist/playground/index.d.ts.map +1 -0
- package/dist/playground/index.js +55 -0
- package/dist/playground/index.js.map +1 -0
- package/dist/playground/keyboard-shortcuts.d.ts +116 -0
- package/dist/playground/keyboard-shortcuts.d.ts.map +1 -0
- package/dist/playground/keyboard-shortcuts.js +588 -0
- package/dist/playground/keyboard-shortcuts.js.map +1 -0
- package/dist/playground/playground.d.ts +82 -0
- package/dist/playground/playground.d.ts.map +1 -0
- package/dist/playground/playground.js +271 -0
- package/dist/playground/playground.js.map +1 -0
- package/dist/playground/query-executor.d.ts +115 -0
- package/dist/playground/query-executor.d.ts.map +1 -0
- package/dist/playground/query-executor.js +558 -0
- package/dist/playground/query-executor.js.map +1 -0
- package/dist/playground/query-history.d.ts +92 -0
- package/dist/playground/query-history.d.ts.map +1 -0
- package/dist/playground/query-history.js +259 -0
- package/dist/playground/query-history.js.map +1 -0
- package/dist/playground/result-formatter.d.ts +59 -0
- package/dist/playground/result-formatter.d.ts.map +1 -0
- package/dist/playground/result-formatter.js +341 -0
- package/dist/playground/result-formatter.js.map +1 -0
- package/dist/playground/sample-datasets.d.ts +77 -0
- package/dist/playground/sample-datasets.d.ts.map +1 -0
- package/dist/playground/sample-datasets.js +641 -0
- package/dist/playground/sample-datasets.js.map +1 -0
- package/dist/playground/sample-queries.d.ts +73 -0
- package/dist/playground/sample-queries.d.ts.map +1 -0
- package/dist/playground/sample-queries.js +1095 -0
- package/dist/playground/sample-queries.js.map +1 -0
- package/dist/playground/schema-explorer.d.ts +55 -0
- package/dist/playground/schema-explorer.d.ts.map +1 -0
- package/dist/playground/schema-explorer.js +473 -0
- package/dist/playground/schema-explorer.js.map +1 -0
- package/dist/playground/types.d.ts +430 -0
- package/dist/playground/types.d.ts.map +1 -0
- package/dist/playground/types.js +10 -0
- package/dist/playground/types.js.map +1 -0
- package/dist/readonly/cache-reader.d.ts +145 -0
- package/dist/readonly/cache-reader.d.ts.map +1 -0
- package/dist/readonly/cache-reader.js +198 -0
- package/dist/readonly/cache-reader.js.map +1 -0
- package/dist/readonly/config.d.ts +74 -0
- package/dist/readonly/config.d.ts.map +1 -0
- package/dist/readonly/config.js +67 -0
- package/dist/readonly/config.js.map +1 -0
- package/dist/readonly/index.d.ts +22 -0
- package/dist/readonly/index.d.ts.map +1 -0
- package/dist/readonly/index.js +17 -0
- package/dist/readonly/index.js.map +1 -0
- package/dist/readonly/pglite-wrapper.d.ts +82 -0
- package/dist/readonly/pglite-wrapper.d.ts.map +1 -0
- package/dist/readonly/pglite-wrapper.js +123 -0
- package/dist/readonly/pglite-wrapper.js.map +1 -0
- package/dist/readonly/worker.d.ts +142 -0
- package/dist/readonly/worker.d.ts.map +1 -0
- package/dist/readonly/worker.js +187 -0
- package/dist/readonly/worker.js.map +1 -0
- package/dist/readonly/write-blocker.d.ts +47 -0
- package/dist/readonly/write-blocker.d.ts.map +1 -0
- package/dist/readonly/write-blocker.js +136 -0
- package/dist/readonly/write-blocker.js.map +1 -0
- package/dist/recovery/disaster-recovery.d.ts +326 -0
- package/dist/recovery/disaster-recovery.d.ts.map +1 -0
- package/dist/recovery/disaster-recovery.js +799 -0
- package/dist/recovery/disaster-recovery.js.map +1 -0
- package/dist/recovery/index.d.ts +12 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +12 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/recovery/parquet-parser.d.ts +321 -0
- package/dist/recovery/parquet-parser.d.ts.map +1 -0
- package/dist/recovery/parquet-parser.js +797 -0
- package/dist/recovery/parquet-parser.js.map +1 -0
- package/dist/retention/index.d.ts +50 -0
- package/dist/retention/index.d.ts.map +1 -0
- package/dist/retention/index.js +50 -0
- package/dist/retention/index.js.map +1 -0
- package/dist/retention/policy.d.ts +344 -0
- package/dist/retention/policy.d.ts.map +1 -0
- package/dist/retention/policy.js +472 -0
- package/dist/retention/policy.js.map +1 -0
- package/dist/retention/purger.d.ts +187 -0
- package/dist/retention/purger.d.ts.map +1 -0
- package/dist/retention/purger.js +411 -0
- package/dist/retention/purger.js.map +1 -0
- package/dist/rls/auth-integration.d.ts +280 -0
- package/dist/rls/auth-integration.d.ts.map +1 -0
- package/dist/rls/auth-integration.js +399 -0
- package/dist/rls/auth-integration.js.map +1 -0
- package/dist/rls/generator.d.ts +249 -0
- package/dist/rls/generator.d.ts.map +1 -0
- package/dist/rls/generator.js +495 -0
- package/dist/rls/generator.js.map +1 -0
- package/dist/rls/index.d.ts +26 -0
- package/dist/rls/index.d.ts.map +1 -0
- package/dist/rls/index.js +58 -0
- package/dist/rls/index.js.map +1 -0
- package/dist/rls/policy.d.ts +116 -0
- package/dist/rls/policy.d.ts.map +1 -0
- package/dist/rls/policy.js +77 -0
- package/dist/rls/policy.js.map +1 -0
- package/dist/rls/validator.d.ts +155 -0
- package/dist/rls/validator.d.ts.map +1 -0
- package/dist/rls/validator.js +792 -0
- package/dist/rls/validator.js.map +1 -0
- package/dist/routing/adaptive-router.d.ts +317 -0
- package/dist/routing/adaptive-router.d.ts.map +1 -0
- package/dist/routing/adaptive-router.js +554 -0
- package/dist/routing/adaptive-router.js.map +1 -0
- package/dist/routing/circuit-breaker.d.ts +339 -0
- package/dist/routing/circuit-breaker.d.ts.map +1 -0
- package/dist/routing/circuit-breaker.js +620 -0
- package/dist/routing/circuit-breaker.js.map +1 -0
- package/dist/routing/cost-metrics.d.ts +133 -0
- package/dist/routing/cost-metrics.d.ts.map +1 -0
- package/dist/routing/cost-metrics.js +259 -0
- package/dist/routing/cost-metrics.js.map +1 -0
- package/dist/routing/do-connection-pool.d.ts +243 -0
- package/dist/routing/do-connection-pool.d.ts.map +1 -0
- package/dist/routing/do-connection-pool.js +572 -0
- package/dist/routing/do-connection-pool.js.map +1 -0
- package/dist/routing/index.d.ts +59 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +59 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/query-complexity-estimator.d.ts +73 -0
- package/dist/routing/query-complexity-estimator.d.ts.map +1 -0
- package/dist/routing/query-complexity-estimator.js +327 -0
- package/dist/routing/query-complexity-estimator.js.map +1 -0
- package/dist/routing/request-coalescing.d.ts +178 -0
- package/dist/routing/request-coalescing.d.ts.map +1 -0
- package/dist/routing/request-coalescing.js +325 -0
- package/dist/routing/request-coalescing.js.map +1 -0
- package/dist/routing/runtime-router.d.ts +107 -0
- package/dist/routing/runtime-router.d.ts.map +1 -0
- package/dist/routing/runtime-router.js +246 -0
- package/dist/routing/runtime-router.js.map +1 -0
- package/dist/routing/tenant-router.d.ts +848 -0
- package/dist/routing/tenant-router.d.ts.map +1 -0
- package/dist/routing/tenant-router.js +1056 -0
- package/dist/routing/tenant-router.js.map +1 -0
- package/dist/routing/websocket-pool.d.ts +119 -0
- package/dist/routing/websocket-pool.d.ts.map +1 -0
- package/dist/routing/websocket-pool.js +436 -0
- package/dist/routing/websocket-pool.js.map +1 -0
- package/dist/storage/cache-layer.d.ts +159 -0
- package/dist/storage/cache-layer.d.ts.map +1 -0
- package/dist/storage/cache-layer.js +245 -0
- package/dist/storage/cache-layer.js.map +1 -0
- package/dist/storage/cost-aware-tiering.d.ts +258 -0
- package/dist/storage/cost-aware-tiering.d.ts.map +1 -0
- package/dist/storage/cost-aware-tiering.js +526 -0
- package/dist/storage/cost-aware-tiering.js.map +1 -0
- package/dist/storage/index.d.ts +87 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +78 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interfaces.d.ts +856 -0
- package/dist/storage/interfaces.d.ts.map +1 -0
- package/dist/storage/interfaces.js +69 -0
- package/dist/storage/interfaces.js.map +1 -0
- package/dist/storage/r2-layer.d.ts +226 -0
- package/dist/storage/r2-layer.d.ts.map +1 -0
- package/dist/storage/r2-layer.js +307 -0
- package/dist/storage/r2-layer.js.map +1 -0
- package/dist/storage/r2-overflow.d.ts +344 -0
- package/dist/storage/r2-overflow.d.ts.map +1 -0
- package/dist/storage/r2-overflow.js +730 -0
- package/dist/storage/r2-overflow.js.map +1 -0
- package/dist/storage/r2-page-vfs.d.ts +374 -0
- package/dist/storage/r2-page-vfs.d.ts.map +1 -0
- package/dist/storage/r2-page-vfs.js +754 -0
- package/dist/storage/r2-page-vfs.js.map +1 -0
- package/dist/storage/swr-cache.d.ts +181 -0
- package/dist/storage/swr-cache.d.ts.map +1 -0
- package/dist/storage/swr-cache.js +295 -0
- package/dist/storage/swr-cache.js.map +1 -0
- package/dist/storage/tiered-orchestrator.d.ts +951 -0
- package/dist/storage/tiered-orchestrator.d.ts.map +1 -0
- package/dist/storage/tiered-orchestrator.js +1731 -0
- package/dist/storage/tiered-orchestrator.js.map +1 -0
- package/dist/storage/tiered-vfs-swr.d.ts +279 -0
- package/dist/storage/tiered-vfs-swr.d.ts.map +1 -0
- package/dist/storage/tiered-vfs-swr.js +584 -0
- package/dist/storage/tiered-vfs-swr.js.map +1 -0
- package/dist/storage/tiered-vfs.d.ts +405 -0
- package/dist/storage/tiered-vfs.d.ts.map +1 -0
- package/dist/storage/tiered-vfs.js +833 -0
- package/dist/storage/tiered-vfs.js.map +1 -0
- package/dist/streaming/backpressure-controller.d.ts +173 -0
- package/dist/streaming/backpressure-controller.d.ts.map +1 -0
- package/dist/streaming/backpressure-controller.js +344 -0
- package/dist/streaming/backpressure-controller.js.map +1 -0
- package/dist/streaming/buffer-pool.d.ts +241 -0
- package/dist/streaming/buffer-pool.d.ts.map +1 -0
- package/dist/streaming/buffer-pool.js +381 -0
- package/dist/streaming/buffer-pool.js.map +1 -0
- package/dist/streaming/cdc-iceberg-connector.d.ts +272 -0
- package/dist/streaming/cdc-iceberg-connector.d.ts.map +1 -0
- package/dist/streaming/cdc-iceberg-connector.js +408 -0
- package/dist/streaming/cdc-iceberg-connector.js.map +1 -0
- package/dist/streaming/index.d.ts +111 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +128 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/live-cdc-stream.d.ts +400 -0
- package/dist/streaming/live-cdc-stream.d.ts.map +1 -0
- package/dist/streaming/live-cdc-stream.js +703 -0
- package/dist/streaming/live-cdc-stream.js.map +1 -0
- package/dist/streaming/memory-bounded-stream.d.ts +207 -0
- package/dist/streaming/memory-bounded-stream.d.ts.map +1 -0
- package/dist/streaming/memory-bounded-stream.js +340 -0
- package/dist/streaming/memory-bounded-stream.js.map +1 -0
- package/dist/streaming/query-streamer.d.ts +379 -0
- package/dist/streaming/query-streamer.d.ts.map +1 -0
- package/dist/streaming/query-streamer.js +495 -0
- package/dist/streaming/query-streamer.js.map +1 -0
- package/dist/streaming/response-streaming.d.ts +203 -0
- package/dist/streaming/response-streaming.d.ts.map +1 -0
- package/dist/streaming/response-streaming.js +449 -0
- package/dist/streaming/response-streaming.js.map +1 -0
- package/dist/types/branded.d.ts +859 -0
- package/dist/types/branded.d.ts.map +1 -0
- package/dist/types/branded.js +891 -0
- package/dist/types/branded.js.map +1 -0
- package/dist/types/utilities.d.ts +757 -0
- package/dist/types/utilities.d.ts.map +1 -0
- package/dist/types/utilities.js +447 -0
- package/dist/types/utilities.js.map +1 -0
- package/dist/wal/replay-engine.d.ts +344 -0
- package/dist/wal/replay-engine.d.ts.map +1 -0
- package/dist/wal/replay-engine.js +975 -0
- package/dist/wal/replay-engine.js.map +1 -0
- package/dist/worker/__mocks__/capnweb.d.ts +13 -0
- package/dist/worker/__mocks__/capnweb.d.ts.map +1 -0
- package/dist/worker/__mocks__/capnweb.js +15 -0
- package/dist/worker/__mocks__/capnweb.js.map +1 -0
- package/dist/worker/__mocks__/cloudflare-workers.d.ts +31 -0
- package/dist/worker/__mocks__/cloudflare-workers.d.ts.map +1 -0
- package/dist/worker/__mocks__/cloudflare-workers.js +33 -0
- package/dist/worker/__mocks__/cloudflare-workers.js.map +1 -0
- package/dist/worker/__mocks__/pglite.data.d.ts +3 -0
- package/dist/worker/__mocks__/pglite.data.d.ts.map +1 -0
- package/dist/worker/__mocks__/pglite.data.js +20 -0
- package/dist/worker/__mocks__/pglite.data.js.map +1 -0
- package/dist/worker/__mocks__/pglite.wasm.d.ts +3 -0
- package/dist/worker/__mocks__/pglite.wasm.d.ts.map +1 -0
- package/dist/worker/__mocks__/pglite.wasm.js +30 -0
- package/dist/worker/__mocks__/pglite.wasm.js.map +1 -0
- package/dist/worker/auth-rate-limiter.d.ts +270 -0
- package/dist/worker/auth-rate-limiter.d.ts.map +1 -0
- package/dist/worker/auth-rate-limiter.js +332 -0
- package/dist/worker/auth-rate-limiter.js.map +1 -0
- package/dist/worker/auth.d.ts +345 -0
- package/dist/worker/auth.d.ts.map +1 -0
- package/dist/worker/auth.js +837 -0
- package/dist/worker/auth.js.map +1 -0
- package/dist/worker/cdc-backpressure.d.ts +338 -0
- package/dist/worker/cdc-backpressure.d.ts.map +1 -0
- package/dist/worker/cdc-backpressure.js +619 -0
- package/dist/worker/cdc-backpressure.js.map +1 -0
- package/dist/worker/cdc-sse.d.ts +277 -0
- package/dist/worker/cdc-sse.d.ts.map +1 -0
- package/dist/worker/cdc-sse.js +528 -0
- package/dist/worker/cdc-sse.js.map +1 -0
- package/dist/worker/cdc-websocket.d.ts +252 -0
- package/dist/worker/cdc-websocket.d.ts.map +1 -0
- package/dist/worker/cdc-websocket.js +940 -0
- package/dist/worker/cdc-websocket.js.map +1 -0
- package/dist/worker/cdc.d.ts +95 -0
- package/dist/worker/cdc.d.ts.map +1 -0
- package/dist/worker/cdc.js +211 -0
- package/dist/worker/cdc.js.map +1 -0
- package/dist/worker/concerns/auth-concern.d.ts +50 -0
- package/dist/worker/concerns/auth-concern.d.ts.map +1 -0
- package/dist/worker/concerns/auth-concern.js +131 -0
- package/dist/worker/concerns/auth-concern.js.map +1 -0
- package/dist/worker/concerns/cdc-concern.d.ts +99 -0
- package/dist/worker/concerns/cdc-concern.d.ts.map +1 -0
- package/dist/worker/concerns/cdc-concern.js +137 -0
- package/dist/worker/concerns/cdc-concern.js.map +1 -0
- package/dist/worker/concerns/index.d.ts +22 -0
- package/dist/worker/concerns/index.d.ts.map +1 -0
- package/dist/worker/concerns/index.js +13 -0
- package/dist/worker/concerns/index.js.map +1 -0
- package/dist/worker/concerns/query-execution-concern.d.ts +104 -0
- package/dist/worker/concerns/query-execution-concern.d.ts.map +1 -0
- package/dist/worker/concerns/query-execution-concern.js +95 -0
- package/dist/worker/concerns/query-execution-concern.js.map +1 -0
- package/dist/worker/concerns/storage-orchestration-concern.d.ts +78 -0
- package/dist/worker/concerns/storage-orchestration-concern.d.ts.map +1 -0
- package/dist/worker/concerns/storage-orchestration-concern.js +240 -0
- package/dist/worker/concerns/storage-orchestration-concern.js.map +1 -0
- package/dist/worker/do-auth-manager.d.ts +108 -0
- package/dist/worker/do-auth-manager.d.ts.map +1 -0
- package/dist/worker/do-auth-manager.js +212 -0
- package/dist/worker/do-auth-manager.js.map +1 -0
- package/dist/worker/do-pglite-manager.d.ts +137 -0
- package/dist/worker/do-pglite-manager.d.ts.map +1 -0
- package/dist/worker/do-pglite-manager.js +228 -0
- package/dist/worker/do-pglite-manager.js.map +1 -0
- package/dist/worker/do.d.ts +556 -0
- package/dist/worker/do.d.ts.map +1 -0
- package/dist/worker/do.js +1441 -0
- package/dist/worker/do.js.map +1 -0
- package/dist/worker/entry.d.ts +23 -0
- package/dist/worker/entry.d.ts.map +1 -0
- package/dist/worker/entry.js +362 -0
- package/dist/worker/entry.js.map +1 -0
- package/dist/worker/errors.d.ts +106 -0
- package/dist/worker/errors.d.ts.map +1 -0
- package/dist/worker/errors.js +178 -0
- package/dist/worker/errors.js.map +1 -0
- package/dist/worker/health-check-manager.d.ts +141 -0
- package/dist/worker/health-check-manager.d.ts.map +1 -0
- package/dist/worker/health-check-manager.js +145 -0
- package/dist/worker/health-check-manager.js.map +1 -0
- package/dist/worker/index.d.ts +60 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +67 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/memory-pressure.d.ts +892 -0
- package/dist/worker/memory-pressure.d.ts.map +1 -0
- package/dist/worker/memory-pressure.js +1990 -0
- package/dist/worker/memory-pressure.js.map +1 -0
- package/dist/worker/migration-manager.d.ts +153 -0
- package/dist/worker/migration-manager.d.ts.map +1 -0
- package/dist/worker/migration-manager.js +461 -0
- package/dist/worker/migration-manager.js.map +1 -0
- package/dist/worker/plugin-manager.d.ts +147 -0
- package/dist/worker/plugin-manager.d.ts.map +1 -0
- package/dist/worker/plugin-manager.js +408 -0
- package/dist/worker/plugin-manager.js.map +1 -0
- package/dist/worker/proxy.d.ts +330 -0
- package/dist/worker/proxy.d.ts.map +1 -0
- package/dist/worker/proxy.js +504 -0
- package/dist/worker/proxy.js.map +1 -0
- package/dist/worker/query-execution-manager.d.ts +107 -0
- package/dist/worker/query-execution-manager.d.ts.map +1 -0
- package/dist/worker/query-execution-manager.js +155 -0
- package/dist/worker/query-execution-manager.js.map +1 -0
- package/dist/worker/query-executor.d.ts +163 -0
- package/dist/worker/query-executor.d.ts.map +1 -0
- package/dist/worker/query-executor.js +413 -0
- package/dist/worker/query-executor.js.map +1 -0
- package/dist/worker/query-stats-manager.d.ts +117 -0
- package/dist/worker/query-stats-manager.d.ts.map +1 -0
- package/dist/worker/query-stats-manager.js +162 -0
- package/dist/worker/query-stats-manager.js.map +1 -0
- package/dist/worker/result-handler.d.ts +192 -0
- package/dist/worker/result-handler.d.ts.map +1 -0
- package/dist/worker/result-handler.js +346 -0
- package/dist/worker/result-handler.js.map +1 -0
- package/dist/worker/routes.d.ts +135 -0
- package/dist/worker/routes.d.ts.map +1 -0
- package/dist/worker/routes.js +460 -0
- package/dist/worker/routes.js.map +1 -0
- package/dist/worker/rpc-methods-manager.d.ts +142 -0
- package/dist/worker/rpc-methods-manager.d.ts.map +1 -0
- package/dist/worker/rpc-methods-manager.js +195 -0
- package/dist/worker/rpc-methods-manager.js.map +1 -0
- package/dist/worker/rpc.d.ts +259 -0
- package/dist/worker/rpc.d.ts.map +1 -0
- package/dist/worker/rpc.js +398 -0
- package/dist/worker/rpc.js.map +1 -0
- package/dist/worker/schema-version.d.ts +209 -0
- package/dist/worker/schema-version.d.ts.map +1 -0
- package/dist/worker/schema-version.js +450 -0
- package/dist/worker/schema-version.js.map +1 -0
- package/dist/worker/session-manager.d.ts +282 -0
- package/dist/worker/session-manager.d.ts.map +1 -0
- package/dist/worker/session-manager.js +523 -0
- package/dist/worker/session-manager.js.map +1 -0
- package/dist/worker/shutdown-manager.d.ts +188 -0
- package/dist/worker/shutdown-manager.d.ts.map +1 -0
- package/dist/worker/shutdown-manager.js +347 -0
- package/dist/worker/shutdown-manager.js.map +1 -0
- package/dist/worker/sql-transform.d.ts +61 -0
- package/dist/worker/sql-transform.d.ts.map +1 -0
- package/dist/worker/sql-transform.js +312 -0
- package/dist/worker/sql-transform.js.map +1 -0
- package/dist/worker/types.d.ts +738 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +6 -0
- package/dist/worker/types.js.map +1 -0
- package/dist/worker/user-routes.d.ts +76 -0
- package/dist/worker/user-routes.d.ts.map +1 -0
- package/dist/worker/user-routes.js +188 -0
- package/dist/worker/user-routes.js.map +1 -0
- package/dist/worker/wal-facade.d.ts +138 -0
- package/dist/worker/wal-facade.d.ts.map +1 -0
- package/dist/worker/wal-facade.js +184 -0
- package/dist/worker/wal-facade.js.map +1 -0
- package/dist/worker/wal-r2.d.ts +271 -0
- package/dist/worker/wal-r2.d.ts.map +1 -0
- package/dist/worker/wal-r2.js +689 -0
- package/dist/worker/wal-r2.js.map +1 -0
- package/dist/worker/wal-replay.d.ts +361 -0
- package/dist/worker/wal-replay.d.ts.map +1 -0
- package/dist/worker/wal-replay.js +628 -0
- package/dist/worker/wal-replay.js.map +1 -0
- package/dist/worker/wal-retention.d.ts +389 -0
- package/dist/worker/wal-retention.d.ts.map +1 -0
- package/dist/worker/wal-retention.js +763 -0
- package/dist/worker/wal-retention.js.map +1 -0
- package/dist/worker/wal.d.ts +278 -0
- package/dist/worker/wal.d.ts.map +1 -0
- package/dist/worker/wal.js +467 -0
- package/dist/worker/wal.js.map +1 -0
- package/dist/worker/websocket.d.ts +85 -0
- package/dist/worker/websocket.d.ts.map +1 -0
- package/dist/worker/websocket.js +227 -0
- package/dist/worker/websocket.js.map +1 -0
- package/package.json +108 -0
- package/src/cdc/change-stream.ts +137 -0
- package/src/cdc/filter.ts +646 -0
- package/src/cdc/index.ts +112 -0
- package/src/cdc/resume-token.ts +280 -0
- package/src/cdc/transport/index.ts +7 -0
- package/src/cdc/transport/sse.ts +723 -0
- package/src/cdc/transport/websocket.ts +873 -0
- package/src/cdc/types.ts +346 -0
- package/src/config/index.ts +25 -0
- package/src/config/memory.ts +177 -0
- package/src/config/storage.ts +204 -0
- package/src/config/streaming.ts +147 -0
- package/src/config/timeouts.ts +221 -0
- package/src/extensions/config.test.ts +187 -0
- package/src/extensions/config.ts +278 -0
- package/src/extensions/geo.test.ts +455 -0
- package/src/extensions/geo.ts +858 -0
- package/src/extensions/index.test.ts +259 -0
- package/src/extensions/index.ts +227 -0
- package/src/extensions/loader.test.ts +555 -0
- package/src/extensions/loader.ts +588 -0
- package/src/extensions/pgmq-lite.test.ts +727 -0
- package/src/extensions/pgmq-lite.ts +770 -0
- package/src/extensions/plugins.test.ts +528 -0
- package/src/extensions/plugins.ts +718 -0
- package/src/extensions/registry.test.ts +202 -0
- package/src/extensions/registry.ts +267 -0
- package/src/extensions/vector.test.ts +195 -0
- package/src/extensions/vector.ts +217 -0
- package/src/iceberg/SCHEDULER.md +580 -0
- package/src/iceberg/analytics.test.ts +703 -0
- package/src/iceberg/analytics.ts +727 -0
- package/src/iceberg/catalog-api.test.ts +838 -0
- package/src/iceberg/catalog-api.ts +520 -0
- package/src/iceberg/catalog.test.ts +680 -0
- package/src/iceberg/catalog.ts +1007 -0
- package/src/iceberg/iceberg.test.ts +705 -0
- package/src/iceberg/index.ts +406 -0
- package/src/iceberg/metadata.test.ts +632 -0
- package/src/iceberg/metadata.ts +649 -0
- package/src/iceberg/optimizer.test.ts +868 -0
- package/src/iceberg/optimizer.ts +1287 -0
- package/src/iceberg/parquet.test.ts +899 -0
- package/src/iceberg/parquet.ts +1640 -0
- package/src/iceberg/r2-organization.test.ts +615 -0
- package/src/iceberg/r2-organization.ts +951 -0
- package/src/iceberg/scheduler-do-example.ts +364 -0
- package/src/iceberg/scheduler.test.ts +861 -0
- package/src/iceberg/scheduler.ts +1201 -0
- package/src/iceberg/schema.test.ts +547 -0
- package/src/iceberg/schema.ts +616 -0
- package/src/iceberg/snapshot-manager.test.ts +919 -0
- package/src/iceberg/snapshot-manager.ts +1369 -0
- package/src/iceberg/sql-router.test.ts +334 -0
- package/src/iceberg/sql-router.ts +337 -0
- package/src/iceberg/test-fixtures.ts +605 -0
- package/src/iceberg/time-travel-api.test.ts +1029 -0
- package/src/iceberg/time-travel-api.ts +731 -0
- package/src/iceberg/time-travel.test.ts +1218 -0
- package/src/iceberg/time-travel.ts +1052 -0
- package/src/iceberg/transformer.test.ts +689 -0
- package/src/iceberg/transformer.ts +1029 -0
- package/src/iceberg/types.ts +373 -0
- package/src/iceberg/writer.test.ts +716 -0
- package/src/iceberg/writer.ts +590 -0
- package/src/index.ts +212 -0
- package/src/lineage/index.ts +42 -0
- package/src/lineage/integration.ts +334 -0
- package/src/lineage/tracker.ts +1618 -0
- package/src/lineage/types.ts +354 -0
- package/src/middleware/index.ts +36 -0
- package/src/middleware/rate-limit-concurrent.test.ts +794 -0
- package/src/middleware/rate-limit.test.ts +1568 -0
- package/src/middleware/rate-limit.ts +840 -0
- package/src/migration-tooling/external-migration.test.ts +1864 -0
- package/src/migration-tooling/external-migration.ts +2355 -0
- package/src/migration-tooling/index.ts +19 -0
- package/src/migrations/ARCHITECTURE.md +474 -0
- package/src/migrations/PROGRESS_TRACKING.md +485 -0
- package/src/migrations/auto-migrator.test.ts +732 -0
- package/src/migrations/auto-migrator.ts +531 -0
- package/src/migrations/bulk-orchestrator.test.ts +801 -0
- package/src/migrations/bulk-orchestrator.ts +1039 -0
- package/src/migrations/compatibility.test.ts +958 -0
- package/src/migrations/compatibility.ts +902 -0
- package/src/migrations/do-migrations.test.ts +2620 -0
- package/src/migrations/do-migrations.ts +1289 -0
- package/src/migrations/do-migrations.types.ts +715 -0
- package/src/migrations/drizzle-compat.test.ts +210 -0
- package/src/migrations/drizzle-compat.ts +337 -0
- package/src/migrations/index.ts +334 -0
- package/src/migrations/migration-api.test.ts +438 -0
- package/src/migrations/migration-api.ts +704 -0
- package/src/migrations/progress-tracker-do.ts +518 -0
- package/src/migrations/progress-tracker-kv.ts +305 -0
- package/src/migrations/progress-tracker.test.ts +937 -0
- package/src/migrations/progress-tracker.ts +665 -0
- package/src/migrations/registry.test.ts +331 -0
- package/src/migrations/registry.ts +468 -0
- package/src/migrations/rollback.test.ts +644 -0
- package/src/migrations/runner.test.ts +807 -0
- package/src/migrations/runner.test.ts.backup +759 -0
- package/src/migrations/runner.ts +1459 -0
- package/src/migrations/schema-generator.test.ts +649 -0
- package/src/migrations/schema-generator.ts +513 -0
- package/src/migrations/testing.ts +1037 -0
- package/src/migrations/types.ts +573 -0
- package/src/migrations/validator.test.ts +660 -0
- package/src/migrations/validator.ts +741 -0
- package/src/observability/alerting.test.ts +1133 -0
- package/src/observability/alerting.ts +455 -0
- package/src/observability/analytics-engine.ts +733 -0
- package/src/observability/cost-metrics.ts +804 -0
- package/src/observability/cross-do-tracing.test.ts +516 -0
- package/src/observability/cross-do-tracing.ts +588 -0
- package/src/observability/dashboards/postgres-do-overview.json +1656 -0
- package/src/observability/error-rate-collector.test.ts +977 -0
- package/src/observability/error-rate-collector.ts +518 -0
- package/src/observability/exporters.test.ts +365 -0
- package/src/observability/exporters.ts +650 -0
- package/src/observability/health-check.test.ts +353 -0
- package/src/observability/health-check.ts +341 -0
- package/src/observability/index.test.ts +298 -0
- package/src/observability/index.ts +885 -0
- package/src/observability/instrumentation.test.ts +428 -0
- package/src/observability/instrumentation.ts +788 -0
- package/src/observability/memory-metrics.test.ts +355 -0
- package/src/observability/memory-metrics.ts +990 -0
- package/src/observability/metrics-endpoint.test.ts +402 -0
- package/src/observability/metrics-endpoint.ts +374 -0
- package/src/observability/metrics.test.ts +291 -0
- package/src/observability/metrics.ts +315 -0
- package/src/observability/observability-features.ts +1296 -0
- package/src/observability/prometheus.test.ts +292 -0
- package/src/observability/prometheus.ts +170 -0
- package/src/observability/propagation.test.ts +417 -0
- package/src/observability/propagation.ts +294 -0
- package/src/observability/query-latency.ts +586 -0
- package/src/observability/query-performance.test.ts +406 -0
- package/src/observability/query-performance.ts +491 -0
- package/src/observability/storage-tier-metrics.test.ts +633 -0
- package/src/observability/storage-tier-metrics.ts +570 -0
- package/src/observability/tier-cost-optimizer.ts +740 -0
- package/src/observability/tracer.test.ts +346 -0
- package/src/observability/tracer.ts +585 -0
- package/src/observability/types.test.ts +726 -0
- package/src/observability/types.ts +434 -0
- package/src/pglite/auto-demotion.test.ts +477 -0
- package/src/pglite/auto-demotion.ts +385 -0
- package/src/pglite/auto-promotion.test.ts +824 -0
- package/src/pglite/auto-promotion.ts +547 -0
- package/src/pglite/cache-layer.test.ts +469 -0
- package/src/pglite/cache-layer.ts +271 -0
- package/src/pglite/cold-start-manager.ts +1260 -0
- package/src/pglite/cold-start-optimizer.test.ts +937 -0
- package/src/pglite/cold-start-optimizer.ts +1895 -0
- package/src/pglite/dovfs-adapter.ts +1122 -0
- package/src/pglite/dovfs.ts +1258 -0
- package/src/pglite/etag-cache.test.ts +844 -0
- package/src/pglite/etag-cache.ts +526 -0
- package/src/pglite/index.ts +442 -0
- package/src/pglite/init.test.ts +455 -0
- package/src/pglite/init.ts +574 -0
- package/src/pglite/lifecycle.test.ts +599 -0
- package/src/pglite/lifecycle.ts +704 -0
- package/src/pglite/parallel-loader.test.ts +586 -0
- package/src/pglite/parallel-loader.ts +481 -0
- package/src/pglite/production-pglite.test.ts +666 -0
- package/src/pglite/production-pglite.ts +537 -0
- package/src/pglite/query-executor.ts +614 -0
- package/src/pglite/r2-layer.test.ts +501 -0
- package/src/pglite/r2-layer.ts +322 -0
- package/src/pglite/tiered-init.test.ts +725 -0
- package/src/pglite/tiered-init.ts +556 -0
- package/src/pglite/tiered-vfs.test.ts +726 -0
- package/src/pglite/tiered-vfs.ts +33 -0
- package/src/pglite/tiering-stats.test.ts +531 -0
- package/src/pglite/tiering-stats.ts +407 -0
- package/src/pglite/transaction-hooks.ts +343 -0
- package/src/pglite/warm-loader.test.ts +1701 -0
- package/src/pglite/warm-loader.ts +528 -0
- package/src/pglite/workers-pglite.ts +224 -0
- package/src/pglite-assets/pglite.data +0 -0
- package/src/pglite-assets/pglite.wasm +0 -0
- package/src/pglite.d.ts +47 -0
- package/src/playground/index.ts +137 -0
- package/src/playground/keyboard-shortcuts.ts +677 -0
- package/src/playground/playground.ts +323 -0
- package/src/playground/query-executor.ts +669 -0
- package/src/playground/query-history.ts +328 -0
- package/src/playground/result-formatter.ts +420 -0
- package/src/playground/sample-datasets.ts +674 -0
- package/src/playground/sample-queries.ts +1168 -0
- package/src/playground/schema-explorer.ts +558 -0
- package/src/playground/types.ts +518 -0
- package/src/readonly/cache-reader.test.ts +460 -0
- package/src/readonly/cache-reader.ts +313 -0
- package/src/readonly/config.test.ts +187 -0
- package/src/readonly/config.ts +128 -0
- package/src/readonly/index.ts +50 -0
- package/src/readonly/pglite-wrapper.test.ts +278 -0
- package/src/readonly/pglite-wrapper.ts +184 -0
- package/src/readonly/worker.test.ts +533 -0
- package/src/readonly/worker.ts +341 -0
- package/src/readonly/write-blocker.test.ts +459 -0
- package/src/readonly/write-blocker.ts +175 -0
- package/src/recovery/disaster-recovery.test.ts +618 -0
- package/src/recovery/disaster-recovery.ts +1181 -0
- package/src/recovery/index.ts +43 -0
- package/src/recovery/parquet-parser.ts +974 -0
- package/src/retention/index.ts +74 -0
- package/src/retention/policy.test.ts +571 -0
- package/src/retention/policy.ts +774 -0
- package/src/retention/purger.test.ts +465 -0
- package/src/retention/purger.ts +558 -0
- package/src/rls/auth-integration.test.ts +752 -0
- package/src/rls/auth-integration.ts +533 -0
- package/src/rls/generator.test.ts +829 -0
- package/src/rls/generator.ts +573 -0
- package/src/rls/index.ts +128 -0
- package/src/rls/policy.ts +208 -0
- package/src/rls/rls.test.ts +1071 -0
- package/src/rls/validator.test.ts +930 -0
- package/src/rls/validator.ts +895 -0
- package/src/routing/adaptive-router.test.ts +884 -0
- package/src/routing/adaptive-router.ts +845 -0
- package/src/routing/circuit-breaker.test.ts +1505 -0
- package/src/routing/circuit-breaker.ts +852 -0
- package/src/routing/cost-metrics.test.ts +565 -0
- package/src/routing/cost-metrics.ts +408 -0
- package/src/routing/do-connection-pool.test.ts +1109 -0
- package/src/routing/do-connection-pool.ts +828 -0
- package/src/routing/index.ts +158 -0
- package/src/routing/query-complexity-estimator.test.ts +356 -0
- package/src/routing/query-complexity-estimator.ts +444 -0
- package/src/routing/request-coalescing.test.ts +738 -0
- package/src/routing/request-coalescing.ts +475 -0
- package/src/routing/runtime-router.test.ts +436 -0
- package/src/routing/runtime-router.ts +357 -0
- package/src/routing/tenant-router.test.ts +2493 -0
- package/src/routing/tenant-router.ts +1908 -0
- package/src/routing/websocket-pool.test.ts +551 -0
- package/src/routing/websocket-pool.ts +577 -0
- package/src/storage/access-pattern-tracker.test.ts +874 -0
- package/src/storage/cache-layer.test.ts +560 -0
- package/src/storage/cache-layer.ts +328 -0
- package/src/storage/cost-aware-tiering.test.ts +652 -0
- package/src/storage/cost-aware-tiering.ts +794 -0
- package/src/storage/do-sqlite-blobs.test.ts +937 -0
- package/src/storage/index.ts +272 -0
- package/src/storage/interfaces.ts +974 -0
- package/src/storage/r2-layer.test.ts +653 -0
- package/src/storage/r2-layer.ts +434 -0
- package/src/storage/r2-overflow.ts +920 -0
- package/src/storage/r2-page-vfs.test.ts +2348 -0
- package/src/storage/r2-page-vfs.ts +1054 -0
- package/src/storage/swr-cache.test.ts +832 -0
- package/src/storage/swr-cache.ts +398 -0
- package/src/storage/swr-tiered-integration.test.ts +617 -0
- package/src/storage/tiered-orchestrator.test.ts +2441 -0
- package/src/storage/tiered-orchestrator.ts +2081 -0
- package/src/storage/tiered-vfs-swr.test.ts +736 -0
- package/src/storage/tiered-vfs-swr.ts +735 -0
- package/src/storage/tiered-vfs.test.ts +793 -0
- package/src/storage/tiered-vfs.ts +1082 -0
- package/src/streaming/backpressure-controller.ts +452 -0
- package/src/streaming/buffer-pool.ts +484 -0
- package/src/streaming/cdc-iceberg-connector.ts +605 -0
- package/src/streaming/index.ts +225 -0
- package/src/streaming/live-cdc-stream.ts +985 -0
- package/src/streaming/memory-bounded-stream.ts +443 -0
- package/src/streaming/query-streamer.ts +662 -0
- package/src/streaming/response-streaming.ts +557 -0
- package/src/types/branded.ts +1075 -0
- package/src/types/branded.ts.backup +273 -0
- package/src/types/utilities.ts +1023 -0
- package/src/types/wasm.d.ts +30 -0
- package/src/validation/typed-errors.test.ts +420 -0
- package/src/wal/replay-engine.ts +1264 -0
- package/src/worker/__mocks__/capnweb.ts +15 -0
- package/src/worker/__mocks__/pglite.data.ts +22 -0
- package/src/worker/__mocks__/pglite.wasm.ts +33 -0
- package/src/worker/auth-rate-limiter.test.ts +272 -0
- package/src/worker/auth-rate-limiter.ts +448 -0
- package/src/worker/auth.security-red.test.ts +1236 -0
- package/src/worker/auth.security.test.ts +822 -0
- package/src/worker/auth.test.ts +469 -0
- package/src/worker/auth.ts +1104 -0
- package/src/worker/cdc-backpressure.test.ts +726 -0
- package/src/worker/cdc-backpressure.ts +866 -0
- package/src/worker/cdc-sse.test.ts +780 -0
- package/src/worker/cdc-sse.ts +728 -0
- package/src/worker/cdc-websocket.ts +1229 -0
- package/src/worker/cdc-ws.test.ts +1009 -0
- package/src/worker/cdc.test.ts +327 -0
- package/src/worker/cdc.ts +289 -0
- package/src/worker/concerns/auth-concern.ts +179 -0
- package/src/worker/concerns/cdc-concern.ts +247 -0
- package/src/worker/concerns/index.ts +58 -0
- package/src/worker/concerns/query-execution-concern.ts +194 -0
- package/src/worker/concerns/storage-orchestration-concern.ts +373 -0
- package/src/worker/discriminated-types.test.ts +280 -0
- package/src/worker/do-auth-manager.ts +257 -0
- package/src/worker/do-decomposition.test.ts +1236 -0
- package/src/worker/do-pglite-manager.ts +302 -0
- package/src/worker/do.test.ts +2254 -0
- package/src/worker/do.ts +1878 -0
- package/src/worker/entry.ts +417 -0
- package/src/worker/errors.ts +285 -0
- package/src/worker/health-check-manager.test.ts +261 -0
- package/src/worker/health-check-manager.ts +231 -0
- package/src/worker/index.ts +389 -0
- package/src/worker/memory-pressure.test.ts +1460 -0
- package/src/worker/memory-pressure.ts +2650 -0
- package/src/worker/migration-manager.ts +582 -0
- package/src/worker/neon-compat.test.ts +332 -0
- package/src/worker/plugin-manager.ts +485 -0
- package/src/worker/postgres.do-rpc.d.ts +76 -0
- package/src/worker/proxy.ts +694 -0
- package/src/worker/query-execution-manager.test.ts +303 -0
- package/src/worker/query-execution-manager.ts +219 -0
- package/src/worker/query-executor.test.ts +282 -0
- package/src/worker/query-executor.ts +560 -0
- package/src/worker/query-stats-manager.ts +229 -0
- package/src/worker/result-handler.test.ts +364 -0
- package/src/worker/result-handler.ts +510 -0
- package/src/worker/routes.test.ts +795 -0
- package/src/worker/routes.ts +650 -0
- package/src/worker/rpc-methods-manager.test.ts +326 -0
- package/src/worker/rpc-methods-manager.ts +276 -0
- package/src/worker/rpc.ts +524 -0
- package/src/worker/schema-version.ts +605 -0
- package/src/worker/session-manager.test.ts +506 -0
- package/src/worker/session-manager.ts +732 -0
- package/src/worker/shutdown-manager.ts +469 -0
- package/src/worker/sql-transform.test.ts +286 -0
- package/src/worker/sql-transform.ts +368 -0
- package/src/worker/supabase-compat.test.ts +621 -0
- package/src/worker/types.test.ts +292 -0
- package/src/worker/types.ts +873 -0
- package/src/worker/user-routes.test.ts +703 -0
- package/src/worker/user-routes.ts +303 -0
- package/src/worker/wal-facade.ts +235 -0
- package/src/worker/wal-r2.test.ts +570 -0
- package/src/worker/wal-r2.ts +930 -0
- package/src/worker/wal-replay.test.ts +845 -0
- package/src/worker/wal-replay.ts +897 -0
- package/src/worker/wal-retention.test.ts +758 -0
- package/src/worker/wal-retention.ts +1075 -0
- package/src/worker/wal.test.ts +618 -0
- package/src/worker/wal.ts +697 -0
- package/src/worker/websocket.test.ts +296 -0
- package/src/worker/websocket.ts +284 -0
|
@@ -0,0 +1,736 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for TieredVFSWithSWR - TieredVFS with Stale-While-Revalidate Cache Integration
|
|
3
|
+
* Issue: postgres-kpa8 - Cache Layer SWR Integration
|
|
4
|
+
*
|
|
5
|
+
* Tests the SWR integration with TieredVFS:
|
|
6
|
+
* - Fresh cache hits return immediately
|
|
7
|
+
* - Stale cache hits return data + trigger background revalidation
|
|
8
|
+
* - Cache misses fall through to warm/cold tiers
|
|
9
|
+
* - SWR stats are tracked correctly
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
13
|
+
import {
|
|
14
|
+
TieredVFSWithSWR,
|
|
15
|
+
TieredVFSWithSWRConfig,
|
|
16
|
+
createTieredVFSWithSWR,
|
|
17
|
+
TieredVFSSWRStats,
|
|
18
|
+
} from './tiered-vfs-swr'
|
|
19
|
+
import type { CacheLayer } from './cache-layer'
|
|
20
|
+
import type { R2StorageLayer } from './r2-layer'
|
|
21
|
+
import type { SWRCacheLayer, SWRResult, ExecutionContext } from './swr-cache'
|
|
22
|
+
|
|
23
|
+
// Mock CacheLayer
|
|
24
|
+
const createMockCacheLayer = () => ({
|
|
25
|
+
get: vi.fn(),
|
|
26
|
+
put: vi.fn(),
|
|
27
|
+
delete: vi.fn(),
|
|
28
|
+
has: vi.fn(),
|
|
29
|
+
getWithMetadata: vi.fn(),
|
|
30
|
+
getStats: vi.fn().mockReturnValue({
|
|
31
|
+
hits: 0,
|
|
32
|
+
misses: 0,
|
|
33
|
+
writes: 0,
|
|
34
|
+
deletes: 0,
|
|
35
|
+
bytesRead: 0,
|
|
36
|
+
bytesWritten: 0,
|
|
37
|
+
errors: 0,
|
|
38
|
+
hitRatio: 0,
|
|
39
|
+
}),
|
|
40
|
+
clear: vi.fn(),
|
|
41
|
+
resetStats: vi.fn(),
|
|
42
|
+
getConfig: vi.fn(),
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
// Mock DOStorage (Durable Object storage simulation)
|
|
46
|
+
const createMockDOStorage = () => ({
|
|
47
|
+
get: vi.fn(),
|
|
48
|
+
put: vi.fn().mockResolvedValue(undefined),
|
|
49
|
+
delete: vi.fn().mockResolvedValue(undefined),
|
|
50
|
+
list: vi.fn(),
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
// Mock R2StorageLayer
|
|
54
|
+
const createMockR2Layer = () => ({
|
|
55
|
+
get: vi.fn(),
|
|
56
|
+
getRange: vi.fn(),
|
|
57
|
+
put: vi.fn(),
|
|
58
|
+
delete: vi.fn(),
|
|
59
|
+
deleteMany: vi.fn(),
|
|
60
|
+
head: vi.fn(),
|
|
61
|
+
has: vi.fn(),
|
|
62
|
+
list: vi.fn(),
|
|
63
|
+
getStats: vi.fn().mockReturnValue({
|
|
64
|
+
reads: 0,
|
|
65
|
+
rangeReads: 0,
|
|
66
|
+
writes: 0,
|
|
67
|
+
deletes: 0,
|
|
68
|
+
bytesRead: 0,
|
|
69
|
+
bytesWritten: 0,
|
|
70
|
+
errors: 0,
|
|
71
|
+
headRequests: 0,
|
|
72
|
+
listRequests: 0,
|
|
73
|
+
}),
|
|
74
|
+
resetStats: vi.fn(),
|
|
75
|
+
getPrefix: vi.fn(),
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
// Mock SWRCacheLayer
|
|
79
|
+
const createMockSWRCacheLayer = () => ({
|
|
80
|
+
get: vi.fn(),
|
|
81
|
+
put: vi.fn(),
|
|
82
|
+
invalidate: vi.fn(),
|
|
83
|
+
has: vi.fn(),
|
|
84
|
+
setOriginFetcher: vi.fn(),
|
|
85
|
+
getStats: vi.fn().mockReturnValue({
|
|
86
|
+
primaryHits: 0,
|
|
87
|
+
staleHits: 0,
|
|
88
|
+
misses: 0,
|
|
89
|
+
revalidations: 0,
|
|
90
|
+
writes: 0,
|
|
91
|
+
invalidations: 0,
|
|
92
|
+
bytesRead: 0,
|
|
93
|
+
bytesWritten: 0,
|
|
94
|
+
errors: 0,
|
|
95
|
+
primaryHitRatio: 0,
|
|
96
|
+
combinedHitRatio: 0,
|
|
97
|
+
}),
|
|
98
|
+
resetStats: vi.fn(),
|
|
99
|
+
getConfig: vi.fn(),
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
// Mock ExecutionContext
|
|
103
|
+
const createMockExecutionContext = (): ExecutionContext => ({
|
|
104
|
+
waitUntil: vi.fn(),
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
describe('TieredVFSWithSWR - SWR Cache Integration', () => {
|
|
108
|
+
let mockCacheLayer: ReturnType<typeof createMockCacheLayer>
|
|
109
|
+
let mockDOStorage: ReturnType<typeof createMockDOStorage>
|
|
110
|
+
let mockR2Layer: ReturnType<typeof createMockR2Layer>
|
|
111
|
+
let mockSWRCacheLayer: ReturnType<typeof createMockSWRCacheLayer>
|
|
112
|
+
|
|
113
|
+
beforeEach(() => {
|
|
114
|
+
vi.clearAllMocks()
|
|
115
|
+
mockCacheLayer = createMockCacheLayer()
|
|
116
|
+
mockDOStorage = createMockDOStorage()
|
|
117
|
+
mockR2Layer = createMockR2Layer()
|
|
118
|
+
mockSWRCacheLayer = createMockSWRCacheLayer()
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
describe('TieredVFSWithSWRConfig', () => {
|
|
122
|
+
it('should have required config fields', () => {
|
|
123
|
+
const config: TieredVFSWithSWRConfig = {
|
|
124
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
125
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
126
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
127
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
128
|
+
pageSize: 8192,
|
|
129
|
+
}
|
|
130
|
+
expect(config.cacheLayer).toBeDefined()
|
|
131
|
+
expect(config.doStorage).toBeDefined()
|
|
132
|
+
expect(config.r2Layer).toBeDefined()
|
|
133
|
+
expect(config.swrCacheLayer).toBeDefined()
|
|
134
|
+
expect(config.pageSize).toBe(8192)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('should support optional promotion threshold', () => {
|
|
138
|
+
const config: TieredVFSWithSWRConfig = {
|
|
139
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
140
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
141
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
142
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
143
|
+
pageSize: 8192,
|
|
144
|
+
promotionThreshold: 5,
|
|
145
|
+
}
|
|
146
|
+
expect(config.promotionThreshold).toBe(5)
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
it('should support optional autoPromote flag', () => {
|
|
150
|
+
const config: TieredVFSWithSWRConfig = {
|
|
151
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
152
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
153
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
154
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
155
|
+
pageSize: 8192,
|
|
156
|
+
autoPromote: true,
|
|
157
|
+
}
|
|
158
|
+
expect(config.autoPromote).toBe(true)
|
|
159
|
+
})
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
describe('createTieredVFSWithSWR()', () => {
|
|
163
|
+
it('should return a TieredVFSWithSWR instance', () => {
|
|
164
|
+
const config: TieredVFSWithSWRConfig = {
|
|
165
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
166
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
167
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
168
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
169
|
+
pageSize: 8192,
|
|
170
|
+
}
|
|
171
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
172
|
+
expect(vfs).toBeDefined()
|
|
173
|
+
expect(vfs).toBeInstanceOf(TieredVFSWithSWR)
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
it('should wire R2 as origin fetcher for SWR', () => {
|
|
177
|
+
const config: TieredVFSWithSWRConfig = {
|
|
178
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
179
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
180
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
181
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
182
|
+
pageSize: 8192,
|
|
183
|
+
}
|
|
184
|
+
createTieredVFSWithSWR(config)
|
|
185
|
+
expect(mockSWRCacheLayer.setOriginFetcher).toHaveBeenCalled()
|
|
186
|
+
})
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
describe('readPage() - SWR Fresh Cache Hit', () => {
|
|
190
|
+
it('should return fresh data immediately from SWR primary cache', async () => {
|
|
191
|
+
const data = new Uint8Array([1, 2, 3, 4, 5])
|
|
192
|
+
const swrResult: SWRResult = {
|
|
193
|
+
data,
|
|
194
|
+
hit: true,
|
|
195
|
+
stale: false,
|
|
196
|
+
revalidating: false,
|
|
197
|
+
}
|
|
198
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
199
|
+
|
|
200
|
+
const config: TieredVFSWithSWRConfig = {
|
|
201
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
202
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
203
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
204
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
205
|
+
pageSize: 8192,
|
|
206
|
+
}
|
|
207
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
208
|
+
|
|
209
|
+
const result = await vfs.readPage('page-123')
|
|
210
|
+
expect(result).toEqual(data)
|
|
211
|
+
expect(mockSWRCacheLayer.get).toHaveBeenCalledWith('page-123', undefined)
|
|
212
|
+
expect(mockDOStorage.get).not.toHaveBeenCalled()
|
|
213
|
+
expect(mockR2Layer.get).not.toHaveBeenCalled()
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
it('should track fresh cache hit in SWR stats', async () => {
|
|
217
|
+
const data = new Uint8Array([1, 2, 3])
|
|
218
|
+
const swrResult: SWRResult = {
|
|
219
|
+
data,
|
|
220
|
+
hit: true,
|
|
221
|
+
stale: false,
|
|
222
|
+
revalidating: false,
|
|
223
|
+
}
|
|
224
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
225
|
+
|
|
226
|
+
const config: TieredVFSWithSWRConfig = {
|
|
227
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
228
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
229
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
230
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
231
|
+
pageSize: 8192,
|
|
232
|
+
}
|
|
233
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
234
|
+
|
|
235
|
+
await vfs.readPage('page-123')
|
|
236
|
+
|
|
237
|
+
const stats = vfs.getStats()
|
|
238
|
+
expect(stats.swr.freshCacheHits).toBe(1)
|
|
239
|
+
expect(stats.swr.staleCacheHits).toBe(0)
|
|
240
|
+
expect(stats.swr.backgroundRevalidations).toBe(0)
|
|
241
|
+
})
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
describe('readPage() - SWR Stale Cache Hit', () => {
|
|
245
|
+
it('should return stale data and track stale hit', async () => {
|
|
246
|
+
const data = new Uint8Array([10, 20, 30])
|
|
247
|
+
const swrResult: SWRResult = {
|
|
248
|
+
data,
|
|
249
|
+
hit: true,
|
|
250
|
+
stale: true,
|
|
251
|
+
revalidating: false,
|
|
252
|
+
}
|
|
253
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
254
|
+
|
|
255
|
+
const config: TieredVFSWithSWRConfig = {
|
|
256
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
257
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
258
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
259
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
260
|
+
pageSize: 8192,
|
|
261
|
+
}
|
|
262
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
263
|
+
|
|
264
|
+
const result = await vfs.readPage('page-123')
|
|
265
|
+
expect(result).toEqual(data)
|
|
266
|
+
|
|
267
|
+
const stats = vfs.getStats()
|
|
268
|
+
expect(stats.swr.staleCacheHits).toBe(1)
|
|
269
|
+
expect(stats.swr.freshCacheHits).toBe(0)
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
it('should track background revalidation when triggered', async () => {
|
|
273
|
+
const data = new Uint8Array([10, 20, 30])
|
|
274
|
+
const swrResult: SWRResult = {
|
|
275
|
+
data,
|
|
276
|
+
hit: true,
|
|
277
|
+
stale: true,
|
|
278
|
+
revalidating: true, // Background revalidation was triggered
|
|
279
|
+
}
|
|
280
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
281
|
+
|
|
282
|
+
const ctx = createMockExecutionContext()
|
|
283
|
+
const config: TieredVFSWithSWRConfig = {
|
|
284
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
285
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
286
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
287
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
288
|
+
pageSize: 8192,
|
|
289
|
+
}
|
|
290
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
291
|
+
|
|
292
|
+
await vfs.readPage('page-123', { ctx })
|
|
293
|
+
|
|
294
|
+
const stats = vfs.getStats()
|
|
295
|
+
expect(stats.swr.staleCacheHits).toBe(1)
|
|
296
|
+
expect(stats.swr.backgroundRevalidations).toBe(1)
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
it('should pass execution context to SWR cache for background revalidation', async () => {
|
|
300
|
+
const swrResult: SWRResult = {
|
|
301
|
+
data: new Uint8Array([1, 2, 3]),
|
|
302
|
+
hit: true,
|
|
303
|
+
stale: true,
|
|
304
|
+
revalidating: true,
|
|
305
|
+
}
|
|
306
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
307
|
+
|
|
308
|
+
const ctx = createMockExecutionContext()
|
|
309
|
+
const config: TieredVFSWithSWRConfig = {
|
|
310
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
311
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
312
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
313
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
314
|
+
pageSize: 8192,
|
|
315
|
+
}
|
|
316
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
317
|
+
|
|
318
|
+
await vfs.readPage('page-123', { ctx })
|
|
319
|
+
|
|
320
|
+
expect(mockSWRCacheLayer.get).toHaveBeenCalledWith('page-123', ctx)
|
|
321
|
+
})
|
|
322
|
+
})
|
|
323
|
+
|
|
324
|
+
describe('readPage() - SWR Cache Miss', () => {
|
|
325
|
+
it('should fall back to DO storage on SWR cache miss', async () => {
|
|
326
|
+
const swrResult: SWRResult = {
|
|
327
|
+
data: null,
|
|
328
|
+
hit: false,
|
|
329
|
+
stale: false,
|
|
330
|
+
revalidating: false,
|
|
331
|
+
}
|
|
332
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
333
|
+
|
|
334
|
+
const data = new Uint8Array([100, 200])
|
|
335
|
+
mockDOStorage.get.mockResolvedValue(data)
|
|
336
|
+
|
|
337
|
+
const config: TieredVFSWithSWRConfig = {
|
|
338
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
339
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
340
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
341
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
342
|
+
pageSize: 8192,
|
|
343
|
+
}
|
|
344
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
345
|
+
|
|
346
|
+
const result = await vfs.readPage('page-123')
|
|
347
|
+
expect(result).toEqual(data)
|
|
348
|
+
expect(mockDOStorage.get).toHaveBeenCalledWith('page-123')
|
|
349
|
+
})
|
|
350
|
+
|
|
351
|
+
it('should populate SWR cache after warm tier hit', async () => {
|
|
352
|
+
const swrResult: SWRResult = {
|
|
353
|
+
data: null,
|
|
354
|
+
hit: false,
|
|
355
|
+
stale: false,
|
|
356
|
+
revalidating: false,
|
|
357
|
+
}
|
|
358
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
359
|
+
|
|
360
|
+
const data = new Uint8Array([100, 200])
|
|
361
|
+
mockDOStorage.get.mockResolvedValue(data)
|
|
362
|
+
|
|
363
|
+
const config: TieredVFSWithSWRConfig = {
|
|
364
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
365
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
366
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
367
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
368
|
+
pageSize: 8192,
|
|
369
|
+
}
|
|
370
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
371
|
+
|
|
372
|
+
await vfs.readPage('page-123')
|
|
373
|
+
|
|
374
|
+
expect(mockSWRCacheLayer.put).toHaveBeenCalledWith('page-123', data)
|
|
375
|
+
})
|
|
376
|
+
|
|
377
|
+
it('should fall back to R2 and populate SWR cache', async () => {
|
|
378
|
+
const swrResult: SWRResult = {
|
|
379
|
+
data: null,
|
|
380
|
+
hit: false,
|
|
381
|
+
stale: false,
|
|
382
|
+
revalidating: false,
|
|
383
|
+
}
|
|
384
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
385
|
+
mockDOStorage.get.mockResolvedValue(undefined)
|
|
386
|
+
|
|
387
|
+
const data = new Uint8Array([50, 60, 70])
|
|
388
|
+
mockR2Layer.get.mockResolvedValue(data)
|
|
389
|
+
|
|
390
|
+
const config: TieredVFSWithSWRConfig = {
|
|
391
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
392
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
393
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
394
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
395
|
+
pageSize: 8192,
|
|
396
|
+
}
|
|
397
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
398
|
+
|
|
399
|
+
const result = await vfs.readPage('page-123')
|
|
400
|
+
expect(result).toEqual(data)
|
|
401
|
+
expect(mockSWRCacheLayer.put).toHaveBeenCalledWith('page-123', data)
|
|
402
|
+
})
|
|
403
|
+
|
|
404
|
+
it('should return null when page not found in any tier', async () => {
|
|
405
|
+
const swrResult: SWRResult = {
|
|
406
|
+
data: null,
|
|
407
|
+
hit: false,
|
|
408
|
+
stale: false,
|
|
409
|
+
revalidating: false,
|
|
410
|
+
}
|
|
411
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
412
|
+
mockDOStorage.get.mockResolvedValue(undefined)
|
|
413
|
+
mockR2Layer.get.mockResolvedValue(null)
|
|
414
|
+
|
|
415
|
+
const config: TieredVFSWithSWRConfig = {
|
|
416
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
417
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
418
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
419
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
420
|
+
pageSize: 8192,
|
|
421
|
+
}
|
|
422
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
423
|
+
|
|
424
|
+
const result = await vfs.readPage('nonexistent')
|
|
425
|
+
expect(result).toBeNull()
|
|
426
|
+
})
|
|
427
|
+
})
|
|
428
|
+
|
|
429
|
+
describe('readPageWithLocation()', () => {
|
|
430
|
+
it('should return hot tier with stale flag for stale SWR hit', async () => {
|
|
431
|
+
const data = new Uint8Array([1, 2, 3])
|
|
432
|
+
const swrResult: SWRResult = {
|
|
433
|
+
data,
|
|
434
|
+
hit: true,
|
|
435
|
+
stale: true,
|
|
436
|
+
revalidating: true,
|
|
437
|
+
}
|
|
438
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
439
|
+
|
|
440
|
+
const config: TieredVFSWithSWRConfig = {
|
|
441
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
442
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
443
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
444
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
445
|
+
pageSize: 8192,
|
|
446
|
+
}
|
|
447
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
448
|
+
|
|
449
|
+
const result = await vfs.readPageWithLocation('page-123')
|
|
450
|
+
expect(result?.tier).toBe('hot')
|
|
451
|
+
expect(result?.stale).toBe(true)
|
|
452
|
+
})
|
|
453
|
+
|
|
454
|
+
it('should return hot tier without stale flag for fresh SWR hit', async () => {
|
|
455
|
+
const data = new Uint8Array([1, 2, 3])
|
|
456
|
+
const swrResult: SWRResult = {
|
|
457
|
+
data,
|
|
458
|
+
hit: true,
|
|
459
|
+
stale: false,
|
|
460
|
+
revalidating: false,
|
|
461
|
+
}
|
|
462
|
+
mockSWRCacheLayer.get.mockResolvedValue(swrResult)
|
|
463
|
+
|
|
464
|
+
const config: TieredVFSWithSWRConfig = {
|
|
465
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
466
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
467
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
468
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
469
|
+
pageSize: 8192,
|
|
470
|
+
}
|
|
471
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
472
|
+
|
|
473
|
+
const result = await vfs.readPageWithLocation('page-123')
|
|
474
|
+
expect(result?.tier).toBe('hot')
|
|
475
|
+
expect(result?.stale).toBe(false)
|
|
476
|
+
})
|
|
477
|
+
})
|
|
478
|
+
|
|
479
|
+
describe('writePage()', () => {
|
|
480
|
+
it('should update SWR cache on warm tier write', async () => {
|
|
481
|
+
const config: TieredVFSWithSWRConfig = {
|
|
482
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
483
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
484
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
485
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
486
|
+
pageSize: 8192,
|
|
487
|
+
}
|
|
488
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
489
|
+
|
|
490
|
+
const data = new Uint8Array([1, 2, 3])
|
|
491
|
+
await vfs.writePage('page-456', data)
|
|
492
|
+
|
|
493
|
+
expect(mockDOStorage.put).toHaveBeenCalledWith('page-456', data)
|
|
494
|
+
expect(mockSWRCacheLayer.put).toHaveBeenCalledWith('page-456', data)
|
|
495
|
+
})
|
|
496
|
+
|
|
497
|
+
it('should update both caches on hot tier write', async () => {
|
|
498
|
+
const config: TieredVFSWithSWRConfig = {
|
|
499
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
500
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
501
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
502
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
503
|
+
pageSize: 8192,
|
|
504
|
+
}
|
|
505
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
506
|
+
|
|
507
|
+
const data = new Uint8Array([1, 2, 3])
|
|
508
|
+
await vfs.writePage('page-456', data, { tier: 'hot' })
|
|
509
|
+
|
|
510
|
+
expect(mockDOStorage.put).toHaveBeenCalledWith('page-456', data)
|
|
511
|
+
expect(mockCacheLayer.put).toHaveBeenCalled()
|
|
512
|
+
expect(mockSWRCacheLayer.put).toHaveBeenCalledWith('page-456', data)
|
|
513
|
+
})
|
|
514
|
+
|
|
515
|
+
it('should invalidate SWR cache on cold tier write', async () => {
|
|
516
|
+
const config: TieredVFSWithSWRConfig = {
|
|
517
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
518
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
519
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
520
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
521
|
+
pageSize: 8192,
|
|
522
|
+
}
|
|
523
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
524
|
+
|
|
525
|
+
const data = new Uint8Array([1, 2, 3])
|
|
526
|
+
await vfs.writePage('page-456', data, { tier: 'cold' })
|
|
527
|
+
|
|
528
|
+
expect(mockR2Layer.put).toHaveBeenCalled()
|
|
529
|
+
expect(mockSWRCacheLayer.invalidate).toHaveBeenCalledWith('page-456')
|
|
530
|
+
})
|
|
531
|
+
})
|
|
532
|
+
|
|
533
|
+
describe('deletePage()', () => {
|
|
534
|
+
it('should invalidate SWR cache on delete', async () => {
|
|
535
|
+
mockCacheLayer.delete.mockResolvedValue(true)
|
|
536
|
+
mockR2Layer.delete.mockResolvedValue(undefined)
|
|
537
|
+
|
|
538
|
+
const config: TieredVFSWithSWRConfig = {
|
|
539
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
540
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
541
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
542
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
543
|
+
pageSize: 8192,
|
|
544
|
+
}
|
|
545
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
546
|
+
|
|
547
|
+
await vfs.deletePage('page-789')
|
|
548
|
+
|
|
549
|
+
expect(mockSWRCacheLayer.invalidate).toHaveBeenCalledWith('page-789')
|
|
550
|
+
expect(mockCacheLayer.delete).toHaveBeenCalledWith('page-789')
|
|
551
|
+
expect(mockDOStorage.delete).toHaveBeenCalledWith('page-789')
|
|
552
|
+
expect(mockR2Layer.delete).toHaveBeenCalledWith('page-789')
|
|
553
|
+
})
|
|
554
|
+
})
|
|
555
|
+
|
|
556
|
+
describe('locatePage()', () => {
|
|
557
|
+
it('should check SWR cache for hot tier', async () => {
|
|
558
|
+
mockSWRCacheLayer.has.mockResolvedValue(true)
|
|
559
|
+
|
|
560
|
+
const config: TieredVFSWithSWRConfig = {
|
|
561
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
562
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
563
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
564
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
565
|
+
pageSize: 8192,
|
|
566
|
+
}
|
|
567
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
568
|
+
|
|
569
|
+
const location = await vfs.locatePage('page-123')
|
|
570
|
+
expect(location.tier).toBe('hot')
|
|
571
|
+
expect(location.found).toBe(true)
|
|
572
|
+
})
|
|
573
|
+
|
|
574
|
+
it('should fall back to standard cache check', async () => {
|
|
575
|
+
mockSWRCacheLayer.has.mockResolvedValue(false)
|
|
576
|
+
mockCacheLayer.has.mockResolvedValue(true)
|
|
577
|
+
|
|
578
|
+
const config: TieredVFSWithSWRConfig = {
|
|
579
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
580
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
581
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
582
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
583
|
+
pageSize: 8192,
|
|
584
|
+
}
|
|
585
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
586
|
+
|
|
587
|
+
const location = await vfs.locatePage('page-123')
|
|
588
|
+
expect(location.tier).toBe('hot')
|
|
589
|
+
expect(location.found).toBe(true)
|
|
590
|
+
})
|
|
591
|
+
})
|
|
592
|
+
|
|
593
|
+
describe('getStats()', () => {
|
|
594
|
+
it('should include SWR stats in combined stats', () => {
|
|
595
|
+
const config: TieredVFSWithSWRConfig = {
|
|
596
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
597
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
598
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
599
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
600
|
+
pageSize: 8192,
|
|
601
|
+
}
|
|
602
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
603
|
+
|
|
604
|
+
const stats = vfs.getStats()
|
|
605
|
+
expect(stats.swr).toBeDefined()
|
|
606
|
+
expect(stats.swr.enabled).toBe(true)
|
|
607
|
+
expect(stats.swr.freshCacheHits).toBe(0)
|
|
608
|
+
expect(stats.swr.staleCacheHits).toBe(0)
|
|
609
|
+
expect(stats.swr.backgroundRevalidations).toBe(0)
|
|
610
|
+
})
|
|
611
|
+
})
|
|
612
|
+
|
|
613
|
+
describe('getSWRStats()', () => {
|
|
614
|
+
it('should return SWR-specific stats', async () => {
|
|
615
|
+
const data = new Uint8Array([1, 2, 3])
|
|
616
|
+
|
|
617
|
+
// First call - fresh hit
|
|
618
|
+
mockSWRCacheLayer.get.mockResolvedValueOnce({
|
|
619
|
+
data,
|
|
620
|
+
hit: true,
|
|
621
|
+
stale: false,
|
|
622
|
+
revalidating: false,
|
|
623
|
+
})
|
|
624
|
+
|
|
625
|
+
// Second call - stale hit with revalidation
|
|
626
|
+
mockSWRCacheLayer.get.mockResolvedValueOnce({
|
|
627
|
+
data,
|
|
628
|
+
hit: true,
|
|
629
|
+
stale: true,
|
|
630
|
+
revalidating: true,
|
|
631
|
+
})
|
|
632
|
+
|
|
633
|
+
const config: TieredVFSWithSWRConfig = {
|
|
634
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
635
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
636
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
637
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
638
|
+
pageSize: 8192,
|
|
639
|
+
}
|
|
640
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
641
|
+
|
|
642
|
+
await vfs.readPage('page-1')
|
|
643
|
+
await vfs.readPage('page-2')
|
|
644
|
+
|
|
645
|
+
const swrStats = vfs.getSWRStats()
|
|
646
|
+
expect(swrStats.freshCacheHits).toBe(1)
|
|
647
|
+
expect(swrStats.staleCacheHits).toBe(1)
|
|
648
|
+
expect(swrStats.backgroundRevalidations).toBe(1)
|
|
649
|
+
expect(swrStats.enabled).toBe(true)
|
|
650
|
+
})
|
|
651
|
+
})
|
|
652
|
+
|
|
653
|
+
describe('resetStats()', () => {
|
|
654
|
+
it('should reset SWR stats', async () => {
|
|
655
|
+
const data = new Uint8Array([1, 2, 3])
|
|
656
|
+
mockSWRCacheLayer.get.mockResolvedValue({
|
|
657
|
+
data,
|
|
658
|
+
hit: true,
|
|
659
|
+
stale: false,
|
|
660
|
+
revalidating: false,
|
|
661
|
+
})
|
|
662
|
+
|
|
663
|
+
const config: TieredVFSWithSWRConfig = {
|
|
664
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
665
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
666
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
667
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
668
|
+
pageSize: 8192,
|
|
669
|
+
}
|
|
670
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
671
|
+
|
|
672
|
+
await vfs.readPage('page-123')
|
|
673
|
+
expect(vfs.getSWRStats().freshCacheHits).toBe(1)
|
|
674
|
+
|
|
675
|
+
vfs.resetStats()
|
|
676
|
+
expect(vfs.getSWRStats().freshCacheHits).toBe(0)
|
|
677
|
+
expect(mockSWRCacheLayer.resetStats).toHaveBeenCalled()
|
|
678
|
+
})
|
|
679
|
+
})
|
|
680
|
+
|
|
681
|
+
describe('isSWREnabled()', () => {
|
|
682
|
+
it('should always return true for TieredVFSWithSWR', () => {
|
|
683
|
+
const config: TieredVFSWithSWRConfig = {
|
|
684
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
685
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
686
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
687
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
688
|
+
pageSize: 8192,
|
|
689
|
+
}
|
|
690
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
691
|
+
|
|
692
|
+
expect(vfs.isSWREnabled()).toBe(true)
|
|
693
|
+
})
|
|
694
|
+
})
|
|
695
|
+
|
|
696
|
+
describe('Promotion with SWR', () => {
|
|
697
|
+
it('should update both caches when promoting to hot', async () => {
|
|
698
|
+
const data = new Uint8Array([1, 2, 3])
|
|
699
|
+
mockDOStorage.get.mockResolvedValue(data)
|
|
700
|
+
|
|
701
|
+
const config: TieredVFSWithSWRConfig = {
|
|
702
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
703
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
704
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
705
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
706
|
+
pageSize: 8192,
|
|
707
|
+
}
|
|
708
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
709
|
+
|
|
710
|
+
await vfs.promoteToHot('page-123')
|
|
711
|
+
|
|
712
|
+
expect(mockCacheLayer.put).toHaveBeenCalled()
|
|
713
|
+
expect(mockSWRCacheLayer.put).toHaveBeenCalledWith('page-123', data)
|
|
714
|
+
})
|
|
715
|
+
})
|
|
716
|
+
|
|
717
|
+
describe('Demotion with SWR', () => {
|
|
718
|
+
it('should invalidate SWR cache when demoting from hot', async () => {
|
|
719
|
+
mockCacheLayer.delete.mockResolvedValue(true)
|
|
720
|
+
|
|
721
|
+
const config: TieredVFSWithSWRConfig = {
|
|
722
|
+
cacheLayer: mockCacheLayer as unknown as CacheLayer,
|
|
723
|
+
doStorage: mockDOStorage as unknown as DurableObjectStorage,
|
|
724
|
+
r2Layer: mockR2Layer as unknown as R2StorageLayer,
|
|
725
|
+
swrCacheLayer: mockSWRCacheLayer as unknown as SWRCacheLayer,
|
|
726
|
+
pageSize: 8192,
|
|
727
|
+
}
|
|
728
|
+
const vfs = createTieredVFSWithSWR(config)
|
|
729
|
+
|
|
730
|
+
await vfs.demoteFromHot('page-123')
|
|
731
|
+
|
|
732
|
+
expect(mockCacheLayer.delete).toHaveBeenCalledWith('page-123')
|
|
733
|
+
expect(mockSWRCacheLayer.invalidate).toHaveBeenCalledWith('page-123')
|
|
734
|
+
})
|
|
735
|
+
})
|
|
736
|
+
})
|