chkit 0.1.0-beta.21 → 0.1.0-beta.23

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 (236) hide show
  1. package/README.md +1 -1
  2. package/dist/bin/chkit.js +162 -102
  3. package/dist/bin/chkit.js.map +1 -1
  4. package/dist/bin/command-dispatch.d.ts +0 -5
  5. package/dist/bin/command-dispatch.d.ts.map +1 -1
  6. package/dist/bin/command-dispatch.js +1 -1
  7. package/dist/bin/command-dispatch.js.map +1 -1
  8. package/dist/bin/commands/drift.d.ts +2 -1
  9. package/dist/bin/commands/drift.d.ts.map +1 -1
  10. package/dist/bin/internal-plugins/skill-hint.d.ts +1 -6
  11. package/dist/bin/internal-plugins/skill-hint.d.ts.map +1 -1
  12. package/dist/bin/internal-plugins/skill-hint.js +1 -1
  13. package/dist/bin/internal-plugins/skill-hint.js.map +1 -1
  14. package/dist/bin/journal-store.d.ts +2 -6
  15. package/dist/bin/journal-store.d.ts.map +1 -1
  16. package/dist/bin/journal-store.js +1 -5
  17. package/dist/bin/journal-store.js.map +1 -1
  18. package/dist/bin/json-output.d.ts +2 -5
  19. package/dist/bin/json-output.d.ts.map +1 -1
  20. package/dist/bin/json-output.js +1 -1
  21. package/dist/bin/json-output.js.map +1 -1
  22. package/dist/bin/lib.d.ts +2 -5
  23. package/dist/bin/lib.d.ts.map +1 -1
  24. package/dist/bin/lib.js +2 -5
  25. package/dist/bin/lib.js.map +1 -1
  26. package/dist/bin/migration-store.d.ts +2 -2
  27. package/dist/bin/migration-store.d.ts.map +1 -1
  28. package/dist/bin/migration-store.js +1 -1
  29. package/dist/bin/migration-store.js.map +1 -1
  30. package/dist/bin/safety-markers.d.ts +1 -3
  31. package/dist/bin/safety-markers.d.ts.map +1 -1
  32. package/dist/bin/safety-markers.js +2 -2
  33. package/dist/bin/safety-markers.js.map +1 -1
  34. package/dist/bin/table-scope.d.ts +1 -2
  35. package/dist/bin/table-scope.d.ts.map +1 -1
  36. package/dist/bin/table-scope.js +1 -1
  37. package/dist/bin/table-scope.js.map +1 -1
  38. package/dist/commands/check/command.d.ts +3 -0
  39. package/dist/commands/check/command.d.ts.map +1 -0
  40. package/dist/commands/check/command.js +106 -0
  41. package/dist/commands/check/command.js.map +1 -0
  42. package/dist/commands/check/output.d.ts +35 -0
  43. package/dist/commands/check/output.d.ts.map +1 -0
  44. package/dist/commands/check/output.js +105 -0
  45. package/dist/commands/check/output.js.map +1 -0
  46. package/dist/commands/drift/command.d.ts +3 -0
  47. package/dist/commands/drift/command.d.ts.map +1 -0
  48. package/dist/commands/drift/command.js +128 -0
  49. package/dist/commands/drift/command.js.map +1 -0
  50. package/dist/commands/drift/compare.d.ts +66 -0
  51. package/dist/commands/drift/compare.d.ts.map +1 -0
  52. package/dist/commands/drift/compare.js +220 -0
  53. package/dist/commands/drift/compare.js.map +1 -0
  54. package/dist/commands/drift/diff.d.ts +8 -0
  55. package/dist/commands/drift/diff.d.ts.map +1 -0
  56. package/dist/commands/drift/diff.js +46 -0
  57. package/dist/commands/drift/diff.js.map +1 -0
  58. package/dist/commands/drift/payload.d.ts +24 -0
  59. package/dist/commands/drift/payload.d.ts.map +1 -0
  60. package/dist/commands/drift/payload.js +96 -0
  61. package/dist/commands/drift/payload.js.map +1 -0
  62. package/dist/commands/generate/command.d.ts +3 -0
  63. package/dist/commands/generate/command.d.ts.map +1 -0
  64. package/dist/commands/generate/command.js +163 -0
  65. package/dist/commands/generate/command.js.map +1 -0
  66. package/dist/commands/generate/output.d.ts +8 -0
  67. package/dist/commands/generate/output.d.ts.map +1 -0
  68. package/dist/commands/generate/output.js +59 -0
  69. package/dist/commands/generate/output.js.map +1 -0
  70. package/dist/commands/generate/plan-pipeline.d.ts +7 -0
  71. package/dist/commands/generate/plan-pipeline.d.ts.map +1 -0
  72. package/dist/commands/generate/plan-pipeline.js +143 -0
  73. package/dist/commands/generate/plan-pipeline.js.map +1 -0
  74. package/dist/commands/generate/rename-mappings.d.ts +29 -0
  75. package/dist/commands/generate/rename-mappings.d.ts.map +1 -0
  76. package/dist/commands/generate/rename-mappings.js +195 -0
  77. package/dist/commands/generate/rename-mappings.js.map +1 -0
  78. package/dist/commands/init.d.ts +2 -0
  79. package/dist/commands/init.d.ts.map +1 -0
  80. package/dist/commands/init.js +24 -0
  81. package/dist/commands/init.js.map +1 -0
  82. package/dist/commands/migrate/apply.d.ts +18 -0
  83. package/dist/commands/migrate/apply.d.ts.map +1 -0
  84. package/dist/commands/migrate/apply.js +48 -0
  85. package/dist/commands/migrate/apply.js.map +1 -0
  86. package/dist/commands/migrate/command.d.ts +3 -0
  87. package/dist/commands/migrate/command.d.ts.map +1 -0
  88. package/dist/commands/migrate/command.js +174 -0
  89. package/dist/commands/migrate/command.js.map +1 -0
  90. package/dist/commands/migrate/destructive.d.ts +7 -0
  91. package/dist/commands/migrate/destructive.d.ts.map +1 -0
  92. package/dist/commands/migrate/destructive.js +16 -0
  93. package/dist/commands/migrate/destructive.js.map +1 -0
  94. package/dist/commands/migrate/prompts.d.ts +6 -0
  95. package/dist/commands/migrate/prompts.d.ts.map +1 -0
  96. package/dist/commands/migrate/prompts.js +40 -0
  97. package/dist/commands/migrate/prompts.js.map +1 -0
  98. package/dist/commands/migrate/scope.d.ts +2 -0
  99. package/dist/commands/migrate/scope.d.ts.map +1 -0
  100. package/dist/commands/migrate/scope.js +25 -0
  101. package/dist/commands/migrate/scope.js.map +1 -0
  102. package/dist/commands/plugin.d.ts +3 -0
  103. package/dist/commands/plugin.d.ts.map +1 -0
  104. package/dist/commands/plugin.js +129 -0
  105. package/dist/commands/plugin.js.map +1 -0
  106. package/dist/commands/query.d.ts +8 -0
  107. package/dist/commands/query.d.ts.map +1 -0
  108. package/dist/commands/query.js +114 -0
  109. package/dist/commands/query.js.map +1 -0
  110. package/dist/commands/status.d.ts +3 -0
  111. package/dist/commands/status.d.ts.map +1 -0
  112. package/dist/commands/status.js +64 -0
  113. package/dist/commands/status.js.map +1 -0
  114. package/dist/drift.d.ts +7 -6
  115. package/dist/drift.d.ts.map +1 -1
  116. package/dist/internal-plugins/core/plugin.d.ts +2 -0
  117. package/dist/internal-plugins/core/plugin.d.ts.map +1 -0
  118. package/dist/internal-plugins/core/plugin.js +21 -0
  119. package/dist/internal-plugins/core/plugin.js.map +1 -0
  120. package/dist/internal-plugins/index.d.ts +3 -0
  121. package/dist/internal-plugins/index.d.ts.map +1 -0
  122. package/dist/internal-plugins/index.js +6 -0
  123. package/dist/internal-plugins/index.js.map +1 -0
  124. package/dist/internal-plugins/skill-hint/agent-detect.d.ts +20 -0
  125. package/dist/internal-plugins/skill-hint/agent-detect.d.ts.map +1 -0
  126. package/dist/internal-plugins/skill-hint/agent-detect.js +68 -0
  127. package/dist/internal-plugins/skill-hint/agent-detect.js.map +1 -0
  128. package/dist/internal-plugins/skill-hint/plugin.d.ts +16 -0
  129. package/dist/internal-plugins/skill-hint/plugin.d.ts.map +1 -0
  130. package/dist/internal-plugins/skill-hint/plugin.js +60 -0
  131. package/dist/internal-plugins/skill-hint/plugin.js.map +1 -0
  132. package/dist/internal-plugins/skill-hint/prompt.d.ts +5 -0
  133. package/dist/internal-plugins/skill-hint/prompt.d.ts.map +1 -0
  134. package/dist/internal-plugins/skill-hint/prompt.js +37 -0
  135. package/dist/internal-plugins/skill-hint/prompt.js.map +1 -0
  136. package/dist/internal-plugins/skill-hint/state.d.ts +7 -0
  137. package/dist/internal-plugins/skill-hint/state.d.ts.map +1 -0
  138. package/dist/internal-plugins/skill-hint/state.js +23 -0
  139. package/dist/internal-plugins/skill-hint/state.js.map +1 -0
  140. package/dist/plugins.d.ts +56 -32
  141. package/dist/plugins.d.ts.map +1 -1
  142. package/dist/plugins.js +0 -6
  143. package/dist/plugins.js.map +1 -1
  144. package/dist/runtime/command-dispatch.d.ts +18 -0
  145. package/dist/runtime/command-dispatch.d.ts.map +1 -0
  146. package/dist/runtime/command-dispatch.js +221 -0
  147. package/dist/runtime/command-dispatch.js.map +1 -0
  148. package/dist/runtime/command-registry.d.ts +31 -0
  149. package/dist/runtime/command-registry.d.ts.map +1 -0
  150. package/dist/runtime/command-registry.js +74 -0
  151. package/dist/runtime/command-registry.js.map +1 -0
  152. package/dist/runtime/config-merge.d.ts +4 -0
  153. package/dist/runtime/config-merge.d.ts.map +1 -0
  154. package/dist/runtime/config-merge.js +72 -0
  155. package/dist/runtime/config-merge.js.map +1 -0
  156. package/dist/runtime/config.d.ts +22 -0
  157. package/dist/runtime/config.d.ts.map +1 -0
  158. package/dist/runtime/config.js +126 -0
  159. package/dist/runtime/config.js.map +1 -0
  160. package/dist/runtime/debug.d.ts +3 -0
  161. package/dist/runtime/debug.d.ts.map +1 -0
  162. package/dist/runtime/debug.js +14 -0
  163. package/dist/runtime/debug.js.map +1 -0
  164. package/dist/runtime/extract-config-path.d.ts +2 -0
  165. package/dist/runtime/extract-config-path.d.ts.map +1 -0
  166. package/dist/runtime/extract-config-path.js +13 -0
  167. package/dist/runtime/extract-config-path.js.map +1 -0
  168. package/dist/runtime/global-flags.d.ts +16 -0
  169. package/dist/runtime/global-flags.d.ts.map +1 -0
  170. package/dist/runtime/global-flags.js +7 -0
  171. package/dist/runtime/global-flags.js.map +1 -0
  172. package/dist/runtime/help.d.ts +5 -0
  173. package/dist/runtime/help.d.ts.map +1 -0
  174. package/dist/runtime/help.js +84 -0
  175. package/dist/runtime/help.js.map +1 -0
  176. package/dist/runtime/journal-store.d.ts +10 -0
  177. package/dist/runtime/journal-store.d.ts.map +1 -0
  178. package/dist/runtime/journal-store.js +137 -0
  179. package/dist/runtime/journal-store.js.map +1 -0
  180. package/dist/runtime/json-output.d.ts +5 -0
  181. package/dist/runtime/json-output.d.ts.map +1 -0
  182. package/dist/runtime/json-output.js +21 -0
  183. package/dist/runtime/json-output.js.map +1 -0
  184. package/dist/runtime/logging.d.ts +3 -0
  185. package/dist/runtime/logging.d.ts.map +1 -0
  186. package/dist/runtime/logging.js +31 -0
  187. package/dist/runtime/logging.js.map +1 -0
  188. package/dist/runtime/migration-store.d.ts +22 -0
  189. package/dist/runtime/migration-store.d.ts.map +1 -0
  190. package/dist/runtime/migration-store.js +60 -0
  191. package/dist/runtime/migration-store.js.map +1 -0
  192. package/dist/runtime/plugin-runtime/errors.d.ts +3 -0
  193. package/dist/runtime/plugin-runtime/errors.d.ts.map +1 -0
  194. package/dist/runtime/plugin-runtime/errors.js +13 -0
  195. package/dist/runtime/plugin-runtime/errors.js.map +1 -0
  196. package/dist/runtime/plugin-runtime/executor-debug.d.ts +3 -0
  197. package/dist/runtime/plugin-runtime/executor-debug.d.ts.map +1 -0
  198. package/dist/runtime/plugin-runtime/executor-debug.js +65 -0
  199. package/dist/runtime/plugin-runtime/executor-debug.js.map +1 -0
  200. package/dist/runtime/plugin-runtime/hooks.d.ts +23 -0
  201. package/dist/runtime/plugin-runtime/hooks.d.ts.map +1 -0
  202. package/dist/runtime/plugin-runtime/hooks.js +148 -0
  203. package/dist/runtime/plugin-runtime/hooks.js.map +1 -0
  204. package/dist/runtime/plugin-runtime/index.d.ts +9 -0
  205. package/dist/runtime/plugin-runtime/index.d.ts.map +1 -0
  206. package/dist/runtime/plugin-runtime/index.js +178 -0
  207. package/dist/runtime/plugin-runtime/index.js.map +1 -0
  208. package/dist/runtime/plugin-runtime/loader.d.ts +11 -0
  209. package/dist/runtime/plugin-runtime/loader.d.ts.map +1 -0
  210. package/dist/runtime/plugin-runtime/loader.js +37 -0
  211. package/dist/runtime/plugin-runtime/loader.js.map +1 -0
  212. package/dist/runtime/plugin-runtime/null-executor.d.ts +3 -0
  213. package/dist/runtime/plugin-runtime/null-executor.d.ts.map +1 -0
  214. package/dist/runtime/plugin-runtime/null-executor.js +17 -0
  215. package/dist/runtime/plugin-runtime/null-executor.js.map +1 -0
  216. package/dist/runtime/safety-markers.d.ts +23 -0
  217. package/dist/runtime/safety-markers.d.ts.map +1 -0
  218. package/dist/runtime/safety-markers.js +85 -0
  219. package/dist/runtime/safety-markers.js.map +1 -0
  220. package/dist/runtime/schema-loader.d.ts +3 -0
  221. package/dist/runtime/schema-loader.d.ts.map +1 -0
  222. package/dist/runtime/schema-loader.js +11 -0
  223. package/dist/runtime/schema-loader.js.map +1 -0
  224. package/dist/runtime/table-scope.d.ts +33 -0
  225. package/dist/runtime/table-scope.d.ts.map +1 -0
  226. package/dist/runtime/table-scope.js +167 -0
  227. package/dist/runtime/table-scope.js.map +1 -0
  228. package/dist/runtime/user-config.d.ts +4 -0
  229. package/dist/runtime/user-config.d.ts.map +1 -0
  230. package/dist/runtime/user-config.js +11 -0
  231. package/dist/runtime/user-config.js.map +1 -0
  232. package/dist/runtime/version.d.ts +2 -0
  233. package/dist/runtime/version.d.ts.map +1 -0
  234. package/dist/runtime/version.js +5 -0
  235. package/dist/runtime/version.js.map +1 -0
  236. package/package.json +9 -7
