sqlew 5.0.8 → 5.2.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/CHANGELOG.md +56 -0
- package/README.md +19 -10
- package/dist/adapters/auth/auth-factory.d.ts +2 -81
- package/dist/adapters/auth/auth-factory.d.ts.map +1 -1
- package/dist/adapters/auth/auth-factory.js +2 -82
- package/dist/adapters/auth/auth-factory.js.map +1 -1
- package/dist/adapters/auth/base-auth-provider.d.ts +18 -303
- package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -1
- package/dist/adapters/auth/base-auth-provider.js +2 -104
- package/dist/adapters/auth/base-auth-provider.js.map +1 -1
- package/dist/adapters/auth/direct-auth-provider.d.ts +4 -348
- package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -1
- package/dist/adapters/auth/direct-auth-provider.js +6 -356
- package/dist/adapters/auth/direct-auth-provider.js.map +1 -1
- package/dist/adapters/base-adapter.d.ts +31 -598
- package/dist/adapters/base-adapter.d.ts.map +1 -1
- package/dist/adapters/base-adapter.js +10 -458
- package/dist/adapters/base-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -11
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +1 -11
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mysql-adapter.d.ts +15 -541
- package/dist/adapters/mysql-adapter.d.ts.map +1 -1
- package/dist/adapters/mysql-adapter.js +24 -561
- package/dist/adapters/mysql-adapter.js.map +1 -1
- package/dist/adapters/postgresql-adapter.d.ts +15 -203
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql-adapter.js +24 -223
- package/dist/adapters/postgresql-adapter.js.map +1 -1
- package/dist/adapters/sqlite-adapter.d.ts +4 -28
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
- package/dist/adapters/sqlite-adapter.js +4 -32
- package/dist/adapters/sqlite-adapter.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -4
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/backend/backend-factory.d.ts +3 -3
- package/dist/backend/backend-factory.js +3 -3
- package/dist/backend/local-backend.d.ts.map +1 -1
- package/dist/backend/local-backend.js +0 -5
- package/dist/backend/local-backend.js.map +1 -1
- package/dist/cli/db-export.d.ts.map +1 -1
- package/dist/cli/db-export.js +54 -32
- package/dist/cli/db-export.js.map +1 -1
- package/dist/cli/db-import.d.ts.map +1 -1
- package/dist/cli/db-import.js +32 -31
- package/dist/cli/db-import.js.map +1 -1
- package/dist/cli/hooks/on-exit-plan.d.ts.map +1 -1
- package/dist/cli/hooks/on-exit-plan.js +42 -1
- package/dist/cli/hooks/on-exit-plan.js.map +1 -1
- package/dist/cli/hooks/on-prompt.d.ts.map +1 -1
- package/dist/cli/hooks/on-prompt.js +5 -0
- package/dist/cli/hooks/on-prompt.js.map +1 -1
- package/dist/cli/hooks/plan-processor.d.ts.map +1 -1
- package/dist/cli/hooks/plan-processor.js +16 -2
- package/dist/cli/hooks/plan-processor.js.map +1 -1
- package/dist/cli/hooks/stdin-parser.d.ts +41 -0
- package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
- package/dist/cli/hooks/stdin-parser.js +140 -4
- package/dist/cli/hooks/stdin-parser.js.map +1 -1
- package/dist/cli/hooks/track-plan.d.ts +13 -0
- package/dist/cli/hooks/track-plan.d.ts.map +1 -1
- package/dist/cli/hooks/track-plan.js +58 -3
- package/dist/cli/hooks/track-plan.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/cloud-config-loader.d.ts +8 -8
- package/dist/config/cloud-config-loader.d.ts.map +1 -1
- package/dist/config/cloud-config-loader.js +12 -12
- package/dist/config/cloud-config-loader.js.map +1 -1
- package/dist/config/global-config.d.ts +24 -46
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +174 -56
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/loader.d.ts +1 -18
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +1 -89
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +2 -64
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -18
- package/dist/config/types.js.map +1 -1
- package/dist/database/index.d.ts +1 -2
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +1 -3
- package/dist/database/index.js.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +2 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -1
- package/dist/database/operations/queries.d.ts +0 -4
- package/dist/database/operations/queries.d.ts.map +1 -1
- package/dist/database/operations/queries.js +0 -8
- package/dist/database/operations/queries.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/init-rules.d.ts.map +1 -1
- package/dist/init-rules.js +0 -1
- package/dist/init-rules.js.map +1 -1
- package/dist/knexfile.d.ts.map +1 -1
- package/dist/knexfile.js +2 -1
- package/dist/knexfile.js.map +1 -1
- package/dist/migration/local-to-global.d.ts +19 -0
- package/dist/migration/local-to-global.d.ts.map +1 -0
- package/dist/migration/local-to-global.js +133 -0
- package/dist/migration/local-to-global.js.map +1 -0
- package/dist/saas-connector/client/types.d.ts +1 -1
- package/dist/saas-connector/client/types.d.ts.map +1 -1
- package/dist/schema.js +1 -1
- package/dist/server/setup.d.ts.map +1 -1
- package/dist/server/setup.js +15 -7
- package/dist/server/setup.js.map +1 -1
- package/dist/tests/backend/backend-factory.test.js +2 -2
- package/dist/tests/backend/backend-factory.test.js.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.d.ts +2 -17
- package/dist/tests/docker/native/constraint-operations.test.d.ts.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.js +3 -82
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
- package/dist/tests/docker/native/db-init.d.ts +3 -34
- package/dist/tests/docker/native/db-init.d.ts.map +1 -1
- package/dist/tests/docker/native/db-init.js +15 -77
- package/dist/tests/docker/native/db-init.js.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.d.ts +2 -10
- package/dist/tests/docker/native/decision-operations.test.d.ts.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.js +2 -84
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
- package/dist/tests/docker/native/help-system.test.d.ts +2 -5
- package/dist/tests/docker/native/help-system.test.d.ts.map +1 -1
- package/dist/tests/docker/native/help-system.test.js +2 -47
- package/dist/tests/docker/native/help-system.test.js.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.d.ts +3 -11
- package/dist/tests/docker/native/suggest-tool.test.d.ts.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.js +3 -60
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts +2 -23
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +5 -59
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/feature/decision/analytics.test.js +2 -1
- package/dist/tests/feature/decision/analytics.test.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +2 -7
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation.test.js +2 -1
- package/dist/tests/feature/decision/batch-validation.test.js.map +1 -1
- package/dist/tests/integration/auto-trigger-suggestions.test.js +4 -37
- package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js +2 -1
- package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
- package/dist/tests/integration/json-export-import.test.d.ts.map +1 -0
- package/dist/tests/integration/json-export-import.test.js.map +1 -0
- package/dist/tests/unit/case-insensitive-validator.test.d.ts +0 -7
- package/dist/tests/unit/case-insensitive-validator.test.d.ts.map +1 -1
- package/dist/tests/unit/case-insensitive-validator.test.js +0 -22
- package/dist/tests/unit/case-insensitive-validator.test.js.map +1 -1
- package/dist/tests/unit/config/cloud-config-loader.test.js +4 -2
- package/dist/tests/unit/config/cloud-config-loader.test.js.map +1 -1
- package/dist/tests/unit/config/global-db-migration.test.d.ts +12 -0
- package/dist/tests/unit/config/global-db-migration.test.d.ts.map +1 -0
- package/dist/tests/unit/config/global-db-migration.test.js +117 -0
- package/dist/tests/unit/config/global-db-migration.test.js.map +1 -0
- package/dist/tests/unit/constraint-scorer.test.d.ts +2 -7
- package/dist/tests/unit/constraint-scorer.test.d.ts.map +1 -1
- package/dist/tests/unit/constraint-scorer.test.js +2 -28
- package/dist/tests/unit/constraint-scorer.test.js.map +1 -1
- package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts +9 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.js +98 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.js.map +1 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts +7 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.js +55 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.js.map +1 -0
- package/dist/tests/unit/universal-knex.test.js +9 -0
- package/dist/tests/unit/universal-knex.test.js.map +1 -1
- package/dist/tests/unit/validation/parameter-validation.test.js +0 -24
- package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
- package/dist/tests/utils/db-config.d.ts.map +1 -1
- package/dist/tests/utils/db-config.js +0 -9
- package/dist/tests/utils/db-config.js.map +1 -1
- package/dist/tests/utils/db-import.d.ts.map +1 -1
- package/dist/tests/utils/db-import.js +0 -3
- package/dist/tests/utils/db-import.js.map +1 -1
- package/dist/tests/utils/db-schema.d.ts.map +1 -1
- package/dist/tests/utils/db-schema.js +48 -51
- package/dist/tests/utils/db-schema.js.map +1 -1
- package/dist/tests/utils/db-seeding.d.ts.map +1 -1
- package/dist/tests/utils/db-seeding.js +0 -3
- package/dist/tests/utils/db-seeding.js.map +1 -1
- package/dist/tests/utils/index.d.ts +0 -1
- package/dist/tests/utils/index.d.ts.map +1 -1
- package/dist/tests/utils/index.js +0 -2
- package/dist/tests/utils/index.js.map +1 -1
- package/dist/tests/utils/test-helpers.d.ts +6 -76
- package/dist/tests/utils/test-helpers.d.ts.map +1 -1
- package/dist/tests/utils/test-helpers.js +56 -162
- package/dist/tests/utils/test-helpers.js.map +1 -1
- package/dist/tests/utils/test-lifecycle.d.ts +2 -28
- package/dist/tests/utils/test-lifecycle.d.ts.map +1 -1
- package/dist/tests/utils/test-lifecycle.js +2 -31
- package/dist/tests/utils/test-lifecycle.js.map +1 -1
- package/dist/tools/context/index.d.ts +0 -1
- package/dist/tools/context/index.d.ts.map +1 -1
- package/dist/tools/context/index.js +0 -2
- package/dist/tools/context/index.js.map +1 -1
- package/dist/tools/context/types.d.ts +1 -1
- package/dist/tools/context/types.d.ts.map +1 -1
- package/dist/types/actions.d.ts +6 -29
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/actions.js +1 -2
- package/dist/types/actions.js.map +1 -1
- package/dist/types/constraint/params.d.ts +24 -1
- package/dist/types/constraint/params.d.ts.map +1 -1
- package/dist/types/constraint/params.js +3 -0
- package/dist/types/constraint/params.js.map +1 -1
- package/dist/types/constraint/responses.d.ts +18 -1
- package/dist/types/constraint/responses.d.ts.map +1 -1
- package/dist/types/constraint/responses.js +3 -0
- package/dist/types/constraint/responses.js.map +1 -1
- package/dist/types/decision/batch.d.ts +2 -5
- package/dist/types/decision/batch.d.ts.map +1 -1
- package/dist/types/decision/batch.js +3 -3
- package/dist/types/decision/batch.js.map +1 -1
- package/dist/types/decision/params.d.ts +7 -4
- package/dist/types/decision/params.d.ts.map +1 -1
- package/dist/types/decision/responses.d.ts +49 -35
- package/dist/types/decision/responses.d.ts.map +1 -1
- package/dist/types/decision/templates.d.ts +2 -18
- package/dist/types/decision/templates.d.ts.map +1 -1
- package/dist/types/decision/templates.js +3 -3
- package/dist/types/decision/templates.js.map +1 -1
- package/dist/types/enums.d.ts +11 -13
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +5 -13
- package/dist/types/enums.js.map +1 -1
- package/dist/types/import-export.d.ts +7 -30
- package/dist/types/import-export.d.ts.map +1 -1
- package/dist/types/import-export.js +1 -2
- package/dist/types/import-export.js.map +1 -1
- package/dist/types/index.d.ts +18 -22
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -32
- package/dist/types/index.js.map +1 -1
- package/dist/types/master-entities.d.ts +1 -10
- package/dist/types/master-entities.d.ts.map +1 -1
- package/dist/types/master-entities.js +1 -2
- package/dist/types/master-entities.js.map +1 -1
- package/dist/types/transaction-entities.d.ts +2 -21
- package/dist/types/transaction-entities.d.ts.map +1 -1
- package/dist/types/transaction-entities.js +1 -1
- package/dist/types/validation.d.ts +1 -16
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +1 -2
- package/dist/types/validation.js.map +1 -1
- package/dist/types/view-entities.d.ts +3 -12
- package/dist/types/view-entities.d.ts.map +1 -1
- package/dist/types/view-entities.js +1 -1
- package/dist/types.d.ts +4 -718
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -39
- package/dist/types.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts +2 -2
- package/dist/utils/parameter-validator.d.ts.map +1 -1
- package/dist/utils/parameter-validator.js.map +1 -1
- package/dist/utils/path-normalize.d.ts +23 -0
- package/dist/utils/path-normalize.d.ts.map +1 -0
- package/dist/utils/path-normalize.js +38 -0
- package/dist/utils/path-normalize.js.map +1 -0
- package/dist/utils/project-root.d.ts +6 -3
- package/dist/utils/project-root.d.ts.map +1 -1
- package/dist/utils/project-root.js +11 -3
- package/dist/utils/project-root.js.map +1 -1
- package/dist/watcher/base-watcher.d.ts +0 -4
- package/dist/watcher/base-watcher.d.ts.map +1 -1
- package/dist/watcher/base-watcher.js +11 -22
- package/dist/watcher/base-watcher.js.map +1 -1
- package/docs/CLI_USAGE.md +27 -107
- package/docs/CONFIGURATION.md +10 -5
- package/docs/DATABASE_AUTH.md +3 -3
- package/docs/HOOKS_GUIDE.md +40 -6
- package/docs/MIGRATION_TO_SAAS.md +2 -2
- package/docs/SHARED_DATABASE.md +108 -0
- package/package.json +4 -3
- package/dist/adapters/auth/auth-types.d.ts +0 -30
- package/dist/adapters/auth/auth-types.d.ts.map +0 -1
- package/dist/adapters/auth/auth-types.js +0 -30
- package/dist/adapters/auth/auth-types.js.map +0 -1
- package/dist/cli/db-dump.d.ts +0 -36
- package/dist/cli/db-dump.d.ts.map +0 -1
- package/dist/cli/db-dump.js +0 -384
- package/dist/cli/db-dump.js.map +0 -1
- package/dist/database/config/config-ops.d.ts +0 -42
- package/dist/database/config/config-ops.d.ts.map +0 -1
- package/dist/database/config/config-ops.js +0 -102
- package/dist/database/config/config-ops.js.map +0 -1
- package/dist/formatters/adr-formatter.d.ts +0 -22
- package/dist/formatters/adr-formatter.d.ts.map +0 -1
- package/dist/formatters/adr-formatter.js +0 -127
- package/dist/formatters/adr-formatter.js.map +0 -1
- package/dist/formatters/confluence-formatter.d.ts +0 -26
- package/dist/formatters/confluence-formatter.d.ts.map +0 -1
- package/dist/formatters/confluence-formatter.js +0 -129
- package/dist/formatters/confluence-formatter.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -34
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js +0 -57
- package/dist/formatters/index.js.map +0 -1
- package/dist/formatters/markdown-formatter.d.ts +0 -16
- package/dist/formatters/markdown-formatter.d.ts.map +0 -1
- package/dist/formatters/markdown-formatter.js +0 -110
- package/dist/formatters/markdown-formatter.js.map +0 -1
- package/dist/formatters/notion-formatter.d.ts +0 -29
- package/dist/formatters/notion-formatter.d.ts.map +0 -1
- package/dist/formatters/notion-formatter.js +0 -177
- package/dist/formatters/notion-formatter.js.map +0 -1
- package/dist/formatters/types.d.ts +0 -31
- package/dist/formatters/types.d.ts.map +0 -1
- package/dist/formatters/types.js +0 -6
- package/dist/formatters/types.js.map +0 -1
- package/dist/tests/database/sql-dump/converters.test.d.ts +0 -7
- package/dist/tests/database/sql-dump/converters.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/converters.test.js +0 -314
- package/dist/tests/database/sql-dump/converters.test.js.map +0 -1
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts +0 -8
- package/dist/tests/database/sql-dump/default-conversions.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/default-conversions.test.js +0 -141
- package/dist/tests/database/sql-dump/default-conversions.test.js.map +0 -1
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts +0 -27
- package/dist/tests/database/sql-dump/table-ordering.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/table-ordering.test.js +0 -284
- package/dist/tests/database/sql-dump/table-ordering.test.js.map +0 -1
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts +0 -8
- package/dist/tests/database/sql-dump/type-conversion.test.d.ts.map +0 -1
- package/dist/tests/database/sql-dump/type-conversion.test.js +0 -361
- package/dist/tests/database/sql-dump/type-conversion.test.js.map +0 -1
- package/dist/tests/docker/cross-database.test.d.ts +0 -21
- package/dist/tests/docker/cross-database.test.d.ts.map +0 -1
- package/dist/tests/docker/cross-database.test.js +0 -308
- package/dist/tests/docker/cross-database.test.js.map +0 -1
- package/dist/tests/docker/dump-import.test.d.ts +0 -15
- package/dist/tests/docker/dump-import.test.d.ts.map +0 -1
- package/dist/tests/docker/dump-import.test.js +0 -424
- package/dist/tests/docker/dump-import.test.js.map +0 -1
- package/dist/tests/docker/fk-constraints.test.d.ts +0 -13
- package/dist/tests/docker/fk-constraints.test.d.ts.map +0 -1
- package/dist/tests/docker/fk-constraints.test.js +0 -381
- package/dist/tests/docker/fk-constraints.test.js.map +0 -1
- package/dist/tests/docker/indexes.test.d.ts +0 -12
- package/dist/tests/docker/indexes.test.d.ts.map +0 -1
- package/dist/tests/docker/indexes.test.js +0 -250
- package/dist/tests/docker/indexes.test.js.map +0 -1
- package/dist/tests/docker/integration.test.d.ts +0 -16
- package/dist/tests/docker/integration.test.d.ts.map +0 -1
- package/dist/tests/docker/integration.test.js +0 -323
- package/dist/tests/docker/integration.test.js.map +0 -1
- package/dist/tests/docker/multi-project-migration.test.d.ts +0 -17
- package/dist/tests/docker/multi-project-migration.test.d.ts.map +0 -1
- package/dist/tests/docker/multi-project-migration.test.js +0 -394
- package/dist/tests/docker/multi-project-migration.test.js.map +0 -1
- package/dist/tests/docker/schema-migration.test.d.ts +0 -8
- package/dist/tests/docker/schema-migration.test.d.ts.map +0 -1
- package/dist/tests/docker/schema-migration.test.js +0 -98
- package/dist/tests/docker/schema-migration.test.js.map +0 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts +0 -5
- package/dist/tests/integration/e2e-workflow1-debug.test.d.ts.map +0 -1
- package/dist/tests/integration/e2e-workflow1-debug.test.js +0 -85
- package/dist/tests/integration/e2e-workflow1-debug.test.js.map +0 -1
- package/dist/tests/integration/suggest-simple.test.d.ts +0 -5
- package/dist/tests/integration/suggest-simple.test.d.ts.map +0 -1
- package/dist/tests/integration/suggest-simple.test.js +0 -90
- package/dist/tests/integration/suggest-simple.test.js.map +0 -1
- package/dist/tests/migrations/test-all-versions-real.d.ts +0 -8
- package/dist/tests/migrations/test-all-versions-real.d.ts.map +0 -1
- package/dist/tests/migrations/test-all-versions-real.js +0 -236
- package/dist/tests/migrations/test-all-versions-real.js.map +0 -1
- package/dist/tests/migrations/test-all-versions.d.ts +0 -14
- package/dist/tests/migrations/test-all-versions.d.ts.map +0 -1
- package/dist/tests/migrations/test-all-versions.js +0 -519
- package/dist/tests/migrations/test-all-versions.js.map +0 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts +0 -7
- package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts.map +0 -1
- package/dist/tests/migrations/v4/v4-fresh-install.test.js +0 -168
- package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +0 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts +0 -13
- package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts.map +0 -1
- package/dist/tests/migrations/v4/v4-migrate-data.test.js +0 -264
- package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +0 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts +0 -2
- package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts.map +0 -1
- package/dist/tests/unit/utils/case-insensitive-validator.test.js +0 -97
- package/dist/tests/unit/utils/case-insensitive-validator.test.js.map +0 -1
- package/dist/tests/utils/json-export-import.test.d.ts.map +0 -1
- package/dist/tests/utils/json-export-import.test.js.map +0 -1
- package/dist/tests/utils/task-helpers.d.ts +0 -67
- package/dist/tests/utils/task-helpers.d.ts.map +0 -1
- package/dist/tests/utils/task-helpers.js +0 -134
- package/dist/tests/utils/task-helpers.js.map +0 -1
- package/dist/tools/context/actions/export.d.ts +0 -35
- package/dist/tools/context/actions/export.d.ts.map +0 -1
- package/dist/tools/context/actions/export.js +0 -93
- package/dist/tools/context/actions/export.js.map +0 -1
- package/dist/types/file/params.d.ts +0 -40
- package/dist/types/file/params.d.ts.map +0 -1
- package/dist/types/file/params.js +0 -6
- package/dist/types/file/params.js.map +0 -1
- package/dist/types/file/responses.d.ts +0 -2
- package/dist/types/file/responses.d.ts.map +0 -1
- package/dist/types/file/responses.js +0 -2
- package/dist/types/file/responses.js.map +0 -1
- package/dist/types/task/params.d.ts +0 -173
- package/dist/types/task/params.d.ts.map +0 -1
- package/dist/types/task/params.js +0 -8
- package/dist/types/task/params.js.map +0 -1
- package/dist/types/task/responses.d.ts +0 -334
- package/dist/types/task/responses.d.ts.map +0 -1
- package/dist/types/task/responses.js +0 -8
- package/dist/types/task/responses.js.map +0 -1
- package/dist/utils/sql-dump/core/dependency-sort.d.ts +0 -16
- package/dist/utils/sql-dump/core/dependency-sort.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/dependency-sort.js +0 -105
- package/dist/utils/sql-dump/core/dependency-sort.js.map +0 -1
- package/dist/utils/sql-dump/core/generate-dump.d.ts +0 -13
- package/dist/utils/sql-dump/core/generate-dump.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/generate-dump.js +0 -201
- package/dist/utils/sql-dump/core/generate-dump.js.map +0 -1
- package/dist/utils/sql-dump/core/index-export.d.ts +0 -10
- package/dist/utils/sql-dump/core/index-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/index-export.js +0 -173
- package/dist/utils/sql-dump/core/index-export.js.map +0 -1
- package/dist/utils/sql-dump/core/sequence-reset.d.ts +0 -6
- package/dist/utils/sql-dump/core/sequence-reset.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/sequence-reset.js +0 -28
- package/dist/utils/sql-dump/core/sequence-reset.js.map +0 -1
- package/dist/utils/sql-dump/core/table-export.d.ts +0 -2
- package/dist/utils/sql-dump/core/table-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/table-export.js +0 -4
- package/dist/utils/sql-dump/core/table-export.js.map +0 -1
- package/dist/utils/sql-dump/core/view-export.d.ts +0 -2
- package/dist/utils/sql-dump/core/view-export.d.ts.map +0 -1
- package/dist/utils/sql-dump/core/view-export.js +0 -4
- package/dist/utils/sql-dump/core/view-export.js.map +0 -1
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts +0 -14
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/bulk-insert.js +0 -177
- package/dist/utils/sql-dump/formatters/bulk-insert.js.map +0 -1
- package/dist/utils/sql-dump/formatters/identifiers.d.ts +0 -6
- package/dist/utils/sql-dump/formatters/identifiers.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/identifiers.js +0 -16
- package/dist/utils/sql-dump/formatters/identifiers.js.map +0 -1
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts +0 -14
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts.map +0 -1
- package/dist/utils/sql-dump/formatters/value-formatter.js +0 -281
- package/dist/utils/sql-dump/formatters/value-formatter.js.map +0 -1
- package/dist/utils/sql-dump/generators/controls.d.ts +0 -10
- package/dist/utils/sql-dump/generators/controls.d.ts.map +0 -1
- package/dist/utils/sql-dump/generators/controls.js +0 -36
- package/dist/utils/sql-dump/generators/controls.js.map +0 -1
- package/dist/utils/sql-dump/generators/headers.d.ts +0 -6
- package/dist/utils/sql-dump/generators/headers.d.ts.map +0 -1
- package/dist/utils/sql-dump/generators/headers.js +0 -19
- package/dist/utils/sql-dump/generators/headers.js.map +0 -1
- package/dist/utils/sql-dump/index.d.ts +0 -14
- package/dist/utils/sql-dump/index.d.ts.map +0 -1
- package/dist/utils/sql-dump/index.js +0 -16
- package/dist/utils/sql-dump/index.js.map +0 -1
- package/dist/utils/sql-dump/schema/indexes.d.ts +0 -20
- package/dist/utils/sql-dump/schema/indexes.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/indexes.js +0 -108
- package/dist/utils/sql-dump/schema/indexes.js.map +0 -1
- package/dist/utils/sql-dump/schema/primary-keys.d.ts +0 -6
- package/dist/utils/sql-dump/schema/primary-keys.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/primary-keys.js +0 -41
- package/dist/utils/sql-dump/schema/primary-keys.js.map +0 -1
- package/dist/utils/sql-dump/schema/tables.d.ts +0 -15
- package/dist/utils/sql-dump/schema/tables.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/tables.js +0 -518
- package/dist/utils/sql-dump/schema/tables.js.map +0 -1
- package/dist/utils/sql-dump/schema/views.d.ts +0 -11
- package/dist/utils/sql-dump/schema/views.d.ts.map +0 -1
- package/dist/utils/sql-dump/schema/views.js +0 -116
- package/dist/utils/sql-dump/schema/views.js.map +0 -1
- package/dist/utils/sql-dump/types.d.ts +0 -10
- package/dist/utils/sql-dump/types.d.ts.map +0 -1
- package/dist/utils/sql-dump/types.js +0 -3
- package/dist/utils/sql-dump/types.js.map +0 -1
- package/dist/utils/sql-dump-converters.d.ts +0 -188
- package/dist/utils/sql-dump-converters.d.ts.map +0 -1
- package/dist/utils/sql-dump-converters.js +0 -315
- package/dist/utils/sql-dump-converters.js.map +0 -1
- package/dist/watcher/gitignore-parser.d.ts +0 -70
- package/dist/watcher/gitignore-parser.d.ts.map +0 -1
- package/dist/watcher/gitignore-parser.js +0 -195
- package/dist/watcher/gitignore-parser.js.map +0 -1
- package/dist/watcher/index.d.ts +0 -9
- package/dist/watcher/index.d.ts.map +0 -1
- package/dist/watcher/index.js +0 -8
- package/dist/watcher/index.js.map +0 -1
- /package/dist/tests/{utils → integration}/json-export-import.test.d.ts +0 -0
- /package/dist/tests/{utils → integration}/json-export-import.test.js +0 -0
|
@@ -1,638 +1,71 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Base adapter for database connections with authentication integration.
|
|
3
|
-
*
|
|
4
|
-
* This module provides the foundation for all database adapters in the multi-RDBMS system.
|
|
5
|
-
* It integrates authentication providers (SSH tunneling, direct connections, cloud IAM) with
|
|
6
|
-
* Knex.js-based database connections, managing the complete connection lifecycle.
|
|
7
|
-
*
|
|
8
|
-
* **Key Responsibilities:**
|
|
9
|
-
* - Authentication provider integration via factory
|
|
10
|
-
* - Connection lifecycle management (connect → authenticate → establish → cleanup)
|
|
11
|
-
* - Knex.js instance management and access control
|
|
12
|
-
* - Transaction support delegation
|
|
13
|
-
* - Abstract methods for adapter-specific initialization
|
|
14
|
-
*
|
|
15
|
-
* **Connection Flow:**
|
|
16
|
-
* 1. Constructor: Initialize with DatabaseConfig
|
|
17
|
-
* 2. connect(): Authenticate via provider, establish Knex connection
|
|
18
|
-
* 3. initialize(): Adapter-specific setup (pragmas, schemas, etc.)
|
|
19
|
-
* 4. getKnex(): Access Knex instance for queries
|
|
20
|
-
* 5. disconnect(): Close Knex connection
|
|
21
|
-
* 6. cleanup(): Release authentication resources (tunnels, tokens)
|
|
22
|
-
*
|
|
23
|
-
* **Architecture:**
|
|
24
|
-
* ```
|
|
25
|
-
* BaseAdapter (abstract)
|
|
26
|
-
* ├── Authentication Layer: BaseAuthProvider integration
|
|
27
|
-
* ├── Connection Layer: Knex.js management
|
|
28
|
-
* └── Adapter-Specific: Abstract methods for subclasses
|
|
29
|
-
*
|
|
30
|
-
* Concrete Adapters:
|
|
31
|
-
* ├── SQLiteAdapter (no auth required)
|
|
32
|
-
* ├── PostgreSQLAdapter (with auth integration)
|
|
33
|
-
* └── MySQLAdapter (with auth integration)
|
|
34
|
-
* ```
|
|
35
|
-
*
|
|
36
|
-
* @module adapters/base-adapter
|
|
37
|
-
* @since v3.7.0
|
|
38
|
-
*/
|
|
39
1
|
import type { Knex } from 'knex';
|
|
40
2
|
import type { DatabaseAdapter } from './types.js';
|
|
41
3
|
import type { DatabaseConfig } from '../config/types.js';
|
|
42
4
|
import type { BaseAuthProvider, ConnectionParams } from './auth/base-auth-provider.js';
|
|
43
|
-
/**
|
|
44
|
-
* Abstract base class for database adapters with authentication integration.
|
|
45
|
-
*
|
|
46
|
-
* This class provides common functionality for all database adapters, integrating
|
|
47
|
-
* authentication providers with Knex.js connections. Subclasses implement
|
|
48
|
-
* database-specific features (SQLite pragmas, PostgreSQL settings, MySQL config).
|
|
49
|
-
*
|
|
50
|
-
* **Design Principles:**
|
|
51
|
-
* - Separation of concerns: Auth provider handles authentication, adapter handles DB operations
|
|
52
|
-
* - Lazy initialization: Knex instance created only after successful authentication
|
|
53
|
-
* - Resource safety: Explicit cleanup for both auth providers and DB connections
|
|
54
|
-
* - Fail-fast validation: Auth provider validates config before connection attempt
|
|
55
|
-
* - Backward compatibility: Maintains DatabaseAdapter interface contract
|
|
56
|
-
*
|
|
57
|
-
* **Authentication Integration:**
|
|
58
|
-
* - SQLite: No authentication provider (null), direct file connection
|
|
59
|
-
* - PostgreSQL/MySQL: Auth provider handles tunneling/IAM/direct auth
|
|
60
|
-
* - SSH tunneling: Provider establishes tunnel, returns localhost connection params
|
|
61
|
-
* - Cloud IAM: Provider generates temporary tokens, returns params with SSL config
|
|
62
|
-
*
|
|
63
|
-
* **Error Handling:**
|
|
64
|
-
* - Constructor: Config validation (throws if invalid)
|
|
65
|
-
* - connect(): Authentication failures, connection failures
|
|
66
|
-
* - getKnex(): Throws if called before connect()
|
|
67
|
-
* - cleanup(): Swallows errors to prevent cascading failures
|
|
68
|
-
*
|
|
69
|
-
* @abstract
|
|
70
|
-
* @implements {DatabaseAdapter}
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* // Implementing a PostgreSQL adapter
|
|
74
|
-
* class PostgreSQLAdapter extends BaseAdapter {
|
|
75
|
-
* readonly supportsReturning = true;
|
|
76
|
-
* readonly supportsJSON = true;
|
|
77
|
-
* readonly databaseName = 'postgresql' as const;
|
|
78
|
-
*
|
|
79
|
-
* async initialize(): Promise<void> {
|
|
80
|
-
* const knex = this.getKnex();
|
|
81
|
-
* // PostgreSQL-specific initialization
|
|
82
|
-
* await knex.raw('SET statement_timeout = 30000');
|
|
83
|
-
* await knex.raw('SET timezone = "UTC"');
|
|
84
|
-
* }
|
|
85
|
-
*
|
|
86
|
-
* getDialect(): string {
|
|
87
|
-
* return 'pg';
|
|
88
|
-
* }
|
|
89
|
-
*
|
|
90
|
-
* // Implement other DatabaseAdapter methods...
|
|
91
|
-
* }
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* // Using the adapter with authentication
|
|
95
|
-
* const config: DatabaseConfig = {
|
|
96
|
-
* type: 'postgres',
|
|
97
|
-
* connection: {
|
|
98
|
-
* host: 'db.internal',
|
|
99
|
-
* port: 5432,
|
|
100
|
-
* database: 'production'
|
|
101
|
-
* },
|
|
102
|
-
* auth: {
|
|
103
|
-
* type: 'ssh',
|
|
104
|
-
* user: 'postgres',
|
|
105
|
-
* password: 'secret',
|
|
106
|
-
* ssh: {
|
|
107
|
-
* host: 'bastion.example.com',
|
|
108
|
-
* username: 'deploy',
|
|
109
|
-
* privateKeyPath: '/path/to/key.pem'
|
|
110
|
-
* }
|
|
111
|
-
* }
|
|
112
|
-
* };
|
|
113
|
-
*
|
|
114
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
115
|
-
* try {
|
|
116
|
-
* await adapter.connect();
|
|
117
|
-
* const knex = adapter.getKnex();
|
|
118
|
-
* const users = await knex('users').select('*');
|
|
119
|
-
* console.log(users);
|
|
120
|
-
* } finally {
|
|
121
|
-
* await adapter.disconnect();
|
|
122
|
-
* await adapter.cleanup();
|
|
123
|
-
* }
|
|
124
|
-
*
|
|
125
|
-
* @example
|
|
126
|
-
* // Transaction support
|
|
127
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
128
|
-
* await adapter.connect();
|
|
129
|
-
*
|
|
130
|
-
* try {
|
|
131
|
-
* await adapter.transaction(async (trx) => {
|
|
132
|
-
* await trx('accounts').where({ id: 1 }).update({ balance: 100 });
|
|
133
|
-
* await trx('accounts').where({ id: 2 }).update({ balance: 200 });
|
|
134
|
-
* });
|
|
135
|
-
* } finally {
|
|
136
|
-
* await adapter.disconnect();
|
|
137
|
-
* await adapter.cleanup();
|
|
138
|
-
* }
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* // SQLite adapter (no authentication)
|
|
142
|
-
* class SQLiteAdapter extends BaseAdapter {
|
|
143
|
-
* async connect(): Promise<Knex> {
|
|
144
|
-
* // SQLite doesn't need authentication provider
|
|
145
|
-
* // Override connect to bypass auth flow
|
|
146
|
-
* const config: Knex.Config = {
|
|
147
|
-
* client: 'better-sqlite3',
|
|
148
|
-
* connection: {
|
|
149
|
-
* filename: this.config.connection.database
|
|
150
|
-
* },
|
|
151
|
-
* useNullAsDefault: true
|
|
152
|
-
* };
|
|
153
|
-
*
|
|
154
|
-
* this.knex = knex(config);
|
|
155
|
-
* await this.initialize();
|
|
156
|
-
* return this.knex;
|
|
157
|
-
* }
|
|
158
|
-
*
|
|
159
|
-
* getDialect(): string {
|
|
160
|
-
* return 'sqlite3';
|
|
161
|
-
* }
|
|
162
|
-
* }
|
|
163
|
-
*/
|
|
5
|
+
/** Abstract base class for database adapters with authentication integration. */
|
|
164
6
|
export declare abstract class BaseAdapter implements DatabaseAdapter {
|
|
165
|
-
/**
|
|
166
|
-
* Database configuration containing connection and authentication settings.
|
|
167
|
-
* @protected
|
|
168
|
-
* @readonly
|
|
169
|
-
*/
|
|
7
|
+
/** @protected */
|
|
170
8
|
protected readonly config: DatabaseConfig;
|
|
171
|
-
/**
|
|
172
|
-
* Authentication provider instance for handling credentials, tunnels, and tokens.
|
|
173
|
-
* Null for databases that don't require authentication (e.g., SQLite).
|
|
174
|
-
* @protected
|
|
175
|
-
*/
|
|
9
|
+
/** @protected */
|
|
176
10
|
protected authProvider: BaseAuthProvider | null;
|
|
177
|
-
/**
|
|
178
|
-
* Knex.js instance for database operations.
|
|
179
|
-
* Null until connect() is called successfully.
|
|
180
|
-
* @protected
|
|
181
|
-
*/
|
|
11
|
+
/** @protected */
|
|
182
12
|
protected knexInstance: Knex | null;
|
|
183
|
-
/**
|
|
184
|
-
* Creates a new database adapter instance.
|
|
185
|
-
*
|
|
186
|
-
* @param {DatabaseConfig} config - Database configuration object
|
|
187
|
-
*
|
|
188
|
-
* @throws {Error} If database type is unsupported
|
|
189
|
-
*
|
|
190
|
-
* @example
|
|
191
|
-
* const adapter = new PostgreSQLAdapter({
|
|
192
|
-
* type: 'postgres',
|
|
193
|
-
* connection: { host: 'localhost', port: 5432, database: 'mydb' },
|
|
194
|
-
* auth: { type: 'direct', user: 'postgres', password: 'postgres' }
|
|
195
|
-
* });
|
|
196
|
-
*/
|
|
197
13
|
constructor(config: DatabaseConfig);
|
|
198
|
-
/**
|
|
199
|
-
* Performs adapter-specific initialization after connection is established.
|
|
200
|
-
*
|
|
201
|
-
* This method is called automatically after Knex connection is created.
|
|
202
|
-
* Subclasses implement database-specific setup:
|
|
203
|
-
*
|
|
204
|
-
* **SQLite:**
|
|
205
|
-
* - PRAGMA settings (journal_mode, foreign_keys, synchronous)
|
|
206
|
-
* - Query performance optimizations
|
|
207
|
-
*
|
|
208
|
-
* **PostgreSQL:**
|
|
209
|
-
* - Session settings (statement_timeout, timezone)
|
|
210
|
-
* - Search path configuration
|
|
211
|
-
* - Connection pool settings
|
|
212
|
-
*
|
|
213
|
-
* **MySQL:**
|
|
214
|
-
* - Session variables (sql_mode, time_zone)
|
|
215
|
-
* - Character set configuration
|
|
216
|
-
* - Transaction isolation level
|
|
217
|
-
*
|
|
218
|
-
* @abstract
|
|
219
|
-
* @returns {Promise<void>}
|
|
220
|
-
*
|
|
221
|
-
* @throws {Error} If initialization fails
|
|
222
|
-
*
|
|
223
|
-
* @example
|
|
224
|
-
* // SQLite implementation
|
|
225
|
-
* async initialize(): Promise<void> {
|
|
226
|
-
* const knex = this.getKnex();
|
|
227
|
-
* await knex.raw('PRAGMA journal_mode = WAL');
|
|
228
|
-
* await knex.raw('PRAGMA foreign_keys = ON');
|
|
229
|
-
* await knex.raw('PRAGMA synchronous = NORMAL');
|
|
230
|
-
* }
|
|
231
|
-
*
|
|
232
|
-
* @example
|
|
233
|
-
* // PostgreSQL implementation
|
|
234
|
-
* async initialize(): Promise<void> {
|
|
235
|
-
* const knex = this.getKnex();
|
|
236
|
-
* await knex.raw('SET statement_timeout = 30000');
|
|
237
|
-
* await knex.raw('SET timezone = "UTC"');
|
|
238
|
-
* await knex.raw('SET search_path = public');
|
|
239
|
-
* }
|
|
240
|
-
*/
|
|
14
|
+
/** Performs adapter-specific initialization after connection is established. @abstract */
|
|
241
15
|
abstract initialize(): Promise<void>;
|
|
242
|
-
/**
|
|
243
|
-
* Returns the Knex dialect identifier for this database.
|
|
244
|
-
*
|
|
245
|
-
* Used for Knex configuration and feature detection.
|
|
246
|
-
*
|
|
247
|
-
* **Valid Dialect Values:**
|
|
248
|
-
* - 'sqlite3' - SQLite
|
|
249
|
-
* - 'pg' - PostgreSQL
|
|
250
|
-
* - 'mysql' - MySQL
|
|
251
|
-
* - 'mysql2' - MySQL with mysql2 driver
|
|
252
|
-
* - 'mssql' - Microsoft SQL Server
|
|
253
|
-
* - 'oracledb' - Oracle Database
|
|
254
|
-
*
|
|
255
|
-
* @abstract
|
|
256
|
-
* @returns {string} Knex dialect identifier
|
|
257
|
-
*
|
|
258
|
-
* @example
|
|
259
|
-
* // SQLite adapter
|
|
260
|
-
* getDialect(): string {
|
|
261
|
-
* return 'sqlite3';
|
|
262
|
-
* }
|
|
263
|
-
*
|
|
264
|
-
* @example
|
|
265
|
-
* // PostgreSQL adapter
|
|
266
|
-
* getDialect(): string {
|
|
267
|
-
* return 'pg';
|
|
268
|
-
* }
|
|
269
|
-
*/
|
|
16
|
+
/** Returns the Knex dialect identifier for this database. @abstract */
|
|
270
17
|
abstract getDialect(): string;
|
|
271
|
-
/**
|
|
272
|
-
* Whether this database supports RETURNING clause in INSERT/UPDATE/DELETE.
|
|
273
|
-
* @abstract
|
|
274
|
-
*/
|
|
18
|
+
/** Whether this database supports RETURNING clause. @abstract */
|
|
275
19
|
abstract readonly supportsReturning: boolean;
|
|
276
|
-
/**
|
|
277
|
-
* Whether this database has native JSON support.
|
|
278
|
-
* @abstract
|
|
279
|
-
*/
|
|
20
|
+
/** Whether this database has native JSON support. @abstract */
|
|
280
21
|
abstract readonly supportsJSON: boolean;
|
|
281
|
-
/**
|
|
282
|
-
* Whether this database supports UPSERT operations (INSERT ... ON CONFLICT).
|
|
283
|
-
* @abstract
|
|
284
|
-
*/
|
|
22
|
+
/** Whether this database supports UPSERT operations. @abstract */
|
|
285
23
|
abstract readonly supportsUpsert: boolean;
|
|
286
|
-
/**
|
|
287
|
-
* Whether this database supports Common Table Expressions (WITH clause).
|
|
288
|
-
* @abstract
|
|
289
|
-
*/
|
|
24
|
+
/** Whether this database supports Common Table Expressions. @abstract */
|
|
290
25
|
abstract readonly supportsCTE: boolean;
|
|
291
|
-
/**
|
|
292
|
-
* Whether this database supports window functions.
|
|
293
|
-
* @abstract
|
|
294
|
-
*/
|
|
26
|
+
/** Whether this database supports window functions. @abstract */
|
|
295
27
|
abstract readonly supportsWindowFunctions: boolean;
|
|
296
|
-
/**
|
|
297
|
-
* Whether this database supports savepoints within transactions.
|
|
298
|
-
* @abstract
|
|
299
|
-
*/
|
|
28
|
+
/** Whether this database supports savepoints within transactions. @abstract */
|
|
300
29
|
abstract readonly supportsSavepoints: boolean;
|
|
301
|
-
/**
|
|
302
|
-
* Database name identifier.
|
|
303
|
-
* @abstract
|
|
304
|
-
*/
|
|
30
|
+
/** Database name identifier. @abstract */
|
|
305
31
|
abstract readonly databaseName: 'sqlite' | 'postgresql' | 'mysql';
|
|
306
|
-
/**
|
|
307
|
-
* Establishes database connection with authentication.
|
|
308
|
-
*
|
|
309
|
-
* This method orchestrates the complete connection flow:
|
|
310
|
-
* 1. Create authentication provider (if required)
|
|
311
|
-
* 2. Validate authentication configuration
|
|
312
|
-
* 3. Authenticate and obtain connection parameters
|
|
313
|
-
* 4. Create Knex instance with authenticated params
|
|
314
|
-
* 5. Call initialize() for adapter-specific setup
|
|
315
|
-
*
|
|
316
|
-
* **Authentication Flow:**
|
|
317
|
-
* - Direct: Use credentials as-is
|
|
318
|
-
* - SSH: Establish tunnel, connect to localhost
|
|
319
|
-
* - AWS/GCP IAM: Generate token, connect with SSL
|
|
320
|
-
*
|
|
321
|
-
* **Important Notes:**
|
|
322
|
-
* - This method is idempotent: calling twice reuses existing connection
|
|
323
|
-
* - Auth provider resources remain allocated until cleanup() is called
|
|
324
|
-
* - Knex instance is accessible via getKnex() after successful connection
|
|
325
|
-
* - Subclasses can override for special handling (e.g., SQLite)
|
|
326
|
-
*
|
|
327
|
-
* @returns {Promise<Knex>} Knex instance for database operations
|
|
328
|
-
*
|
|
329
|
-
* @throws {Error} 'Database already connected' - if connection exists
|
|
330
|
-
* @throws {Error} Auth provider validation errors
|
|
331
|
-
* @throws {Error} Authentication failures (invalid credentials, network issues)
|
|
332
|
-
* @throws {Error} Knex connection failures (database unreachable, invalid database name)
|
|
333
|
-
* @throws {Error} Initialization failures (adapter-specific setup errors)
|
|
334
|
-
*
|
|
335
|
-
* @example
|
|
336
|
-
* // Standard usage
|
|
337
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
338
|
-
* try {
|
|
339
|
-
* const knex = await adapter.connect();
|
|
340
|
-
* console.log('Connected successfully');
|
|
341
|
-
* } catch (error) {
|
|
342
|
-
* console.error('Connection failed:', error.message);
|
|
343
|
-
* await adapter.cleanup();
|
|
344
|
-
* throw error;
|
|
345
|
-
* }
|
|
346
|
-
*
|
|
347
|
-
* @example
|
|
348
|
-
* // Idempotent connection
|
|
349
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
350
|
-
* const knex1 = await adapter.connect(); // Establishes connection
|
|
351
|
-
* const knex2 = await adapter.connect(); // Returns same instance
|
|
352
|
-
* console.log(knex1 === knex2); // true
|
|
353
|
-
*/
|
|
32
|
+
/** Establishes database connection with authentication. */
|
|
354
33
|
connect(): Promise<Knex>;
|
|
355
|
-
/**
|
|
356
|
-
* Closes the database connection.
|
|
357
|
-
*
|
|
358
|
-
* This method closes the Knex connection pool, releasing all database connections.
|
|
359
|
-
* It does NOT release authentication provider resources (SSH tunnels, tokens) -
|
|
360
|
-
* call cleanup() to release those.
|
|
361
|
-
*
|
|
362
|
-
* **Resource Lifecycle:**
|
|
363
|
-
* - disconnect() → Closes Knex connection pool
|
|
364
|
-
* - cleanup() → Releases auth provider resources (tunnels, tokens)
|
|
365
|
-
* - Both must be called for complete cleanup
|
|
366
|
-
*
|
|
367
|
-
* **Important Notes:**
|
|
368
|
-
* - This method is idempotent: safe to call multiple times
|
|
369
|
-
* - Pending queries are allowed to complete before closing
|
|
370
|
-
* - After disconnect(), getKnex() will throw an error
|
|
371
|
-
* - Auth provider resources remain allocated until cleanup()
|
|
372
|
-
*
|
|
373
|
-
* @returns {Promise<void>}
|
|
374
|
-
*
|
|
375
|
-
* @example
|
|
376
|
-
* // Complete cleanup flow
|
|
377
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
378
|
-
* try {
|
|
379
|
-
* await adapter.connect();
|
|
380
|
-
* // ... use database ...
|
|
381
|
-
* } finally {
|
|
382
|
-
* await adapter.disconnect(); // Close DB connection
|
|
383
|
-
* await adapter.cleanup(); // Release auth resources
|
|
384
|
-
* }
|
|
385
|
-
*
|
|
386
|
-
* @example
|
|
387
|
-
* // Idempotent disconnect
|
|
388
|
-
* await adapter.disconnect(); // Closes connection
|
|
389
|
-
* await adapter.disconnect(); // Safe - no-op
|
|
390
|
-
*/
|
|
34
|
+
/** Closes the database connection. */
|
|
391
35
|
disconnect(): Promise<void>;
|
|
392
|
-
/**
|
|
393
|
-
* Releases authentication provider resources.
|
|
394
|
-
*
|
|
395
|
-
* This method releases resources allocated during authentication:
|
|
396
|
-
* - SSH tunnels: Closes SSH connection and releases local port
|
|
397
|
-
* - Cloud IAM: Invalidates cached tokens
|
|
398
|
-
* - Direct connections: No-op (no resources to release)
|
|
399
|
-
*
|
|
400
|
-
* **Important Notes:**
|
|
401
|
-
* - This method MUST be called after disconnect() to prevent resource leaks
|
|
402
|
-
* - Errors during cleanup are caught and logged, not thrown
|
|
403
|
-
* - This method is idempotent: safe to call multiple times
|
|
404
|
-
* - Auth provider is set to null after cleanup
|
|
405
|
-
*
|
|
406
|
-
* **Resource Leak Prevention:**
|
|
407
|
-
* Always call cleanup() in a finally block to ensure resources are released
|
|
408
|
-
* even if database operations fail.
|
|
409
|
-
*
|
|
410
|
-
* @returns {Promise<void>}
|
|
411
|
-
*
|
|
412
|
-
* @example
|
|
413
|
-
* // Proper cleanup flow
|
|
414
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
415
|
-
* try {
|
|
416
|
-
* await adapter.connect();
|
|
417
|
-
* // ... database operations ...
|
|
418
|
-
* } finally {
|
|
419
|
-
* await adapter.disconnect();
|
|
420
|
-
* await adapter.cleanup();
|
|
421
|
-
* }
|
|
422
|
-
*
|
|
423
|
-
* @example
|
|
424
|
-
* // Error handling during cleanup
|
|
425
|
-
* try {
|
|
426
|
-
* await adapter.cleanup();
|
|
427
|
-
* } catch (error) {
|
|
428
|
-
* // Cleanup errors are logged but not thrown to prevent cascading failures
|
|
429
|
-
* console.error('Cleanup failed:', error);
|
|
430
|
-
* }
|
|
431
|
-
*/
|
|
36
|
+
/** Releases authentication provider resources. */
|
|
432
37
|
cleanup(): Promise<void>;
|
|
433
|
-
/**
|
|
434
|
-
* Returns the Knex.js instance for database operations.
|
|
435
|
-
*
|
|
436
|
-
* This method provides access to the underlying Knex instance for executing
|
|
437
|
-
* queries, building query chains, and accessing raw connections.
|
|
438
|
-
*
|
|
439
|
-
* **Important Notes:**
|
|
440
|
-
* - Must call connect() before calling this method
|
|
441
|
-
* - Throws error if connection not established
|
|
442
|
-
* - Returns same instance across multiple calls
|
|
443
|
-
*
|
|
444
|
-
* @returns {Knex} Knex instance for database operations
|
|
445
|
-
*
|
|
446
|
-
* @throws {Error} 'Database not connected. Call connect() first.' - if not connected
|
|
447
|
-
*
|
|
448
|
-
* @example
|
|
449
|
-
* // Standard usage
|
|
450
|
-
* const adapter = new PostgreSQLAdapter(config);
|
|
451
|
-
* await adapter.connect();
|
|
452
|
-
* const knex = adapter.getKnex();
|
|
453
|
-
* const users = await knex('users').select('*');
|
|
454
|
-
*
|
|
455
|
-
* @example
|
|
456
|
-
* // Query builder
|
|
457
|
-
* const knex = adapter.getKnex();
|
|
458
|
-
* const query = knex('orders')
|
|
459
|
-
* .where('status', 'pending')
|
|
460
|
-
* .andWhere('created_at', '>', '2024-01-01')
|
|
461
|
-
* .orderBy('created_at', 'desc');
|
|
462
|
-
*
|
|
463
|
-
* @example
|
|
464
|
-
* // Raw queries
|
|
465
|
-
* const knex = adapter.getKnex();
|
|
466
|
-
* const result = await knex.raw('SELECT * FROM users WHERE id = ?', [userId]);
|
|
467
|
-
*/
|
|
38
|
+
/** Returns the Knex.js instance for database operations. */
|
|
468
39
|
getKnex(): Knex;
|
|
469
|
-
/**
|
|
470
|
-
* Executes a callback within a database transaction.
|
|
471
|
-
*
|
|
472
|
-
* This method delegates to Knex's transaction management, providing:
|
|
473
|
-
* - Automatic commit on success
|
|
474
|
-
* - Automatic rollback on error
|
|
475
|
-
* - Optional isolation level configuration
|
|
476
|
-
*
|
|
477
|
-
* **Transaction Isolation Levels:**
|
|
478
|
-
* - 'serializable': Strongest isolation, prevents all anomalies
|
|
479
|
-
* - 'repeatable read': Prevents non-repeatable reads and phantom reads
|
|
480
|
-
* - 'read committed': Prevents dirty reads (default for most databases)
|
|
481
|
-
*
|
|
482
|
-
* **Important Notes:**
|
|
483
|
-
* - All database operations within callback must use the trx parameter
|
|
484
|
-
* - Do not mix transaction queries with non-transaction queries
|
|
485
|
-
* - Nested transactions use savepoints (if supported by database)
|
|
486
|
-
*
|
|
487
|
-
* @param {Function} callback - Async function receiving transaction object
|
|
488
|
-
* @param {Object} [options] - Transaction options
|
|
489
|
-
* @param {string} [options.isolationLevel] - Transaction isolation level
|
|
490
|
-
* @returns {Promise<T>} Result from callback function
|
|
491
|
-
*
|
|
492
|
-
* @throws {Error} If callback throws (transaction is rolled back)
|
|
493
|
-
*
|
|
494
|
-
* @example
|
|
495
|
-
* // Bank transfer transaction
|
|
496
|
-
* await adapter.transaction(async (trx) => {
|
|
497
|
-
* await trx('accounts')
|
|
498
|
-
* .where({ id: fromAccount })
|
|
499
|
-
* .decrement('balance', amount);
|
|
500
|
-
*
|
|
501
|
-
* await trx('accounts')
|
|
502
|
-
* .where({ id: toAccount })
|
|
503
|
-
* .increment('balance', amount);
|
|
504
|
-
*
|
|
505
|
-
* await trx('transfers').insert({
|
|
506
|
-
* from_account: fromAccount,
|
|
507
|
-
* to_account: toAccount,
|
|
508
|
-
* amount
|
|
509
|
-
* });
|
|
510
|
-
* });
|
|
511
|
-
*
|
|
512
|
-
* @example
|
|
513
|
-
* // Transaction with isolation level
|
|
514
|
-
* await adapter.transaction(async (trx) => {
|
|
515
|
-
* const balance = await trx('accounts')
|
|
516
|
-
* .where({ id: accountId })
|
|
517
|
-
* .first('balance');
|
|
518
|
-
*
|
|
519
|
-
* if (balance.balance >= amount) {
|
|
520
|
-
* await trx('accounts')
|
|
521
|
-
* .where({ id: accountId })
|
|
522
|
-
* .decrement('balance', amount);
|
|
523
|
-
* }
|
|
524
|
-
* }, { isolationLevel: 'serializable' });
|
|
525
|
-
*
|
|
526
|
-
* @example
|
|
527
|
-
* // Error handling (automatic rollback)
|
|
528
|
-
* try {
|
|
529
|
-
* await adapter.transaction(async (trx) => {
|
|
530
|
-
* await trx('users').insert({ name: 'Alice' });
|
|
531
|
-
* throw new Error('Something went wrong');
|
|
532
|
-
* await trx('logs').insert({ message: 'Never executed' });
|
|
533
|
-
* });
|
|
534
|
-
* } catch (error) {
|
|
535
|
-
* console.log('Transaction rolled back:', error.message);
|
|
536
|
-
* }
|
|
537
|
-
*/
|
|
40
|
+
/** Executes a callback within a database transaction. */
|
|
538
41
|
transaction<T>(callback: (trx: Knex.Transaction) => Promise<T>, options?: {
|
|
539
42
|
isolationLevel?: 'serializable' | 'read committed' | 'repeatable read';
|
|
540
43
|
}): Promise<T>;
|
|
541
|
-
/**
|
|
542
|
-
* Builds Knex configuration from connection parameters.
|
|
543
|
-
*
|
|
544
|
-
* This method converts ConnectionParams (returned by auth provider) into
|
|
545
|
-
* Knex.Config format. Subclasses can override to customize configuration.
|
|
546
|
-
*
|
|
547
|
-
* **Default Behavior:**
|
|
548
|
-
* - Uses dialect from getDialect()
|
|
549
|
-
* - Passes connection params to Knex
|
|
550
|
-
* - Configures SSL if present
|
|
551
|
-
* - Merges additional params
|
|
552
|
-
*
|
|
553
|
-
* @protected
|
|
554
|
-
* @param {ConnectionParams | null} connParams - Connection parameters from auth provider
|
|
555
|
-
* @returns {Knex.Config} Knex configuration object
|
|
556
|
-
*
|
|
557
|
-
* @example
|
|
558
|
-
* // Custom configuration in subclass
|
|
559
|
-
* protected buildKnexConfig(connParams: ConnectionParams | null): Knex.Config {
|
|
560
|
-
* const baseConfig = super.buildKnexConfig(connParams);
|
|
561
|
-
* return {
|
|
562
|
-
* ...baseConfig,
|
|
563
|
-
* pool: {
|
|
564
|
-
* min: 2,
|
|
565
|
-
* max: 10,
|
|
566
|
-
* afterCreate: (conn, done) => {
|
|
567
|
-
* // Custom connection setup
|
|
568
|
-
* done(null, conn);
|
|
569
|
-
* }
|
|
570
|
-
* }
|
|
571
|
-
* };
|
|
572
|
-
* }
|
|
573
|
-
*/
|
|
44
|
+
/** Builds Knex configuration from connection parameters. @protected */
|
|
574
45
|
protected buildKnexConfig(connParams: ConnectionParams | null): Knex.Config;
|
|
575
|
-
/**
|
|
576
|
-
* Inserts a row and returns the inserted record.
|
|
577
|
-
* Adapts to databases that don't support RETURNING clause.
|
|
578
|
-
* @abstract
|
|
579
|
-
*/
|
|
46
|
+
/** Inserts a row and returns the inserted record. @abstract */
|
|
580
47
|
abstract insertReturning<T extends Record<string, any>>(table: string, data: Partial<T>): Promise<T>;
|
|
581
|
-
/**
|
|
582
|
-
* Upserts a row (INSERT ... ON CONFLICT UPDATE).
|
|
583
|
-
* Adapts to different upsert syntaxes across databases.
|
|
584
|
-
* @abstract
|
|
585
|
-
*/
|
|
48
|
+
/** Upserts a row (INSERT ... ON CONFLICT UPDATE). @abstract */
|
|
586
49
|
abstract upsert<T extends Record<string, any>>(table: string, data: Partial<T>, conflictColumns: string[], updateColumns?: string[]): Promise<number>;
|
|
587
|
-
/**
|
|
588
|
-
* Extracts a value from a JSON column.
|
|
589
|
-
* @abstract
|
|
590
|
-
*/
|
|
50
|
+
/** Extracts a value from a JSON column. @abstract */
|
|
591
51
|
abstract jsonExtract(column: string, path: string): Knex.Raw;
|
|
592
|
-
/**
|
|
593
|
-
* Builds a JSON object from field values.
|
|
594
|
-
* @abstract
|
|
595
|
-
*/
|
|
52
|
+
/** Builds a JSON object from field values. @abstract */
|
|
596
53
|
abstract jsonBuildObject(fields: Record<string, any>): Knex.Raw;
|
|
597
|
-
/**
|
|
598
|
-
* Returns current timestamp expression.
|
|
599
|
-
* @abstract
|
|
600
|
-
*/
|
|
54
|
+
/** Returns current timestamp expression. @abstract */
|
|
601
55
|
abstract currentTimestamp(): Knex.Raw;
|
|
602
|
-
/**
|
|
603
|
-
* Converts Unix epoch to datetime.
|
|
604
|
-
* @abstract
|
|
605
|
-
*/
|
|
56
|
+
/** Converts Unix epoch to datetime. @abstract */
|
|
606
57
|
abstract fromUnixEpoch(epochColumn: string): Knex.Raw;
|
|
607
|
-
/**
|
|
608
|
-
* Converts datetime to Unix epoch.
|
|
609
|
-
* @abstract
|
|
610
|
-
*/
|
|
58
|
+
/** Converts datetime to Unix epoch. @abstract */
|
|
611
59
|
abstract toUnixEpoch(timestampColumn: string): Knex.Raw;
|
|
612
|
-
/**
|
|
613
|
-
* Concatenates string values.
|
|
614
|
-
* @abstract
|
|
615
|
-
*/
|
|
60
|
+
/** Concatenates string values. @abstract */
|
|
616
61
|
abstract concat(...values: Array<string | Knex.Raw>): Knex.Raw;
|
|
617
|
-
/**
|
|
618
|
-
* Aggregates strings with separator.
|
|
619
|
-
* @abstract
|
|
620
|
-
*/
|
|
62
|
+
/** Aggregates strings with separator. @abstract */
|
|
621
63
|
abstract stringAgg(column: string, separator?: string): Knex.Raw;
|
|
622
|
-
/**
|
|
623
|
-
* Creates a savepoint within a transaction.
|
|
624
|
-
* @abstract
|
|
625
|
-
*/
|
|
64
|
+
/** Creates a savepoint within a transaction. @abstract */
|
|
626
65
|
abstract savepoint<T>(trx: Knex.Transaction, callback: (sp: Knex.Transaction) => Promise<T>): Promise<T>;
|
|
627
|
-
/**
|
|
628
|
-
* Checks if a table exists in the database.
|
|
629
|
-
* @abstract
|
|
630
|
-
*/
|
|
66
|
+
/** Checks if a table exists in the database. @abstract */
|
|
631
67
|
abstract tableExists(tableName: string): Promise<boolean>;
|
|
632
|
-
/**
|
|
633
|
-
* Adds an auto-increment column to a table builder.
|
|
634
|
-
* @abstract
|
|
635
|
-
*/
|
|
68
|
+
/** Adds an auto-increment column to a table builder. @abstract */
|
|
636
69
|
abstract autoIncrementColumn(table: Knex.CreateTableBuilder, columnName?: string): void;
|
|
637
70
|
}
|
|
638
71
|
//# sourceMappingURL=base-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/base-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/base-adapter.ts"],"names":[],"mappings":"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"}
|