sqlew 3.7.3 → 3.8.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 +427 -1
- package/README.md +71 -2
- package/assets/kanban-visualizer.png +0 -0
- package/assets/sample-agents/sqlew-scrum-master.md +4 -4
- package/dist/adapters/postgresql-adapter.d.ts +197 -5
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
- package/dist/adapters/postgresql-adapter.js +300 -36
- package/dist/adapters/postgresql-adapter.js.map +1 -1
- package/dist/cli/db-export.d.ts +29 -0
- package/dist/cli/db-export.d.ts.map +1 -0
- package/dist/cli/db-export.js +251 -0
- package/dist/cli/db-export.js.map +1 -0
- package/dist/cli/db-import.d.ts +31 -0
- package/dist/cli/db-import.d.ts.map +1 -0
- package/dist/cli/db-import.js +258 -0
- package/dist/cli/db-import.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +32 -73
- package/dist/cli.js.map +1 -1
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -1
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js +158 -45
- package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -1
- package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -1
- package/dist/config/knex/bootstrap/20251025070349_create_views.js +60 -8
- package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +1 -1
- package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js +1 -1
- package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js +5 -5
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -1
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js +9 -1
- package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -1
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +1 -1
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +8 -1
- package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +1 -1
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.d.ts +21 -0
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.js +73 -0
- package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts +19 -0
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js +88 -0
- package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts +24 -0
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.js +79 -0
- package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.js.map +1 -0
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.d.ts +27 -0
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.js +347 -0
- package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.js.map +1 -0
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.d.ts +30 -0
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.d.ts.map +1 -0
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.js +232 -0
- package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.js.map +1 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -1
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +9 -0
- package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -1
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts +14 -0
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.js +97 -0
- package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.js.map +1 -0
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts +24 -0
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts.map +1 -0
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.js +303 -0
- package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.js.map +1 -0
- package/dist/constants.d.ts +14 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +28 -1
- package/dist/constants.js.map +1 -1
- package/dist/database/config/adapter-factory.d.ts +13 -0
- package/dist/database/config/adapter-factory.d.ts.map +1 -0
- package/dist/database/config/adapter-factory.js +21 -0
- package/dist/database/config/adapter-factory.js.map +1 -0
- package/dist/database/config/config-ops.d.ts +34 -0
- package/dist/database/config/config-ops.d.ts.map +1 -0
- package/dist/database/config/config-ops.js +76 -0
- package/dist/database/config/config-ops.js.map +1 -0
- package/dist/database/index.d.ts +21 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +31 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/initialization/cleanup.d.ts +8 -0
- package/dist/database/initialization/cleanup.d.ts.map +1 -0
- package/dist/database/initialization/cleanup.js +17 -0
- package/dist/database/initialization/cleanup.js.map +1 -0
- package/dist/database/initialization/init.d.ts +21 -0
- package/dist/database/initialization/init.d.ts.map +1 -0
- package/dist/database/initialization/init.js +83 -0
- package/dist/database/initialization/init.js.map +1 -0
- package/dist/database/operations/deletes.d.ts +10 -0
- package/dist/database/operations/deletes.d.ts.map +1 -0
- package/dist/database/operations/deletes.js +14 -0
- package/dist/database/operations/deletes.js.map +1 -0
- package/dist/database/operations/inserts.d.ts +40 -0
- package/dist/database/operations/inserts.d.ts.map +1 -0
- package/dist/database/operations/inserts.js +202 -0
- package/dist/database/operations/inserts.js.map +1 -0
- package/dist/database/operations/queries.d.ts +57 -0
- package/dist/database/operations/queries.d.ts.map +1 -0
- package/dist/database/operations/queries.js +77 -0
- package/dist/database/operations/queries.js.map +1 -0
- package/dist/database/operations/updates.d.ts +10 -0
- package/dist/database/operations/updates.d.ts.map +1 -0
- package/dist/database/operations/updates.js +14 -0
- package/dist/database/operations/updates.js.map +1 -0
- package/dist/database/types.d.ts +5 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +5 -0
- package/dist/database/types.js.map +1 -0
- package/dist/database.d.ts +4 -144
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +5 -461
- package/dist/database.js.map +1 -1
- package/dist/index.js +29 -777
- package/dist/index.js.map +1 -1
- package/dist/server/arg-parser.d.ts +40 -0
- package/dist/server/arg-parser.d.ts.map +1 -0
- package/dist/server/arg-parser.js +137 -0
- package/dist/server/arg-parser.js.map +1 -0
- package/dist/server/setup.d.ts +31 -0
- package/dist/server/setup.d.ts.map +1 -0
- package/dist/server/setup.js +186 -0
- package/dist/server/setup.js.map +1 -0
- package/dist/server/shutdown.d.ts +15 -0
- package/dist/server/shutdown.d.ts.map +1 -0
- package/dist/server/shutdown.js +42 -0
- package/dist/server/shutdown.js.map +1 -0
- package/dist/server/tool-handlers.d.ts +10 -0
- package/dist/server/tool-handlers.d.ts.map +1 -0
- package/dist/server/tool-handlers.js +478 -0
- package/dist/server/tool-handlers.js.map +1 -0
- package/dist/server/tool-registry.d.ts +11 -0
- package/dist/server/tool-registry.d.ts.map +1 -0
- package/dist/server/tool-registry.js +225 -0
- package/dist/server/tool-registry.js.map +1 -0
- package/dist/tests/all-features.test.js +6 -38
- package/dist/tests/all-features.test.js.map +1 -1
- package/dist/tests/batch-validation-comprehensive.test.d.ts +12 -0
- package/dist/tests/batch-validation-comprehensive.test.d.ts.map +1 -0
- package/dist/tests/batch-validation-comprehensive.test.js +472 -0
- package/dist/tests/batch-validation-comprehensive.test.js.map +1 -0
- package/dist/tests/batch-validation-integration.test.d.ts +6 -0
- package/dist/tests/batch-validation-integration.test.d.ts.map +1 -0
- package/dist/tests/batch-validation-integration.test.js +193 -0
- package/dist/tests/batch-validation-integration.test.js.map +1 -0
- package/dist/tests/batch-validation.test.d.ts +6 -0
- package/dist/tests/batch-validation.test.d.ts.map +1 -0
- package/dist/tests/batch-validation.test.js +298 -0
- package/dist/tests/batch-validation.test.js.map +1 -0
- package/dist/tests/context-modular.test.d.ts +7 -0
- package/dist/tests/context-modular.test.d.ts.map +1 -0
- package/dist/tests/context-modular.test.js +271 -0
- package/dist/tests/context-modular.test.js.map +1 -0
- package/dist/tests/decision-batch-validation.test.d.ts +6 -0
- package/dist/tests/decision-batch-validation.test.d.ts.map +1 -0
- package/dist/tests/decision-batch-validation.test.js +253 -0
- package/dist/tests/decision-batch-validation.test.js.map +1 -0
- package/dist/tests/help-system.test.js +1 -1
- package/dist/tests/help-system.test.js.map +1 -1
- package/dist/tests/migrations/test-all-versions-real.js +3 -2
- package/dist/tests/migrations/test-all-versions-real.js.map +1 -1
- package/dist/tests/multi-project.test.js +2 -2
- package/dist/tests/multi-project.test.js.map +1 -1
- package/dist/tests/parameter-validation.test.js +2 -16
- package/dist/tests/parameter-validation.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +1 -1
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/tasks.file-actions-integration.test.d.ts +10 -0
- package/dist/tests/tasks.file-actions-integration.test.d.ts.map +1 -0
- package/dist/tests/tasks.file-actions-integration.test.js +162 -0
- package/dist/tests/tasks.file-actions-integration.test.js.map +1 -0
- package/dist/tests/tasks.file-actions-validation.test.d.ts +6 -0
- package/dist/tests/tasks.file-actions-validation.test.d.ts.map +1 -0
- package/dist/tests/tasks.file-actions-validation.test.js +221 -0
- package/dist/tests/tasks.file-actions-validation.test.js.map +1 -0
- package/dist/tools/constraints/actions/add.d.ts +15 -0
- package/dist/tools/constraints/actions/add.d.ts.map +1 -0
- package/dist/tools/constraints/actions/add.js +101 -0
- package/dist/tools/constraints/actions/add.js.map +1 -0
- package/dist/tools/constraints/actions/deactivate.d.ts +16 -0
- package/dist/tools/constraints/actions/deactivate.d.ts.map +1 -0
- package/dist/tools/constraints/actions/deactivate.js +49 -0
- package/dist/tools/constraints/actions/deactivate.js.map +1 -0
- package/dist/tools/constraints/actions/get.d.ts +16 -0
- package/dist/tools/constraints/actions/get.d.ts.map +1 -0
- package/dist/tools/constraints/actions/get.js +76 -0
- package/dist/tools/constraints/actions/get.js.map +1 -0
- package/dist/tools/constraints/help/example.d.ts +9 -0
- package/dist/tools/constraints/help/example.d.ts.map +1 -0
- package/dist/tools/constraints/help/example.js +144 -0
- package/dist/tools/constraints/help/example.js.map +1 -0
- package/dist/tools/constraints/help/help.d.ts +9 -0
- package/dist/tools/constraints/help/help.d.ts.map +1 -0
- package/dist/tools/constraints/help/help.js +31 -0
- package/dist/tools/constraints/help/help.js.map +1 -0
- package/dist/tools/constraints/index.d.ts +12 -0
- package/dist/tools/constraints/index.d.ts.map +1 -0
- package/dist/tools/constraints/index.js +13 -0
- package/dist/tools/constraints/index.js.map +1 -0
- package/dist/tools/constraints/internal/validation.d.ts +11 -0
- package/dist/tools/constraints/internal/validation.d.ts.map +1 -0
- package/dist/tools/constraints/internal/validation.js +17 -0
- package/dist/tools/constraints/internal/validation.js.map +1 -0
- package/dist/tools/constraints/types.d.ts +6 -0
- package/dist/tools/constraints/types.d.ts.map +1 -0
- package/dist/tools/constraints/types.js +6 -0
- package/dist/tools/constraints/types.js.map +1 -0
- package/dist/tools/context/actions/add-context.d.ts +14 -0
- package/dist/tools/context/actions/add-context.d.ts.map +1 -0
- package/dist/tools/context/actions/add-context.js +62 -0
- package/dist/tools/context/actions/add-context.js.map +1 -0
- package/dist/tools/context/actions/batch-set.d.ts +16 -0
- package/dist/tools/context/actions/batch-set.d.ts.map +1 -0
- package/dist/tools/context/actions/batch-set.js +126 -0
- package/dist/tools/context/actions/batch-set.js.map +1 -0
- package/dist/tools/context/actions/create-template.d.ts +15 -0
- package/dist/tools/context/actions/create-template.d.ts.map +1 -0
- package/dist/tools/context/actions/create-template.js +68 -0
- package/dist/tools/context/actions/create-template.js.map +1 -0
- package/dist/tools/context/actions/get.d.ts +18 -0
- package/dist/tools/context/actions/get.d.ts.map +1 -0
- package/dist/tools/context/actions/get.js +80 -0
- package/dist/tools/context/actions/get.js.map +1 -0
- package/dist/tools/context/actions/hard-delete.d.ts +18 -0
- package/dist/tools/context/actions/hard-delete.d.ts.map +1 -0
- package/dist/tools/context/actions/hard-delete.js +85 -0
- package/dist/tools/context/actions/hard-delete.js.map +1 -0
- package/dist/tools/context/actions/has-updates.d.ts +16 -0
- package/dist/tools/context/actions/has-updates.d.ts.map +1 -0
- package/dist/tools/context/actions/has-updates.js +83 -0
- package/dist/tools/context/actions/has-updates.js.map +1 -0
- package/dist/tools/context/actions/list-contexts.d.ts +14 -0
- package/dist/tools/context/actions/list-contexts.d.ts.map +1 -0
- package/dist/tools/context/actions/list-contexts.js +43 -0
- package/dist/tools/context/actions/list-contexts.js.map +1 -0
- package/dist/tools/context/actions/list-templates.d.ts +15 -0
- package/dist/tools/context/actions/list-templates.d.ts.map +1 -0
- package/dist/tools/context/actions/list-templates.js +47 -0
- package/dist/tools/context/actions/list-templates.js.map +1 -0
- package/dist/tools/context/actions/list.d.ts +16 -0
- package/dist/tools/context/actions/list.d.ts.map +1 -0
- package/dist/tools/context/actions/list.js +100 -0
- package/dist/tools/context/actions/list.js.map +1 -0
- package/dist/tools/context/actions/quick-set.d.ts +21 -0
- package/dist/tools/context/actions/quick-set.d.ts.map +1 -0
- package/dist/tools/context/actions/quick-set.js +104 -0
- package/dist/tools/context/actions/quick-set.js.map +1 -0
- package/dist/tools/context/actions/search-advanced.d.ts +15 -0
- package/dist/tools/context/actions/search-advanced.d.ts.map +1 -0
- package/dist/tools/context/actions/search-advanced.js +140 -0
- package/dist/tools/context/actions/search-advanced.js.map +1 -0
- package/dist/tools/context/actions/search-layer.d.ts +15 -0
- package/dist/tools/context/actions/search-layer.d.ts.map +1 -0
- package/dist/tools/context/actions/search-layer.js +106 -0
- package/dist/tools/context/actions/search-layer.js.map +1 -0
- package/dist/tools/context/actions/search-tags.d.ts +15 -0
- package/dist/tools/context/actions/search-tags.d.ts.map +1 -0
- package/dist/tools/context/actions/search-tags.js +85 -0
- package/dist/tools/context/actions/search-tags.js.map +1 -0
- package/dist/tools/context/actions/set-from-template.d.ts +16 -0
- package/dist/tools/context/actions/set-from-template.d.ts.map +1 -0
- package/dist/tools/context/actions/set-from-template.js +83 -0
- package/dist/tools/context/actions/set-from-template.js.map +1 -0
- package/dist/tools/context/actions/set.d.ts +16 -0
- package/dist/tools/context/actions/set.d.ts.map +1 -0
- package/dist/tools/context/actions/set.js +56 -0
- package/dist/tools/context/actions/set.js.map +1 -0
- package/dist/tools/context/actions/versions.d.ts +15 -0
- package/dist/tools/context/actions/versions.d.ts.map +1 -0
- package/dist/tools/context/actions/versions.js +69 -0
- package/dist/tools/context/actions/versions.js.map +1 -0
- package/dist/tools/context/help/example.d.ts +5 -0
- package/dist/tools/context/help/example.d.ts.map +1 -0
- package/dist/tools/context/help/example.js +96 -0
- package/dist/tools/context/help/example.js.map +1 -0
- package/dist/tools/context/help/help.d.ts +5 -0
- package/dist/tools/context/help/help.d.ts.map +1 -0
- package/dist/tools/context/help/help.js +65 -0
- package/dist/tools/context/help/help.js.map +1 -0
- package/dist/tools/context/index.d.ts +25 -0
- package/dist/tools/context/index.d.ts.map +1 -0
- package/dist/tools/context/index.js +26 -0
- package/dist/tools/context/index.js.map +1 -0
- package/dist/tools/context/internal/queries.d.ts +18 -0
- package/dist/tools/context/internal/queries.d.ts.map +1 -0
- package/dist/tools/context/internal/queries.js +160 -0
- package/dist/tools/context/internal/queries.js.map +1 -0
- package/dist/tools/context/internal/validation.d.ts +39 -0
- package/dist/tools/context/internal/validation.d.ts.map +1 -0
- package/dist/tools/context/internal/validation.js +125 -0
- package/dist/tools/context/internal/validation.js.map +1 -0
- package/dist/tools/context/types.d.ts +6 -0
- package/dist/tools/context/types.d.ts.map +1 -0
- package/dist/tools/context/types.js +6 -0
- package/dist/tools/context/types.js.map +1 -0
- package/dist/tools/example/actions/get.d.ts +14 -0
- package/dist/tools/example/actions/get.d.ts.map +1 -0
- package/dist/tools/example/actions/get.js +40 -0
- package/dist/tools/example/actions/get.js.map +1 -0
- package/dist/tools/example/actions/list-all.d.ts +13 -0
- package/dist/tools/example/actions/list-all.d.ts.map +1 -0
- package/dist/tools/example/actions/list-all.js +39 -0
- package/dist/tools/example/actions/list-all.js.map +1 -0
- package/dist/tools/example/actions/search.d.ts +14 -0
- package/dist/tools/example/actions/search.d.ts.map +1 -0
- package/dist/tools/example/actions/search.js +52 -0
- package/dist/tools/example/actions/search.js.map +1 -0
- package/dist/tools/example/help/example.d.ts +6 -0
- package/dist/tools/example/help/example.d.ts.map +1 -0
- package/dist/tools/example/help/example.js +69 -0
- package/dist/tools/example/help/example.js.map +1 -0
- package/dist/tools/example/help/help.d.ts +6 -0
- package/dist/tools/example/help/help.d.ts.map +1 -0
- package/dist/tools/example/help/help.js +133 -0
- package/dist/tools/example/help/help.js.map +1 -0
- package/dist/tools/example/index.d.ts +11 -0
- package/dist/tools/example/index.d.ts.map +1 -0
- package/dist/tools/example/index.js +12 -0
- package/dist/tools/example/index.js.map +1 -0
- package/dist/tools/example/types.d.ts +59 -0
- package/dist/tools/example/types.d.ts.map +1 -0
- package/dist/tools/example/types.js +6 -0
- package/dist/tools/example/types.js.map +1 -0
- package/dist/tools/files/actions/check-lock.d.ts +16 -0
- package/dist/tools/files/actions/check-lock.d.ts.map +1 -0
- package/dist/tools/files/actions/check-lock.js +70 -0
- package/dist/tools/files/actions/check-lock.js.map +1 -0
- package/dist/tools/files/actions/get.d.ts +16 -0
- package/dist/tools/files/actions/get.d.ts.map +1 -0
- package/dist/tools/files/actions/get.js +113 -0
- package/dist/tools/files/actions/get.js.map +1 -0
- package/dist/tools/files/actions/record-batch.d.ts +18 -0
- package/dist/tools/files/actions/record-batch.d.ts.map +1 -0
- package/dist/tools/files/actions/record-batch.js +114 -0
- package/dist/tools/files/actions/record-batch.js.map +1 -0
- package/dist/tools/files/actions/record.d.ts +16 -0
- package/dist/tools/files/actions/record.d.ts.map +1 -0
- package/dist/tools/files/actions/record.js +37 -0
- package/dist/tools/files/actions/record.js.map +1 -0
- package/dist/tools/files/actions/sqlite-flush.d.ts +27 -0
- package/dist/tools/files/actions/sqlite-flush.d.ts.map +1 -0
- package/dist/tools/files/actions/sqlite-flush.js +66 -0
- package/dist/tools/files/actions/sqlite-flush.js.map +1 -0
- package/dist/tools/files/help/example.d.ts +5 -0
- package/dist/tools/files/help/example.d.ts.map +1 -0
- package/dist/tools/files/help/example.js +98 -0
- package/dist/tools/files/help/example.js.map +1 -0
- package/dist/tools/files/help/help.d.ts +5 -0
- package/dist/tools/files/help/help.d.ts.map +1 -0
- package/dist/tools/files/help/help.js +29 -0
- package/dist/tools/files/help/help.js.map +1 -0
- package/dist/tools/files/index.d.ts +14 -0
- package/dist/tools/files/index.d.ts.map +1 -0
- package/dist/tools/files/index.js +15 -0
- package/dist/tools/files/index.js.map +1 -0
- package/dist/tools/files/internal/queries.d.ts +18 -0
- package/dist/tools/files/internal/queries.d.ts.map +1 -0
- package/dist/tools/files/internal/queries.js +63 -0
- package/dist/tools/files/internal/queries.js.map +1 -0
- package/dist/tools/files/internal/validation.d.ts +18 -0
- package/dist/tools/files/internal/validation.d.ts.map +1 -0
- package/dist/tools/files/internal/validation.js +40 -0
- package/dist/tools/files/internal/validation.js.map +1 -0
- package/dist/tools/files/types.d.ts +6 -0
- package/dist/tools/files/types.d.ts.map +1 -0
- package/dist/tools/files/types.js +6 -0
- package/dist/tools/files/types.js.map +1 -0
- package/dist/tools/help/actions/batch-guide.d.ts +14 -0
- package/dist/tools/help/actions/batch-guide.d.ts.map +1 -0
- package/dist/tools/help/actions/batch-guide.js +59 -0
- package/dist/tools/help/actions/batch-guide.js.map +1 -0
- package/dist/tools/help/actions/error-recovery.d.ts +12 -0
- package/dist/tools/help/actions/error-recovery.d.ts.map +1 -0
- package/dist/tools/help/actions/error-recovery.js +107 -0
- package/dist/tools/help/actions/error-recovery.js.map +1 -0
- package/dist/tools/help/actions/query-action.d.ts +15 -0
- package/dist/tools/help/actions/query-action.d.ts.map +1 -0
- package/dist/tools/help/actions/query-action.js +15 -0
- package/dist/tools/help/actions/query-action.js.map +1 -0
- package/dist/tools/help/actions/query-params.d.ts +15 -0
- package/dist/tools/help/actions/query-params.d.ts.map +1 -0
- package/dist/tools/help/actions/query-params.js +15 -0
- package/dist/tools/help/actions/query-params.js.map +1 -0
- package/dist/tools/help/actions/query-tool.d.ts +15 -0
- package/dist/tools/help/actions/query-tool.d.ts.map +1 -0
- package/dist/tools/help/actions/query-tool.js +15 -0
- package/dist/tools/help/actions/query-tool.js.map +1 -0
- package/dist/tools/help/actions/workflow-hints.d.ts +14 -0
- package/dist/tools/help/actions/workflow-hints.d.ts.map +1 -0
- package/dist/tools/help/actions/workflow-hints.js +15 -0
- package/dist/tools/help/actions/workflow-hints.js.map +1 -0
- package/dist/tools/help/help/example.d.ts +6 -0
- package/dist/tools/help/help/example.d.ts.map +1 -0
- package/dist/tools/help/help/example.js +70 -0
- package/dist/tools/help/help/example.js.map +1 -0
- package/dist/tools/help/help/help.d.ts +6 -0
- package/dist/tools/help/help/help.d.ts.map +1 -0
- package/dist/tools/help/help/help.js +67 -0
- package/dist/tools/help/help/help.js.map +1 -0
- package/dist/tools/help/index.d.ts +14 -0
- package/dist/tools/help/index.d.ts.map +1 -0
- package/dist/tools/help/index.js +15 -0
- package/dist/tools/help/index.js.map +1 -0
- package/dist/tools/help/types.d.ts +92 -0
- package/dist/tools/help/types.d.ts.map +1 -0
- package/dist/tools/help/types.js +6 -0
- package/dist/tools/help/types.js.map +1 -0
- package/dist/tools/help-queries.d.ts.map +1 -1
- package/dist/tools/help-queries.js +1 -0
- package/dist/tools/help-queries.js.map +1 -1
- package/dist/tools/tasks/actions/add-dependency.d.ts +12 -0
- package/dist/tools/tasks/actions/add-dependency.d.ts.map +1 -0
- package/dist/tools/tasks/actions/add-dependency.js +124 -0
- package/dist/tools/tasks/actions/add-dependency.js.map +1 -0
- package/dist/tools/tasks/actions/archive.d.ts +11 -0
- package/dist/tools/tasks/actions/archive.d.ts.map +1 -0
- package/dist/tools/tasks/actions/archive.js +67 -0
- package/dist/tools/tasks/actions/archive.js.map +1 -0
- package/dist/tools/tasks/actions/create-batch.d.ts +19 -0
- package/dist/tools/tasks/actions/create-batch.d.ts.map +1 -0
- package/dist/tools/tasks/actions/create-batch.js +103 -0
- package/dist/tools/tasks/actions/create-batch.js.map +1 -0
- package/dist/tools/tasks/actions/create.d.ts +16 -0
- package/dist/tools/tasks/actions/create.d.ts.map +1 -0
- package/dist/tools/tasks/actions/create.js +180 -0
- package/dist/tools/tasks/actions/create.js.map +1 -0
- package/dist/tools/tasks/actions/get-dependencies.d.ts +12 -0
- package/dist/tools/tasks/actions/get-dependencies.d.ts.map +1 -0
- package/dist/tools/tasks/actions/get-dependencies.js +41 -0
- package/dist/tools/tasks/actions/get-dependencies.js.map +1 -0
- package/dist/tools/tasks/actions/get-pruned-files.d.ts +13 -0
- package/dist/tools/tasks/actions/get-pruned-files.d.ts.map +1 -0
- package/dist/tools/tasks/actions/get-pruned-files.js +45 -0
- package/dist/tools/tasks/actions/get-pruned-files.js.map +1 -0
- package/dist/tools/tasks/actions/get.d.ts +12 -0
- package/dist/tools/tasks/actions/get.d.ts.map +1 -0
- package/dist/tools/tasks/actions/get.js +88 -0
- package/dist/tools/tasks/actions/get.js.map +1 -0
- package/dist/tools/tasks/actions/link-pruned-file.d.ts +13 -0
- package/dist/tools/tasks/actions/link-pruned-file.d.ts.map +1 -0
- package/dist/tools/tasks/actions/link-pruned-file.js +63 -0
- package/dist/tools/tasks/actions/link-pruned-file.js.map +1 -0
- package/dist/tools/tasks/actions/link.d.ts +14 -0
- package/dist/tools/tasks/actions/link.d.ts.map +1 -0
- package/dist/tools/tasks/actions/link.js +118 -0
- package/dist/tools/tasks/actions/link.js.map +1 -0
- package/dist/tools/tasks/actions/list.d.ts +17 -0
- package/dist/tools/tasks/actions/list.d.ts.map +1 -0
- package/dist/tools/tasks/actions/list.js +98 -0
- package/dist/tools/tasks/actions/list.js.map +1 -0
- package/dist/tools/tasks/actions/move.d.ts +12 -0
- package/dist/tools/tasks/actions/move.d.ts.map +1 -0
- package/dist/tools/tasks/actions/move.js +91 -0
- package/dist/tools/tasks/actions/move.js.map +1 -0
- package/dist/tools/tasks/actions/remove-dependency.d.ts +12 -0
- package/dist/tools/tasks/actions/remove-dependency.d.ts.map +1 -0
- package/dist/tools/tasks/actions/remove-dependency.js +36 -0
- package/dist/tools/tasks/actions/remove-dependency.js.map +1 -0
- package/dist/tools/tasks/actions/update.d.ts +10 -0
- package/dist/tools/tasks/actions/update.d.ts.map +1 -0
- package/dist/tools/tasks/actions/update.js +186 -0
- package/dist/tools/tasks/actions/update.js.map +1 -0
- package/dist/tools/tasks/actions/watch-files.d.ts +14 -0
- package/dist/tools/tasks/actions/watch-files.d.ts.map +1 -0
- package/dist/tools/tasks/actions/watch-files.js +127 -0
- package/dist/tools/tasks/actions/watch-files.js.map +1 -0
- package/dist/tools/tasks/help/example.d.ts +8 -0
- package/dist/tools/tasks/help/example.d.ts.map +1 -0
- package/dist/tools/tasks/help/example.js +215 -0
- package/dist/tools/tasks/help/example.js.map +1 -0
- package/dist/tools/tasks/help/help.d.ts +8 -0
- package/dist/tools/tasks/help/help.d.ts.map +1 -0
- package/dist/tools/tasks/help/help.js +293 -0
- package/dist/tools/tasks/help/help.js.map +1 -0
- package/dist/tools/tasks/help/use-case.d.ts +11 -0
- package/dist/tools/tasks/help/use-case.d.ts.map +1 -0
- package/dist/tools/tasks/help/use-case.js +768 -0
- package/dist/tools/tasks/help/use-case.js.map +1 -0
- package/dist/tools/tasks/index.d.ts +28 -0
- package/dist/tools/tasks/index.d.ts.map +1 -0
- package/dist/tools/tasks/index.js +33 -0
- package/dist/tools/tasks/index.js.map +1 -0
- package/dist/tools/tasks/internal/state-machine.d.ts +16 -0
- package/dist/tools/tasks/internal/state-machine.d.ts.map +1 -0
- package/dist/tools/tasks/internal/state-machine.js +36 -0
- package/dist/tools/tasks/internal/state-machine.js.map +1 -0
- package/dist/tools/tasks/internal/task-queries.d.ts +12 -0
- package/dist/tools/tasks/internal/task-queries.d.ts.map +1 -0
- package/dist/tools/tasks/internal/task-queries.js +61 -0
- package/dist/tools/tasks/internal/task-queries.js.map +1 -0
- package/dist/tools/tasks/internal/validation.d.ts +47 -0
- package/dist/tools/tasks/internal/validation.d.ts.map +1 -0
- package/dist/tools/tasks/internal/validation.js +261 -0
- package/dist/tools/tasks/internal/validation.js.map +1 -0
- package/dist/tools/tasks/types.d.ts +68 -0
- package/dist/tools/tasks/types.d.ts.map +1 -0
- package/dist/tools/tasks/types.js +45 -0
- package/dist/tools/tasks/types.js.map +1 -0
- package/dist/tools/tasks/watcher/status.d.ts +9 -0
- package/dist/tools/tasks/watcher/status.d.ts.map +1 -0
- package/dist/tools/tasks/watcher/status.js +126 -0
- package/dist/tools/tasks/watcher/status.js.map +1 -0
- package/dist/tools/tasks.d.ts +12 -148
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +12 -2037
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/use_case/actions/get.d.ts +14 -0
- package/dist/tools/use_case/actions/get.d.ts.map +1 -0
- package/dist/tools/use_case/actions/get.js +15 -0
- package/dist/tools/use_case/actions/get.js.map +1 -0
- package/dist/tools/use_case/actions/list-all.d.ts +15 -0
- package/dist/tools/use_case/actions/list-all.d.ts.map +1 -0
- package/dist/tools/use_case/actions/list-all.js +20 -0
- package/dist/tools/use_case/actions/list-all.js.map +1 -0
- package/dist/tools/use_case/actions/search.d.ts +14 -0
- package/dist/tools/use_case/actions/search.d.ts.map +1 -0
- package/dist/tools/use_case/actions/search.js +87 -0
- package/dist/tools/use_case/actions/search.js.map +1 -0
- package/dist/tools/use_case/help/example.d.ts +105 -0
- package/dist/tools/use_case/help/example.d.ts.map +1 -0
- package/dist/tools/use_case/help/example.js +138 -0
- package/dist/tools/use_case/help/example.js.map +1 -0
- package/dist/tools/use_case/help/help.d.ts +33 -0
- package/dist/tools/use_case/help/help.d.ts.map +1 -0
- package/dist/tools/use_case/help/help.js +109 -0
- package/dist/tools/use_case/help/help.js.map +1 -0
- package/dist/tools/use_case/index.d.ts +11 -0
- package/dist/tools/use_case/index.d.ts.map +1 -0
- package/dist/tools/use_case/index.js +12 -0
- package/dist/tools/use_case/index.js.map +1 -0
- package/dist/tools/use_case/types.d.ts +58 -0
- package/dist/tools/use_case/types.d.ts.map +1 -0
- package/dist/tools/use_case/types.js +6 -0
- package/dist/tools/use_case/types.js.map +1 -0
- package/dist/types/actions.d.ts +37 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +6 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/constraint/params.d.ts +2 -0
- package/dist/types/constraint/params.d.ts.map +1 -0
- package/dist/types/constraint/params.js +2 -0
- package/dist/types/constraint/params.js.map +1 -0
- package/dist/types/constraint/responses.d.ts +2 -0
- package/dist/types/constraint/responses.d.ts.map +1 -0
- package/dist/types/constraint/responses.js +2 -0
- package/dist/types/constraint/responses.js.map +1 -0
- package/dist/types/decision/batch.d.ts +24 -0
- package/dist/types/decision/batch.d.ts.map +1 -0
- package/dist/types/decision/batch.js +5 -0
- package/dist/types/decision/batch.js.map +1 -0
- package/dist/types/decision/params.d.ts +73 -0
- package/dist/types/decision/params.d.ts.map +1 -0
- package/dist/types/decision/params.js +5 -0
- package/dist/types/decision/params.js.map +1 -0
- package/dist/types/decision/responses.d.ts +79 -0
- package/dist/types/decision/responses.d.ts.map +1 -0
- package/dist/types/decision/responses.js +5 -0
- package/dist/types/decision/responses.js.map +1 -0
- package/dist/types/decision/templates.d.ts +74 -0
- package/dist/types/decision/templates.d.ts.map +1 -0
- package/dist/types/decision/templates.js +5 -0
- package/dist/types/decision/templates.js.map +1 -0
- package/dist/types/enums.d.ts +43 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +47 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/file/params.d.ts +40 -0
- package/dist/types/file/params.d.ts.map +1 -0
- package/dist/types/file/params.js +6 -0
- package/dist/types/file/params.js.map +1 -0
- package/dist/types/file/responses.d.ts +2 -0
- package/dist/types/file/responses.d.ts.map +1 -0
- package/dist/types/file/responses.js +2 -0
- package/dist/types/file/responses.js.map +1 -0
- package/dist/types/import-export.d.ts +126 -0
- package/dist/types/import-export.d.ts.map +1 -0
- package/dist/types/import-export.js +6 -0
- package/dist/types/import-export.js.map +1 -0
- package/dist/types/index.d.ts +25 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +35 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/master-entities.d.ts +33 -0
- package/dist/types/master-entities.d.ts.map +1 -0
- package/dist/types/master-entities.js +6 -0
- package/dist/types/master-entities.js.map +1 -0
- package/dist/types/task/params.d.ts +172 -0
- package/dist/types/task/params.d.ts.map +1 -0
- package/dist/types/task/params.js +8 -0
- package/dist/types/task/params.js.map +1 -0
- package/dist/types/task/responses.d.ts +334 -0
- package/dist/types/task/responses.d.ts.map +1 -0
- package/dist/types/task/responses.js +8 -0
- package/dist/types/task/responses.js.map +1 -0
- package/dist/types/transaction-entities.d.ts +89 -0
- package/dist/types/transaction-entities.d.ts.map +1 -0
- package/dist/types/transaction-entities.js +5 -0
- package/dist/types/transaction-entities.js.map +1 -0
- package/dist/types/validation.d.ts +44 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +6 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/view-entities.d.ts +61 -0
- package/dist/types/view-entities.d.ts.map +1 -0
- package/dist/types/view-entities.js +5 -0
- package/dist/types/view-entities.js.map +1 -0
- package/dist/types.d.ts +133 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/action-specs/config-specs.d.ts +10 -0
- package/dist/utils/action-specs/config-specs.d.ts.map +1 -0
- package/dist/utils/action-specs/config-specs.js +12 -0
- package/dist/utils/action-specs/config-specs.js.map +1 -0
- package/dist/utils/action-specs/constraint-specs.d.ts +9 -0
- package/dist/utils/action-specs/constraint-specs.d.ts.map +1 -0
- package/dist/utils/action-specs/constraint-specs.js +42 -0
- package/dist/utils/action-specs/constraint-specs.js.map +1 -0
- package/dist/utils/action-specs/decision-specs.d.ts +9 -0
- package/dist/utils/action-specs/decision-specs.d.ts.map +1 -0
- package/dist/utils/action-specs/decision-specs.js +194 -0
- package/dist/utils/action-specs/decision-specs.js.map +1 -0
- package/dist/utils/action-specs/file-specs.d.ts +9 -0
- package/dist/utils/action-specs/file-specs.d.ts.map +1 -0
- package/dist/utils/action-specs/file-specs.js +56 -0
- package/dist/utils/action-specs/file-specs.js.map +1 -0
- package/dist/utils/action-specs/index.d.ts +38 -0
- package/dist/utils/action-specs/index.d.ts.map +1 -0
- package/dist/utils/action-specs/index.js +63 -0
- package/dist/utils/action-specs/index.js.map +1 -0
- package/dist/utils/action-specs/task-specs.d.ts +9 -0
- package/dist/utils/action-specs/task-specs.d.ts.map +1 -0
- package/dist/utils/action-specs/task-specs.js +143 -0
- package/dist/utils/action-specs/task-specs.js.map +1 -0
- package/dist/utils/action-specs/types.d.ts +14 -0
- package/dist/utils/action-specs/types.d.ts.map +1 -0
- package/dist/utils/action-specs/types.js +9 -0
- package/dist/utils/action-specs/types.js.map +1 -0
- package/dist/utils/batch-validation.d.ts +156 -0
- package/dist/utils/batch-validation.d.ts.map +1 -0
- package/dist/utils/batch-validation.example.d.ts +48 -0
- package/dist/utils/batch-validation.example.d.ts.map +1 -0
- package/dist/utils/batch-validation.example.js +180 -0
- package/dist/utils/batch-validation.example.js.map +1 -0
- package/dist/utils/batch-validation.js +345 -0
- package/dist/utils/batch-validation.js.map +1 -0
- package/dist/utils/exporter/export.d.ts +100 -0
- package/dist/utils/exporter/export.d.ts.map +1 -0
- package/dist/utils/exporter/export.js +363 -0
- package/dist/utils/exporter/export.js.map +1 -0
- package/dist/utils/importer/import.d.ts +29 -0
- package/dist/utils/importer/import.d.ts.map +1 -0
- package/dist/utils/importer/import.js +514 -0
- package/dist/utils/importer/import.js.map +1 -0
- package/dist/utils/importer/master-tables.d.ts +18 -0
- package/dist/utils/importer/master-tables.d.ts.map +1 -0
- package/dist/utils/importer/master-tables.js +255 -0
- package/dist/utils/importer/master-tables.js.map +1 -0
- package/dist/utils/importer/topological-sort.d.ts +61 -0
- package/dist/utils/importer/topological-sort.d.ts.map +1 -0
- package/dist/utils/importer/topological-sort.js +143 -0
- package/dist/utils/importer/topological-sort.js.map +1 -0
- package/dist/utils/levenshtein.d.ts +18 -0
- package/dist/utils/levenshtein.d.ts.map +1 -0
- package/dist/utils/levenshtein.js +46 -0
- package/dist/utils/levenshtein.js.map +1 -0
- package/dist/utils/parameter-validator.d.ts +3 -3
- package/dist/utils/parameter-validator.d.ts.map +1 -1
- package/dist/utils/parameter-validator.js +3 -39
- package/dist/utils/parameter-validator.js.map +1 -1
- package/dist/utils/sql-dump/core/dependency-sort.d.ts +16 -0
- package/dist/utils/sql-dump/core/dependency-sort.d.ts.map +1 -0
- package/dist/utils/sql-dump/core/dependency-sort.js +105 -0
- package/dist/utils/sql-dump/core/dependency-sort.js.map +1 -0
- package/dist/utils/sql-dump/core/generate-dump.d.ts +13 -0
- package/dist/utils/sql-dump/core/generate-dump.d.ts.map +1 -0
- package/dist/utils/sql-dump/core/generate-dump.js +181 -0
- package/dist/utils/sql-dump/core/generate-dump.js.map +1 -0
- package/dist/utils/sql-dump/core/index-export.d.ts +9 -0
- package/dist/utils/sql-dump/core/index-export.d.ts.map +1 -0
- package/dist/utils/sql-dump/core/index-export.js +173 -0
- package/dist/utils/sql-dump/core/index-export.js.map +1 -0
- package/dist/utils/sql-dump/core/sequence-reset.d.ts +6 -0
- package/dist/utils/sql-dump/core/sequence-reset.d.ts.map +1 -0
- package/dist/utils/sql-dump/core/sequence-reset.js +28 -0
- package/dist/utils/sql-dump/core/sequence-reset.js.map +1 -0
- package/dist/utils/sql-dump/core/table-export.d.ts +2 -0
- package/dist/utils/sql-dump/core/table-export.d.ts.map +1 -0
- package/dist/utils/sql-dump/core/table-export.js +4 -0
- package/dist/utils/sql-dump/core/table-export.js.map +1 -0
- package/dist/utils/sql-dump/core/view-export.d.ts +2 -0
- package/dist/utils/sql-dump/core/view-export.d.ts.map +1 -0
- package/dist/utils/sql-dump/core/view-export.js +4 -0
- package/dist/utils/sql-dump/core/view-export.js.map +1 -0
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts +14 -0
- package/dist/utils/sql-dump/formatters/bulk-insert.d.ts.map +1 -0
- package/dist/utils/sql-dump/formatters/bulk-insert.js +177 -0
- package/dist/utils/sql-dump/formatters/bulk-insert.js.map +1 -0
- package/dist/utils/sql-dump/formatters/identifiers.d.ts +6 -0
- package/dist/utils/sql-dump/formatters/identifiers.d.ts.map +1 -0
- package/dist/utils/sql-dump/formatters/identifiers.js +16 -0
- package/dist/utils/sql-dump/formatters/identifiers.js.map +1 -0
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts +14 -0
- package/dist/utils/sql-dump/formatters/value-formatter.d.ts.map +1 -0
- package/dist/utils/sql-dump/formatters/value-formatter.js +281 -0
- package/dist/utils/sql-dump/formatters/value-formatter.js.map +1 -0
- package/dist/utils/sql-dump/generators/controls.d.ts +10 -0
- package/dist/utils/sql-dump/generators/controls.d.ts.map +1 -0
- package/dist/utils/sql-dump/generators/controls.js +36 -0
- package/dist/utils/sql-dump/generators/controls.js.map +1 -0
- package/dist/utils/sql-dump/generators/headers.d.ts +6 -0
- package/dist/utils/sql-dump/generators/headers.d.ts.map +1 -0
- package/dist/utils/sql-dump/generators/headers.js +19 -0
- package/dist/utils/sql-dump/generators/headers.js.map +1 -0
- package/dist/utils/sql-dump/index.d.ts +14 -0
- package/dist/utils/sql-dump/index.d.ts.map +1 -0
- package/dist/utils/sql-dump/index.js +16 -0
- package/dist/utils/sql-dump/index.js.map +1 -0
- package/dist/utils/sql-dump/schema/indexes.d.ts +6 -0
- package/dist/utils/sql-dump/schema/indexes.d.ts.map +1 -0
- package/dist/utils/sql-dump/schema/indexes.js +42 -0
- package/dist/utils/sql-dump/schema/indexes.js.map +1 -0
- package/dist/utils/sql-dump/schema/primary-keys.d.ts +6 -0
- package/dist/utils/sql-dump/schema/primary-keys.d.ts.map +1 -0
- package/dist/utils/sql-dump/schema/primary-keys.js +41 -0
- package/dist/utils/sql-dump/schema/primary-keys.js.map +1 -0
- package/dist/utils/sql-dump/schema/tables.d.ts +12 -0
- package/dist/utils/sql-dump/schema/tables.d.ts.map +1 -0
- package/dist/utils/sql-dump/schema/tables.js +370 -0
- package/dist/utils/sql-dump/schema/tables.js.map +1 -0
- package/dist/utils/sql-dump/schema/views.d.ts +11 -0
- package/dist/utils/sql-dump/schema/views.d.ts.map +1 -0
- package/dist/utils/sql-dump/schema/views.js +110 -0
- package/dist/utils/sql-dump/schema/views.js.map +1 -0
- package/dist/utils/sql-dump/types.d.ts +10 -0
- package/dist/utils/sql-dump/types.d.ts.map +1 -0
- package/dist/utils/sql-dump/types.js +3 -0
- package/dist/utils/sql-dump/types.js.map +1 -0
- package/docs/AI_AGENT_GUIDE.md +2 -2
- package/docs/AUTO_FILE_TRACKING.md +0 -1
- package/docs/BATCH_VALIDATION.md +617 -0
- package/docs/DATABASE_AUTH.md +1 -2
- package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +2 -2
- package/docs/SHARED_CONCEPTS.md +2 -2
- package/docs/SPECIALIZED_AGENTS.md +1 -1
- package/docs/TASK_ACTIONS.md +7 -7
- package/docs/TASK_MIGRATION.md +5 -5
- package/docs/TASK_SYSTEM.md +5 -5
- package/docs/TOOL_REFERENCE.md +1 -3
- package/docs/WORKFLOWS.md +1 -1
- package/docs/{DATABASE_MIGRATION.md → cli/DATABASE_MIGRATION.md} +71 -32
- package/docs/cli/DATA_EXPORT_IMPORT.md +400 -0
- package/docs/cli/README.md +227 -0
- package/package.json +7 -4
- package/dist/tools/config.d.ts +0 -58
- package/dist/tools/config.d.ts.map +0 -1
- package/dist/tools/config.js +0 -281
- package/dist/tools/config.js.map +0 -1
- package/dist/tools/constraints.d.ts +0 -49
- package/dist/tools/constraints.d.ts.map +0 -1
- package/dist/tools/constraints.js +0 -378
- package/dist/tools/constraints.js.map +0 -1
- package/dist/tools/context.d.ts +0 -208
- package/dist/tools/context.d.ts.map +0 -1
- package/dist/tools/context.js +0 -1661
- package/dist/tools/context.js.map +0 -1
- package/dist/tools/files.d.ts +0 -54
- package/dist/tools/files.d.ts.map +0 -1
- package/dist/tools/files.js +0 -478
- package/dist/tools/files.js.map +0 -1
- package/dist/tools/messaging.d.ts +0 -71
- package/dist/tools/messaging.d.ts.map +0 -1
- package/dist/tools/messaging.js +0 -483
- package/dist/tools/messaging.js.map +0 -1
- package/dist/tools/utils.d.ts +0 -70
- package/dist/tools/utils.d.ts.map +0 -1
- package/dist/tools/utils.js +0 -483
- package/dist/tools/utils.js.map +0 -1
- package/dist/utils/action-specs.d.ts +0 -46
- package/dist/utils/action-specs.d.ts.map +0 -1
- package/dist/utils/action-specs.js +0 -527
- package/dist/utils/action-specs.js.map +0 -1
- package/docs/BASEADAPTER_IMPLEMENTATION.md +0 -399
- package/docs/HELP_PREVIEW_COMPARISON.md +0 -259
- package/docs/MIGRATION_CHAIN.md +0 -293
- package/docs/MIGRATION_v2.md +0 -538
- package/docs/MIGRATION_v3.3.md +0 -602
- package/docs/MIGRATION_v3.6.0.md +0 -170
- package/docs/MULTI_PROJECT_ARCHITECTURE.md +0 -497
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// generators/controls.ts - Foreign key and transaction control statements
|
|
2
|
+
/**
|
|
3
|
+
* Generate foreign key disable/enable statements
|
|
4
|
+
*/
|
|
5
|
+
export function generateForeignKeyControls(format, enable) {
|
|
6
|
+
if (format === 'mysql') {
|
|
7
|
+
return enable
|
|
8
|
+
? 'SET FOREIGN_KEY_CHECKS=1;'
|
|
9
|
+
: 'SET FOREIGN_KEY_CHECKS=0;';
|
|
10
|
+
}
|
|
11
|
+
else if (format === 'postgresql') {
|
|
12
|
+
return enable
|
|
13
|
+
? 'SET session_replication_role = DEFAULT;'
|
|
14
|
+
: 'SET session_replication_role = replica;';
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// SQLite
|
|
18
|
+
return enable
|
|
19
|
+
? 'PRAGMA foreign_keys = ON;'
|
|
20
|
+
: 'PRAGMA foreign_keys = OFF;';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate transaction control statements
|
|
25
|
+
*/
|
|
26
|
+
export function generateTransactionControl(format, isStart) {
|
|
27
|
+
if (isStart) {
|
|
28
|
+
return format === 'mysql' ? 'START TRANSACTION;'
|
|
29
|
+
: format === 'postgresql' ? 'BEGIN;'
|
|
30
|
+
: 'BEGIN TRANSACTION;';
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return 'COMMIT;';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/generators/controls.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAI1E;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAsB,EAAE,MAAe;IAChF,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM;YACX,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,2BAA2B,CAAC;IAClC,CAAC;SAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QACnC,OAAO,MAAM;YACX,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,yCAAyC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,SAAS;QACT,OAAO,MAAM;YACX,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,4BAA4B,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAsB,EAAE,OAAgB;IACjF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB;YAC3C,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ;gBACpC,CAAC,CAAC,oBAAoB,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/generators/headers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAa7D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// generators/headers.ts - SQL dump header generation
|
|
2
|
+
/**
|
|
3
|
+
* Generate header comments for SQL dump
|
|
4
|
+
*/
|
|
5
|
+
export function generateHeader(format) {
|
|
6
|
+
const timestamp = new Date().toISOString();
|
|
7
|
+
return `-- SQL Dump generated by sqlew
|
|
8
|
+
-- Date: ${timestamp}
|
|
9
|
+
-- Target: ${format.toUpperCase()}
|
|
10
|
+
--
|
|
11
|
+
-- This dump is wrapped in a transaction.
|
|
12
|
+
-- On error, all changes will be rolled back automatically.
|
|
13
|
+
--
|
|
14
|
+
-- Usage (empty database):
|
|
15
|
+
-- ${format === 'mysql' ? 'mysql mydb < dump.sql' : format === 'postgresql' ? 'psql -d mydb -f dump.sql' : 'sqlite3 mydb.db < dump.sql'}
|
|
16
|
+
|
|
17
|
+
`;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/generators/headers.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAIrD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,OAAO;WACE,SAAS;aACP,MAAM,CAAC,WAAW,EAAE;;;;;;OAM1B,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,4BAA4B;;CAExI,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { DatabaseFormat, ConflictMode } from './types.js';
|
|
2
|
+
export { generateSqlDump } from './core/generate-dump.js';
|
|
3
|
+
export { quoteIdentifier } from './formatters/identifiers.js';
|
|
4
|
+
export { formatValue, convertValueWithType } from './formatters/value-formatter.js';
|
|
5
|
+
export { generateBulkInsert } from './formatters/bulk-insert.js';
|
|
6
|
+
export { generateHeader } from './generators/headers.js';
|
|
7
|
+
export { generateForeignKeyControls, generateTransactionControl } from './generators/controls.js';
|
|
8
|
+
export { getAllTables, getCreateTableStatement } from './core/table-export.js';
|
|
9
|
+
export { getAllViews, getCreateViewStatement } from './core/view-export.js';
|
|
10
|
+
export { getAllIndexes, getCreateIndexStatement } from './core/index-export.js';
|
|
11
|
+
export { generateSequenceResets } from './core/sequence-reset.js';
|
|
12
|
+
export { getTableDependencies, topologicalSort } from './core/dependency-sort.js';
|
|
13
|
+
export { getPrimaryKeyColumns } from './schema/primary-keys.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/sql-dump/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// index.ts - Main export point for sql-dump utilities
|
|
2
|
+
// Export main function
|
|
3
|
+
export { generateSqlDump } from './core/generate-dump.js';
|
|
4
|
+
// Export utilities (for testing and advanced usage)
|
|
5
|
+
export { quoteIdentifier } from './formatters/identifiers.js';
|
|
6
|
+
export { formatValue, convertValueWithType } from './formatters/value-formatter.js';
|
|
7
|
+
export { generateBulkInsert } from './formatters/bulk-insert.js';
|
|
8
|
+
export { generateHeader } from './generators/headers.js';
|
|
9
|
+
export { generateForeignKeyControls, generateTransactionControl } from './generators/controls.js';
|
|
10
|
+
export { getAllTables, getCreateTableStatement } from './core/table-export.js';
|
|
11
|
+
export { getAllViews, getCreateViewStatement } from './core/view-export.js';
|
|
12
|
+
export { getAllIndexes, getCreateIndexStatement } from './core/index-export.js';
|
|
13
|
+
export { generateSequenceResets } from './core/sequence-reset.js';
|
|
14
|
+
export { getTableDependencies, topologicalSort } from './core/dependency-sort.js';
|
|
15
|
+
export { getPrimaryKeyColumns } from './schema/primary-keys.js';
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/sql-dump/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAKtD,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/indexes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqChF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// schema/indexes.ts - Index detection utilities
|
|
2
|
+
/**
|
|
3
|
+
* Get all indexes for a table
|
|
4
|
+
*/
|
|
5
|
+
export async function getAllIndexes(knex, table) {
|
|
6
|
+
const client = knex.client.config.client;
|
|
7
|
+
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
8
|
+
const result = await knex.raw(`
|
|
9
|
+
SELECT name FROM sqlite_master
|
|
10
|
+
WHERE type='index'
|
|
11
|
+
AND tbl_name=?
|
|
12
|
+
AND sql IS NOT NULL
|
|
13
|
+
ORDER BY name
|
|
14
|
+
`, [table]);
|
|
15
|
+
return result.map((row) => row.name);
|
|
16
|
+
}
|
|
17
|
+
else if (client === 'mysql' || client === 'mysql2') {
|
|
18
|
+
const result = await knex.raw(`
|
|
19
|
+
SHOW INDEXES FROM ?? WHERE Key_name != 'PRIMARY'
|
|
20
|
+
`, [table]);
|
|
21
|
+
// Group by index name (indexes can span multiple columns)
|
|
22
|
+
const indexNames = new Set();
|
|
23
|
+
for (const row of result[0]) {
|
|
24
|
+
indexNames.add(row.Key_name);
|
|
25
|
+
}
|
|
26
|
+
return Array.from(indexNames).sort();
|
|
27
|
+
}
|
|
28
|
+
else if (client === 'pg') {
|
|
29
|
+
const result = await knex.raw(`
|
|
30
|
+
SELECT indexname
|
|
31
|
+
FROM pg_indexes
|
|
32
|
+
WHERE schemaname = 'public'
|
|
33
|
+
AND tablename = ?
|
|
34
|
+
AND indexname NOT LIKE '%_pkey'
|
|
35
|
+
ORDER BY indexname
|
|
36
|
+
`, [table]);
|
|
37
|
+
return result.rows.map((row) => row.indexname);
|
|
38
|
+
}
|
|
39
|
+
// For other database clients
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=indexes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/indexes.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAIhD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,KAAa;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAEzC,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;;;;;KAM7B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACZ,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;KAE7B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAEZ,0DAA0D;QAC1D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;SAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;;;;;;KAO7B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACZ,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,6BAA6B;IAC7B,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primary-keys.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/primary-keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmCvF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// schema/primary-keys.ts - Primary key detection utilities
|
|
2
|
+
/**
|
|
3
|
+
* Get primary key columns for a table
|
|
4
|
+
*/
|
|
5
|
+
export async function getPrimaryKeyColumns(knex, table) {
|
|
6
|
+
const client = knex.client.config.client;
|
|
7
|
+
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
8
|
+
// SQLite: Use PRAGMA table_info
|
|
9
|
+
const result = await knex.raw(`PRAGMA table_info(${table})`);
|
|
10
|
+
return result
|
|
11
|
+
.filter((col) => col.pk > 0)
|
|
12
|
+
.sort((a, b) => a.pk - b.pk)
|
|
13
|
+
.map((col) => col.name);
|
|
14
|
+
}
|
|
15
|
+
else if (client === 'mysql' || client === 'mysql2') {
|
|
16
|
+
// MySQL: Query information_schema
|
|
17
|
+
const result = await knex.raw(`
|
|
18
|
+
SELECT COLUMN_NAME
|
|
19
|
+
FROM information_schema.KEY_COLUMN_USAGE
|
|
20
|
+
WHERE TABLE_SCHEMA = DATABASE()
|
|
21
|
+
AND TABLE_NAME = ?
|
|
22
|
+
AND CONSTRAINT_NAME = 'PRIMARY'
|
|
23
|
+
ORDER BY ORDINAL_POSITION
|
|
24
|
+
`, [table]);
|
|
25
|
+
return result[0].map((row) => row.COLUMN_NAME);
|
|
26
|
+
}
|
|
27
|
+
else if (client === 'pg') {
|
|
28
|
+
// PostgreSQL: Query information_schema
|
|
29
|
+
const result = await knex.raw(`
|
|
30
|
+
SELECT a.attname AS column_name
|
|
31
|
+
FROM pg_index i
|
|
32
|
+
JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
|
|
33
|
+
WHERE i.indrelid = ?::regclass
|
|
34
|
+
AND i.indisprimary
|
|
35
|
+
ORDER BY a.attnum
|
|
36
|
+
`, [table]);
|
|
37
|
+
return result.rows.map((row) => row.column_name);
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Unsupported database client: ${client}`);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=primary-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primary-keys.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/primary-keys.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAI3D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAU,EAAE,KAAa;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAEzC,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACxD,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC;QAC7D,OAAO,MAAM;aACV,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;aAChC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aACrC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrD,kCAAkC;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;;;;;;KAO7B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACZ,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,uCAAuC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;;;;;;;KAO7B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACZ,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import type { DatabaseFormat } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get all table names from the database (excluding system tables)
|
|
5
|
+
*/
|
|
6
|
+
export declare function getAllTables(knex: Knex, includeKnexTables?: boolean): Promise<string[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Get CREATE TABLE statement for a table using knex-schema-inspector
|
|
9
|
+
* Replaces regex-based SQL conversion with metadata-driven approach
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCreateTableStatement(knex: Knex, table: string, targetFormat: DatabaseFormat): Promise<string>;
|
|
12
|
+
//# sourceMappingURL=tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/tables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAwPlD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8B3F;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAsHtH"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
// schema/tables.ts - Table detection and CREATE TABLE statement generation
|
|
2
|
+
import { SchemaInspector } from 'knex-schema-inspector';
|
|
3
|
+
import { quoteIdentifier } from '../formatters/identifiers.js';
|
|
4
|
+
import { debugLog } from '../../debug-logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Convert data type from source format to target format using metadata
|
|
7
|
+
*/
|
|
8
|
+
function convertDataType(columnType, targetFormat, maxLength) {
|
|
9
|
+
const upperType = columnType.toUpperCase();
|
|
10
|
+
if (targetFormat === 'mysql') {
|
|
11
|
+
// MySQL-specific conversions
|
|
12
|
+
if (upperType.includes('SERIAL') || upperType.includes('BIGSERIAL')) {
|
|
13
|
+
return 'BIGINT AUTO_INCREMENT';
|
|
14
|
+
}
|
|
15
|
+
if (upperType.includes('TEXT')) {
|
|
16
|
+
return 'TEXT';
|
|
17
|
+
}
|
|
18
|
+
if (upperType.includes('VARCHAR')) {
|
|
19
|
+
// Use maxLength from metadata
|
|
20
|
+
const length = maxLength && maxLength <= 191 ? maxLength : 191;
|
|
21
|
+
return `VARCHAR(${length})`;
|
|
22
|
+
}
|
|
23
|
+
if (upperType.includes('TIMESTAMP') || upperType.includes('TIMESTAMPTZ')) {
|
|
24
|
+
return 'DATETIME';
|
|
25
|
+
}
|
|
26
|
+
if (upperType.includes('BOOLEAN') || upperType === 'BOOL') {
|
|
27
|
+
return 'TINYINT(1)';
|
|
28
|
+
}
|
|
29
|
+
if (upperType === 'INTEGER' || upperType === 'INT') {
|
|
30
|
+
return 'INT';
|
|
31
|
+
}
|
|
32
|
+
if (upperType.includes('BIGINT')) {
|
|
33
|
+
return 'BIGINT';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (targetFormat === 'postgresql') {
|
|
37
|
+
// PostgreSQL-specific conversions
|
|
38
|
+
if (upperType.includes('AUTOINCREMENT') || upperType.includes('AUTO_INCREMENT')) {
|
|
39
|
+
return 'SERIAL';
|
|
40
|
+
}
|
|
41
|
+
if (upperType.includes('DATETIME')) {
|
|
42
|
+
return 'TIMESTAMP';
|
|
43
|
+
}
|
|
44
|
+
if (upperType.includes('TINYINT') || upperType === 'BIT') {
|
|
45
|
+
return 'BOOLEAN';
|
|
46
|
+
}
|
|
47
|
+
if (upperType.includes('TEXT')) {
|
|
48
|
+
return 'TEXT';
|
|
49
|
+
}
|
|
50
|
+
if (upperType.includes('VARCHAR')) {
|
|
51
|
+
const length = maxLength || 255;
|
|
52
|
+
return `VARCHAR(${length})`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (targetFormat === 'sqlite') {
|
|
56
|
+
// SQLite-specific conversions
|
|
57
|
+
if (upperType.includes('SERIAL') || upperType.includes('AUTO_INCREMENT') || upperType.includes('AUTOINCREMENT')) {
|
|
58
|
+
return 'INTEGER';
|
|
59
|
+
}
|
|
60
|
+
if (upperType.includes('VARCHAR') || upperType.includes('TEXT')) {
|
|
61
|
+
return 'TEXT';
|
|
62
|
+
}
|
|
63
|
+
if (upperType.includes('TINYINT') || upperType.includes('BOOLEAN')) {
|
|
64
|
+
return 'INTEGER';
|
|
65
|
+
}
|
|
66
|
+
if (upperType.includes('DATETIME') || upperType.includes('TIMESTAMP')) {
|
|
67
|
+
return 'INTEGER'; // SQLite stores as Unix timestamp
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Default: return as-is
|
|
71
|
+
return columnType;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Convert default value from SQLite functions to target format
|
|
75
|
+
* Handles: unixepoch() → UNIX_TIMESTAMP() / EXTRACT(epoch FROM NOW())
|
|
76
|
+
* strftime() → DATE_FORMAT() / TO_CHAR()
|
|
77
|
+
*/
|
|
78
|
+
function convertDefaultValue(defaultValue, targetFormat) {
|
|
79
|
+
if (!defaultValue) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const lower = defaultValue.toLowerCase().trim();
|
|
83
|
+
// SQLite unixepoch() conversions
|
|
84
|
+
if (lower.includes('unixepoch()') || lower === 'unixepoch()') {
|
|
85
|
+
if (targetFormat === 'mysql') {
|
|
86
|
+
// MySQL 8.0+: Use CAST to explicitly convert UNIX_TIMESTAMP() to SIGNED INTEGER
|
|
87
|
+
// Wrapped in parentheses for expression syntax
|
|
88
|
+
return '(CAST(UNIX_TIMESTAMP() AS SIGNED))';
|
|
89
|
+
}
|
|
90
|
+
else if (targetFormat === 'postgresql') {
|
|
91
|
+
return 'EXTRACT(epoch FROM NOW())::INTEGER';
|
|
92
|
+
}
|
|
93
|
+
return null; // Remove for SQLite
|
|
94
|
+
}
|
|
95
|
+
// SQLite strftime('%s', 'now') - Unix timestamp (INTEGER)
|
|
96
|
+
// Must check BEFORE generic strftime to handle this specific case
|
|
97
|
+
if (lower.includes("strftime('%s'") || lower.includes('strftime("%s"')) {
|
|
98
|
+
if (targetFormat === 'mysql') {
|
|
99
|
+
// MySQL 8.0+: Use CAST to explicitly convert UNIX_TIMESTAMP() to SIGNED INTEGER
|
|
100
|
+
// Wrapped in parentheses for expression syntax
|
|
101
|
+
return '(CAST(UNIX_TIMESTAMP() AS SIGNED))';
|
|
102
|
+
}
|
|
103
|
+
else if (targetFormat === 'postgresql') {
|
|
104
|
+
return 'EXTRACT(epoch FROM NOW())::INTEGER';
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
// MySQL UNIX_TIMESTAMP() - already MySQL syntax, needs CAST wrapping
|
|
109
|
+
// Match both "unix_timestamp()" and "UNIX_TIMESTAMP()" case-insensitively
|
|
110
|
+
if (lower.includes('unix_timestamp')) {
|
|
111
|
+
if (targetFormat === 'mysql') {
|
|
112
|
+
// MySQL 8.0+: Wrap UNIX_TIMESTAMP() with CAST for type safety
|
|
113
|
+
return '(CAST(UNIX_TIMESTAMP() AS SIGNED))';
|
|
114
|
+
}
|
|
115
|
+
else if (targetFormat === 'postgresql') {
|
|
116
|
+
return 'EXTRACT(epoch FROM NOW())::INTEGER';
|
|
117
|
+
}
|
|
118
|
+
else if (targetFormat === 'sqlite') {
|
|
119
|
+
return 'unixepoch()';
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
// SQLite strftime conversions (datetime formats)
|
|
124
|
+
if (lower.includes('strftime')) {
|
|
125
|
+
if (targetFormat === 'mysql') {
|
|
126
|
+
// strftime('%Y-%m-%d %H:%M:%S', 'now') → NOW()
|
|
127
|
+
return 'NOW()';
|
|
128
|
+
}
|
|
129
|
+
else if (targetFormat === 'postgresql') {
|
|
130
|
+
return 'NOW()';
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
// Remove parentheses for simple values
|
|
135
|
+
let cleanValue = defaultValue;
|
|
136
|
+
if (lower.startsWith('(') && lower.endsWith(')')) {
|
|
137
|
+
cleanValue = defaultValue.substring(1, defaultValue.length - 1);
|
|
138
|
+
}
|
|
139
|
+
// For numeric defaults, normalize floating point values
|
|
140
|
+
// Remove trailing .0 (e.g., 1.0 → 1) to avoid type mismatches
|
|
141
|
+
const trimmed = cleanValue.trim();
|
|
142
|
+
if (/^\d+\.0+$/.test(trimmed)) {
|
|
143
|
+
return trimmed.replace(/\.0+$/, '');
|
|
144
|
+
}
|
|
145
|
+
// Quote string literals if not already quoted and not a number
|
|
146
|
+
if (!/^['"]/.test(trimmed) && !/^-?\d+(\.\d+)?$/.test(trimmed) && !/^(true|false|null|current_timestamp|now\(\)|unix_timestamp\(\))$/i.test(trimmed)) {
|
|
147
|
+
return `'${trimmed}'`;
|
|
148
|
+
}
|
|
149
|
+
return trimmed;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build column definition from Column metadata
|
|
153
|
+
*/
|
|
154
|
+
function buildColumnDefinition(col, targetFormat) {
|
|
155
|
+
const quotedName = quoteIdentifier(col.name, targetFormat);
|
|
156
|
+
let dataType = convertDataType(col.data_type, targetFormat, col.max_length);
|
|
157
|
+
// MySQL: TEXT columns cannot be used in UNIQUE/PRIMARY KEY constraints without prefix length
|
|
158
|
+
// Convert TEXT to VARCHAR(191) for utf8mb4 compatibility (768 bytes ÷ 4 bytes/char = 191)
|
|
159
|
+
if (targetFormat === 'mysql' && dataType.toUpperCase() === 'TEXT') {
|
|
160
|
+
if (col.is_unique || col.is_primary_key || col.foreign_key_table || col.in_composite_unique) {
|
|
161
|
+
dataType = 'VARCHAR(191)';
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
let def = `${quotedName} ${dataType}`;
|
|
165
|
+
// Handle NOT NULL constraint
|
|
166
|
+
if (col.is_nullable === false) {
|
|
167
|
+
def += ' NOT NULL';
|
|
168
|
+
}
|
|
169
|
+
// Handle DEFAULT value
|
|
170
|
+
if (col.default_value !== null && col.default_value !== undefined) {
|
|
171
|
+
let convertedDefault = convertDefaultValue(String(col.default_value), targetFormat);
|
|
172
|
+
if (convertedDefault !== null && convertedDefault !== '') {
|
|
173
|
+
// MySQL restrictions for DEFAULT values
|
|
174
|
+
const isTextColumn = dataType.toUpperCase().includes('TEXT') || dataType.toUpperCase().includes('BLOB');
|
|
175
|
+
const isFunctionCall = convertedDefault.includes('(') && convertedDefault.includes(')');
|
|
176
|
+
const isIntegerColumn = dataType.toUpperCase().includes('INT');
|
|
177
|
+
const isBooleanColumn = dataType.toUpperCase().includes('BOOLEAN');
|
|
178
|
+
// PostgreSQL: Convert integer defaults to boolean for BOOLEAN columns
|
|
179
|
+
if (targetFormat === 'postgresql' && isBooleanColumn && /^[01]$/.test(convertedDefault)) {
|
|
180
|
+
convertedDefault = convertedDefault === '1' ? 'TRUE' : 'FALSE';
|
|
181
|
+
}
|
|
182
|
+
if (targetFormat === 'mysql') {
|
|
183
|
+
// MySQL doesn't allow DEFAULT on TEXT/BLOB columns
|
|
184
|
+
if (isTextColumn) {
|
|
185
|
+
// Skip DEFAULT - application must handle at runtime
|
|
186
|
+
}
|
|
187
|
+
// MySQL DOES support certain function calls as DEFAULT for INTEGER columns
|
|
188
|
+
// (e.g., UNIX_TIMESTAMP(), CURRENT_TIMESTAMP)
|
|
189
|
+
// Only skip if conversion returned null (meaning function not supported)
|
|
190
|
+
else {
|
|
191
|
+
def += ` DEFAULT ${convertedDefault}`;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
def += ` DEFAULT ${convertedDefault}`;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Handle AUTO_INCREMENT for MySQL
|
|
200
|
+
if (targetFormat === 'mysql' && col.is_generated && col.generation_expression === null) {
|
|
201
|
+
if (!def.includes('AUTO_INCREMENT')) {
|
|
202
|
+
def += ' AUTO_INCREMENT';
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Handle UNIQUE constraint (skip if already PRIMARY KEY)
|
|
206
|
+
if (col.is_unique && !col.is_primary_key) {
|
|
207
|
+
def += ' UNIQUE';
|
|
208
|
+
}
|
|
209
|
+
return def;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Build FOREIGN KEY definition from ForeignKey metadata
|
|
213
|
+
*/
|
|
214
|
+
function buildForeignKeyDefinition(fk, targetFormat) {
|
|
215
|
+
const quotedColumn = quoteIdentifier(fk.column, targetFormat);
|
|
216
|
+
const quotedForeignTable = quoteIdentifier(fk.foreign_key_table, targetFormat);
|
|
217
|
+
const quotedForeignColumn = quoteIdentifier(fk.foreign_key_column, targetFormat);
|
|
218
|
+
let fkDef = `FOREIGN KEY (${quotedColumn}) REFERENCES ${quotedForeignTable}(${quotedForeignColumn})`;
|
|
219
|
+
// Add ON DELETE clause
|
|
220
|
+
if (fk.on_delete && fk.on_delete !== 'NO ACTION') {
|
|
221
|
+
fkDef += ` ON DELETE ${fk.on_delete}`;
|
|
222
|
+
}
|
|
223
|
+
// Add ON UPDATE clause
|
|
224
|
+
if (fk.on_update && fk.on_update !== 'NO ACTION') {
|
|
225
|
+
fkDef += ` ON UPDATE ${fk.on_update}`;
|
|
226
|
+
}
|
|
227
|
+
return fkDef;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get all table names from the database (excluding system tables)
|
|
231
|
+
*/
|
|
232
|
+
export async function getAllTables(knex, includeKnexTables = false) {
|
|
233
|
+
const client = knex.client.config.client;
|
|
234
|
+
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
235
|
+
const knexFilter = includeKnexTables ? '' : "AND name NOT LIKE 'knex_%'";
|
|
236
|
+
const result = await knex.raw(`
|
|
237
|
+
SELECT name FROM sqlite_master
|
|
238
|
+
WHERE type='table'
|
|
239
|
+
AND name NOT LIKE 'sqlite_%'
|
|
240
|
+
${knexFilter}
|
|
241
|
+
ORDER BY name
|
|
242
|
+
`);
|
|
243
|
+
return result.map((row) => row.name);
|
|
244
|
+
}
|
|
245
|
+
else if (client === 'mysql' || client === 'mysql2') {
|
|
246
|
+
const result = await knex.raw('SHOW TABLES');
|
|
247
|
+
const tableKey = Object.keys(result[0][0])[0];
|
|
248
|
+
const tables = result[0].map((row) => row[tableKey]);
|
|
249
|
+
return includeKnexTables ? tables : tables.filter((t) => !t.startsWith('knex_'));
|
|
250
|
+
}
|
|
251
|
+
else if (client === 'pg') {
|
|
252
|
+
const knexFilter = includeKnexTables ? '' : "AND tablename NOT LIKE 'knex_%'";
|
|
253
|
+
const result = await knex.raw(`
|
|
254
|
+
SELECT tablename FROM pg_tables
|
|
255
|
+
WHERE schemaname = 'public'
|
|
256
|
+
${knexFilter}
|
|
257
|
+
ORDER BY tablename
|
|
258
|
+
`);
|
|
259
|
+
return result.rows.map((row) => row.tablename);
|
|
260
|
+
}
|
|
261
|
+
throw new Error(`Unsupported database client: ${client}`);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get CREATE TABLE statement for a table using knex-schema-inspector
|
|
265
|
+
* Replaces regex-based SQL conversion with metadata-driven approach
|
|
266
|
+
*/
|
|
267
|
+
export async function getCreateTableStatement(knex, table, targetFormat) {
|
|
268
|
+
const client = knex.client.config.client;
|
|
269
|
+
// Initialize schema inspector (database-agnostic)
|
|
270
|
+
const inspector = SchemaInspector(knex);
|
|
271
|
+
// Get column metadata
|
|
272
|
+
const columns = await inspector.columnInfo(table);
|
|
273
|
+
if (columns.length === 0) {
|
|
274
|
+
throw new Error(`Table ${table} not found or has no columns`);
|
|
275
|
+
}
|
|
276
|
+
// Fix: knex-schema-inspector doesn't detect composite PRIMARY KEYs and UNIQUE constraints from SQLite properly
|
|
277
|
+
// Manually detect them using PRAGMA index_list
|
|
278
|
+
const compositeUniqueConstraints = []; // Track composite UNIQUE constraints
|
|
279
|
+
let compositePrimaryKey = null; // Track composite PRIMARY KEY
|
|
280
|
+
if (client === 'better-sqlite3' || client === 'sqlite3') {
|
|
281
|
+
const indexResult = await knex.raw(`PRAGMA index_list(${table})`);
|
|
282
|
+
// Knex raw() returns an array directly for SQLite
|
|
283
|
+
const indexes = Array.isArray(indexResult) ? indexResult : [];
|
|
284
|
+
for (const index of indexes) {
|
|
285
|
+
// Check for PRIMARY KEY index
|
|
286
|
+
if (index.origin === 'pk' && index.unique === 1) {
|
|
287
|
+
const indexInfoResult = await knex.raw(`PRAGMA index_info(${index.name})`);
|
|
288
|
+
const indexInfo = Array.isArray(indexInfoResult) ? indexInfoResult : [];
|
|
289
|
+
const columnNames = indexInfo.map((idxCol) => idxCol.name);
|
|
290
|
+
if (columnNames.length > 1) {
|
|
291
|
+
// Composite PRIMARY KEY detected
|
|
292
|
+
compositePrimaryKey = columnNames;
|
|
293
|
+
debugLog('DEBUG', `Found composite PRIMARY KEY on ${table}(${columnNames.join(', ')}) from ${index.name}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Check if this is a UNIQUE index (skip PRIMARY KEY indexes)
|
|
297
|
+
else if (index.unique === 1 && index.origin !== 'pk') {
|
|
298
|
+
// Get columns in this index
|
|
299
|
+
const indexInfoResult = await knex.raw(`PRAGMA index_info(${index.name})`);
|
|
300
|
+
const indexInfo = Array.isArray(indexInfoResult) ? indexInfoResult : [];
|
|
301
|
+
const columnNames = indexInfo.map((idxCol) => idxCol.name);
|
|
302
|
+
if (columnNames.length === 1) {
|
|
303
|
+
// Single-column UNIQUE - mark column as unique
|
|
304
|
+
const col = columns.find(c => c.name === columnNames[0]);
|
|
305
|
+
if (col && !col.is_primary_key) {
|
|
306
|
+
col.is_unique = true;
|
|
307
|
+
debugLog('DEBUG', `Marked ${table}.${col.name} as UNIQUE (single-column from ${index.name})`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else if (columnNames.length > 1) {
|
|
311
|
+
// Composite UNIQUE - add to table-level constraints
|
|
312
|
+
compositeUniqueConstraints.push(columnNames);
|
|
313
|
+
debugLog('DEBUG', `Found composite UNIQUE on ${table}(${columnNames.join(', ')}) from ${index.name}`);
|
|
314
|
+
// For MySQL: Convert TEXT to VARCHAR(191) for columns in composite UNIQUE
|
|
315
|
+
if (targetFormat === 'mysql') {
|
|
316
|
+
for (const colName of columnNames) {
|
|
317
|
+
const col = columns.find(c => c.name === colName);
|
|
318
|
+
if (col && !col.is_primary_key) {
|
|
319
|
+
// Mark as part of composite unique (will be converted to VARCHAR later)
|
|
320
|
+
col.in_composite_unique = true;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Build column definitions using buildColumnDefinition()
|
|
329
|
+
const columnDefs = columns.map(col => buildColumnDefinition(col, targetFormat));
|
|
330
|
+
// Add PRIMARY KEY constraint (with MySQL prefix length handling)
|
|
331
|
+
// Use composite PRIMARY KEY if detected, otherwise fall back to column metadata
|
|
332
|
+
const pkColumns = compositePrimaryKey || columns.filter(col => col.is_primary_key).map(col => col.name);
|
|
333
|
+
if (pkColumns.length > 0) {
|
|
334
|
+
// For MySQL: Apply (191) prefix to TEXT/long VARCHAR columns
|
|
335
|
+
if (targetFormat === 'mysql') {
|
|
336
|
+
const processedPkCols = pkColumns.map((colName) => {
|
|
337
|
+
const col = columns.find(c => c.name === colName);
|
|
338
|
+
if (col && (col.data_type.toUpperCase() === 'TEXT' ||
|
|
339
|
+
(col.data_type.toUpperCase().includes('VARCHAR') && col.max_length && col.max_length > 191))) {
|
|
340
|
+
return `${quoteIdentifier(colName, targetFormat)}(191)`;
|
|
341
|
+
}
|
|
342
|
+
return quoteIdentifier(colName, targetFormat);
|
|
343
|
+
}).join(', ');
|
|
344
|
+
columnDefs.push(`PRIMARY KEY (${processedPkCols})`);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
const quotedPkColumns = pkColumns.map(col => quoteIdentifier(col, targetFormat));
|
|
348
|
+
columnDefs.push(`PRIMARY KEY (${quotedPkColumns.join(', ')})`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// Add FOREIGN KEY constraints using buildForeignKeyDefinition()
|
|
352
|
+
const foreignKeys = await inspector.foreignKeys(table);
|
|
353
|
+
for (const fk of foreignKeys) {
|
|
354
|
+
columnDefs.push(buildForeignKeyDefinition(fk, targetFormat));
|
|
355
|
+
}
|
|
356
|
+
// Add composite UNIQUE constraints (from SQLite multi-column UNIQUE indexes)
|
|
357
|
+
for (const uniqueCols of compositeUniqueConstraints) {
|
|
358
|
+
const quotedCols = uniqueCols.map(col => quoteIdentifier(col, targetFormat)).join(', ');
|
|
359
|
+
columnDefs.push(`UNIQUE (${quotedCols})`);
|
|
360
|
+
}
|
|
361
|
+
// Build CREATE TABLE statement with IF NOT EXISTS for idempotency
|
|
362
|
+
const quotedTable = quoteIdentifier(table, targetFormat);
|
|
363
|
+
const createSql = `CREATE TABLE IF NOT EXISTS ${quotedTable} (\n ${columnDefs.join(',\n ')}\n)`;
|
|
364
|
+
// Add database-specific table options
|
|
365
|
+
if (targetFormat === 'mysql') {
|
|
366
|
+
return createSql + ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;';
|
|
367
|
+
}
|
|
368
|
+
return createSql + ';';
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=tables.js.map
|