sqlew 3.6.9 → 3.7.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.
Files changed (383) hide show
  1. package/CHANGELOG.md +398 -1
  2. package/README.md +58 -39
  3. package/assets/config.example.toml +93 -0
  4. package/assets/kanban-visualizer.png +0 -0
  5. package/assets/sample-agents/sqlew-architect.md +32 -13
  6. package/assets/sample-agents/sqlew-researcher.md +70 -17
  7. package/assets/sample-agents/sqlew-scrum-master.md +60 -25
  8. package/assets/schema.sql +2 -2
  9. package/dist/adapters/auth/auth-factory.d.ts +86 -0
  10. package/dist/adapters/auth/auth-factory.d.ts.map +1 -0
  11. package/dist/adapters/auth/auth-factory.js +103 -0
  12. package/dist/adapters/auth/auth-factory.js.map +1 -0
  13. package/dist/adapters/auth/auth-types.d.ts +30 -0
  14. package/dist/adapters/auth/auth-types.d.ts.map +1 -0
  15. package/dist/adapters/auth/auth-types.js +30 -0
  16. package/dist/adapters/auth/auth-types.js.map +1 -0
  17. package/dist/adapters/auth/base-auth-provider.d.ts +327 -0
  18. package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -0
  19. package/dist/adapters/auth/base-auth-provider.js +111 -0
  20. package/dist/adapters/auth/base-auth-provider.js.map +1 -0
  21. package/dist/adapters/auth/direct-auth-provider.d.ts +356 -0
  22. package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -0
  23. package/dist/adapters/auth/direct-auth-provider.js +406 -0
  24. package/dist/adapters/auth/direct-auth-provider.js.map +1 -0
  25. package/dist/adapters/base-adapter.d.ts +638 -0
  26. package/dist/adapters/base-adapter.d.ts.map +1 -0
  27. package/dist/adapters/base-adapter.js +557 -0
  28. package/dist/adapters/base-adapter.js.map +1 -0
  29. package/dist/adapters/index.d.ts +13 -2
  30. package/dist/adapters/index.d.ts.map +1 -1
  31. package/dist/adapters/index.js +27 -5
  32. package/dist/adapters/index.js.map +1 -1
  33. package/dist/adapters/mysql-adapter.d.ts +547 -6
  34. package/dist/adapters/mysql-adapter.d.ts.map +1 -1
  35. package/dist/adapters/mysql-adapter.js +651 -32
  36. package/dist/adapters/mysql-adapter.js.map +1 -1
  37. package/dist/adapters/postgresql-adapter.d.ts +15 -4
  38. package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
  39. package/dist/adapters/postgresql-adapter.js +19 -2
  40. package/dist/adapters/postgresql-adapter.js.map +1 -1
  41. package/dist/adapters/sqlite-adapter.d.ts +35 -5
  42. package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
  43. package/dist/adapters/sqlite-adapter.js +57 -18
  44. package/dist/adapters/sqlite-adapter.js.map +1 -1
  45. package/dist/cli/db-dump.d.ts +32 -0
  46. package/dist/cli/db-dump.d.ts.map +1 -0
  47. package/dist/cli/db-dump.js +409 -0
  48. package/dist/cli/db-dump.js.map +1 -0
  49. package/dist/cli.js +24 -14
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config/example-generator.d.ts.map +1 -1
  52. package/dist/config/example-generator.js +4 -3
  53. package/dist/config/example-generator.js.map +1 -1
  54. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  55. package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.js +7 -2
  56. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  57. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  58. package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.js +49 -50
  59. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  60. package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  61. package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  62. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  63. package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.js +11 -6
  64. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  65. package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  66. package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.js +66 -14
  67. package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  68. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  69. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +22 -0
  70. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  71. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  72. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  73. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  74. package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.js +6 -0
  75. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  76. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  77. package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +6 -0
  78. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  79. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  80. package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.js +6 -0
  81. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  82. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  83. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  84. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  85. package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +7 -0
  86. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  87. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  88. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +62 -0
  89. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  90. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  91. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  92. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  93. package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.js +6 -0
  94. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  95. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
  96. package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.js +6 -0
  97. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
  98. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +13 -0
  99. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +1 -0
  100. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +48 -0
  101. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +1 -0
  102. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +24 -0
  103. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +1 -0
  104. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +189 -0
  105. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +1 -0
  106. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +16 -0
  107. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +1 -0
  108. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +65 -0
  109. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +1 -0
  110. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +23 -0
  111. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +1 -0
  112. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +118 -0
  113. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +1 -0
  114. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  115. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  116. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  117. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  118. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  119. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  120. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  121. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  122. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  123. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  124. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  125. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  126. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  127. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  128. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +49 -0
  129. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -0
  130. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +864 -0
  131. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -0
  132. package/dist/config/loader.d.ts +23 -3
  133. package/dist/config/loader.d.ts.map +1 -1
  134. package/dist/config/loader.js +155 -8
  135. package/dist/config/loader.js.map +1 -1
  136. package/dist/config/types.d.ts +261 -2
  137. package/dist/config/types.d.ts.map +1 -1
  138. package/dist/config/types.js.map +1 -1
  139. package/dist/config/writer.d.ts +65 -0
  140. package/dist/config/writer.d.ts.map +1 -0
  141. package/dist/config/writer.js +139 -0
  142. package/dist/config/writer.js.map +1 -0
  143. package/dist/database.d.ts +11 -2
  144. package/dist/database.d.ts.map +1 -1
  145. package/dist/database.js +65 -8
  146. package/dist/database.js.map +1 -1
  147. package/dist/index.js +186 -32
  148. package/dist/index.js.map +1 -1
  149. package/dist/knexfile.d.ts.map +1 -1
  150. package/dist/knexfile.js +88 -12
  151. package/dist/knexfile.js.map +1 -1
  152. package/dist/tests/all-features.test.js +15 -3
  153. package/dist/tests/all-features.test.js.map +1 -1
  154. package/dist/tests/config-loader.test.d.ts +6 -0
  155. package/dist/tests/config-loader.test.d.ts.map +1 -0
  156. package/dist/tests/config-loader.test.js +201 -0
  157. package/dist/tests/config-loader.test.js.map +1 -0
  158. package/dist/tests/connection-manager-integration.test.d.ts +2 -0
  159. package/dist/tests/connection-manager-integration.test.d.ts.map +1 -0
  160. package/dist/tests/connection-manager-integration.test.js +431 -0
  161. package/dist/tests/connection-manager-integration.test.js.map +1 -0
  162. package/dist/tests/connection-manager.test.d.ts +2 -0
  163. package/dist/tests/connection-manager.test.d.ts.map +1 -0
  164. package/dist/tests/connection-manager.test.js +361 -0
  165. package/dist/tests/connection-manager.test.js.map +1 -0
  166. package/dist/tests/dump-import.test.d.ts +15 -0
  167. package/dist/tests/dump-import.test.d.ts.map +1 -0
  168. package/dist/tests/dump-import.test.js +430 -0
  169. package/dist/tests/dump-import.test.js.map +1 -0
  170. package/dist/tests/migration-idempotency.test.d.ts +2 -0
  171. package/dist/tests/migration-idempotency.test.d.ts.map +1 -0
  172. package/dist/tests/migration-idempotency.test.js +330 -0
  173. package/dist/tests/migration-idempotency.test.js.map +1 -0
  174. package/dist/tests/migration-upgrade-paths.test.d.ts +2 -0
  175. package/dist/tests/migration-upgrade-paths.test.d.ts.map +1 -0
  176. package/dist/tests/migration-upgrade-paths.test.js +248 -0
  177. package/dist/tests/migration-upgrade-paths.test.js.map +1 -0
  178. package/dist/tests/multi-project-migration.test.d.ts +17 -0
  179. package/dist/tests/multi-project-migration.test.d.ts.map +1 -0
  180. package/dist/tests/multi-project-migration.test.js +399 -0
  181. package/dist/tests/multi-project-migration.test.js.map +1 -0
  182. package/dist/tests/multi-project.test.d.ts +5 -0
  183. package/dist/tests/multi-project.test.d.ts.map +1 -0
  184. package/dist/tests/multi-project.test.js +238 -0
  185. package/dist/tests/multi-project.test.js.map +1 -0
  186. package/dist/tests/schema-migration.test.d.ts +8 -0
  187. package/dist/tests/schema-migration.test.d.ts.map +1 -0
  188. package/dist/tests/schema-migration.test.js +108 -0
  189. package/dist/tests/schema-migration.test.js.map +1 -0
  190. package/dist/tests/sql-dump-converters.test.d.ts +7 -0
  191. package/dist/tests/sql-dump-converters.test.d.ts.map +1 -0
  192. package/dist/tests/sql-dump-converters.test.js +314 -0
  193. package/dist/tests/sql-dump-converters.test.js.map +1 -0
  194. package/dist/tests/sql-dump-cross-database.test.d.ts +21 -0
  195. package/dist/tests/sql-dump-cross-database.test.d.ts.map +1 -0
  196. package/dist/tests/sql-dump-cross-database.test.js +314 -0
  197. package/dist/tests/sql-dump-cross-database.test.js.map +1 -0
  198. package/dist/tests/sql-dump-default-conversions.test.d.ts +8 -0
  199. package/dist/tests/sql-dump-default-conversions.test.d.ts.map +1 -0
  200. package/dist/tests/sql-dump-default-conversions.test.js +141 -0
  201. package/dist/tests/sql-dump-default-conversions.test.js.map +1 -0
  202. package/dist/tests/sql-dump-fk-constraints.test.d.ts +13 -0
  203. package/dist/tests/sql-dump-fk-constraints.test.d.ts.map +1 -0
  204. package/dist/tests/sql-dump-fk-constraints.test.js +381 -0
  205. package/dist/tests/sql-dump-fk-constraints.test.js.map +1 -0
  206. package/dist/tests/sql-dump-indexes.test.d.ts +12 -0
  207. package/dist/tests/sql-dump-indexes.test.d.ts.map +1 -0
  208. package/dist/tests/sql-dump-indexes.test.js +269 -0
  209. package/dist/tests/sql-dump-indexes.test.js.map +1 -0
  210. package/dist/tests/sql-dump-integration.test.d.ts +16 -0
  211. package/dist/tests/sql-dump-integration.test.d.ts.map +1 -0
  212. package/dist/tests/sql-dump-integration.test.js +342 -0
  213. package/dist/tests/sql-dump-integration.test.js.map +1 -0
  214. package/dist/tests/sql-dump-table-ordering.test.d.ts +8 -0
  215. package/dist/tests/sql-dump-table-ordering.test.d.ts.map +1 -0
  216. package/dist/tests/sql-dump-table-ordering.test.js +253 -0
  217. package/dist/tests/sql-dump-table-ordering.test.js.map +1 -0
  218. package/dist/tests/tasks.link-file-backward-compat.test.js +11 -1
  219. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  220. package/dist/tests/tasks.watch-files-action.test.js +11 -1
  221. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  222. package/dist/tests/type-conversion.test.d.ts +8 -0
  223. package/dist/tests/type-conversion.test.d.ts.map +1 -0
  224. package/dist/tests/type-conversion.test.js +312 -0
  225. package/dist/tests/type-conversion.test.js.map +1 -0
  226. package/dist/tests/utils/test-helpers.d.ts +93 -0
  227. package/dist/tests/utils/test-helpers.d.ts.map +1 -0
  228. package/dist/tests/utils/test-helpers.js +407 -0
  229. package/dist/tests/utils/test-helpers.js.map +1 -0
  230. package/dist/tools/config.d.ts +58 -0
  231. package/dist/tools/config.d.ts.map +1 -0
  232. package/dist/tools/config.js +281 -0
  233. package/dist/tools/config.js.map +1 -0
  234. package/dist/tools/constraints.d.ts.map +1 -1
  235. package/dist/tools/constraints.js +138 -122
  236. package/dist/tools/constraints.js.map +1 -1
  237. package/dist/tools/context.d.ts.map +1 -1
  238. package/dist/tools/context.js +216 -109
  239. package/dist/tools/context.js.map +1 -1
  240. package/dist/tools/files.d.ts.map +1 -1
  241. package/dist/tools/files.js +123 -102
  242. package/dist/tools/files.js.map +1 -1
  243. package/dist/tools/tasks.d.ts.map +1 -1
  244. package/dist/tools/tasks.js +583 -521
  245. package/dist/tools/tasks.js.map +1 -1
  246. package/dist/tools/utils.d.ts +5 -0
  247. package/dist/tools/utils.d.ts.map +1 -1
  248. package/dist/tools/utils.js +176 -122
  249. package/dist/tools/utils.js.map +1 -1
  250. package/dist/types.d.ts +9 -26
  251. package/dist/types.d.ts.map +1 -1
  252. package/dist/utils/cleanup.d.ts +3 -0
  253. package/dist/utils/cleanup.d.ts.map +1 -1
  254. package/dist/utils/cleanup.js +14 -2
  255. package/dist/utils/cleanup.js.map +1 -1
  256. package/dist/utils/connection-manager.d.ts +59 -0
  257. package/dist/utils/connection-manager.d.ts.map +1 -0
  258. package/dist/utils/connection-manager.js +178 -0
  259. package/dist/utils/connection-manager.js.map +1 -0
  260. package/dist/utils/debug-logger.d.ts +8 -4
  261. package/dist/utils/debug-logger.d.ts.map +1 -1
  262. package/dist/utils/debug-logger.js +27 -7
  263. package/dist/utils/debug-logger.js.map +1 -1
  264. package/dist/utils/error-handler.d.ts +12 -2
  265. package/dist/utils/error-handler.d.ts.map +1 -1
  266. package/dist/utils/error-handler.js +22 -21
  267. package/dist/utils/error-handler.js.map +1 -1
  268. package/dist/utils/parameter-validator.d.ts.map +1 -1
  269. package/dist/utils/parameter-validator.js +36 -15
  270. package/dist/utils/parameter-validator.js.map +1 -1
  271. package/dist/utils/project-context.d.ts +111 -0
  272. package/dist/utils/project-context.d.ts.map +1 -0
  273. package/dist/utils/project-context.js +187 -0
  274. package/dist/utils/project-context.js.map +1 -0
  275. package/dist/utils/project-root.d.ts +79 -0
  276. package/dist/utils/project-root.d.ts.map +1 -0
  277. package/dist/utils/project-root.js +108 -0
  278. package/dist/utils/project-root.js.map +1 -0
  279. package/dist/utils/sql-dump-converters.d.ts +188 -0
  280. package/dist/utils/sql-dump-converters.d.ts.map +1 -0
  281. package/dist/utils/sql-dump-converters.js +311 -0
  282. package/dist/utils/sql-dump-converters.js.map +1 -0
  283. package/dist/utils/sql-dump.d.ts +102 -0
  284. package/dist/utils/sql-dump.d.ts.map +1 -0
  285. package/dist/utils/sql-dump.js +1550 -0
  286. package/dist/utils/sql-dump.js.map +1 -0
  287. package/dist/utils/vcs-adapter.d.ts +42 -0
  288. package/dist/utils/vcs-adapter.d.ts.map +1 -1
  289. package/dist/utils/vcs-adapter.js +154 -0
  290. package/dist/utils/vcs-adapter.js.map +1 -1
  291. package/dist/watcher/file-watcher.d.ts.map +1 -1
  292. package/dist/watcher/file-watcher.js +48 -49
  293. package/dist/watcher/file-watcher.js.map +1 -1
  294. package/dist/watcher/gitignore-parser.d.ts.map +1 -1
  295. package/dist/watcher/gitignore-parser.js +2 -1
  296. package/dist/watcher/gitignore-parser.js.map +1 -1
  297. package/docs/BASEADAPTER_IMPLEMENTATION.md +399 -0
  298. package/docs/DATABASE_AUTH.md +445 -0
  299. package/docs/DATABASE_MIGRATION.md +247 -0
  300. package/docs/MULTI_PROJECT_ARCHITECTURE.md +497 -0
  301. package/package.json +12 -4
  302. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
  303. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
  304. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
  305. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
  306. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
  307. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
  308. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
  309. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
  310. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
  311. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +0 -1
  312. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  313. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -15
  314. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  315. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  316. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  317. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
  318. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
  319. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  320. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  321. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
  322. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
  323. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  324. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
  325. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  326. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  327. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  328. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -34
  329. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
  330. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  331. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  332. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
  333. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
  334. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
  335. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
  336. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
  337. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
  338. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
  339. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
  340. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
  341. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
  342. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
  343. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
  344. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
  345. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
  346. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
  347. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
  348. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
  349. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
  350. /package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -0
  351. /package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -0
  352. /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -0
  353. /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.js +0 -0
  354. /package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -0
  355. /package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.d.ts +0 -0
  356. /package/dist/{migrations → config}/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -0
  357. /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -0
  358. /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -0
  359. /package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -0
  360. /package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -0
  361. /package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -0
  362. /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -0
  363. /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -0
  364. /package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -0
  365. /package/dist/{migrations → config}/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -0
  366. /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -0
  367. /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -0
  368. /package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -0
  369. /package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -0
  370. /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -0
  371. /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -0
  372. /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -0
  373. /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -0
  374. /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -0
  375. /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -0
  376. /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -0
  377. /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -0
  378. /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -0
  379. /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -0
  380. /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -0
  381. /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -0
  382. /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -0
  383. /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -0
