@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,1023 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type Utilities for postgres.do
|
|
3
|
+
*
|
|
4
|
+
* Reusable type patterns and utilities for improved type safety and inference.
|
|
5
|
+
* This module provides foundational type utilities used throughout the codebase.
|
|
6
|
+
*
|
|
7
|
+
* ## Type Categories
|
|
8
|
+
*
|
|
9
|
+
* 1. **Nullable Types** - Safe handling of null/undefined
|
|
10
|
+
* 2. **Constructor Types** - Class instantiation patterns
|
|
11
|
+
* 3. **Result Types** - Success/failure discriminated unions
|
|
12
|
+
* 4. **Deep Types** - Recursive type transformations
|
|
13
|
+
* 5. **Async Types** - Promise and awaitable patterns
|
|
14
|
+
* 6. **Record Utilities** - Object manipulation types
|
|
15
|
+
* 7. **Function Utilities** - Function signature types
|
|
16
|
+
*
|
|
17
|
+
* @module types/utilities
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// =============================================================================
|
|
21
|
+
// Nullable Types
|
|
22
|
+
// =============================================================================
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Makes a type nullable (T | null).
|
|
26
|
+
*
|
|
27
|
+
* @typeParam T - The base type to make nullable
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* type MaybeUser = Nullable<User>
|
|
32
|
+
* // Equivalent to: User | null
|
|
33
|
+
*
|
|
34
|
+
* function findUser(id: string): Nullable<User> {
|
|
35
|
+
* return users.get(id) ?? null
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export type Nullable<T> = T | null
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Makes a type optional (T | undefined).
|
|
43
|
+
*
|
|
44
|
+
* @typeParam T - The base type to make optional
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* type MaybeConfig = Optional<Config>
|
|
49
|
+
* // Equivalent to: Config | undefined
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export type Optional<T> = T | undefined
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Makes a type nullable and optional (T | null | undefined).
|
|
56
|
+
* Also known as "Maybe" in some type systems.
|
|
57
|
+
*
|
|
58
|
+
* @typeParam T - The base type
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* type MaybeValue = Maybe<string>
|
|
63
|
+
* // Equivalent to: string | null | undefined
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export type Maybe<T> = T | null | undefined
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Excludes null and undefined from a type.
|
|
70
|
+
* Useful for asserting non-nullable values.
|
|
71
|
+
*
|
|
72
|
+
* @typeParam T - The type to make non-nullable
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* type Value = Maybe<string>
|
|
77
|
+
* type DefiniteValue = NonNullish<Value>
|
|
78
|
+
* // Result: string
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export type NonNullish<T> = Exclude<T, null | undefined>
|
|
82
|
+
|
|
83
|
+
// =============================================================================
|
|
84
|
+
// Constructor Types
|
|
85
|
+
// =============================================================================
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Represents a constructor function that creates instances of type T.
|
|
89
|
+
*
|
|
90
|
+
* @typeParam T - The type of instances created (defaults to object)
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* // Mixin pattern
|
|
95
|
+
* function withLogging<T extends Constructor>(Base: T) {
|
|
96
|
+
* return class extends Base {
|
|
97
|
+
* log(message: string) {
|
|
98
|
+
* console.log(message)
|
|
99
|
+
* }
|
|
100
|
+
* }
|
|
101
|
+
* }
|
|
102
|
+
*
|
|
103
|
+
* const LoggingUser = withLogging(User)
|
|
104
|
+
* const user = new LoggingUser()
|
|
105
|
+
* user.log('Hello')
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export type Constructor<T = object> = new (...args: unknown[]) => T
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Constructor with specific argument types.
|
|
112
|
+
*
|
|
113
|
+
* @typeParam T - The type of instances created
|
|
114
|
+
* @typeParam Args - Tuple of constructor argument types
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* type UserConstructor = ConstructorWithArgs<User, [string, number]>
|
|
119
|
+
* // Represents: new (name: string, age: number) => User
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export type ConstructorWithArgs<T, Args extends unknown[]> = new (...args: Args) => T
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Abstract constructor for abstract class patterns.
|
|
126
|
+
*
|
|
127
|
+
* @typeParam T - The type of instances created
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* abstract class BaseService {
|
|
132
|
+
* abstract process(): void
|
|
133
|
+
* }
|
|
134
|
+
*
|
|
135
|
+
* function createService<T extends AbstractConstructor<BaseService>>(
|
|
136
|
+
* ServiceClass: T
|
|
137
|
+
* ): InstanceType<T> {
|
|
138
|
+
* // ...
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export type AbstractConstructor<T = object> = abstract new (...args: unknown[]) => T
|
|
143
|
+
|
|
144
|
+
// =============================================================================
|
|
145
|
+
// Result Types (Discriminated Unions)
|
|
146
|
+
// =============================================================================
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Represents a successful result with a value.
|
|
150
|
+
*
|
|
151
|
+
* @typeParam T - The type of the success value
|
|
152
|
+
*/
|
|
153
|
+
export interface Success<T> {
|
|
154
|
+
readonly success: true
|
|
155
|
+
readonly value: T
|
|
156
|
+
readonly error?: never
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Represents a failed result with an error.
|
|
161
|
+
*
|
|
162
|
+
* @typeParam E - The type of the error (defaults to Error)
|
|
163
|
+
*/
|
|
164
|
+
export interface Failure<E = Error> {
|
|
165
|
+
readonly success: false
|
|
166
|
+
readonly value?: never
|
|
167
|
+
readonly error: E
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Result type for operations that can succeed or fail.
|
|
172
|
+
* Use this for explicit error handling without exceptions.
|
|
173
|
+
*
|
|
174
|
+
* @typeParam T - The success value type
|
|
175
|
+
* @typeParam E - The error type (defaults to Error)
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* function parseJson<T>(json: string): Result<T, SyntaxError> {
|
|
180
|
+
* try {
|
|
181
|
+
* return { success: true, value: JSON.parse(json) }
|
|
182
|
+
* } catch (e) {
|
|
183
|
+
* return { success: false, error: e as SyntaxError }
|
|
184
|
+
* }
|
|
185
|
+
* }
|
|
186
|
+
*
|
|
187
|
+
* const result = parseJson<User>('{"name":"John"}')
|
|
188
|
+
* if (result.success) {
|
|
189
|
+
* console.log(result.value.name) // TypeScript knows value exists
|
|
190
|
+
* } else {
|
|
191
|
+
* console.error(result.error.message) // TypeScript knows error exists
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export type Result<T, E = Error> = Success<T> | Failure<E>
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Async result for operations that return promises.
|
|
199
|
+
*
|
|
200
|
+
* @typeParam T - The success value type
|
|
201
|
+
* @typeParam E - The error type
|
|
202
|
+
*/
|
|
203
|
+
export type AsyncResult<T, E = Error> = Promise<Result<T, E>>
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Creates a success result.
|
|
207
|
+
*
|
|
208
|
+
* @param value - The success value
|
|
209
|
+
* @returns A Success result
|
|
210
|
+
*/
|
|
211
|
+
export function success<T>(value: T): Success<T> {
|
|
212
|
+
return { success: true, value }
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Creates a failure result.
|
|
217
|
+
*
|
|
218
|
+
* @param error - The error
|
|
219
|
+
* @returns A Failure result
|
|
220
|
+
*/
|
|
221
|
+
export function failure<E = Error>(error: E): Failure<E> {
|
|
222
|
+
return { success: false, error }
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Type guard to check if a Result is a Success.
|
|
227
|
+
*
|
|
228
|
+
* @param result - The result to check
|
|
229
|
+
* @returns true if the result is a Success
|
|
230
|
+
*/
|
|
231
|
+
export function isSuccess<T, E>(result: Result<T, E>): result is Success<T> {
|
|
232
|
+
return result.success === true
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Type guard to check if a Result is a Failure.
|
|
237
|
+
*
|
|
238
|
+
* @param result - The result to check
|
|
239
|
+
* @returns true if the result is a Failure
|
|
240
|
+
*/
|
|
241
|
+
export function isFailure<T, E>(result: Result<T, E>): result is Failure<E> {
|
|
242
|
+
return result.success === false
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// =============================================================================
|
|
246
|
+
// Deep Types
|
|
247
|
+
// =============================================================================
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Recursively makes all properties of T optional.
|
|
251
|
+
*
|
|
252
|
+
* @typeParam T - The type to make deeply partial
|
|
253
|
+
*
|
|
254
|
+
* @example
|
|
255
|
+
* ```typescript
|
|
256
|
+
* interface Config {
|
|
257
|
+
* database: {
|
|
258
|
+
* host: string
|
|
259
|
+
* port: number
|
|
260
|
+
* }
|
|
261
|
+
* }
|
|
262
|
+
*
|
|
263
|
+
* type PartialConfig = DeepPartial<Config>
|
|
264
|
+
* // All nested properties are optional:
|
|
265
|
+
* // { database?: { host?: string; port?: number } }
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
export type DeepPartial<T> = T extends object
|
|
269
|
+
? { [P in keyof T]?: DeepPartial<T[P]> }
|
|
270
|
+
: T
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Recursively makes all properties of T required.
|
|
274
|
+
*
|
|
275
|
+
* @typeParam T - The type to make deeply required
|
|
276
|
+
*/
|
|
277
|
+
export type DeepRequired<T> = T extends object
|
|
278
|
+
? { [P in keyof T]-?: DeepRequired<T[P]> }
|
|
279
|
+
: T
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Recursively makes all properties of T readonly.
|
|
283
|
+
*
|
|
284
|
+
* @typeParam T - The type to make deeply readonly
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* const config: DeepReadonly<Config> = { ... }
|
|
289
|
+
* config.database.host = 'new' // Error: Cannot assign to readonly property
|
|
290
|
+
* ```
|
|
291
|
+
*/
|
|
292
|
+
export type DeepReadonly<T> = T extends object
|
|
293
|
+
? { readonly [P in keyof T]: DeepReadonly<T[P]> }
|
|
294
|
+
: T
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Recursively makes all properties of T mutable (removes readonly).
|
|
298
|
+
*
|
|
299
|
+
* @typeParam T - The type to make deeply mutable
|
|
300
|
+
*/
|
|
301
|
+
export type DeepMutable<T> = T extends object
|
|
302
|
+
? { -readonly [P in keyof T]: DeepMutable<T[P]> }
|
|
303
|
+
: T
|
|
304
|
+
|
|
305
|
+
// =============================================================================
|
|
306
|
+
// Async Types
|
|
307
|
+
// =============================================================================
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Extracts the resolved type from a Promise.
|
|
311
|
+
*
|
|
312
|
+
* @typeParam T - The Promise type
|
|
313
|
+
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```typescript
|
|
316
|
+
* type Result = Awaited<Promise<string>>
|
|
317
|
+
* // Result: string
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
export type Awaited<T> = T extends Promise<infer U> ? U : T
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Represents a value that might be a Promise.
|
|
324
|
+
*
|
|
325
|
+
* @typeParam T - The base type
|
|
326
|
+
*
|
|
327
|
+
* @example
|
|
328
|
+
* ```typescript
|
|
329
|
+
* function process(value: MaybePromise<string>): Promise<string> {
|
|
330
|
+
* return Promise.resolve(value)
|
|
331
|
+
* }
|
|
332
|
+
*
|
|
333
|
+
* process('sync') // Works
|
|
334
|
+
* process(Promise.resolve('async')) // Also works
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
337
|
+
export type MaybePromise<T> = T | Promise<T>
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Alias for MaybePromise - common in async APIs.
|
|
341
|
+
*/
|
|
342
|
+
export type Awaitable<T> = MaybePromise<T>
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Makes a function return type async (wrapped in Promise).
|
|
346
|
+
*
|
|
347
|
+
* @typeParam F - The function type
|
|
348
|
+
*/
|
|
349
|
+
export type AsyncFunction<F extends (...args: unknown[]) => unknown> = (
|
|
350
|
+
...args: Parameters<F>
|
|
351
|
+
) => Promise<ReturnType<F>>
|
|
352
|
+
|
|
353
|
+
// =============================================================================
|
|
354
|
+
// Record Utilities
|
|
355
|
+
// =============================================================================
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* A record with string keys and values of type T.
|
|
359
|
+
*
|
|
360
|
+
* @typeParam T - The value type
|
|
361
|
+
*
|
|
362
|
+
* @example
|
|
363
|
+
* ```typescript
|
|
364
|
+
* type Headers = StringRecord<string>
|
|
365
|
+
* // Equivalent to: Record<string, string>
|
|
366
|
+
* ```
|
|
367
|
+
*/
|
|
368
|
+
export type StringRecord<T> = Record<string, T>
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Extract keys of T that have values of type V.
|
|
372
|
+
*
|
|
373
|
+
* @typeParam T - The object type
|
|
374
|
+
* @typeParam V - The value type to match
|
|
375
|
+
*
|
|
376
|
+
* @example
|
|
377
|
+
* ```typescript
|
|
378
|
+
* interface User {
|
|
379
|
+
* id: number
|
|
380
|
+
* name: string
|
|
381
|
+
* email: string
|
|
382
|
+
* }
|
|
383
|
+
*
|
|
384
|
+
* type StringKeys = KeysOfType<User, string>
|
|
385
|
+
* // Result: 'name' | 'email'
|
|
386
|
+
* ```
|
|
387
|
+
*/
|
|
388
|
+
export type KeysOfType<T, V> = {
|
|
389
|
+
[K in keyof T]: T[K] extends V ? K : never
|
|
390
|
+
}[keyof T]
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Pick properties from T where value extends V.
|
|
394
|
+
*
|
|
395
|
+
* @typeParam T - The source object type
|
|
396
|
+
* @typeParam V - The value type to filter by
|
|
397
|
+
*/
|
|
398
|
+
export type PickByType<T, V> = Pick<T, KeysOfType<T, V>>
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Omit properties from T where value extends V.
|
|
402
|
+
*
|
|
403
|
+
* @typeParam T - The source object type
|
|
404
|
+
* @typeParam V - The value type to filter by
|
|
405
|
+
*/
|
|
406
|
+
export type OmitByType<T, V> = Omit<T, KeysOfType<T, V>>
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Make specific properties of T required while keeping others unchanged.
|
|
410
|
+
*
|
|
411
|
+
* @typeParam T - The base type
|
|
412
|
+
* @typeParam K - Keys to make required
|
|
413
|
+
*
|
|
414
|
+
* @example
|
|
415
|
+
* ```typescript
|
|
416
|
+
* interface Config {
|
|
417
|
+
* host?: string
|
|
418
|
+
* port?: number
|
|
419
|
+
* debug?: boolean
|
|
420
|
+
* }
|
|
421
|
+
*
|
|
422
|
+
* type RequiredHostConfig = RequireKeys<Config, 'host'>
|
|
423
|
+
* // Result: { host: string; port?: number; debug?: boolean }
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
export type RequireKeys<T, K extends keyof T> = T & Required<Pick<T, K>>
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Make specific properties of T optional while keeping others unchanged.
|
|
430
|
+
*
|
|
431
|
+
* @typeParam T - The base type
|
|
432
|
+
* @typeParam K - Keys to make optional
|
|
433
|
+
*/
|
|
434
|
+
export type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Get the value type of a Record or object literal.
|
|
438
|
+
*
|
|
439
|
+
* @typeParam T - The object type
|
|
440
|
+
*/
|
|
441
|
+
export type ValueOf<T> = T[keyof T]
|
|
442
|
+
|
|
443
|
+
// =============================================================================
|
|
444
|
+
// Function Utilities
|
|
445
|
+
// =============================================================================
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Any function type (use sparingly, prefer specific types).
|
|
449
|
+
*/
|
|
450
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
451
|
+
export type AnyFunction = (...args: any[]) => any
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* A function that takes no arguments and returns void.
|
|
455
|
+
*/
|
|
456
|
+
export type VoidFunction = () => void
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* A function that takes no arguments and returns T.
|
|
460
|
+
*/
|
|
461
|
+
export type Thunk<T> = () => T
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* A predicate function that tests a value.
|
|
465
|
+
*
|
|
466
|
+
* @typeParam T - The type being tested
|
|
467
|
+
*/
|
|
468
|
+
export type Predicate<T> = (value: T) => boolean
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* A type guard predicate function.
|
|
472
|
+
*
|
|
473
|
+
* @typeParam T - The input type
|
|
474
|
+
* @typeParam U - The narrowed type (must extend T)
|
|
475
|
+
*/
|
|
476
|
+
export type TypeGuard<T, U extends T> = (value: T) => value is U
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Extract the first parameter type of a function.
|
|
480
|
+
*/
|
|
481
|
+
export type FirstParameter<F extends AnyFunction> = Parameters<F>[0]
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Extract the last parameter type of a function.
|
|
485
|
+
*/
|
|
486
|
+
export type LastParameter<F extends AnyFunction> = Parameters<F> extends [...unknown[], infer L]
|
|
487
|
+
? L
|
|
488
|
+
: never
|
|
489
|
+
|
|
490
|
+
// =============================================================================
|
|
491
|
+
// Utility Type Guards
|
|
492
|
+
// =============================================================================
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Type guard to check if a value is not null or undefined.
|
|
496
|
+
*
|
|
497
|
+
* @param value - The value to check
|
|
498
|
+
* @returns true if value is neither null nor undefined
|
|
499
|
+
*
|
|
500
|
+
* @example
|
|
501
|
+
* ```typescript
|
|
502
|
+
* const values = [1, null, 2, undefined, 3]
|
|
503
|
+
* const defined = values.filter(isDefined)
|
|
504
|
+
* // defined: number[] = [1, 2, 3]
|
|
505
|
+
* ```
|
|
506
|
+
*/
|
|
507
|
+
export function isDefined<T>(value: T | null | undefined): value is T {
|
|
508
|
+
return value !== null && value !== undefined
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* Type guard to check if a value is a string.
|
|
513
|
+
*
|
|
514
|
+
* @param value - The value to check
|
|
515
|
+
* @returns true if value is a string
|
|
516
|
+
*/
|
|
517
|
+
export function isString(value: unknown): value is string {
|
|
518
|
+
return typeof value === 'string'
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Type guard to check if a value is a number (and not NaN).
|
|
523
|
+
*
|
|
524
|
+
* @param value - The value to check
|
|
525
|
+
* @returns true if value is a finite number
|
|
526
|
+
*/
|
|
527
|
+
export function isNumber(value: unknown): value is number {
|
|
528
|
+
return typeof value === 'number' && !Number.isNaN(value)
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Type guard to check if a value is a boolean.
|
|
533
|
+
*
|
|
534
|
+
* @param value - The value to check
|
|
535
|
+
* @returns true if value is a boolean
|
|
536
|
+
*/
|
|
537
|
+
export function isBoolean(value: unknown): value is boolean {
|
|
538
|
+
return typeof value === 'boolean'
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Type guard to check if a value is a plain object.
|
|
543
|
+
*
|
|
544
|
+
* @param value - The value to check
|
|
545
|
+
* @returns true if value is a plain object (not null, array, or other types)
|
|
546
|
+
*/
|
|
547
|
+
export function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
548
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Type guard to check if a value is an array.
|
|
553
|
+
*
|
|
554
|
+
* @param value - The value to check
|
|
555
|
+
* @returns true if value is an array
|
|
556
|
+
*/
|
|
557
|
+
export function isArray<T = unknown>(value: unknown): value is T[] {
|
|
558
|
+
return Array.isArray(value)
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Type guard to check if a value is a function.
|
|
563
|
+
*
|
|
564
|
+
* @param value - The value to check
|
|
565
|
+
* @returns true if value is a function
|
|
566
|
+
*/
|
|
567
|
+
export function isFunction(value: unknown): value is AnyFunction {
|
|
568
|
+
return typeof value === 'function'
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* Type guard to check if a value is a Promise.
|
|
573
|
+
*
|
|
574
|
+
* @param value - The value to check
|
|
575
|
+
* @returns true if value is a Promise
|
|
576
|
+
*/
|
|
577
|
+
export function isPromise<T = unknown>(value: unknown): value is Promise<T> {
|
|
578
|
+
return value instanceof Promise || (
|
|
579
|
+
isPlainObject(value) &&
|
|
580
|
+
isFunction((value as { then?: unknown }).then)
|
|
581
|
+
)
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Type guard to check if a value is an Error.
|
|
586
|
+
*
|
|
587
|
+
* @param value - The value to check
|
|
588
|
+
* @returns true if value is an Error
|
|
589
|
+
*/
|
|
590
|
+
export function isError(value: unknown): value is Error {
|
|
591
|
+
return value instanceof Error
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
// =============================================================================
|
|
595
|
+
// Assertion Utilities
|
|
596
|
+
// =============================================================================
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* Assert that a value is defined (not null or undefined).
|
|
600
|
+
* Throws an error if the assertion fails.
|
|
601
|
+
*
|
|
602
|
+
* @param value - The value to check
|
|
603
|
+
* @param message - Optional error message
|
|
604
|
+
* @throws Error if value is null or undefined
|
|
605
|
+
*
|
|
606
|
+
* @example
|
|
607
|
+
* ```typescript
|
|
608
|
+
* const user = users.get(id)
|
|
609
|
+
* assertDefined(user, `User ${id} not found`)
|
|
610
|
+
* // user is now narrowed to non-nullable type
|
|
611
|
+
* console.log(user.name)
|
|
612
|
+
* ```
|
|
613
|
+
*/
|
|
614
|
+
export function assertDefined<T>(
|
|
615
|
+
value: T | null | undefined,
|
|
616
|
+
message = 'Expected value to be defined'
|
|
617
|
+
): asserts value is T {
|
|
618
|
+
if (value === null || value === undefined) {
|
|
619
|
+
throw new Error(message)
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* Assert that a condition is true.
|
|
625
|
+
* Throws an error if the condition is false.
|
|
626
|
+
*
|
|
627
|
+
* @param condition - The condition to check
|
|
628
|
+
* @param message - Optional error message
|
|
629
|
+
* @throws Error if condition is false
|
|
630
|
+
*/
|
|
631
|
+
export function assert(
|
|
632
|
+
condition: boolean,
|
|
633
|
+
message = 'Assertion failed'
|
|
634
|
+
): asserts condition {
|
|
635
|
+
if (!condition) {
|
|
636
|
+
throw new Error(message)
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Marks code that should be unreachable.
|
|
642
|
+
* Useful in exhaustive switch statements.
|
|
643
|
+
*
|
|
644
|
+
* @param value - The value that should never exist
|
|
645
|
+
* @param message - Optional error message
|
|
646
|
+
* @throws Error always
|
|
647
|
+
*
|
|
648
|
+
* @example
|
|
649
|
+
* ```typescript
|
|
650
|
+
* type Status = 'active' | 'inactive'
|
|
651
|
+
*
|
|
652
|
+
* function handleStatus(status: Status) {
|
|
653
|
+
* switch (status) {
|
|
654
|
+
* case 'active':
|
|
655
|
+
* return 'Active'
|
|
656
|
+
* case 'inactive':
|
|
657
|
+
* return 'Inactive'
|
|
658
|
+
* default:
|
|
659
|
+
* // TypeScript ensures all cases are handled
|
|
660
|
+
* return assertNever(status)
|
|
661
|
+
* }
|
|
662
|
+
* }
|
|
663
|
+
* ```
|
|
664
|
+
*/
|
|
665
|
+
export function assertNever(value: never, message = 'Unexpected value'): never {
|
|
666
|
+
throw new Error(`${message}: ${JSON.stringify(value)}`)
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
// =============================================================================
|
|
670
|
+
// String Literal Utilities
|
|
671
|
+
// =============================================================================
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* Capitalize the first letter of a string type.
|
|
675
|
+
*/
|
|
676
|
+
export type Capitalize<S extends string> = S extends `${infer F}${infer R}`
|
|
677
|
+
? `${Uppercase<F>}${R}`
|
|
678
|
+
: S
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Uncapitalize the first letter of a string type.
|
|
682
|
+
*/
|
|
683
|
+
export type Uncapitalize<S extends string> = S extends `${infer F}${infer R}`
|
|
684
|
+
? `${Lowercase<F>}${R}`
|
|
685
|
+
: S
|
|
686
|
+
|
|
687
|
+
/**
|
|
688
|
+
* Join string literals with a delimiter.
|
|
689
|
+
*/
|
|
690
|
+
export type Join<T extends string[], D extends string> = T extends []
|
|
691
|
+
? ''
|
|
692
|
+
: T extends [infer F extends string]
|
|
693
|
+
? F
|
|
694
|
+
: T extends [infer F extends string, ...infer R extends string[]]
|
|
695
|
+
? `${F}${D}${Join<R, D>}`
|
|
696
|
+
: never
|
|
697
|
+
|
|
698
|
+
// =============================================================================
|
|
699
|
+
// Tuple Utilities
|
|
700
|
+
// =============================================================================
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Get the first element type of a tuple.
|
|
704
|
+
*/
|
|
705
|
+
export type Head<T extends unknown[]> = T extends [infer H, ...unknown[]] ? H : never
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* Get all but the first element type of a tuple.
|
|
709
|
+
*/
|
|
710
|
+
export type Tail<T extends unknown[]> = T extends [unknown, ...infer R] ? R : never
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* Get the last element type of a tuple.
|
|
714
|
+
*/
|
|
715
|
+
export type Last<T extends unknown[]> = T extends [...unknown[], infer L] ? L : never
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
* Get the length of a tuple.
|
|
719
|
+
*/
|
|
720
|
+
export type Length<T extends unknown[]> = T['length']
|
|
721
|
+
|
|
722
|
+
// =============================================================================
|
|
723
|
+
// Web API Type Helpers
|
|
724
|
+
// =============================================================================
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
* Type-safe conversion of Uint8Array to BodyInit for Response/Request constructors.
|
|
728
|
+
*
|
|
729
|
+
* The Fetch API accepts Uint8Array as BodyInit in most environments, but TypeScript
|
|
730
|
+
* doesn't reflect this in its type definitions. This helper provides a type-safe
|
|
731
|
+
* conversion without using `as unknown as BodyInit`.
|
|
732
|
+
*
|
|
733
|
+
* @param data - The Uint8Array to convert
|
|
734
|
+
* @returns The data as a type compatible with Response/Request body
|
|
735
|
+
*
|
|
736
|
+
* @example
|
|
737
|
+
* ```typescript
|
|
738
|
+
* const data = new Uint8Array([1, 2, 3])
|
|
739
|
+
* const response = new Response(toBodyInit(data))
|
|
740
|
+
* ```
|
|
741
|
+
*/
|
|
742
|
+
export function toBodyInit(data: Uint8Array): BodyInit {
|
|
743
|
+
// Uint8Array is a valid BodyInit in all modern environments
|
|
744
|
+
// The cast is safe because BufferSource (which includes Uint8Array) is part of BodyInit
|
|
745
|
+
return data as unknown as BodyInit
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* Type-safe extraction of ArrayBuffer from various typed array sources.
|
|
750
|
+
*
|
|
751
|
+
* Handles the common case of needing a clean ArrayBuffer from various input types,
|
|
752
|
+
* avoiding SharedArrayBuffer issues in Workers.
|
|
753
|
+
*
|
|
754
|
+
* @param source - The source to extract ArrayBuffer from
|
|
755
|
+
* @returns A non-shared ArrayBuffer copy
|
|
756
|
+
*
|
|
757
|
+
* @example
|
|
758
|
+
* ```typescript
|
|
759
|
+
* const typedArray = new Uint8Array([1, 2, 3])
|
|
760
|
+
* const buffer = toArrayBuffer(typedArray)
|
|
761
|
+
* ```
|
|
762
|
+
*/
|
|
763
|
+
export function toArrayBuffer(source: ArrayBufferLike | ArrayBufferView): ArrayBuffer {
|
|
764
|
+
if (source instanceof ArrayBuffer) {
|
|
765
|
+
return source
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
// Handle typed arrays and DataView
|
|
769
|
+
if (ArrayBuffer.isView(source)) {
|
|
770
|
+
// Check if the underlying buffer is a SharedArrayBuffer
|
|
771
|
+
if (source.buffer instanceof ArrayBuffer) {
|
|
772
|
+
// Regular ArrayBuffer - slice it
|
|
773
|
+
return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength)
|
|
774
|
+
}
|
|
775
|
+
// SharedArrayBuffer - copy to new ArrayBuffer
|
|
776
|
+
const copy = new Uint8Array(source.byteLength)
|
|
777
|
+
copy.set(new Uint8Array(source.buffer, source.byteOffset, source.byteLength))
|
|
778
|
+
return copy.buffer
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
// Handle SharedArrayBuffer by copying to a new ArrayBuffer
|
|
782
|
+
const copy = new Uint8Array(source.byteLength)
|
|
783
|
+
copy.set(new Uint8Array(source))
|
|
784
|
+
return copy.buffer
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
/**
|
|
788
|
+
* Type guard for checking if a value is an ArrayBufferView (typed array or DataView).
|
|
789
|
+
*
|
|
790
|
+
* @param value - The value to check
|
|
791
|
+
* @returns true if value is an ArrayBufferView
|
|
792
|
+
*/
|
|
793
|
+
export function isArrayBufferView(value: unknown): value is ArrayBufferView {
|
|
794
|
+
return ArrayBuffer.isView(value)
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Type guard for checking if a value is a Uint8Array.
|
|
799
|
+
*
|
|
800
|
+
* @param value - The value to check
|
|
801
|
+
* @returns true if value is a Uint8Array
|
|
802
|
+
*/
|
|
803
|
+
export function isUint8Array(value: unknown): value is Uint8Array {
|
|
804
|
+
return value instanceof Uint8Array
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
// =============================================================================
|
|
808
|
+
// Storage Type Helpers
|
|
809
|
+
// =============================================================================
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Type-safe narrowing for Cloudflare storage types.
|
|
813
|
+
*
|
|
814
|
+
* When reading from KV or DO storage with generic types, the returned value
|
|
815
|
+
* needs to be narrowed. This helper provides runtime validation with proper
|
|
816
|
+
* type narrowing.
|
|
817
|
+
*
|
|
818
|
+
* @typeParam T - The expected type
|
|
819
|
+
* @param value - The value from storage
|
|
820
|
+
* @param validator - A type guard function for T
|
|
821
|
+
* @returns The value as T if valid, undefined otherwise
|
|
822
|
+
*
|
|
823
|
+
* @example
|
|
824
|
+
* ```typescript
|
|
825
|
+
* interface Config { host: string; port: number }
|
|
826
|
+
* const isConfig = (v: unknown): v is Config =>
|
|
827
|
+
* isPlainObject(v) && isString((v as Config).host)
|
|
828
|
+
*
|
|
829
|
+
* const config = narrowStorageValue<Config>(await storage.get('config'), isConfig)
|
|
830
|
+
* ```
|
|
831
|
+
*/
|
|
832
|
+
export function narrowStorageValue<T>(
|
|
833
|
+
value: unknown,
|
|
834
|
+
validator: (v: unknown) => v is T
|
|
835
|
+
): T | undefined {
|
|
836
|
+
return validator(value) ? value : undefined
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Assert that a storage value matches the expected type.
|
|
841
|
+
*
|
|
842
|
+
* @typeParam T - The expected type
|
|
843
|
+
* @param value - The value from storage
|
|
844
|
+
* @param validator - A type guard function for T
|
|
845
|
+
* @param message - Error message if validation fails
|
|
846
|
+
* @returns The value as T
|
|
847
|
+
* @throws Error if validation fails
|
|
848
|
+
*/
|
|
849
|
+
export function assertStorageValue<T>(
|
|
850
|
+
value: unknown,
|
|
851
|
+
validator: (v: unknown) => v is T,
|
|
852
|
+
message = 'Storage value does not match expected type'
|
|
853
|
+
): T {
|
|
854
|
+
if (!validator(value)) {
|
|
855
|
+
throw new Error(message)
|
|
856
|
+
}
|
|
857
|
+
return value
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// =============================================================================
|
|
861
|
+
// Discriminated Union Helpers
|
|
862
|
+
// =============================================================================
|
|
863
|
+
|
|
864
|
+
/**
|
|
865
|
+
* Helper type to create discriminated unions with a type field.
|
|
866
|
+
*
|
|
867
|
+
* @typeParam T - The discriminator value
|
|
868
|
+
* @typeParam P - The payload type
|
|
869
|
+
*
|
|
870
|
+
* @example
|
|
871
|
+
* ```typescript
|
|
872
|
+
* type UserMessage = DiscriminatedMessage<'user', { userId: string }>
|
|
873
|
+
* type SystemMessage = DiscriminatedMessage<'system', { code: number }>
|
|
874
|
+
* type Message = UserMessage | SystemMessage
|
|
875
|
+
*
|
|
876
|
+
* function handleMessage(msg: Message) {
|
|
877
|
+
* if (msg.type === 'user') {
|
|
878
|
+
* console.log(msg.userId) // TypeScript knows this is UserMessage
|
|
879
|
+
* }
|
|
880
|
+
* }
|
|
881
|
+
* ```
|
|
882
|
+
*/
|
|
883
|
+
export type DiscriminatedMessage<T extends string, P = object> = {
|
|
884
|
+
readonly type: T
|
|
885
|
+
} & P
|
|
886
|
+
|
|
887
|
+
/**
|
|
888
|
+
* Create a type guard for a discriminated union member.
|
|
889
|
+
*
|
|
890
|
+
* @typeParam U - The union type
|
|
891
|
+
* @typeParam T - The discriminator value to match
|
|
892
|
+
* @param type - The discriminator value
|
|
893
|
+
* @returns A type guard function
|
|
894
|
+
*
|
|
895
|
+
* @example
|
|
896
|
+
* ```typescript
|
|
897
|
+
* type Message = { type: 'text'; content: string } | { type: 'image'; url: string }
|
|
898
|
+
*
|
|
899
|
+
* const isTextMessage = createDiscriminatorGuard<Message, 'text'>('text')
|
|
900
|
+
* if (isTextMessage(msg)) {
|
|
901
|
+
* console.log(msg.content) // TypeScript knows this is text message
|
|
902
|
+
* }
|
|
903
|
+
* ```
|
|
904
|
+
*/
|
|
905
|
+
export function createDiscriminatorGuard<
|
|
906
|
+
U extends { type: string },
|
|
907
|
+
T extends U['type']
|
|
908
|
+
>(type: T): (value: U) => value is Extract<U, { type: T }> {
|
|
909
|
+
return (value): value is Extract<U, { type: T }> => value.type === type
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
// =============================================================================
|
|
913
|
+
// Safe Casting Utilities
|
|
914
|
+
// =============================================================================
|
|
915
|
+
|
|
916
|
+
/**
|
|
917
|
+
* Safely cast a value through unknown with explicit intent.
|
|
918
|
+
*
|
|
919
|
+
* This function makes type casting explicit and searchable in the codebase.
|
|
920
|
+
* Use it when you need to bypass TypeScript's type system due to limitations
|
|
921
|
+
* in type definitions (e.g., third-party types that don't match runtime behavior).
|
|
922
|
+
*
|
|
923
|
+
* @typeParam T - The target type
|
|
924
|
+
* @param value - The value to cast
|
|
925
|
+
* @returns The value cast to type T
|
|
926
|
+
*
|
|
927
|
+
* @example
|
|
928
|
+
* ```typescript
|
|
929
|
+
* // Instead of: value as unknown as TargetType
|
|
930
|
+
* const result = unsafeCast<TargetType>(value)
|
|
931
|
+
* ```
|
|
932
|
+
*/
|
|
933
|
+
export function unsafeCast<T>(value: unknown): T {
|
|
934
|
+
return value as T
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
/**
|
|
938
|
+
* Cast with runtime validation.
|
|
939
|
+
*
|
|
940
|
+
* Performs a cast with a runtime type check, throwing if validation fails.
|
|
941
|
+
*
|
|
942
|
+
* @typeParam T - The target type
|
|
943
|
+
* @param value - The value to cast
|
|
944
|
+
* @param validator - Type guard to validate the cast
|
|
945
|
+
* @param errorMessage - Optional error message
|
|
946
|
+
* @returns The value cast to type T
|
|
947
|
+
* @throws Error if validation fails
|
|
948
|
+
*
|
|
949
|
+
* @example
|
|
950
|
+
* ```typescript
|
|
951
|
+
* const num = safeCast<number>(input, isNumber, 'Expected number')
|
|
952
|
+
* ```
|
|
953
|
+
*/
|
|
954
|
+
export function safeCast<T>(
|
|
955
|
+
value: unknown,
|
|
956
|
+
validator: (v: unknown) => v is T,
|
|
957
|
+
errorMessage = 'Type validation failed'
|
|
958
|
+
): T {
|
|
959
|
+
if (!validator(value)) {
|
|
960
|
+
throw new Error(errorMessage)
|
|
961
|
+
}
|
|
962
|
+
return value
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
// =============================================================================
|
|
966
|
+
// Object Property Helpers
|
|
967
|
+
// =============================================================================
|
|
968
|
+
|
|
969
|
+
/**
|
|
970
|
+
* Type-safe property access with default value.
|
|
971
|
+
*
|
|
972
|
+
* @typeParam T - The object type
|
|
973
|
+
* @typeParam K - The key type
|
|
974
|
+
* @typeParam D - The default value type
|
|
975
|
+
* @param obj - The object to access
|
|
976
|
+
* @param key - The property key
|
|
977
|
+
* @param defaultValue - Default value if property is undefined
|
|
978
|
+
* @returns The property value or default
|
|
979
|
+
*
|
|
980
|
+
* @example
|
|
981
|
+
* ```typescript
|
|
982
|
+
* const config = { host: 'localhost' }
|
|
983
|
+
* const port = getProperty(config, 'port', 3000) // Returns 3000
|
|
984
|
+
* ```
|
|
985
|
+
*/
|
|
986
|
+
export function getProperty<
|
|
987
|
+
T extends object,
|
|
988
|
+
K extends keyof T,
|
|
989
|
+
D
|
|
990
|
+
>(obj: T, key: K, defaultValue: D): NonNullable<T[K]> | D {
|
|
991
|
+
const value = obj[key]
|
|
992
|
+
return (value !== undefined && value !== null) ? value as NonNullable<T[K]> : defaultValue
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
/**
|
|
996
|
+
* Check if an object has a specific property.
|
|
997
|
+
*
|
|
998
|
+
* @typeParam K - The key type
|
|
999
|
+
* @param obj - The object to check
|
|
1000
|
+
* @param key - The property key
|
|
1001
|
+
* @returns true if the object has the property
|
|
1002
|
+
*/
|
|
1003
|
+
export function hasProperty<K extends string>(
|
|
1004
|
+
obj: unknown,
|
|
1005
|
+
key: K
|
|
1006
|
+
): obj is Record<K, unknown> {
|
|
1007
|
+
return isPlainObject(obj) && key in obj
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
/**
|
|
1011
|
+
* Check if an object has specific properties.
|
|
1012
|
+
*
|
|
1013
|
+
* @param obj - The object to check
|
|
1014
|
+
* @param keys - The property keys to check
|
|
1015
|
+
* @returns true if the object has all specified properties
|
|
1016
|
+
*/
|
|
1017
|
+
export function hasProperties<K extends string>(
|
|
1018
|
+
obj: unknown,
|
|
1019
|
+
keys: K[]
|
|
1020
|
+
): obj is Record<K, unknown> {
|
|
1021
|
+
if (!isPlainObject(obj)) return false
|
|
1022
|
+
return keys.every(key => key in obj)
|
|
1023
|
+
}
|