sqlew 5.0.8 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +19 -10
  3. package/dist/adapters/auth/auth-factory.d.ts +2 -81
  4. package/dist/adapters/auth/auth-factory.d.ts.map +1 -1
  5. package/dist/adapters/auth/auth-factory.js +2 -82
  6. package/dist/adapters/auth/auth-factory.js.map +1 -1
  7. package/dist/adapters/auth/base-auth-provider.d.ts +18 -303
  8. package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -1
  9. package/dist/adapters/auth/base-auth-provider.js +2 -104
  10. package/dist/adapters/auth/base-auth-provider.js.map +1 -1
  11. package/dist/adapters/auth/direct-auth-provider.d.ts +4 -348
  12. package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -1
  13. package/dist/adapters/auth/direct-auth-provider.js +6 -356
  14. package/dist/adapters/auth/direct-auth-provider.js.map +1 -1
  15. package/dist/adapters/base-adapter.d.ts +31 -598
  16. package/dist/adapters/base-adapter.d.ts.map +1 -1
  17. package/dist/adapters/base-adapter.js +10 -458
  18. package/dist/adapters/base-adapter.js.map +1 -1
  19. package/dist/adapters/index.d.ts +1 -11
  20. package/dist/adapters/index.d.ts.map +1 -1
  21. package/dist/adapters/index.js +1 -11
  22. package/dist/adapters/index.js.map +1 -1
  23. package/dist/adapters/mysql-adapter.d.ts +15 -541
  24. package/dist/adapters/mysql-adapter.d.ts.map +1 -1
  25. package/dist/adapters/mysql-adapter.js +24 -561
  26. package/dist/adapters/mysql-adapter.js.map +1 -1
  27. package/dist/adapters/postgresql-adapter.d.ts +15 -203
  28. package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
  29. package/dist/adapters/postgresql-adapter.js +24 -223
  30. package/dist/adapters/postgresql-adapter.js.map +1 -1
  31. package/dist/adapters/sqlite-adapter.d.ts +4 -28
  32. package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
  33. package/dist/adapters/sqlite-adapter.js +4 -32
  34. package/dist/adapters/sqlite-adapter.js.map +1 -1
  35. package/dist/adapters/types.d.ts +1 -4
  36. package/dist/adapters/types.d.ts.map +1 -1
  37. package/dist/backend/backend-factory.d.ts +3 -3
  38. package/dist/backend/backend-factory.js +3 -3
  39. package/dist/backend/local-backend.d.ts.map +1 -1
  40. package/dist/backend/local-backend.js +0 -5
  41. package/dist/backend/local-backend.js.map +1 -1
  42. package/dist/cli/db-export.d.ts.map +1 -1
  43. package/dist/cli/db-export.js +54 -32
  44. package/dist/cli/db-export.js.map +1 -1
  45. package/dist/cli/db-import.d.ts.map +1 -1
  46. package/dist/cli/db-import.js +32 -31
  47. package/dist/cli/db-import.js.map +1 -1
  48. package/dist/cli/hooks/on-exit-plan.d.ts.map +1 -1
  49. package/dist/cli/hooks/on-exit-plan.js +42 -1
  50. package/dist/cli/hooks/on-exit-plan.js.map +1 -1
  51. package/dist/cli/hooks/on-prompt.d.ts.map +1 -1
  52. package/dist/cli/hooks/on-prompt.js +5 -0
  53. package/dist/cli/hooks/on-prompt.js.map +1 -1
  54. package/dist/cli/hooks/plan-processor.d.ts.map +1 -1
  55. package/dist/cli/hooks/plan-processor.js +16 -2
  56. package/dist/cli/hooks/plan-processor.js.map +1 -1
  57. package/dist/cli/hooks/stdin-parser.d.ts +41 -0
  58. package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
  59. package/dist/cli/hooks/stdin-parser.js +140 -4
  60. package/dist/cli/hooks/stdin-parser.js.map +1 -1
  61. package/dist/cli/hooks/track-plan.d.ts +13 -0
  62. package/dist/cli/hooks/track-plan.d.ts.map +1 -1
  63. package/dist/cli/hooks/track-plan.js +58 -3
  64. package/dist/cli/hooks/track-plan.js.map +1 -1
  65. package/dist/cli.d.ts.map +1 -1
  66. package/dist/cli.js +1 -12
  67. package/dist/cli.js.map +1 -1
  68. package/dist/config/cloud-config-loader.d.ts +8 -8
  69. package/dist/config/cloud-config-loader.d.ts.map +1 -1
  70. package/dist/config/cloud-config-loader.js +12 -12
  71. package/dist/config/cloud-config-loader.js.map +1 -1
  72. package/dist/config/global-config.d.ts +24 -46
  73. package/dist/config/global-config.d.ts.map +1 -1
  74. package/dist/config/global-config.js +174 -56
  75. package/dist/config/global-config.js.map +1 -1
  76. package/dist/config/loader.d.ts +1 -18
  77. package/dist/config/loader.d.ts.map +1 -1
  78. package/dist/config/loader.js +1 -89
  79. package/dist/config/loader.js.map +1 -1
  80. package/dist/config/types.d.ts +2 -64
  81. package/dist/config/types.d.ts.map +1 -1
  82. package/dist/config/types.js +0 -18
  83. package/dist/config/types.js.map +1 -1
  84. package/dist/database/index.d.ts +1 -2
  85. package/dist/database/index.d.ts.map +1 -1
  86. package/dist/database/index.js +1 -3
  87. package/dist/database/index.js.map +1 -1
  88. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts.map +1 -1
  89. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +2 -1
  90. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -1
  91. package/dist/database/operations/queries.d.ts +0 -4
  92. package/dist/database/operations/queries.d.ts.map +1 -1
  93. package/dist/database/operations/queries.js +0 -8
  94. package/dist/database/operations/queries.js.map +1 -1
  95. package/dist/index.d.ts +1 -1
  96. package/dist/index.js +2 -2
  97. package/dist/index.js.map +1 -1
  98. package/dist/init-rules.d.ts.map +1 -1
  99. package/dist/init-rules.js +0 -1
  100. package/dist/init-rules.js.map +1 -1
  101. package/dist/knexfile.d.ts.map +1 -1
  102. package/dist/knexfile.js +2 -1
  103. package/dist/knexfile.js.map +1 -1
  104. package/dist/migration/local-to-global.d.ts +19 -0
  105. package/dist/migration/local-to-global.d.ts.map +1 -0
  106. package/dist/migration/local-to-global.js +133 -0
  107. package/dist/migration/local-to-global.js.map +1 -0
  108. package/dist/saas-connector/client/types.d.ts +1 -1
  109. package/dist/saas-connector/client/types.d.ts.map +1 -1
  110. package/dist/schema.js +1 -1
  111. package/dist/server/setup.d.ts.map +1 -1
  112. package/dist/server/setup.js +15 -7
  113. package/dist/server/setup.js.map +1 -1
  114. package/dist/tests/backend/backend-factory.test.js +2 -2
  115. package/dist/tests/backend/backend-factory.test.js.map +1 -1
  116. package/dist/tests/docker/native/constraint-operations.test.d.ts +2 -17
  117. package/dist/tests/docker/native/constraint-operations.test.d.ts.map +1 -1
  118. package/dist/tests/docker/native/constraint-operations.test.js +3 -82
  119. package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
  120. package/dist/tests/docker/native/db-init.d.ts +3 -34
  121. package/dist/tests/docker/native/db-init.d.ts.map +1 -1
  122. package/dist/tests/docker/native/db-init.js +15 -77
  123. package/dist/tests/docker/native/db-init.js.map +1 -1
  124. package/dist/tests/docker/native/decision-operations.test.d.ts +2 -10
  125. package/dist/tests/docker/native/decision-operations.test.d.ts.map +1 -1
  126. package/dist/tests/docker/native/decision-operations.test.js +2 -84
  127. package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
  128. package/dist/tests/docker/native/help-system.test.d.ts +2 -5
  129. package/dist/tests/docker/native/help-system.test.d.ts.map +1 -1
  130. package/dist/tests/docker/native/help-system.test.js +2 -47
  131. package/dist/tests/docker/native/help-system.test.js.map +1 -1
  132. package/dist/tests/docker/native/suggest-tool.test.d.ts +3 -11
  133. package/dist/tests/docker/native/suggest-tool.test.d.ts.map +1 -1
  134. package/dist/tests/docker/native/suggest-tool.test.js +3 -60
  135. package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
  136. package/dist/tests/docker/native/test-harness.d.ts +2 -23
  137. package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
  138. package/dist/tests/docker/native/test-harness.js +5 -59
  139. package/dist/tests/docker/native/test-harness.js.map +1 -1
  140. package/dist/tests/feature/decision/analytics.test.js +2 -1
  141. package/dist/tests/feature/decision/analytics.test.js.map +1 -1
  142. package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +2 -7
  143. package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
  144. package/dist/tests/feature/decision/batch-validation.test.js +2 -1
  145. package/dist/tests/feature/decision/batch-validation.test.js.map +1 -1
  146. package/dist/tests/integration/auto-trigger-suggestions.test.js +4 -37
  147. package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
  148. package/dist/tests/integration/hybrid-similarity-detection.test.js +2 -1
  149. package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
  150. package/dist/tests/integration/json-export-import.test.d.ts.map +1 -0
  151. package/dist/tests/integration/json-export-import.test.js.map +1 -0
  152. package/dist/tests/unit/case-insensitive-validator.test.d.ts +0 -7
  153. package/dist/tests/unit/case-insensitive-validator.test.d.ts.map +1 -1
  154. package/dist/tests/unit/case-insensitive-validator.test.js +0 -22
  155. package/dist/tests/unit/case-insensitive-validator.test.js.map +1 -1
  156. package/dist/tests/unit/config/cloud-config-loader.test.js +4 -2
  157. package/dist/tests/unit/config/cloud-config-loader.test.js.map +1 -1
  158. package/dist/tests/unit/config/global-db-migration.test.d.ts +12 -0
  159. package/dist/tests/unit/config/global-db-migration.test.d.ts.map +1 -0
  160. package/dist/tests/unit/config/global-db-migration.test.js +117 -0
  161. package/dist/tests/unit/config/global-db-migration.test.js.map +1 -0
  162. package/dist/tests/unit/constraint-scorer.test.d.ts +2 -7
  163. package/dist/tests/unit/constraint-scorer.test.d.ts.map +1 -1
  164. package/dist/tests/unit/constraint-scorer.test.js +2 -28
  165. package/dist/tests/unit/constraint-scorer.test.js.map +1 -1
  166. package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts +9 -0
  167. package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts.map +1 -0
  168. package/dist/tests/unit/hooks/grok-hook-normalization.test.js +98 -0
  169. package/dist/tests/unit/hooks/grok-hook-normalization.test.js.map +1 -0
  170. package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts +7 -0
  171. package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts.map +1 -0
  172. package/dist/tests/unit/hooks/grok-plan-template-injection.test.js +55 -0
  173. package/dist/tests/unit/hooks/grok-plan-template-injection.test.js.map +1 -0
  174. package/dist/tests/unit/universal-knex.test.js +9 -0
  175. package/dist/tests/unit/universal-knex.test.js.map +1 -1
  176. package/dist/tests/unit/validation/parameter-validation.test.js +0 -24
  177. package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
  178. package/dist/tests/utils/db-config.d.ts.map +1 -1
  179. package/dist/tests/utils/db-config.js +0 -9
  180. package/dist/tests/utils/db-config.js.map +1 -1
  181. package/dist/tests/utils/db-import.d.ts.map +1 -1
  182. package/dist/tests/utils/db-import.js +0 -3
  183. package/dist/tests/utils/db-import.js.map +1 -1
  184. package/dist/tests/utils/db-schema.d.ts.map +1 -1
  185. package/dist/tests/utils/db-schema.js +48 -51
  186. package/dist/tests/utils/db-schema.js.map +1 -1
  187. package/dist/tests/utils/db-seeding.d.ts.map +1 -1
  188. package/dist/tests/utils/db-seeding.js +0 -3
  189. package/dist/tests/utils/db-seeding.js.map +1 -1
  190. package/dist/tests/utils/index.d.ts +0 -1
  191. package/dist/tests/utils/index.d.ts.map +1 -1
  192. package/dist/tests/utils/index.js +0 -2
  193. package/dist/tests/utils/index.js.map +1 -1
  194. package/dist/tests/utils/test-helpers.d.ts +6 -76
  195. package/dist/tests/utils/test-helpers.d.ts.map +1 -1
  196. package/dist/tests/utils/test-helpers.js +56 -162
  197. package/dist/tests/utils/test-helpers.js.map +1 -1
  198. package/dist/tests/utils/test-lifecycle.d.ts +2 -28
  199. package/dist/tests/utils/test-lifecycle.d.ts.map +1 -1
  200. package/dist/tests/utils/test-lifecycle.js +2 -31
  201. package/dist/tests/utils/test-lifecycle.js.map +1 -1
  202. package/dist/tools/context/index.d.ts +0 -1
  203. package/dist/tools/context/index.d.ts.map +1 -1
  204. package/dist/tools/context/index.js +0 -2
  205. package/dist/tools/context/index.js.map +1 -1
  206. package/dist/tools/context/types.d.ts +1 -1
  207. package/dist/tools/context/types.d.ts.map +1 -1
  208. package/dist/types/actions.d.ts +6 -29
  209. package/dist/types/actions.d.ts.map +1 -1
  210. package/dist/types/actions.js +1 -2
  211. package/dist/types/actions.js.map +1 -1
  212. package/dist/types/constraint/params.d.ts +24 -1
  213. package/dist/types/constraint/params.d.ts.map +1 -1
  214. package/dist/types/constraint/params.js +3 -0
  215. package/dist/types/constraint/params.js.map +1 -1
  216. package/dist/types/constraint/responses.d.ts +18 -1
  217. package/dist/types/constraint/responses.d.ts.map +1 -1
  218. package/dist/types/constraint/responses.js +3 -0
  219. package/dist/types/constraint/responses.js.map +1 -1
  220. package/dist/types/decision/batch.d.ts +2 -5
  221. package/dist/types/decision/batch.d.ts.map +1 -1
  222. package/dist/types/decision/batch.js +3 -3
  223. package/dist/types/decision/batch.js.map +1 -1
  224. package/dist/types/decision/params.d.ts +7 -4
  225. package/dist/types/decision/params.d.ts.map +1 -1
  226. package/dist/types/decision/responses.d.ts +49 -35
  227. package/dist/types/decision/responses.d.ts.map +1 -1
  228. package/dist/types/decision/templates.d.ts +2 -18
  229. package/dist/types/decision/templates.d.ts.map +1 -1
  230. package/dist/types/decision/templates.js +3 -3
  231. package/dist/types/decision/templates.js.map +1 -1
  232. package/dist/types/enums.d.ts +11 -13
  233. package/dist/types/enums.d.ts.map +1 -1
  234. package/dist/types/enums.js +5 -13
  235. package/dist/types/enums.js.map +1 -1
  236. package/dist/types/import-export.d.ts +7 -30
  237. package/dist/types/import-export.d.ts.map +1 -1
  238. package/dist/types/import-export.js +1 -2
  239. package/dist/types/import-export.js.map +1 -1
  240. package/dist/types/index.d.ts +18 -22
  241. package/dist/types/index.d.ts.map +1 -1
  242. package/dist/types/index.js +4 -32
  243. package/dist/types/index.js.map +1 -1
  244. package/dist/types/master-entities.d.ts +1 -10
  245. package/dist/types/master-entities.d.ts.map +1 -1
  246. package/dist/types/master-entities.js +1 -2
  247. package/dist/types/master-entities.js.map +1 -1
  248. package/dist/types/transaction-entities.d.ts +2 -21
  249. package/dist/types/transaction-entities.d.ts.map +1 -1
  250. package/dist/types/transaction-entities.js +1 -1
  251. package/dist/types/validation.d.ts +1 -16
  252. package/dist/types/validation.d.ts.map +1 -1
  253. package/dist/types/validation.js +1 -2
  254. package/dist/types/validation.js.map +1 -1
  255. package/dist/types/view-entities.d.ts +3 -12
  256. package/dist/types/view-entities.d.ts.map +1 -1
  257. package/dist/types/view-entities.js +1 -1
  258. package/dist/types.d.ts +4 -718
  259. package/dist/types.d.ts.map +1 -1
  260. package/dist/types.js +5 -39
  261. package/dist/types.js.map +1 -1
  262. package/dist/utils/parameter-validator.d.ts +2 -2
  263. package/dist/utils/parameter-validator.d.ts.map +1 -1
  264. package/dist/utils/parameter-validator.js.map +1 -1
  265. package/dist/utils/path-normalize.d.ts +23 -0
  266. package/dist/utils/path-normalize.d.ts.map +1 -0
  267. package/dist/utils/path-normalize.js +38 -0
  268. package/dist/utils/path-normalize.js.map +1 -0
  269. package/dist/utils/project-root.d.ts +6 -3
  270. package/dist/utils/project-root.d.ts.map +1 -1
  271. package/dist/utils/project-root.js +11 -3
  272. package/dist/utils/project-root.js.map +1 -1
  273. package/dist/watcher/base-watcher.d.ts +0 -4
  274. package/dist/watcher/base-watcher.d.ts.map +1 -1
  275. package/dist/watcher/base-watcher.js +11 -22
  276. package/dist/watcher/base-watcher.js.map +1 -1
  277. package/docs/CLI_USAGE.md +27 -107
  278. package/docs/CONFIGURATION.md +10 -5
  279. package/docs/DATABASE_AUTH.md +3 -3
  280. package/docs/HOOKS_GUIDE.md +40 -6
  281. package/docs/MIGRATION_TO_SAAS.md +2 -2
  282. package/docs/SHARED_DATABASE.md +108 -0
  283. package/package.json +4 -3
  284. package/dist/adapters/auth/auth-types.d.ts +0 -30
  285. package/dist/adapters/auth/auth-types.d.ts.map +0 -1
  286. package/dist/adapters/auth/auth-types.js +0 -30
  287. package/dist/adapters/auth/auth-types.js.map +0 -1
  288. package/dist/cli/db-dump.d.ts +0 -36
  289. package/dist/cli/db-dump.d.ts.map +0 -1
  290. package/dist/cli/db-dump.js +0 -384
  291. package/dist/cli/db-dump.js.map +0 -1
  292. package/dist/database/config/config-ops.d.ts +0 -42
  293. package/dist/database/config/config-ops.d.ts.map +0 -1
  294. package/dist/database/config/config-ops.js +0 -102
  295. package/dist/database/config/config-ops.js.map +0 -1
  296. package/dist/formatters/adr-formatter.d.ts +0 -22
  297. package/dist/formatters/adr-formatter.d.ts.map +0 -1
  298. package/dist/formatters/adr-formatter.js +0 -127
  299. package/dist/formatters/adr-formatter.js.map +0 -1
  300. package/dist/formatters/confluence-formatter.d.ts +0 -26
  301. package/dist/formatters/confluence-formatter.d.ts.map +0 -1
  302. package/dist/formatters/confluence-formatter.js +0 -129
  303. package/dist/formatters/confluence-formatter.js.map +0 -1
  304. package/dist/formatters/index.d.ts +0 -34
  305. package/dist/formatters/index.d.ts.map +0 -1
  306. package/dist/formatters/index.js +0 -57
  307. package/dist/formatters/index.js.map +0 -1
  308. package/dist/formatters/markdown-formatter.d.ts +0 -16
  309. package/dist/formatters/markdown-formatter.d.ts.map +0 -1
  310. package/dist/formatters/markdown-formatter.js +0 -110
  311. package/dist/formatters/markdown-formatter.js.map +0 -1
  312. package/dist/formatters/notion-formatter.d.ts +0 -29
  313. package/dist/formatters/notion-formatter.d.ts.map +0 -1
  314. package/dist/formatters/notion-formatter.js +0 -177
  315. package/dist/formatters/notion-formatter.js.map +0 -1
  316. package/dist/formatters/types.d.ts +0 -31
  317. package/dist/formatters/types.d.ts.map +0 -1
  318. package/dist/formatters/types.js +0 -6
  319. package/dist/formatters/types.js.map +0 -1
  320. package/dist/tests/database/sql-dump/converters.test.d.ts +0 -7
  321. package/dist/tests/database/sql-dump/converters.test.d.ts.map +0 -1
  322. package/dist/tests/database/sql-dump/converters.test.js +0 -314
  323. package/dist/tests/database/sql-dump/converters.test.js.map +0 -1
  324. package/dist/tests/database/sql-dump/default-conversions.test.d.ts +0 -8
  325. package/dist/tests/database/sql-dump/default-conversions.test.d.ts.map +0 -1
  326. package/dist/tests/database/sql-dump/default-conversions.test.js +0 -141
  327. package/dist/tests/database/sql-dump/default-conversions.test.js.map +0 -1
  328. package/dist/tests/database/sql-dump/table-ordering.test.d.ts +0 -27
  329. package/dist/tests/database/sql-dump/table-ordering.test.d.ts.map +0 -1
  330. package/dist/tests/database/sql-dump/table-ordering.test.js +0 -284
  331. package/dist/tests/database/sql-dump/table-ordering.test.js.map +0 -1
  332. package/dist/tests/database/sql-dump/type-conversion.test.d.ts +0 -8
  333. package/dist/tests/database/sql-dump/type-conversion.test.d.ts.map +0 -1
  334. package/dist/tests/database/sql-dump/type-conversion.test.js +0 -361
  335. package/dist/tests/database/sql-dump/type-conversion.test.js.map +0 -1
  336. package/dist/tests/docker/cross-database.test.d.ts +0 -21
  337. package/dist/tests/docker/cross-database.test.d.ts.map +0 -1
  338. package/dist/tests/docker/cross-database.test.js +0 -308
  339. package/dist/tests/docker/cross-database.test.js.map +0 -1
  340. package/dist/tests/docker/dump-import.test.d.ts +0 -15
  341. package/dist/tests/docker/dump-import.test.d.ts.map +0 -1
  342. package/dist/tests/docker/dump-import.test.js +0 -424
  343. package/dist/tests/docker/dump-import.test.js.map +0 -1
  344. package/dist/tests/docker/fk-constraints.test.d.ts +0 -13
  345. package/dist/tests/docker/fk-constraints.test.d.ts.map +0 -1
  346. package/dist/tests/docker/fk-constraints.test.js +0 -381
  347. package/dist/tests/docker/fk-constraints.test.js.map +0 -1
  348. package/dist/tests/docker/indexes.test.d.ts +0 -12
  349. package/dist/tests/docker/indexes.test.d.ts.map +0 -1
  350. package/dist/tests/docker/indexes.test.js +0 -250
  351. package/dist/tests/docker/indexes.test.js.map +0 -1
  352. package/dist/tests/docker/integration.test.d.ts +0 -16
  353. package/dist/tests/docker/integration.test.d.ts.map +0 -1
  354. package/dist/tests/docker/integration.test.js +0 -323
  355. package/dist/tests/docker/integration.test.js.map +0 -1
  356. package/dist/tests/docker/multi-project-migration.test.d.ts +0 -17
  357. package/dist/tests/docker/multi-project-migration.test.d.ts.map +0 -1
  358. package/dist/tests/docker/multi-project-migration.test.js +0 -394
  359. package/dist/tests/docker/multi-project-migration.test.js.map +0 -1
  360. package/dist/tests/docker/schema-migration.test.d.ts +0 -8
  361. package/dist/tests/docker/schema-migration.test.d.ts.map +0 -1
  362. package/dist/tests/docker/schema-migration.test.js +0 -98
  363. package/dist/tests/docker/schema-migration.test.js.map +0 -1
  364. package/dist/tests/integration/e2e-workflow1-debug.test.d.ts +0 -5
  365. package/dist/tests/integration/e2e-workflow1-debug.test.d.ts.map +0 -1
  366. package/dist/tests/integration/e2e-workflow1-debug.test.js +0 -85
  367. package/dist/tests/integration/e2e-workflow1-debug.test.js.map +0 -1
  368. package/dist/tests/integration/suggest-simple.test.d.ts +0 -5
  369. package/dist/tests/integration/suggest-simple.test.d.ts.map +0 -1
  370. package/dist/tests/integration/suggest-simple.test.js +0 -90
  371. package/dist/tests/integration/suggest-simple.test.js.map +0 -1
  372. package/dist/tests/migrations/test-all-versions-real.d.ts +0 -8
  373. package/dist/tests/migrations/test-all-versions-real.d.ts.map +0 -1
  374. package/dist/tests/migrations/test-all-versions-real.js +0 -236
  375. package/dist/tests/migrations/test-all-versions-real.js.map +0 -1
  376. package/dist/tests/migrations/test-all-versions.d.ts +0 -14
  377. package/dist/tests/migrations/test-all-versions.d.ts.map +0 -1
  378. package/dist/tests/migrations/test-all-versions.js +0 -519
  379. package/dist/tests/migrations/test-all-versions.js.map +0 -1
  380. package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts +0 -7
  381. package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts.map +0 -1
  382. package/dist/tests/migrations/v4/v4-fresh-install.test.js +0 -168
  383. package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +0 -1
  384. package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts +0 -13
  385. package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts.map +0 -1
  386. package/dist/tests/migrations/v4/v4-migrate-data.test.js +0 -264
  387. package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +0 -1
  388. package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts +0 -2
  389. package/dist/tests/unit/utils/case-insensitive-validator.test.d.ts.map +0 -1
  390. package/dist/tests/unit/utils/case-insensitive-validator.test.js +0 -97
  391. package/dist/tests/unit/utils/case-insensitive-validator.test.js.map +0 -1
  392. package/dist/tests/utils/json-export-import.test.d.ts.map +0 -1
  393. package/dist/tests/utils/json-export-import.test.js.map +0 -1
  394. package/dist/tests/utils/task-helpers.d.ts +0 -67
  395. package/dist/tests/utils/task-helpers.d.ts.map +0 -1
  396. package/dist/tests/utils/task-helpers.js +0 -134
  397. package/dist/tests/utils/task-helpers.js.map +0 -1
  398. package/dist/tools/context/actions/export.d.ts +0 -35
  399. package/dist/tools/context/actions/export.d.ts.map +0 -1
  400. package/dist/tools/context/actions/export.js +0 -93
  401. package/dist/tools/context/actions/export.js.map +0 -1
  402. package/dist/types/file/params.d.ts +0 -40
  403. package/dist/types/file/params.d.ts.map +0 -1
  404. package/dist/types/file/params.js +0 -6
  405. package/dist/types/file/params.js.map +0 -1
  406. package/dist/types/file/responses.d.ts +0 -2
  407. package/dist/types/file/responses.d.ts.map +0 -1
  408. package/dist/types/file/responses.js +0 -2
  409. package/dist/types/file/responses.js.map +0 -1
  410. package/dist/types/task/params.d.ts +0 -173
  411. package/dist/types/task/params.d.ts.map +0 -1
  412. package/dist/types/task/params.js +0 -8
  413. package/dist/types/task/params.js.map +0 -1
  414. package/dist/types/task/responses.d.ts +0 -334
  415. package/dist/types/task/responses.d.ts.map +0 -1
  416. package/dist/types/task/responses.js +0 -8
  417. package/dist/types/task/responses.js.map +0 -1
  418. package/dist/utils/sql-dump/core/dependency-sort.d.ts +0 -16
  419. package/dist/utils/sql-dump/core/dependency-sort.d.ts.map +0 -1
  420. package/dist/utils/sql-dump/core/dependency-sort.js +0 -105
  421. package/dist/utils/sql-dump/core/dependency-sort.js.map +0 -1
  422. package/dist/utils/sql-dump/core/generate-dump.d.ts +0 -13
  423. package/dist/utils/sql-dump/core/generate-dump.d.ts.map +0 -1
  424. package/dist/utils/sql-dump/core/generate-dump.js +0 -201
  425. package/dist/utils/sql-dump/core/generate-dump.js.map +0 -1
  426. package/dist/utils/sql-dump/core/index-export.d.ts +0 -10
  427. package/dist/utils/sql-dump/core/index-export.d.ts.map +0 -1
  428. package/dist/utils/sql-dump/core/index-export.js +0 -173
  429. package/dist/utils/sql-dump/core/index-export.js.map +0 -1
  430. package/dist/utils/sql-dump/core/sequence-reset.d.ts +0 -6
  431. package/dist/utils/sql-dump/core/sequence-reset.d.ts.map +0 -1
  432. package/dist/utils/sql-dump/core/sequence-reset.js +0 -28
  433. package/dist/utils/sql-dump/core/sequence-reset.js.map +0 -1
  434. package/dist/utils/sql-dump/core/table-export.d.ts +0 -2
  435. package/dist/utils/sql-dump/core/table-export.d.ts.map +0 -1
  436. package/dist/utils/sql-dump/core/table-export.js +0 -4
  437. package/dist/utils/sql-dump/core/table-export.js.map +0 -1
  438. package/dist/utils/sql-dump/core/view-export.d.ts +0 -2
  439. package/dist/utils/sql-dump/core/view-export.d.ts.map +0 -1
  440. package/dist/utils/sql-dump/core/view-export.js +0 -4
  441. package/dist/utils/sql-dump/core/view-export.js.map +0 -1
  442. package/dist/utils/sql-dump/formatters/bulk-insert.d.ts +0 -14
  443. package/dist/utils/sql-dump/formatters/bulk-insert.d.ts.map +0 -1
  444. package/dist/utils/sql-dump/formatters/bulk-insert.js +0 -177
  445. package/dist/utils/sql-dump/formatters/bulk-insert.js.map +0 -1
  446. package/dist/utils/sql-dump/formatters/identifiers.d.ts +0 -6
  447. package/dist/utils/sql-dump/formatters/identifiers.d.ts.map +0 -1
  448. package/dist/utils/sql-dump/formatters/identifiers.js +0 -16
  449. package/dist/utils/sql-dump/formatters/identifiers.js.map +0 -1
  450. package/dist/utils/sql-dump/formatters/value-formatter.d.ts +0 -14
  451. package/dist/utils/sql-dump/formatters/value-formatter.d.ts.map +0 -1
  452. package/dist/utils/sql-dump/formatters/value-formatter.js +0 -281
  453. package/dist/utils/sql-dump/formatters/value-formatter.js.map +0 -1
  454. package/dist/utils/sql-dump/generators/controls.d.ts +0 -10
  455. package/dist/utils/sql-dump/generators/controls.d.ts.map +0 -1
  456. package/dist/utils/sql-dump/generators/controls.js +0 -36
  457. package/dist/utils/sql-dump/generators/controls.js.map +0 -1
  458. package/dist/utils/sql-dump/generators/headers.d.ts +0 -6
  459. package/dist/utils/sql-dump/generators/headers.d.ts.map +0 -1
  460. package/dist/utils/sql-dump/generators/headers.js +0 -19
  461. package/dist/utils/sql-dump/generators/headers.js.map +0 -1
  462. package/dist/utils/sql-dump/index.d.ts +0 -14
  463. package/dist/utils/sql-dump/index.d.ts.map +0 -1
  464. package/dist/utils/sql-dump/index.js +0 -16
  465. package/dist/utils/sql-dump/index.js.map +0 -1
  466. package/dist/utils/sql-dump/schema/indexes.d.ts +0 -20
  467. package/dist/utils/sql-dump/schema/indexes.d.ts.map +0 -1
  468. package/dist/utils/sql-dump/schema/indexes.js +0 -108
  469. package/dist/utils/sql-dump/schema/indexes.js.map +0 -1
  470. package/dist/utils/sql-dump/schema/primary-keys.d.ts +0 -6
  471. package/dist/utils/sql-dump/schema/primary-keys.d.ts.map +0 -1
  472. package/dist/utils/sql-dump/schema/primary-keys.js +0 -41
  473. package/dist/utils/sql-dump/schema/primary-keys.js.map +0 -1
  474. package/dist/utils/sql-dump/schema/tables.d.ts +0 -15
  475. package/dist/utils/sql-dump/schema/tables.d.ts.map +0 -1
  476. package/dist/utils/sql-dump/schema/tables.js +0 -518
  477. package/dist/utils/sql-dump/schema/tables.js.map +0 -1
  478. package/dist/utils/sql-dump/schema/views.d.ts +0 -11
  479. package/dist/utils/sql-dump/schema/views.d.ts.map +0 -1
  480. package/dist/utils/sql-dump/schema/views.js +0 -116
  481. package/dist/utils/sql-dump/schema/views.js.map +0 -1
  482. package/dist/utils/sql-dump/types.d.ts +0 -10
  483. package/dist/utils/sql-dump/types.d.ts.map +0 -1
  484. package/dist/utils/sql-dump/types.js +0 -3
  485. package/dist/utils/sql-dump/types.js.map +0 -1
  486. package/dist/utils/sql-dump-converters.d.ts +0 -188
  487. package/dist/utils/sql-dump-converters.d.ts.map +0 -1
  488. package/dist/utils/sql-dump-converters.js +0 -315
  489. package/dist/utils/sql-dump-converters.js.map +0 -1
  490. package/dist/watcher/gitignore-parser.d.ts +0 -70
  491. package/dist/watcher/gitignore-parser.d.ts.map +0 -1
  492. package/dist/watcher/gitignore-parser.js +0 -195
  493. package/dist/watcher/gitignore-parser.js.map +0 -1
  494. package/dist/watcher/index.d.ts +0 -9
  495. package/dist/watcher/index.d.ts.map +0 -1
  496. package/dist/watcher/index.js +0 -8
  497. package/dist/watcher/index.js.map +0 -1
  498. /package/dist/tests/{utils → integration}/json-export-import.test.d.ts +0 -0
  499. /package/dist/tests/{utils → integration}/json-export-import.test.js +0 -0