@@ -0,0 +1,188 @@
1
+ export type DatabaseFormat = 'mysql' | 'postgresql' | 'sqlite';
2
+ /**
3
+ * Convert identifier quotes between database formats
4
+ *
5
+ * Database-specific identifier quoting:
6
+ * - MySQL: backticks `identifier`
7
+ * - PostgreSQL: double quotes "identifier"
8
+ * - SQLite: double quotes "identifier" (also supports backticks)
9
+ *
10
+ * @param sql - SQL statement
11
+ * @param targetFormat - Target database format
12
+ * @returns SQL with converted identifier quotes
13
+ *
14
+ * @example
15
+ * // SQLite → MySQL
16
+ * convertIdentifierQuotes('CREATE TABLE "users" ("id" INTEGER)', 'mysql')
17
+ * // Returns: 'CREATE TABLE `users` (`id` INTEGER)'
18
+ *
19
+ * @example
20
+ * // MySQL → PostgreSQL
21
+ * convertIdentifierQuotes('CREATE TABLE `users` (`id` INT)', 'postgresql')
22
+ * // Returns: 'CREATE TABLE "users" ("id" INT)'
23
+ */
24
+ export declare function convertIdentifierQuotes(sql: string, targetFormat: DatabaseFormat): string;
25
+ /**
26
+ * Convert autoincrement syntax between databases
27
+ *
28
+ * Autoincrement variations:
29
+ * - SQLite: AUTOINCREMENT (with INTEGER PRIMARY KEY)
30
+ * - MySQL: AUTO_INCREMENT
31
+ * - PostgreSQL: SERIAL / GENERATED BY DEFAULT AS IDENTITY / GENERATED ALWAYS AS IDENTITY
32
+ *
33
+ * @param sql - SQL statement
34
+ * @param sourceFormat - Source database format
35
+ * @param targetFormat - Target database format
36
+ * @returns SQL with converted autoincrement syntax
37
+ *
38
+ * @example
39
+ * // SQLite → MySQL
40
+ * convertAutoIncrement('id INTEGER PRIMARY KEY AUTOINCREMENT', 'sqlite', 'mysql')
41
+ * // Returns: 'id INTEGER PRIMARY KEY AUTO_INCREMENT'
42
+ *
43
+ * @example
44
+ * // SQLite → PostgreSQL (allow explicit ID values during import)
45
+ * convertAutoIncrement('id INTEGER AUTOINCREMENT', 'sqlite', 'postgresql')
46
+ * // Returns: 'id INTEGER GENERATED BY DEFAULT AS IDENTITY'
47
+ *
48
+ * @example
49
+ * // MySQL → SQLite
50
+ * convertAutoIncrement('id INT AUTO_INCREMENT', 'mysql', 'sqlite')
51
+ * // Returns: 'id INT AUTOINCREMENT'
52
+ */
53
+ export declare function convertAutoIncrement(sql: string, sourceFormat: DatabaseFormat, targetFormat: DatabaseFormat): string;
54
+ /**
55
+ * Convert timestamp/datetime functions between databases
56
+ *
57
+ * Timestamp function variations:
58
+ * - SQLite: unixepoch(), datetime(ts, 'unixepoch')
59
+ * - MySQL: UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)
60
+ * - PostgreSQL: extract(epoch from now()), to_timestamp(ts)
61
+ *
62
+ * @param sql - SQL statement
63
+ * @param targetFormat - Target database format
64
+ * @returns SQL with converted timestamp functions
65
+ *
66
+ * @example
67
+ * // SQLite → MySQL
68
+ * convertTimestampFunctions("SELECT unixepoch(), datetime(ts, 'unixepoch')", 'mysql')
69
+ * // Returns: "SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)"
70
+ *
71
+ * @example
72
+ * // SQLite → PostgreSQL
73
+ * convertTimestampFunctions("SELECT unixepoch()", 'postgresql')
74
+ * // Returns: "SELECT extract(epoch from now())::integer"
75
+ */
76
+ export declare function convertTimestampFunctions(sql: string, targetFormat: DatabaseFormat): string;
77
+ /**
78
+ * Convert boolean default values between databases
79
+ *
80
+ * Boolean default variations:
81
+ * - SQLite: 0/1 or '0'/'1' (stored as INTEGER or TEXT)
82
+ * - MySQL: 0/1 or FALSE/TRUE (TINYINT or BOOLEAN)
83
+ * - PostgreSQL: false/true or FALSE/TRUE (native BOOLEAN)
84
+ *
85
+ * @param sql - SQL statement
86
+ * @param targetFormat - Target database format
87
+ * @returns SQL with converted boolean defaults
88
+ *
89
+ * @example
90
+ * // SQLite → PostgreSQL
91
+ * convertBooleanDefaults("is_active BOOLEAN default '0'", 'postgresql')
92
+ * // Returns: "is_active BOOLEAN default false"
93
+ *
94
+ * @example
95
+ * // SQLite → PostgreSQL (numeric)
96
+ * convertBooleanDefaults("is_active BOOLEAN default 1", 'postgresql')
97
+ * // Returns: "is_active BOOLEAN default true"
98
+ */
99
+ export declare function convertBooleanDefaults(sql: string, targetFormat: DatabaseFormat): string;
100
+ /**
101
+ * Convert data type keywords between databases
102
+ *
103
+ * Type conversions:
104
+ * - SQLite TEXT → MySQL VARCHAR(255) (when used with DEFAULT or NOT NULL)
105
+ * - SQLite TEXT PRIMARY KEY → MySQL VARCHAR(191) PRIMARY KEY (MariaDB 10.5 compatibility)
106
+ * - SQLite TEXT UNIQUE → MySQL VARCHAR(191) UNIQUE (indexes require VARCHAR)
107
+ * - SQLite TEXT NOT NULL → MySQL VARCHAR(255) NOT NULL (for FK columns)
108
+ * - SQLite datetime → PostgreSQL TIMESTAMP
109
+ * - MySQL TEXT → VARCHAR for compatibility
110
+ *
111
+ * MySQL/MariaDB limitations:
112
+ * - TEXT columns cannot be used in PRIMARY KEY, UNIQUE, or indexes without prefix length
113
+ * - TEXT columns cannot have DEFAULT values
114
+ * - VARCHAR(191) is safe max for utf8mb4 with InnoDB index prefix limit (768 bytes ÷ 4 bytes/char)
115
+ *
116
+ * @param sql - SQL statement
117
+ * @param targetFormat - Target database format
118
+ * @returns SQL with converted data types
119
+ *
120
+ * @example
121
+ * // SQLite → MySQL (TEXT with DEFAULT not allowed in MySQL)
122
+ * convertDataTypes("name TEXT NOT NULL default 'anonymous'", 'mysql')
123
+ * // Returns: "name VARCHAR(255) NOT NULL default 'anonymous'"
124
+ *
125
+ * @example
126
+ * // SQLite → MySQL (TEXT PRIMARY KEY not allowed in MariaDB 10.5)
127
+ * convertDataTypes("tool_name TEXT PRIMARY KEY", 'mysql')
128
+ * // Returns: "tool_name VARCHAR(191) PRIMARY KEY"
129
+ *
130
+ * @example
131
+ * // SQLite → MySQL (TEXT UNIQUE not allowed in MySQL)
132
+ * convertDataTypes("category_name TEXT UNIQUE NOT NULL", 'mysql')
133
+ * // Returns: "category_name VARCHAR(191) UNIQUE NOT NULL"
134
+ *
135
+ * @example
136
+ * // SQLite → MySQL (TEXT NOT NULL for FK columns)
137
+ * convertDataTypes("tool_name TEXT NOT NULL", 'mysql')
138
+ * // Returns: "tool_name VARCHAR(255) NOT NULL"
139
+ *
140
+ * @example
141
+ * // SQLite → PostgreSQL
142
+ * convertDataTypes("created_at datetime", 'postgresql')
143
+ * // Returns: "created_at TIMESTAMP"
144
+ */
145
+ export declare function convertDataTypes(sql: string, targetFormat: DatabaseFormat): string;
146
+ /**
147
+ * Remove CHECK constraints (not well-supported in some databases)
148
+ *
149
+ * CHECK constraints with nested parentheses (e.g., `col` IN ('a', 'b'))
150
+ * are not consistently supported across all databases, especially MariaDB 10.5.
151
+ *
152
+ * Pattern matches: CHECK (...) including nested parentheses
153
+ * Example: check (`status` in ('active', 'inactive'))
154
+ *
155
+ * @param sql - SQL statement
156
+ * @returns SQL with CHECK constraints removed
157
+ *
158
+ * @example
159
+ * removeCheckConstraints("CREATE TABLE t (status TEXT check (status in ('a', 'b')))")
160
+ * // Returns: "CREATE TABLE t (status TEXT )"
161
+ *
162
+ * @example
163
+ * // Complex nested parentheses
164
+ * removeCheckConstraints("id INT check (id > 0), name TEXT check (length(name) > 0)")
165
+ * // Returns: "id INT , name TEXT "
166
+ */
167
+ export declare function removeCheckConstraints(sql: string): string;
168
+ /**
169
+ * Remove SQLite-specific DEFAULT functions (strftime, etc.)
170
+ *
171
+ * SQLite supports complex DEFAULT expressions using functions like strftime(),
172
+ * which are not portable to MySQL/PostgreSQL. These are replaced with simple defaults.
173
+ *
174
+ * @param sql - SQL statement
175
+ * @returns SQL with SQLite DEFAULT functions replaced with 'default 0'
176
+ *
177
+ * @example
178
+ * // Parenthesized strftime
179
+ * removeSqliteDefaultFunctions("created_at INTEGER default (strftime('%s', 'now'))")
180
+ * // Returns: "created_at INTEGER default 0"
181
+ *
182
+ * @example
183
+ * // Bare strftime
184
+ * removeSqliteDefaultFunctions("created_at INTEGER default strftime('%s', 'now')")
185
+ * // Returns: "created_at INTEGER default 0"
186
+ */
187
+ export declare function removeSqliteDefaultFunctions(sql: string): string;
188
+ //# sourceMappingURL=sql-dump-converters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump-converters.d.ts","sourceRoot":"","sources":["../../src/utils/sql-dump-converters.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CAYzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,cAAc,EAC5B,YAAY,EAAE,cAAc,GAC3B,MAAM,CA6BR;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CA0B3F;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CAWxF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,MAAM,CA4BlF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMhE"}
@@ -0,0 +1,311 @@
1
+ // sql-dump-converters.ts - Shared SQL syntax conversion functions
2
+ /**
3
+ * Convert identifier quotes between database formats
4
+ *
5
+ * Database-specific identifier quoting:
6
+ * - MySQL: backticks `identifier`
7
+ * - PostgreSQL: double quotes "identifier"
8
+ * - SQLite: double quotes "identifier" (also supports backticks)
9
+ *
10
+ * @param sql - SQL statement
11
+ * @param targetFormat - Target database format
12
+ * @returns SQL with converted identifier quotes
13
+ *
14
+ * @example
15
+ * // SQLite → MySQL
16
+ * convertIdentifierQuotes('CREATE TABLE "users" ("id" INTEGER)', 'mysql')
17
+ * // Returns: 'CREATE TABLE `users` (`id` INTEGER)'
18
+ *
19
+ * @example
20
+ * // MySQL → PostgreSQL
21
+ * convertIdentifierQuotes('CREATE TABLE `users` (`id` INT)', 'postgresql')
22
+ * // Returns: 'CREATE TABLE "users" ("id" INT)'
23
+ */
24
+ export function convertIdentifierQuotes(sql, targetFormat) {
25
+ if (targetFormat === 'mysql') {
26
+ // Double quotes → backticks
27
+ // Pattern: "word_characters" → `word_characters`
28
+ return sql.replace(/"(\w+)"/g, '`$1`');
29
+ }
30
+ else if (targetFormat === 'postgresql' || targetFormat === 'sqlite') {
31
+ // Backticks → double quotes
32
+ // Pattern: `alphanumeric_.-` → "alphanumeric_.-"
33
+ // Smart replacement: only identifier chars (not string literals)
34
+ return sql.replace(/`([a-zA-Z0-9_\.\-]+)`/g, '"$1"');
35
+ }
36
+ return sql;
37
+ }
38
+ /**
39
+ * Convert autoincrement syntax between databases
40
+ *
41
+ * Autoincrement variations:
42
+ * - SQLite: AUTOINCREMENT (with INTEGER PRIMARY KEY)
43
+ * - MySQL: AUTO_INCREMENT
44
+ * - PostgreSQL: SERIAL / GENERATED BY DEFAULT AS IDENTITY / GENERATED ALWAYS AS IDENTITY
45
+ *
46
+ * @param sql - SQL statement
47
+ * @param sourceFormat - Source database format
48
+ * @param targetFormat - Target database format
49
+ * @returns SQL with converted autoincrement syntax
50
+ *
51
+ * @example
52
+ * // SQLite → MySQL
53
+ * convertAutoIncrement('id INTEGER PRIMARY KEY AUTOINCREMENT', 'sqlite', 'mysql')
54
+ * // Returns: 'id INTEGER PRIMARY KEY AUTO_INCREMENT'
55
+ *
56
+ * @example
57
+ * // SQLite → PostgreSQL (allow explicit ID values during import)
58
+ * convertAutoIncrement('id INTEGER AUTOINCREMENT', 'sqlite', 'postgresql')
59
+ * // Returns: 'id INTEGER GENERATED BY DEFAULT AS IDENTITY'
60
+ *
61
+ * @example
62
+ * // MySQL → SQLite
63
+ * convertAutoIncrement('id INT AUTO_INCREMENT', 'mysql', 'sqlite')
64
+ * // Returns: 'id INT AUTOINCREMENT'
65
+ */
66
+ export function convertAutoIncrement(sql, sourceFormat, targetFormat) {
67
+ if (sourceFormat === 'sqlite' && targetFormat === 'mysql') {
68
+ // SQLite → MySQL: AUTOINCREMENT → AUTO_INCREMENT
69
+ return sql.replace(/AUTOINCREMENT/gi, 'AUTO_INCREMENT');
70
+ }
71
+ else if (sourceFormat === 'sqlite' && targetFormat === 'postgresql') {
72
+ // SQLite → PostgreSQL: Two patterns
73
+ // 1. INTEGER PRIMARY KEY AUTOINCREMENT → SERIAL PRIMARY KEY
74
+ sql = sql.replace(/INTEGER\s+PRIMARY\s+KEY\s+AUTOINCREMENT/gi, 'SERIAL PRIMARY KEY');
75
+ // 2. AUTOINCREMENT → GENERATED BY DEFAULT AS IDENTITY (allows explicit values)
76
+ sql = sql.replace(/AUTOINCREMENT/gi, 'GENERATED BY DEFAULT AS IDENTITY');
77
+ return sql;
78
+ }
79
+ else if (sourceFormat === 'mysql' && targetFormat === 'sqlite') {
80
+ // MySQL → SQLite: AUTO_INCREMENT → AUTOINCREMENT
81
+ return sql.replace(/AUTO_INCREMENT/gi, 'AUTOINCREMENT');
82
+ }
83
+ else if (sourceFormat === 'mysql' && targetFormat === 'postgresql') {
84
+ // MySQL → PostgreSQL: AUTO_INCREMENT → GENERATED ALWAYS AS IDENTITY
85
+ return sql.replace(/AUTO_INCREMENT/gi, 'GENERATED ALWAYS AS IDENTITY');
86
+ }
87
+ else if (sourceFormat === 'postgresql' && targetFormat === 'sqlite') {
88
+ // PostgreSQL → SQLite: SERIAL / GENERATED → AUTOINCREMENT
89
+ sql = sql.replace(/SERIAL/gi, 'INTEGER');
90
+ sql = sql.replace(/GENERATED\s+(?:ALWAYS|BY\s+DEFAULT)\s+AS\s+IDENTITY/gi, 'AUTOINCREMENT');
91
+ return sql;
92
+ }
93
+ else if (sourceFormat === 'postgresql' && targetFormat === 'mysql') {
94
+ // PostgreSQL → MySQL: SERIAL / GENERATED → AUTO_INCREMENT
95
+ sql = sql.replace(/SERIAL/gi, 'INT');
96
+ sql = sql.replace(/GENERATED\s+(?:ALWAYS|BY\s+DEFAULT)\s+AS\s+IDENTITY/gi, 'AUTO_INCREMENT');
97
+ return sql;
98
+ }
99
+ return sql;
100
+ }
101
+ /**
102
+ * Convert timestamp/datetime functions between databases
103
+ *
104
+ * Timestamp function variations:
105
+ * - SQLite: unixepoch(), datetime(ts, 'unixepoch')
106
+ * - MySQL: UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)
107
+ * - PostgreSQL: extract(epoch from now()), to_timestamp(ts)
108
+ *
109
+ * @param sql - SQL statement
110
+ * @param targetFormat - Target database format
111
+ * @returns SQL with converted timestamp functions
112
+ *
113
+ * @example
114
+ * // SQLite → MySQL
115
+ * convertTimestampFunctions("SELECT unixepoch(), datetime(ts, 'unixepoch')", 'mysql')
116
+ * // Returns: "SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(ts)"
117
+ *
118
+ * @example
119
+ * // SQLite → PostgreSQL
120
+ * convertTimestampFunctions("SELECT unixepoch()", 'postgresql')
121
+ * // Returns: "SELECT extract(epoch from now())::integer"
122
+ */
123
+ export function convertTimestampFunctions(sql, targetFormat) {
124
+ if (targetFormat === 'mysql') {
125
+ // SQLite → MySQL timestamp functions
126
+ sql = sql.replace(/unixepoch\(\)/g, 'UNIX_TIMESTAMP()');
127
+ sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'FROM_UNIXTIME($1)');
128
+ // strftime('%s', 'now') → UNIX_TIMESTAMP()
129
+ sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'UNIX_TIMESTAMP()');
130
+ return sql;
131
+ }
132
+ else if (targetFormat === 'postgresql') {
133
+ // SQLite/MySQL → PostgreSQL timestamp functions
134
+ sql = sql.replace(/unixepoch\(\)/g, 'extract(epoch from now())::integer');
135
+ sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'to_timestamp($1)');
136
+ sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'extract(epoch from now())::integer');
137
+ sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, 'to_timestamp($1)');
138
+ // strftime('%s', 'now') → extract(epoch from now())::integer
139
+ sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'extract(epoch from now())::integer');
140
+ return sql;
141
+ }
142
+ else if (targetFormat === 'sqlite') {
143
+ // MySQL/PostgreSQL → SQLite timestamp functions
144
+ sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'unixepoch()');
145
+ sql = sql.replace(/extract\(epoch from now\(\)\)::integer/g, 'unixepoch()');
146
+ sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
147
+ sql = sql.replace(/to_timestamp\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
148
+ return sql;
149
+ }
150
+ return sql;
151
+ }
152
+ /**
153
+ * Convert boolean default values between databases
154
+ *
155
+ * Boolean default variations:
156
+ * - SQLite: 0/1 or '0'/'1' (stored as INTEGER or TEXT)
157
+ * - MySQL: 0/1 or FALSE/TRUE (TINYINT or BOOLEAN)
158
+ * - PostgreSQL: false/true or FALSE/TRUE (native BOOLEAN)
159
+ *
160
+ * @param sql - SQL statement
161
+ * @param targetFormat - Target database format
162
+ * @returns SQL with converted boolean defaults
163
+ *
164
+ * @example
165
+ * // SQLite → PostgreSQL
166
+ * convertBooleanDefaults("is_active BOOLEAN default '0'", 'postgresql')
167
+ * // Returns: "is_active BOOLEAN default false"
168
+ *
169
+ * @example
170
+ * // SQLite → PostgreSQL (numeric)
171
+ * convertBooleanDefaults("is_active BOOLEAN default 1", 'postgresql')
172
+ * // Returns: "is_active BOOLEAN default true"
173
+ */
174
+ export function convertBooleanDefaults(sql, targetFormat) {
175
+ if (targetFormat === 'postgresql') {
176
+ // Convert string boolean defaults: '0' → false, '1' → true
177
+ sql = sql.replace(/boolean\s+default\s+'0'/gi, 'boolean default false');
178
+ sql = sql.replace(/boolean\s+default\s+'1'/gi, 'boolean default true');
179
+ // Convert numeric boolean defaults: 0 → false, 1 → true
180
+ sql = sql.replace(/boolean\s+default\s+0\b/gi, 'boolean default false');
181
+ sql = sql.replace(/boolean\s+default\s+1\b/gi, 'boolean default true');
182
+ return sql;
183
+ }
184
+ return sql;
185
+ }
186
+ /**
187
+ * Convert data type keywords between databases
188
+ *
189
+ * Type conversions:
190
+ * - SQLite TEXT → MySQL VARCHAR(255) (when used with DEFAULT or NOT NULL)
191
+ * - SQLite TEXT PRIMARY KEY → MySQL VARCHAR(191) PRIMARY KEY (MariaDB 10.5 compatibility)
192
+ * - SQLite TEXT UNIQUE → MySQL VARCHAR(191) UNIQUE (indexes require VARCHAR)
193
+ * - SQLite TEXT NOT NULL → MySQL VARCHAR(255) NOT NULL (for FK columns)
194
+ * - SQLite datetime → PostgreSQL TIMESTAMP
195
+ * - MySQL TEXT → VARCHAR for compatibility
196
+ *
197
+ * MySQL/MariaDB limitations:
198
+ * - TEXT columns cannot be used in PRIMARY KEY, UNIQUE, or indexes without prefix length
199
+ * - TEXT columns cannot have DEFAULT values
200
+ * - VARCHAR(191) is safe max for utf8mb4 with InnoDB index prefix limit (768 bytes ÷ 4 bytes/char)
201
+ *
202
+ * @param sql - SQL statement
203
+ * @param targetFormat - Target database format
204
+ * @returns SQL with converted data types
205
+ *
206
+ * @example
207
+ * // SQLite → MySQL (TEXT with DEFAULT not allowed in MySQL)
208
+ * convertDataTypes("name TEXT NOT NULL default 'anonymous'", 'mysql')
209
+ * // Returns: "name VARCHAR(255) NOT NULL default 'anonymous'"
210
+ *
211
+ * @example
212
+ * // SQLite → MySQL (TEXT PRIMARY KEY not allowed in MariaDB 10.5)
213
+ * convertDataTypes("tool_name TEXT PRIMARY KEY", 'mysql')
214
+ * // Returns: "tool_name VARCHAR(191) PRIMARY KEY"
215
+ *
216
+ * @example
217
+ * // SQLite → MySQL (TEXT UNIQUE not allowed in MySQL)
218
+ * convertDataTypes("category_name TEXT UNIQUE NOT NULL", 'mysql')
219
+ * // Returns: "category_name VARCHAR(191) UNIQUE NOT NULL"
220
+ *
221
+ * @example
222
+ * // SQLite → MySQL (TEXT NOT NULL for FK columns)
223
+ * convertDataTypes("tool_name TEXT NOT NULL", 'mysql')
224
+ * // Returns: "tool_name VARCHAR(255) NOT NULL"
225
+ *
226
+ * @example
227
+ * // SQLite → PostgreSQL
228
+ * convertDataTypes("created_at datetime", 'postgresql')
229
+ * // Returns: "created_at TIMESTAMP"
230
+ */
231
+ export function convertDataTypes(sql, targetFormat) {
232
+ if (targetFormat === 'mysql') {
233
+ // MariaDB 10.5 and MySQL don't allow TEXT columns as PRIMARY KEY
234
+ // Convert TEXT PRIMARY KEY to VARCHAR(191) PRIMARY KEY
235
+ // 191 is the safe max for utf8mb4 with InnoDB index prefix limit (767 bytes / 4 bytes per char)
236
+ sql = sql.replace(/\bTEXT(\s+PRIMARY\s+KEY)/gi, 'VARCHAR(191)$1');
237
+ // MySQL doesn't allow TEXT columns in UNIQUE constraints
238
+ // Convert TEXT UNIQUE to VARCHAR(191) UNIQUE
239
+ sql = sql.replace(/\bTEXT(\s+UNIQUE)/gi, 'VARCHAR(191)$1');
240
+ // MySQL doesn't allow TEXT columns in indexes (including FOREIGN KEY references)
241
+ // Convert TEXT NOT NULL (commonly used in FK columns) to VARCHAR(255) NOT NULL
242
+ // This must come BEFORE the default pattern to avoid conflicts
243
+ sql = sql.replace(/\bTEXT(\s+NOT\s+NULL)(?!\s+default)/gi, 'VARCHAR(255)$1');
244
+ // MySQL doesn't allow DEFAULT values on TEXT columns
245
+ // Convert TEXT with defaults to VARCHAR(255)
246
+ // Pattern: TEXT followed by optional NOT NULL, then default
247
+ sql = sql.replace(/\bTEXT(\s+(?:NOT\s+NULL\s+)?default\s+[^,\)]+)/gi, 'VARCHAR(255)$1');
248
+ return sql;
249
+ }
250
+ else if (targetFormat === 'postgresql') {
251
+ // Convert datetime → TIMESTAMP
252
+ sql = sql.replace(/\bdatetime\b/gi, 'TIMESTAMP');
253
+ return sql;
254
+ }
255
+ return sql;
256
+ }
257
+ /**
258
+ * Remove CHECK constraints (not well-supported in some databases)
259
+ *
260
+ * CHECK constraints with nested parentheses (e.g., `col` IN ('a', 'b'))
261
+ * are not consistently supported across all databases, especially MariaDB 10.5.
262
+ *
263
+ * Pattern matches: CHECK (...) including nested parentheses
264
+ * Example: check (`status` in ('active', 'inactive'))
265
+ *
266
+ * @param sql - SQL statement
267
+ * @returns SQL with CHECK constraints removed
268
+ *
269
+ * @example
270
+ * removeCheckConstraints("CREATE TABLE t (status TEXT check (status in ('a', 'b')))")
271
+ * // Returns: "CREATE TABLE t (status TEXT )"
272
+ *
273
+ * @example
274
+ * // Complex nested parentheses
275
+ * removeCheckConstraints("id INT check (id > 0), name TEXT check (length(name) > 0)")
276
+ * // Returns: "id INT , name TEXT "
277
+ */
278
+ export function removeCheckConstraints(sql) {
279
+ // Pattern: \s+check\s*\( matches " check ("
280
+ // [^()]* matches non-parenthesis characters
281
+ // (?:\([^()]*\)[^()]*)* handles one level of nested parentheses
282
+ // Example: check (col in ('a', 'b')) where ('a', 'b') are nested parens
283
+ return sql.replace(/\s+check\s*\([^()]*(?:\([^()]*\)[^()]*)*\)/gi, '');
284
+ }
285
+ /**
286
+ * Remove SQLite-specific DEFAULT functions (strftime, etc.)
287
+ *
288
+ * SQLite supports complex DEFAULT expressions using functions like strftime(),
289
+ * which are not portable to MySQL/PostgreSQL. These are replaced with simple defaults.
290
+ *
291
+ * @param sql - SQL statement
292
+ * @returns SQL with SQLite DEFAULT functions replaced with 'default 0'
293
+ *
294
+ * @example
295
+ * // Parenthesized strftime
296
+ * removeSqliteDefaultFunctions("created_at INTEGER default (strftime('%s', 'now'))")
297
+ * // Returns: "created_at INTEGER default 0"
298
+ *
299
+ * @example
300
+ * // Bare strftime
301
+ * removeSqliteDefaultFunctions("created_at INTEGER default strftime('%s', 'now')")
302
+ * // Returns: "created_at INTEGER default 0"
303
+ */
304
+ export function removeSqliteDefaultFunctions(sql) {
305
+ // Pattern 1: default (strftime(...))
306
+ sql = sql.replace(/default\s*\(strftime\([^)]+\)\)/gi, 'default 0');
307
+ // Pattern 2: default strftime(...)
308
+ sql = sql.replace(/default\s+strftime\([^)]+\)/gi, 'default 0');
309
+ return sql;
310
+ }
311
+ //# sourceMappingURL=sql-dump-converters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump-converters.js","sourceRoot":"","sources":["../../src/utils/sql-dump-converters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { Knex } from 'knex';
2
+ import { type DatabaseFormat } from './sql-dump-converters.js';
3
+ export type { DatabaseFormat };
4
+ export type ConflictMode = 'error' | 'ignore' | 'replace';
5
+ /**
6
+ * Quote identifier (table or column name) for target database
7
+ */
8
+ export declare function quoteIdentifier(name: string, format: DatabaseFormat): string;
9
+ /**
10
+ * Get primary key columns for a table
11
+ */
12
+ export declare function getPrimaryKeyColumns(knex: Knex, table: string): Promise<string[]>;
13
+ /**
14
+ * Get CREATE TABLE statement for a table using knex-schema-inspector
15
+ * Replaces regex-based SQL conversion with metadata-driven approach
16
+ */
17
+ export declare function getCreateTableStatement(knex: Knex, table: string, targetFormat: DatabaseFormat): Promise<string>;
18
+ /**
19
+ * Get all table names from the database (excluding system tables)
20
+ */
21
+ export declare function getAllTables(knex: Knex, includeKnexTables?: boolean): Promise<string[]>;
22
+ /**
23
+ * Get all view names from the database
24
+ */
25
+ export declare function getAllViews(knex: Knex): Promise<string[]>;
26
+ /**
27
+ * Get all indexes for a table
28
+ */
29
+ export declare function getAllIndexes(knex: Knex, table: string): Promise<string[]>;
30
+ /**
31
+ * Get CREATE INDEX statement for an index
32
+ */
33
+ export declare function getCreateIndexStatement(knex: Knex, indexName: string, targetFormat: DatabaseFormat): Promise<string>;
34
+ /**
35
+ * Get CREATE VIEW statement for a view
36
+ */
37
+ export declare function getCreateViewStatement(knex: Knex, viewName: string, targetFormat: DatabaseFormat): Promise<string>;
38
+ /**
39
+ * Format a value for SQL insertion
40
+ */
41
+ export declare function formatValue(value: any, format: DatabaseFormat, table?: string, column?: string, columnType?: string): string;
42
+ /**
43
+ * Convert value with type-aware conversion for cross-database migration
44
+ * Uses Knex columnInfo() metadata for accurate type detection
45
+ *
46
+ * @internal - Exported for testing only
47
+ */
48
+ export declare function convertValueWithType(value: any, columnName: string, columnInfo: Map<string, any>, // From knex(table).columnInfo()
49
+ sourceFormat: DatabaseFormat, targetFormat: DatabaseFormat): string;
50
+ /**
51
+ * Generate a bulk INSERT statement for a table with conflict resolution
52
+ *
53
+ * REFACTORED: Uses Knex query builder instead of manual string construction
54
+ */
55
+ export declare function generateBulkInsert(table: string, rows: any[], format: DatabaseFormat, options?: {
56
+ chunkSize?: number;
57
+ conflictMode?: ConflictMode;
58
+ primaryKeys?: string[];
59
+ columnTypes?: Map<string, string>;
60
+ columnInfo?: Map<string, any>;
61
+ }): string[];
62
+ /**
63
+ * Generate header comments for SQL dump
64
+ */
65
+ export declare function generateHeader(format: DatabaseFormat): string;
66
+ /**
67
+ * Generate foreign key disable/enable statements
68
+ */
69
+ export declare function generateForeignKeyControls(format: DatabaseFormat, enable: boolean): string;
70
+ /**
71
+ * Generate transaction control statements
72
+ */
73
+ export declare function generateTransactionControl(format: DatabaseFormat, isStart: boolean): string;
74
+ /**
75
+ * Generate sequence reset statements for PostgreSQL
76
+ */
77
+ export declare function generateSequenceResets(knex: Knex, tables: string[]): Promise<string[]>;
78
+ /**
79
+ * Get foreign key dependencies for tables
80
+ * Returns a map of table -> array of tables it depends on
81
+ *
82
+ * @internal Exported for testing purposes
83
+ */
84
+ export declare function getTableDependencies(knex: Knex, tables: string[]): Promise<Map<string, string[]>>;
85
+ /**
86
+ * Topologically sort tables by foreign key dependencies
87
+ * Returns tables in order where parent tables come before child tables
88
+ *
89
+ * @internal Exported for testing purposes
90
+ */
91
+ export declare function topologicalSort(tables: string[], dependencies: Map<string, string[]>): string[];
92
+ /**
93
+ * Main function to generate complete SQL dump
94
+ */
95
+ export declare function generateSqlDump(knex: Knex, format: DatabaseFormat, options?: {
96
+ tables?: string[];
97
+ includeHeader?: boolean;
98
+ includeSchema?: boolean;
99
+ chunkSize?: number;
100
+ conflictMode?: ConflictMode;
101
+ }): Promise<string>;
102
+ //# sourceMappingURL=sql-dump.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump.d.ts","sourceRoot":"","sources":["../../src/utils/sql-dump.ts"],"names":[],"mappings":"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"}