@@ -0,0 +1,195 @@
1
+ export function parseRenameTableMappings(values) {
2
+ return values.map((mapping) => {
3
+ const [fromRaw, toRaw, ...rest] = mapping.split('=').map((part) => part.trim());
4
+ if (!fromRaw || !toRaw || rest.length > 0) {
5
+ throw new Error(`Invalid --rename-table mapping "${mapping}". Expected format: old_db.old_table=new_db.new_table`);
6
+ }
7
+ const from = parseQualifiedTable(fromRaw);
8
+ const to = parseQualifiedTable(toRaw);
9
+ return {
10
+ oldDatabase: from.database,
11
+ oldName: from.name,
12
+ newDatabase: to.database,
13
+ newName: to.name,
14
+ source: 'cli',
15
+ };
16
+ });
17
+ }
18
+ export function parseRenameColumnMappings(values) {
19
+ return values.map((mapping) => {
20
+ const [fromRaw, toRaw, ...rest] = mapping.split('=').map((part) => part.trim());
21
+ if (!fromRaw || !toRaw || rest.length > 0) {
22
+ throw new Error(`Invalid --rename-column mapping "${mapping}". Expected format: db.table.old_column=new_column`);
23
+ }
24
+ const parts = fromRaw.split('.').map((part) => part.trim());
25
+ if (parts.length !== 3 || parts.some((part) => part.length === 0)) {
26
+ throw new Error(`Invalid --rename-column source "${fromRaw}". Expected format: db.table.old_column`);
27
+ }
28
+ return {
29
+ database: parts[0],
30
+ table: parts[1],
31
+ from: parts[2],
32
+ to: toRaw,
33
+ source: 'cli',
34
+ };
35
+ });
36
+ }
37
+ export function collectSchemaRenameMappings(definitions) {
38
+ const tableMappings = [];
39
+ const columnMappings = [];
40
+ for (const definition of definitions) {
41
+ if (definition.kind !== 'table')
42
+ continue;
43
+ if (definition.renamedFrom) {
44
+ tableMappings.push({
45
+ oldDatabase: definition.renamedFrom.database ?? definition.database,
46
+ oldName: definition.renamedFrom.name,
47
+ newDatabase: definition.database,
48
+ newName: definition.name,
49
+ source: 'schema',
50
+ });
51
+ }
52
+ for (const column of definition.columns) {
53
+ if (!column.renamedFrom)
54
+ continue;
55
+ columnMappings.push({
56
+ database: definition.database,
57
+ table: definition.name,
58
+ from: column.renamedFrom,
59
+ to: column.name,
60
+ source: 'schema',
61
+ });
62
+ }
63
+ }
64
+ return { tableMappings, columnMappings };
65
+ }
66
+ export function mergeTableMappings(schemaMappings, cliMappings) {
67
+ const merged = [...schemaMappings];
68
+ for (const cliMapping of cliMappings) {
69
+ const cliOldKey = `${cliMapping.oldDatabase}.${cliMapping.oldName}`;
70
+ const cliNewKey = `${cliMapping.newDatabase}.${cliMapping.newName}`;
71
+ for (let i = merged.length - 1; i >= 0; i -= 1) {
72
+ const entry = merged[i];
73
+ if (!entry)
74
+ continue;
75
+ const oldKey = `${entry.oldDatabase}.${entry.oldName}`;
76
+ const newKey = `${entry.newDatabase}.${entry.newName}`;
77
+ if (oldKey === cliOldKey || newKey === cliNewKey) {
78
+ merged.splice(i, 1);
79
+ }
80
+ }
81
+ merged.push(cliMapping);
82
+ }
83
+ return merged;
84
+ }
85
+ export function mergeColumnMappings(schemaMappings, cliMappings) {
86
+ const merged = [...schemaMappings];
87
+ for (const cliMapping of cliMappings) {
88
+ const cliFromKey = `${cliMapping.database}.${cliMapping.table}.${cliMapping.from}`;
89
+ const cliToKey = `${cliMapping.database}.${cliMapping.table}.${cliMapping.to}`;
90
+ for (let i = merged.length - 1; i >= 0; i -= 1) {
91
+ const entry = merged[i];
92
+ if (!entry)
93
+ continue;
94
+ const fromKey = `${entry.database}.${entry.table}.${entry.from}`;
95
+ const toKey = `${entry.database}.${entry.table}.${entry.to}`;
96
+ if (fromKey === cliFromKey || toKey === cliToKey) {
97
+ merged.splice(i, 1);
98
+ }
99
+ }
100
+ merged.push(cliMapping);
101
+ }
102
+ return merged;
103
+ }
104
+ export function resolveActiveTableMappings(previousDefinitions, nextDefinitions, mappings) {
105
+ return mappings.filter((mapping) => tableExists(previousDefinitions, mapping.oldDatabase, mapping.oldName) &&
106
+ tableExists(nextDefinitions, mapping.newDatabase, mapping.newName));
107
+ }
108
+ export function assertNoConflictingTableMappings(mappings) {
109
+ const byOld = new Map();
110
+ const byNew = new Map();
111
+ for (const mapping of mappings) {
112
+ const oldKey = `${mapping.oldDatabase}.${mapping.oldName}`;
113
+ const newKey = `${mapping.newDatabase}.${mapping.newName}`;
114
+ const existingOld = byOld.get(oldKey);
115
+ if (existingOld && (existingOld.newDatabase !== mapping.newDatabase || existingOld.newName !== mapping.newName)) {
116
+ throw new Error(`Conflicting table rename source mapping for "${oldKey}".`);
117
+ }
118
+ byOld.set(oldKey, mapping);
119
+ const existingNew = byNew.get(newKey);
120
+ if (existingNew && (existingNew.oldDatabase !== mapping.oldDatabase || existingNew.oldName !== mapping.oldName)) {
121
+ throw new Error(`Conflicting table rename target mapping for "${newKey}".`);
122
+ }
123
+ byNew.set(newKey, mapping);
124
+ }
125
+ for (const key of byOld.keys()) {
126
+ if (byNew.has(key)) {
127
+ throw new Error(`Unsupported chained or cyclic table rename mapping involving "${key}". Use direct one-step mappings only.`);
128
+ }
129
+ }
130
+ }
131
+ export function assertNoConflictingColumnMappings(mappings) {
132
+ const byFrom = new Map();
133
+ const byTo = new Map();
134
+ for (const mapping of mappings) {
135
+ const fromKey = `${mapping.database}.${mapping.table}.${mapping.from}`;
136
+ const toKey = `${mapping.database}.${mapping.table}.${mapping.to}`;
137
+ const existingFrom = byFrom.get(fromKey);
138
+ if (existingFrom && existingFrom.to !== mapping.to) {
139
+ throw new Error(`Conflicting column rename source mapping for "${fromKey}".`);
140
+ }
141
+ byFrom.set(fromKey, mapping);
142
+ const existingTo = byTo.get(toKey);
143
+ if (existingTo && existingTo.from !== mapping.from) {
144
+ throw new Error(`Conflicting column rename target mapping for "${toKey}".`);
145
+ }
146
+ byTo.set(toKey, mapping);
147
+ }
148
+ }
149
+ export function assertCliTableMappingsResolvable(cliMappings, previousDefinitions, nextDefinitions) {
150
+ for (const mapping of cliMappings) {
151
+ const hasOld = tableExists(previousDefinitions, mapping.oldDatabase, mapping.oldName);
152
+ const hasNew = tableExists(nextDefinitions, mapping.newDatabase, mapping.newName);
153
+ if (hasOld && hasNew)
154
+ continue;
155
+ if (!hasOld && !hasNew) {
156
+ throw new Error(`--rename-table mapping "${mapping.oldDatabase}.${mapping.oldName}=${mapping.newDatabase}.${mapping.newName}" is invalid: source table is missing from previous snapshot and target table is missing from current schema.`);
157
+ }
158
+ if (!hasOld) {
159
+ throw new Error(`--rename-table mapping "${mapping.oldDatabase}.${mapping.oldName}=${mapping.newDatabase}.${mapping.newName}" is invalid: source table is missing from previous snapshot.`);
160
+ }
161
+ throw new Error(`--rename-table mapping "${mapping.oldDatabase}.${mapping.oldName}=${mapping.newDatabase}.${mapping.newName}" is invalid: target table is missing from current schema.`);
162
+ }
163
+ }
164
+ export function remapOldDefinitionsForTableRenames(previousDefinitions, mappings) {
165
+ if (mappings.length === 0)
166
+ return previousDefinitions;
167
+ const mappingByOld = new Map();
168
+ for (const mapping of mappings) {
169
+ mappingByOld.set(`${mapping.oldDatabase}.${mapping.oldName}`, mapping);
170
+ }
171
+ return previousDefinitions.map((definition) => {
172
+ if (definition.kind !== 'table')
173
+ return definition;
174
+ const mapping = mappingByOld.get(`${definition.database}.${definition.name}`);
175
+ if (!mapping)
176
+ return definition;
177
+ const remapped = {
178
+ ...definition,
179
+ database: mapping.newDatabase,
180
+ name: mapping.newName,
181
+ };
182
+ return remapped;
183
+ });
184
+ }
185
+ function parseQualifiedTable(input) {
186
+ const [database, name, ...rest] = input.split('.').map((part) => part.trim());
187
+ if (!database || !name || rest.length > 0) {
188
+ throw new Error(`Invalid table reference "${input}". Expected format: database.table`);
189
+ }
190
+ return { database, name };
191
+ }
192
+ function tableExists(definitions, database, name) {
193
+ return definitions.some((definition) => definition.kind === 'table' && definition.database === database && definition.name === name);
194
+ }
195
+ //# sourceMappingURL=rename-mappings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-mappings.js","sourceRoot":"","sources":["../../../src/commands/generate/rename-mappings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdInit(): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B7C"}
@@ -0,0 +1,24 @@
1
+ import { relative, resolve } from 'node:path';
2
+ import { DEFAULT_CONFIG_FILE, writeIfMissing } from '../runtime/config.js';
3
+ export async function cmdInit() {
4
+ const cwd = process.cwd();
5
+ const configPath = resolve(cwd, DEFAULT_CONFIG_FILE);
6
+ const schemaPath = resolve(cwd, 'src/db/schema/example.ts');
7
+ const wroteConfig = await writeIfMissing(configPath, `import { defineConfig } from '@chkit/core'\n\nexport default defineConfig({\n schema: './src/db/schema/**/*.ts',\n outDir: './chkit',\n migrationsDir: './chkit/migrations',\n metaDir: './chkit/meta',\n plugins: [\n // Register plugins inline. Example:\n // import { codegen } from '@chkit/plugin-codegen'\n // codegen({ emitZod: true }),\n ],\n clickhouse: {\n url: process.env.CLICKHOUSE_URL ?? 'http://localhost:8123',\n username: process.env.CLICKHOUSE_USER ?? 'default',\n password: process.env.CLICKHOUSE_PASSWORD ?? '',\n database: process.env.CLICKHOUSE_DB ?? 'default',\n },\n})\n`);
8
+ const wroteSchema = await writeIfMissing(schemaPath, `import { schema, table } from '@chkit/core'\n\nconst events = table({\n database: 'default',\n name: 'events',\n engine: 'MergeTree',\n columns: [\n { name: 'id', type: 'UInt64' },\n { name: 'source', type: 'String' },\n { name: 'ingested_at', type: 'DateTime64(3)', default: 'fn:now64(3)' },\n ],\n primaryKey: ['id'],\n orderBy: ['id'],\n partitionBy: 'toYYYYMM(ingested_at)',\n})\n\nexport default schema(events)\n`);
9
+ if (wroteConfig)
10
+ console.log(`Created ${relative(cwd, configPath)}`);
11
+ if (wroteSchema)
12
+ console.log(`Created ${relative(cwd, schemaPath)}`);
13
+ if (wroteConfig || wroteSchema) {
14
+ console.log('');
15
+ console.log('Next steps:');
16
+ console.log(' 1. Set CLICKHOUSE_URL (and CLICKHOUSE_USER / CLICKHOUSE_PASSWORD / CLICKHOUSE_DB if needed).');
17
+ console.log(' 2. Edit src/db/schema/example.ts to match your data.');
18
+ console.log(' 3. Run: bunx chkit generate --name init');
19
+ console.log(' 4. Run: bunx chkit migrate --apply');
20
+ console.log('');
21
+ console.log('Docs: https://chkit.obsessiondb.com/getting-started/');
22
+ }
23
+ }
24
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1E,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,UAAU,EACV,2mBAA2mB,CAC5mB,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,UAAU,EACV,obAAob,CACrb,CAAA;IAED,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IACpE,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IAEpE,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAA;QAC7G,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAA;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type ClickHouseExecutor } from '@chkit/clickhouse';
2
+ import type { ResolvedChxConfig } from '@chkit/core';
3
+ import type { ParsedFlags, PluginRuntime, TableScope } from '../../plugins.js';
4
+ import type { createJournalStore } from '../../runtime/journal-store.js';
5
+ import { type MigrationJournalEntry } from '../../runtime/migration-store.js';
6
+ type JournalStore = ReturnType<typeof createJournalStore>;
7
+ export declare function applyMigration(input: {
8
+ db: ClickHouseExecutor;
9
+ journalStore: JournalStore;
10
+ pluginRuntime: PluginRuntime;
11
+ config: ResolvedChxConfig;
12
+ tableScope: TableScope;
13
+ flags: ParsedFlags;
14
+ migrationsDir: string;
15
+ file: string;
16
+ }): Promise<MigrationJournalEntry>;
17
+ export {};
18
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAe,KAAK,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAM1F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEzD,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,EAAE,EAAE,kBAAkB,CAAA;IACtB,YAAY,EAAE,YAAY,CAAA;IAC1B,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,iBAAiB,CAAA;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,WAAW,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8CjC"}
@@ -0,0 +1,48 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { waitForDDLPropagation } from '@chkit/clickhouse';
4
+ import { debug } from '../../runtime/debug.js';
5
+ import { checksumSQL } from '../../runtime/migration-store.js';
6
+ import { extractExecutableStatements, extractMigrationOperationSummaries, } from '../../runtime/safety-markers.js';
7
+ export async function applyMigration(input) {
8
+ const { db, journalStore, pluginRuntime, config, tableScope, flags, migrationsDir, file } = input;
9
+ debug('migrate', `applying ${file}`);
10
+ const sql = await readFile(join(migrationsDir, file), 'utf8');
11
+ const parsedStatements = extractExecutableStatements(sql);
12
+ const operationSummaries = extractMigrationOperationSummaries(sql);
13
+ debug('migrate', `${file}: ${parsedStatements.length} statements, ${operationSummaries.length} operations`);
14
+ const statements = await pluginRuntime.runOnBeforeApply({
15
+ command: 'migrate',
16
+ config,
17
+ tableScope,
18
+ flags,
19
+ migration: file,
20
+ sql,
21
+ statements: parsedStatements,
22
+ });
23
+ for (let i = 0; i < statements.length; i++) {
24
+ const statement = statements[i];
25
+ await db.command(statement);
26
+ const operation = operationSummaries[i];
27
+ if (operation) {
28
+ await waitForDDLPropagation(db, operation.type, operation.key);
29
+ }
30
+ }
31
+ const entry = {
32
+ name: file,
33
+ appliedAt: new Date().toISOString().replace('Z', ''),
34
+ checksum: checksumSQL(sql),
35
+ };
36
+ await journalStore.appendEntry(entry);
37
+ await pluginRuntime.runOnAfterApply({
38
+ command: 'migrate',
39
+ config,
40
+ tableScope,
41
+ flags,
42
+ migration: file,
43
+ statements,
44
+ appliedAt: entry.appliedAt,
45
+ });
46
+ return entry;
47
+ }
48
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/migrate/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,qBAAqB,EAA2B,MAAM,mBAAmB,CAAA;AAIlF,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,EAAE,WAAW,EAA8B,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,iCAAiC,CAAA;AAIxC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KASpC;IACC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAEjG,KAAK,CAAC,SAAS,EAAE,YAAY,IAAI,EAAE,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IAC7D,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAA;IACzD,MAAM,kBAAkB,GAAG,kCAAkC,CAAC,GAAG,CAAC,CAAA;IAClE,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,gBAAgB,CAAC,MAAM,gBAAgB,kBAAkB,CAAC,MAAM,aAAa,CAAC,CAAA;IAE3G,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC;QACtD,OAAO,EAAE,SAAS;QAClB,MAAM;QACN,UAAU;QACV,KAAK;QACL,SAAS,EAAE,IAAI;QACf,GAAG;QACH,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAA;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAW,CAAA;QACzC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,qBAAqB,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA0B;QACnC,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QACpD,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC;KAC3B,CAAA;IACD,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAErC,MAAM,aAAa,CAAC,eAAe,CAAC;QAClC,OAAO,EAAE,SAAS;QAClB,MAAM;QACN,UAAU;QACV,KAAK;QACL,SAAS,EAAE,IAAI;QACf,UAAU;QACV,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ChxPluginCommand } from '../../plugins.js';
2
+ export declare const migrateCommand: ChxPluginCommand;
3
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAiCjF,eAAO,MAAM,cAAc,EAAE,gBAK5B,CAAA"}
@@ -0,0 +1,174 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import { defineFlags, typedFlags } from '../../plugins.js';
3
+ import { resolveDirs } from '../../runtime/config.js';
4
+ import { GLOBAL_FLAGS } from '../../runtime/global-flags.js';
5
+ import { emitJson } from '../../runtime/json-output.js';
6
+ import { createJournalStore } from '../../runtime/journal-store.js';
7
+ import { findChecksumMismatches, listMigrations, readSnapshot, } from '../../runtime/migration-store.js';
8
+ import { resolveTableScope, tableKeysFromDefinitions, } from '../../runtime/table-scope.js';
9
+ import { debug } from '../../runtime/debug.js';
10
+ import { applyMigration } from './apply.js';
11
+ import { scanDestructive } from './destructive.js';
12
+ import { confirmApply, confirmDestructiveExecution, isBackgroundOrCI, printDestructiveOperationDetails, } from './prompts.js';
13
+ import { filterPendingByScope } from './scope.js';
14
+ const MIGRATE_FLAGS = defineFlags([
15
+ { name: '--apply', type: 'boolean', description: 'Apply pending migrations on ClickHouse (no prompt)' },
16
+ { name: '--execute', type: 'boolean', description: 'Alias for --apply' },
17
+ { name: '--allow-destructive', type: 'boolean', description: 'Allow destructive migrations tagged with risk=danger' },
18
+ ]);
19
+ export const migrateCommand = {
20
+ name: 'migrate',
21
+ description: 'Review or execute pending migrations',
22
+ flags: MIGRATE_FLAGS,
23
+ run: cmdMigrate,
24
+ };
25
+ async function cmdMigrate(runCtx) {
26
+ const { flags, config, configPath, pluginRuntime, pluginContext } = runCtx;
27
+ const f = typedFlags(flags, [...GLOBAL_FLAGS, ...MIGRATE_FLAGS]);
28
+ const executeRequested = f['--apply'] === true || f['--execute'] === true;
29
+ const allowDestructive = f['--allow-destructive'] === true;
30
+ const tableSelector = f['--table'];
31
+ const jsonMode = f['--json'] === true;
32
+ const { migrationsDir, metaDir } = resolveDirs(config);
33
+ debug('migrate', `flags: execute=${executeRequested}, allowDestructive=${allowDestructive}, json=${jsonMode}`);
34
+ if (!pluginContext.hasExecutor) {
35
+ throw new Error('clickhouse config is required for migrate (journal is stored in ClickHouse)');
36
+ }
37
+ const db = pluginContext.executor;
38
+ const journalStore = createJournalStore(db);
39
+ const snapshot = await readSnapshot(metaDir);
40
+ const tableScope = resolveTableScope(tableSelector, tableKeysFromDefinitions(snapshot?.definitions ?? []));
41
+ const mode = executeRequested ? 'execute' : 'plan';
42
+ await pluginRuntime.runOnConfigLoaded({
43
+ command: 'migrate',
44
+ config,
45
+ configPath,
46
+ tableScope,
47
+ flags,
48
+ });
49
+ await mkdir(migrationsDir, { recursive: true });
50
+ const files = await listMigrations(migrationsDir);
51
+ const journal = await journalStore.readJournal();
52
+ const appliedNames = new Set(journal.applied.map((entry) => entry.name));
53
+ const pendingAll = files.filter((file) => !appliedNames.has(file));
54
+ debug('migrate', `migrations: total=${files.length}, applied=${journal.applied.length}, pending=${pendingAll.length}`);
55
+ const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
56
+ if (checksumMismatches.length > 0) {
57
+ debug('migrate', `checksum mismatches: ${checksumMismatches.map((m) => m.name).join(', ')}`);
58
+ if (jsonMode) {
59
+ emitJson('migrate', {
60
+ mode,
61
+ scope: tableScope,
62
+ error: 'Checksum mismatch detected on applied migrations',
63
+ checksumMismatches,
64
+ });
65
+ return 1;
66
+ }
67
+ throw new Error(`Checksum mismatch detected on applied migrations: ${checksumMismatches.map((item) => item.name).join(', ')}`);
68
+ }
69
+ if (tableScope.enabled && tableScope.matchCount === 0) {
70
+ if (jsonMode) {
71
+ emitJson('migrate', {
72
+ mode,
73
+ scope: tableScope,
74
+ pending: [],
75
+ applied: [],
76
+ warning: `No tables matched selector "${tableScope.selector ?? ''}".`,
77
+ });
78
+ }
79
+ else {
80
+ console.log(`No tables matched selector "${tableScope.selector ?? ''}". No migrations selected.`);
81
+ }
82
+ return 0;
83
+ }
84
+ const pending = tableScope.enabled
85
+ ? await filterPendingByScope(migrationsDir, pendingAll, new Set(tableScope.matchedTables))
86
+ : pendingAll;
87
+ if (pending.length === 0) {
88
+ if (jsonMode) {
89
+ emitJson('migrate', { mode, scope: tableScope, pending: [], applied: [] });
90
+ }
91
+ else {
92
+ console.log('No pending migrations.');
93
+ }
94
+ return 0;
95
+ }
96
+ if (jsonMode && !executeRequested) {
97
+ emitJson('migrate', { mode, scope: tableScope, pending });
98
+ return 0;
99
+ }
100
+ if (!jsonMode) {
101
+ if (tableScope.enabled) {
102
+ console.log(`Table scope: ${tableScope.selector ?? ''} (${tableScope.matchCount} matched)`);
103
+ for (const table of tableScope.matchedTables)
104
+ console.log(`- ${table}`);
105
+ }
106
+ console.log(`Pending migrations: ${pending.length}`);
107
+ for (const file of pending)
108
+ console.log(`- ${file}`);
109
+ }
110
+ if (!executeRequested) {
111
+ if (isBackgroundOrCI() || jsonMode) {
112
+ if (!jsonMode) {
113
+ console.log('\nPlan only. Re-run with --apply to apply and journal these migrations.');
114
+ }
115
+ return 0;
116
+ }
117
+ const confirmed = await confirmApply();
118
+ if (!confirmed) {
119
+ console.log('Migration apply cancelled by user.');
120
+ return 0;
121
+ }
122
+ }
123
+ const destructive = await scanDestructive(migrationsDir, pending);
124
+ let destructiveAllowed = allowDestructive || config.safety?.allowDestructive === true;
125
+ if (destructive.migrations.length > 0 && !destructiveAllowed) {
126
+ const error = 'Blocked destructive migration execution. Re-run with --allow-destructive or set safety.allowDestructive=true after review.';
127
+ if (jsonMode) {
128
+ emitJson('migrate', {
129
+ mode: 'execute',
130
+ scope: tableScope,
131
+ error,
132
+ destructiveMigrations: destructive.migrations,
133
+ destructiveOperations: destructive.operations,
134
+ });
135
+ return 3;
136
+ }
137
+ if (isBackgroundOrCI()) {
138
+ printDestructiveOperationDetails(destructive.operations);
139
+ throw new Error(`${error}\nDestructive migrations: ${destructive.migrations.join(', ')}\n` +
140
+ 'Non-interactive run detected. Pass --allow-destructive to proceed.');
141
+ }
142
+ const confirmed = await confirmDestructiveExecution(destructive.operations);
143
+ if (!confirmed) {
144
+ throw new Error(`Destructive migration cancelled by user.\nDestructive migrations: ${destructive.migrations.join(', ')}`);
145
+ }
146
+ destructiveAllowed = true;
147
+ }
148
+ if (destructive.migrations.length > 0 && !destructiveAllowed) {
149
+ throw new Error('Blocked destructive migration execution.');
150
+ }
151
+ const appliedNow = [];
152
+ for (const file of pending) {
153
+ const entry = await applyMigration({
154
+ db,
155
+ journalStore,
156
+ pluginRuntime,
157
+ config,
158
+ tableScope,
159
+ flags,
160
+ migrationsDir,
161
+ file,
162
+ });
163
+ appliedNow.push(entry);
164
+ if (!jsonMode)
165
+ console.log(`Applied: ${file}`);
166
+ }
167
+ if (jsonMode) {
168
+ emitJson('migrate', { mode: 'execute', scope: tableScope, applied: appliedNow });
169
+ return 0;
170
+ }
171
+ console.log('\nMigrations recorded in ClickHouse _chkit_migrations table.');
172
+ return 0;
173
+ }
174
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/migrate/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type DestructiveOperationMarker } from '../../runtime/safety-markers.js';
2
+ export interface DestructiveScan {
3
+ migrations: string[];
4
+ operations: DestructiveOperationMarker[];
5
+ }
6
+ export declare function scanDestructive(migrationsDir: string, pending: string[]): Promise<DestructiveScan>;
7
+ //# sourceMappingURL=destructive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destructive.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/destructive.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAA;AAExC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,EAAE,0BAA0B,EAAE,CAAA;CACzC;AAED,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,eAAe,CAAC,CAW1B"}
@@ -0,0 +1,16 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { collectDestructiveOperationMarkers, migrationContainsDangerOperation, } from '../../runtime/safety-markers.js';
4
+ export async function scanDestructive(migrationsDir, pending) {
5
+ const migrations = [];
6
+ const operations = [];
7
+ for (const file of pending) {
8
+ const sql = await readFile(join(migrationsDir, file), 'utf8');
9
+ if (migrationContainsDangerOperation(sql)) {
10
+ migrations.push(file);
11
+ operations.push(...collectDestructiveOperationMarkers(file, sql));
12
+ }
13
+ }
14
+ return { migrations, operations };
15
+ }
16
+ //# sourceMappingURL=destructive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"destructive.js","sourceRoot":"","sources":["../../../src/commands/migrate/destructive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EACL,kCAAkC,EAClC,gCAAgC,GAEjC,MAAM,iCAAiC,CAAA;AAOxC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,OAAiB;IAEjB,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,UAAU,GAAiC,EAAE,CAAA;IACnD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7D,IAAI,gCAAgC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrB,UAAU,CAAC,IAAI,CAAC,GAAG,kCAAkC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AACnC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DestructiveOperationMarker } from '../../runtime/safety-markers.js';
2
+ export declare function isBackgroundOrCI(): boolean;
3
+ export declare function printDestructiveOperationDetails(markers: DestructiveOperationMarker[]): void;
4
+ export declare function confirmApply(): Promise<boolean>;
5
+ export declare function confirmDestructiveExecution(markers: DestructiveOperationMarker[]): Promise<boolean>;
6
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/prompts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAEjF,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,0BAA0B,EAAE,GAAG,IAAI,CAW5F;AAcD,wBAAgB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAE/C;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,0BAA0B,EAAE,GACpC,OAAO,CAAC,OAAO,CAAC,CAGlB"}
@@ -0,0 +1,40 @@
1
+ import process from 'node:process';
2
+ import { createInterface } from 'node:readline/promises';
3
+ export function isBackgroundOrCI() {
4
+ return (process.env.CI === '1' ||
5
+ process.env.CI === 'true' ||
6
+ !process.stdin.isTTY ||
7
+ !process.stdout.isTTY);
8
+ }
9
+ export function printDestructiveOperationDetails(markers) {
10
+ console.log('Destructive operations detected:');
11
+ for (const [index, marker] of markers.entries()) {
12
+ console.log(`${index + 1}. ${marker.migration}`);
13
+ console.log(` operation: ${marker.type}`);
14
+ console.log(` key: ${marker.key}`);
15
+ console.log(` warning: ${marker.warningCode}`);
16
+ console.log(` reason: ${marker.reason}`);
17
+ console.log(` impact: ${marker.impact}`);
18
+ console.log(` recommendation: ${marker.recommendation}`);
19
+ }
20
+ }
21
+ async function promptYes(message) {
22
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
23
+ try {
24
+ console.log('');
25
+ console.log('Type "yes" to continue. Any other input cancels.');
26
+ const response = await rl.question(message);
27
+ return response.trim().toLowerCase() === 'yes';
28
+ }
29
+ finally {
30
+ rl.close();
31
+ }
32
+ }
33
+ export function confirmApply() {
34
+ return promptYes('Apply pending migrations now? [no/yes]: ');
35
+ }
36
+ export async function confirmDestructiveExecution(markers) {
37
+ printDestructiveOperationDetails(markers);
38
+ return promptYes('Apply destructive operations? [no/yes]: ');
39
+ }
40
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/migrate/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAIxD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG;QACtB,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;QACzB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QACpB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACtB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAAqC;IACpF,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAe;IACtC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5E,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAA;IAChD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC,0CAA0C,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAAqC;IAErC,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO,SAAS,CAAC,0CAA0C,CAAC,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function filterPendingByScope(migrationsDir: string, pending: string[], selectedTables: ReadonlySet<string>): Promise<string[]>;
2
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/scope.ts"],"names":[],"mappings":"AASA,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"}