@@ -1,116 +0,0 @@
1
- // schema/views.ts - View detection and CREATE VIEW statement generation
2
- import { convertIdentifierQuotes, convertTimestampFunctions, } from '../../sql-dump-converters.js';
3
- /**
4
- * Get all view names from the database
5
- */
6
- export async function getAllViews(knex) {
7
- const client = knex.client.config.client;
8
- if (client === 'better-sqlite3' || client === 'sqlite3') {
9
- const result = await knex.raw(`
10
- SELECT name FROM sqlite_master
11
- WHERE type='view'
12
- ORDER BY name
13
- `);
14
- return result.map((row) => row.name);
15
- }
16
- else if (client === 'mysql' || client === 'mysql2') {
17
- const result = await knex.raw(`
18
- SELECT TABLE_NAME as name
19
- FROM information_schema.VIEWS
20
- WHERE TABLE_SCHEMA = DATABASE()
21
- ORDER BY TABLE_NAME
22
- `);
23
- return result[0].map((row) => row.name);
24
- }
25
- else if (client === 'pg') {
26
- const result = await knex.raw(`
27
- SELECT viewname as name
28
- FROM pg_views
29
- WHERE schemaname = 'public'
30
- ORDER BY viewname
31
- `);
32
- return result.rows.map((row) => row.name);
33
- }
34
- throw new Error(`Unsupported database client: ${client}`);
35
- }
36
- /**
37
- * Get CREATE VIEW statement for a view
38
- */
39
- export async function getCreateViewStatement(knex, viewName, targetFormat) {
40
- const client = knex.client.config.client;
41
- if (client === 'better-sqlite3' || client === 'sqlite3') {
42
- // SQLite: Get from sqlite_master
43
- const result = await knex.raw(`
44
- SELECT sql FROM sqlite_master
45
- WHERE type='view' AND name=?
46
- `, [viewName]);
47
- if (result.length === 0 || !result[0].sql) {
48
- throw new Error(`View ${viewName} not found`);
49
- }
50
- let createSql = result[0].sql;
51
- // Convert SQLite syntax to target format if needed
52
- if (targetFormat === 'mysql') {
53
- // Convert to MySQL syntax using shared converters
54
- createSql = convertIdentifierQuotes(createSql, 'mysql');
55
- createSql = convertTimestampFunctions(createSql, 'mysql');
56
- // Fix type mismatch in COALESCE with numeric values: dn.value → CAST(dn.value AS CHAR)
57
- // MySQL doesn't allow mixing TEXT and DOUBLE PRECISION in COALESCE
58
- createSql = createSql.replace(/COALESCE\s*\(\s*NULLIF\s*\(\s*d\.value\s*,\s*''\s*\)\s*,\s*dn\.value\s*\)/gi, "COALESCE(NULLIF(d.value, ''), CAST(dn.value AS CHAR))");
59
- }
60
- else if (targetFormat === 'postgresql') {
61
- // Convert to PostgreSQL syntax using shared converters
62
- createSql = convertIdentifierQuotes(createSql, 'postgresql');
63
- createSql = convertTimestampFunctions(createSql, 'postgresql');
64
- // Convert GROUP_CONCAT(col, sep) → string_agg(col, sep)
65
- createSql = createSql.replace(/GROUP_CONCAT\s*\(/gi, 'string_agg(');
66
- // Cast integer comparisons to be type-safe: column = 1 → column::integer = 1
67
- // This works for both boolean columns (TRUE::integer = 1) and integer enum columns
68
- createSql = createSql.replace(/(\w+)\s*=\s*([01])\b/g, '$1::integer = $2');
69
- // Fix type mismatch in COALESCE with numeric values: dn.value → CAST(dn.value AS TEXT)
70
- // PostgreSQL strictly enforces type compatibility in COALESCE
71
- createSql = createSql.replace(/COALESCE\s*\(\s*NULLIF\s*\(\s*d\.value\s*,\s*''\s*\)\s*,\s*dn\.value\s*\)/gi, "COALESCE(NULLIF(d.value, ''), CAST(dn.value AS TEXT))");
72
- }
73
- return createSql + ';';
74
- }
75
- else if (client === 'mysql' || client === 'mysql2') {
76
- // MySQL: Use SHOW CREATE VIEW
77
- const result = await knex.raw(`SHOW CREATE VIEW ??`, [viewName]);
78
- let createSql = result[0][0]['Create View'];
79
- if (targetFormat === 'sqlite') {
80
- // Convert MySQL to SQLite using shared converters
81
- createSql = convertIdentifierQuotes(createSql, 'sqlite');
82
- createSql = convertTimestampFunctions(createSql, 'sqlite');
83
- return createSql + ';';
84
- }
85
- else if (targetFormat === 'postgresql') {
86
- // Convert MySQL to PostgreSQL using shared converters
87
- createSql = convertIdentifierQuotes(createSql, 'postgresql');
88
- createSql = convertTimestampFunctions(createSql, 'postgresql');
89
- return createSql + ';';
90
- }
91
- return createSql + ';';
92
- }
93
- else if (client === 'pg') {
94
- // PostgreSQL: Get from pg_views
95
- const result = await knex.raw(`
96
- SELECT definition
97
- FROM pg_views
98
- WHERE schemaname = 'public' AND viewname = ?
99
- `, [viewName]);
100
- if (result.rows.length === 0) {
101
- throw new Error(`View ${viewName} not found`);
102
- }
103
- let createSql = `CREATE VIEW "${viewName}" AS ${result.rows[0].definition}`;
104
- if (targetFormat === 'mysql') {
105
- createSql = convertIdentifierQuotes(createSql, 'mysql');
106
- return createSql + ';';
107
- }
108
- else if (targetFormat === 'sqlite') {
109
- createSql = convertTimestampFunctions(createSql, 'sqlite');
110
- return createSql + ';';
111
- }
112
- return createSql + ';';
113
- }
114
- throw new Error(`Unsupported database client: ${client}`);
115
- }
116
- //# sourceMappingURL=views.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../../src/utils/sql-dump/schema/views.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { DatabaseFormat } from '../sql-dump-converters.js';
2
- export type { DatabaseFormat };
3
- /**
4
- * Conflict resolution mode for INSERT statements
5
- * - 'error': Standard INSERT, fails on duplicate
6
- * - 'ignore': INSERT IGNORE / INSERT OR IGNORE / ON CONFLICT DO NOTHING
7
- * - 'replace': ON DUPLICATE KEY UPDATE / ON CONFLICT DO UPDATE
8
- */
9
- export type ConflictMode = 'error' | 'ignore' | 'replace';
10
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/sql-dump/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC"}
@@ -1,3 +0,0 @@
1
- // types.ts - Type definitions for sql-dump utilities
2
- export {};
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/sql-dump/types.ts"],"names":[],"mappings":"AAAA,qDAAqD"}
@@ -1,188 +0,0 @@
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
@@ -1 +0,0 @@
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,CA+B3F;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"}
@@ -1,315 +0,0 @@
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
- // Special handling for DEFAULT clauses - need CAST wrapper for type safety
127
- sql = sql.replace(/DEFAULT\s*\(\s*unixepoch\(\)\s*\)/gi, 'DEFAULT (CAST(UNIX_TIMESTAMP() AS SIGNED))');
128
- sql = sql.replace(/DEFAULT\s*\(\s*strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)\s*\)/gi, 'DEFAULT (CAST(UNIX_TIMESTAMP() AS SIGNED))');
129
- // Regular conversions (non-DEFAULT contexts)
130
- sql = sql.replace(/unixepoch\(\)/g, 'UNIX_TIMESTAMP()');
131
- sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'FROM_UNIXTIME($1)');
132
- // strftime('%s', 'now') → UNIX_TIMESTAMP()
133
- sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'UNIX_TIMESTAMP()');
134
- return sql;
135
- }
136
- else if (targetFormat === 'postgresql') {
137
- // SQLite/MySQL → PostgreSQL timestamp functions
138
- sql = sql.replace(/unixepoch\(\)/g, 'extract(epoch from now())::integer');
139
- sql = sql.replace(/datetime\(([^,)]+),\s*'unixepoch'\)/g, 'to_timestamp($1)');
140
- sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'extract(epoch from now())::integer');
141
- sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, 'to_timestamp($1)');
142
- // strftime('%s', 'now') → extract(epoch from now())::integer
143
- sql = sql.replace(/strftime\s*\(\s*['"]%s['"]\s*,\s*['"]now['"]\s*\)/gi, 'extract(epoch from now())::integer');
144
- return sql;
145
- }
146
- else if (targetFormat === 'sqlite') {
147
- // MySQL/PostgreSQL → SQLite timestamp functions
148
- sql = sql.replace(/UNIX_TIMESTAMP\(\)/g, 'unixepoch()');
149
- sql = sql.replace(/extract\(epoch from now\(\)\)::integer/g, 'unixepoch()');
150
- sql = sql.replace(/FROM_UNIXTIME\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
151
- sql = sql.replace(/to_timestamp\(([^)]+)\)/g, "datetime($1, 'unixepoch')");
152
- return sql;
153
- }
154
- return sql;
155
- }
156
- /**
157
- * Convert boolean default values between databases
158
- *
159
- * Boolean default variations:
160
- * - SQLite: 0/1 or '0'/'1' (stored as INTEGER or TEXT)
161
- * - MySQL: 0/1 or FALSE/TRUE (TINYINT or BOOLEAN)
162
- * - PostgreSQL: false/true or FALSE/TRUE (native BOOLEAN)
163
- *
164
- * @param sql - SQL statement
165
- * @param targetFormat - Target database format
166
- * @returns SQL with converted boolean defaults
167
- *
168
- * @example
169
- * // SQLite → PostgreSQL
170
- * convertBooleanDefaults("is_active BOOLEAN default '0'", 'postgresql')
171
- * // Returns: "is_active BOOLEAN default false"
172
- *
173
- * @example
174
- * // SQLite → PostgreSQL (numeric)
175
- * convertBooleanDefaults("is_active BOOLEAN default 1", 'postgresql')
176
- * // Returns: "is_active BOOLEAN default true"
177
- */
178
- export function convertBooleanDefaults(sql, targetFormat) {
179
- if (targetFormat === 'postgresql') {
180
- // Convert string boolean defaults: '0' → false, '1' → true
181
- sql = sql.replace(/boolean\s+default\s+'0'/gi, 'boolean default false');
182
- sql = sql.replace(/boolean\s+default\s+'1'/gi, 'boolean default true');
183
- // Convert numeric boolean defaults: 0 → false, 1 → true
184
- sql = sql.replace(/boolean\s+default\s+0\b/gi, 'boolean default false');
185
- sql = sql.replace(/boolean\s+default\s+1\b/gi, 'boolean default true');
186
- return sql;
187
- }
188
- return sql;
189
- }
190
- /**
191
- * Convert data type keywords between databases
192
- *
193
- * Type conversions:
194
- * - SQLite TEXT → MySQL VARCHAR(255) (when used with DEFAULT or NOT NULL)
195
- * - SQLite TEXT PRIMARY KEY → MySQL VARCHAR(191) PRIMARY KEY (MariaDB 10.5 compatibility)
196
- * - SQLite TEXT UNIQUE → MySQL VARCHAR(191) UNIQUE (indexes require VARCHAR)
197
- * - SQLite TEXT NOT NULL → MySQL VARCHAR(255) NOT NULL (for FK columns)
198
- * - SQLite datetime → PostgreSQL TIMESTAMP
199
- * - MySQL TEXT → VARCHAR for compatibility
200
- *
201
- * MySQL/MariaDB limitations:
202
- * - TEXT columns cannot be used in PRIMARY KEY, UNIQUE, or indexes without prefix length
203
- * - TEXT columns cannot have DEFAULT values
204
- * - VARCHAR(191) is safe max for utf8mb4 with InnoDB index prefix limit (768 bytes ÷ 4 bytes/char)
205
- *
206
- * @param sql - SQL statement
207
- * @param targetFormat - Target database format
208
- * @returns SQL with converted data types
209
- *
210
- * @example
211
- * // SQLite → MySQL (TEXT with DEFAULT not allowed in MySQL)
212
- * convertDataTypes("name TEXT NOT NULL default 'anonymous'", 'mysql')
213
- * // Returns: "name VARCHAR(255) NOT NULL default 'anonymous'"
214
- *
215
- * @example
216
- * // SQLite → MySQL (TEXT PRIMARY KEY not allowed in MariaDB 10.5)
217
- * convertDataTypes("tool_name TEXT PRIMARY KEY", 'mysql')
218
- * // Returns: "tool_name VARCHAR(191) PRIMARY KEY"
219
- *
220
- * @example
221
- * // SQLite → MySQL (TEXT UNIQUE not allowed in MySQL)
222
- * convertDataTypes("category_name TEXT UNIQUE NOT NULL", 'mysql')
223
- * // Returns: "category_name VARCHAR(191) UNIQUE NOT NULL"
224
- *
225
- * @example
226
- * // SQLite → MySQL (TEXT NOT NULL for FK columns)
227
- * convertDataTypes("tool_name TEXT NOT NULL", 'mysql')
228
- * // Returns: "tool_name VARCHAR(255) NOT NULL"
229
- *
230
- * @example
231
- * // SQLite → PostgreSQL
232
- * convertDataTypes("created_at datetime", 'postgresql')
233
- * // Returns: "created_at TIMESTAMP"
234
- */
235
- export function convertDataTypes(sql, targetFormat) {
236
- if (targetFormat === 'mysql') {
237
- // MariaDB 10.5 and MySQL don't allow TEXT columns as PRIMARY KEY
238
- // Convert TEXT PRIMARY KEY to VARCHAR(191) PRIMARY KEY
239
- // 191 is the safe max for utf8mb4 with InnoDB index prefix limit (767 bytes / 4 bytes per char)
240
- sql = sql.replace(/\bTEXT(\s+PRIMARY\s+KEY)/gi, 'VARCHAR(191)$1');
241
- // MySQL doesn't allow TEXT columns in UNIQUE constraints
242
- // Convert TEXT UNIQUE to VARCHAR(191) UNIQUE
243
- sql = sql.replace(/\bTEXT(\s+UNIQUE)/gi, 'VARCHAR(191)$1');
244
- // MySQL doesn't allow TEXT columns in indexes (including FOREIGN KEY references)
245
- // Convert TEXT NOT NULL (commonly used in FK columns) to VARCHAR(255) NOT NULL
246
- // This must come BEFORE the default pattern to avoid conflicts
247
- sql = sql.replace(/\bTEXT(\s+NOT\s+NULL)(?!\s+default)/gi, 'VARCHAR(255)$1');
248
- // MySQL doesn't allow DEFAULT values on TEXT columns
249
- // Convert TEXT with defaults to VARCHAR(255)
250
- // Pattern: TEXT followed by optional NOT NULL, then default
251
- sql = sql.replace(/\bTEXT(\s+(?:NOT\s+NULL\s+)?default\s+[^,\)]+)/gi, 'VARCHAR(255)$1');
252
- return sql;
253
- }
254
- else if (targetFormat === 'postgresql') {
255
- // Convert datetime → TIMESTAMP
256
- sql = sql.replace(/\bdatetime\b/gi, 'TIMESTAMP');
257
- return sql;
258
- }
259
- return sql;
260
- }
261
- /**
262
- * Remove CHECK constraints (not well-supported in some databases)
263
- *
264
- * CHECK constraints with nested parentheses (e.g., `col` IN ('a', 'b'))
265
- * are not consistently supported across all databases, especially MariaDB 10.5.
266
- *
267
- * Pattern matches: CHECK (...) including nested parentheses
268
- * Example: check (`status` in ('active', 'inactive'))
269
- *
270
- * @param sql - SQL statement
271
- * @returns SQL with CHECK constraints removed
272
- *
273
- * @example
274
- * removeCheckConstraints("CREATE TABLE t (status TEXT check (status in ('a', 'b')))")
275
- * // Returns: "CREATE TABLE t (status TEXT )"
276
- *
277
- * @example
278
- * // Complex nested parentheses
279
- * removeCheckConstraints("id INT check (id > 0), name TEXT check (length(name) > 0)")
280
- * // Returns: "id INT , name TEXT "
281
- */
282
- export function removeCheckConstraints(sql) {
283
- // Pattern: \s+check\s*\( matches " check ("
284
- // [^()]* matches non-parenthesis characters
285
- // (?:\([^()]*\)[^()]*)* handles one level of nested parentheses
286
- // Example: check (col in ('a', 'b')) where ('a', 'b') are nested parens
287
- return sql.replace(/\s+check\s*\([^()]*(?:\([^()]*\)[^()]*)*\)/gi, '');
288
- }
289
- /**
290
- * Remove SQLite-specific DEFAULT functions (strftime, etc.)
291
- *
292
- * SQLite supports complex DEFAULT expressions using functions like strftime(),
293
- * which are not portable to MySQL/PostgreSQL. These are replaced with simple defaults.
294
- *
295
- * @param sql - SQL statement
296
- * @returns SQL with SQLite DEFAULT functions replaced with 'default 0'
297
- *
298
- * @example
299
- * // Parenthesized strftime
300
- * removeSqliteDefaultFunctions("created_at INTEGER default (strftime('%s', 'now'))")
301
- * // Returns: "created_at INTEGER default 0"
302
- *
303
- * @example
304
- * // Bare strftime
305
- * removeSqliteDefaultFunctions("created_at INTEGER default strftime('%s', 'now')")
306
- * // Returns: "created_at INTEGER default 0"
307
- */
308
- export function removeSqliteDefaultFunctions(sql) {
309
- // Pattern 1: default (strftime(...))
310
- sql = sql.replace(/default\s*\(strftime\([^)]+\)\)/gi, 'default 0');
311
- // Pattern 2: default strftime(...)
312
- sql = sql.replace(/default\s+strftime\([^)]+\)/gi, 'default 0');
313
- return sql;
314
- }
315
- //# sourceMappingURL=sql-dump-converters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sql-dump-converters.js","sourceRoot":"","sources":["../../src/utils/sql-dump-converters.ts"],"names":[],"mappings":"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"}