@iwonz/ywtc 4.0.1 → 4.1.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.
@@ -0,0 +1,578 @@
1
+ import path from 'node:path';
2
+ import { readWorkspaceConfig } from './config.js';
3
+ import { safeFilename } from './input.js';
4
+ import { runInteractiveInit } from './interactive-init.js';
5
+ import { runMigrationCommand } from './migration-command.js';
6
+ import { openReportFile } from './report-catalog.js';
7
+ import { WizardCancelledError } from './wizard-prompts.js';
8
+ import { resolveWorkspace, workspaceIsInitialized } from './workspace.js';
9
+ function required(value) {
10
+ return value.trim() ? undefined : 'Value is required.';
11
+ }
12
+ function exportDirectory(value) {
13
+ return required(value) ?? (/^https?:\/\//i.test(value.trim()) ? 'Use a filesystem directory, not an HTTP(S) URL.' : undefined);
14
+ }
15
+ function navigation(prompter, id) {
16
+ return prompter.select({
17
+ id,
18
+ message: 'Next step',
19
+ options: [
20
+ { value: 'continue', label: 'Continue' },
21
+ { value: 'back', label: 'Back' },
22
+ { value: 'cancel', label: 'Cancel' },
23
+ ],
24
+ initialValue: 'continue',
25
+ });
26
+ }
27
+ function profileBase(profile) {
28
+ return profile.type === 'yandex-wiki' ? profile.webUrl : profile.baseUrl;
29
+ }
30
+ function matchesUrl(locator, profile) {
31
+ try {
32
+ const candidate = new URL(locator);
33
+ const base = new URL(profileBase(profile));
34
+ const basePath = base.pathname.replace(/\/+$/, '');
35
+ return candidate.origin === base.origin
36
+ && (!basePath || candidate.pathname === basePath || candidate.pathname.startsWith(`${basePath}/`));
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ function profilesFor(config, provider) {
43
+ return Object.values(config.profiles)
44
+ .filter((profile) => profile.type === provider)
45
+ .sort((left, right) => left.name.localeCompare(right.name));
46
+ }
47
+ function suggestedProfile(config, provider, locator, requested) {
48
+ const profiles = profilesFor(config, provider);
49
+ if (requested && profiles.some((profile) => profile.name === requested))
50
+ return requested;
51
+ const matches = profiles
52
+ .filter((profile) => matchesUrl(locator, profile))
53
+ .sort((left, right) => profileBase(right).length - profileBase(left).length);
54
+ if (matches.length > 0)
55
+ return matches[0].name;
56
+ return profiles[0]?.name;
57
+ }
58
+ function inferredProvider(config, locator, requestedProfile, fallback) {
59
+ const requested = requestedProfile ? config.profiles[requestedProfile] : undefined;
60
+ if (requested)
61
+ return requested.type;
62
+ const matches = Object.values(config.profiles)
63
+ .filter((profile) => matchesUrl(locator, profile))
64
+ .sort((left, right) => profileBase(right).length - profileBase(left).length);
65
+ return matches[0]?.type ?? fallback;
66
+ }
67
+ function safeSourceName(locator) {
68
+ let value = locator.trim();
69
+ try {
70
+ const url = new URL(value);
71
+ value = decodeURIComponent(url.pathname).replace(/\/+$/, '').split('/').pop() ?? '';
72
+ }
73
+ catch {
74
+ value = value.replace(/\/+$/, '').split('/').pop() ?? value;
75
+ }
76
+ return safeFilename(value || 'export').replace(/\.[^.]+$/, '').slice(0, 80) || 'export';
77
+ }
78
+ function defaultExportPath(source) {
79
+ return path.join('.', 'exports', safeSourceName(source));
80
+ }
81
+ async function defaultInitialize(workdir, prompter) {
82
+ return runInteractiveInit({ workdir, prompter });
83
+ }
84
+ async function loadWorkspace(options, explicit) {
85
+ const workspace = await resolveWorkspace({
86
+ explicit,
87
+ ...(options.cwd ? { cwd: options.cwd } : {}),
88
+ ...(options.homeDirectory ? { homeDirectory: options.homeDirectory } : {}),
89
+ });
90
+ if (!await workspaceIsInitialized(workspace))
91
+ return { workspace, error: `Missing ${workspace.configFile}` };
92
+ try {
93
+ return { workspace, config: readWorkspaceConfig(workspace.configFile) };
94
+ }
95
+ catch (error) {
96
+ return { workspace, error: error instanceof Error ? error.message : String(error) };
97
+ }
98
+ }
99
+ async function workspaceStep(options, draft) {
100
+ const { prompter } = options;
101
+ prompter.info('Step 1 of 6 · Workspace');
102
+ const initialWorkspace = draft.workspace ?? await resolveWorkspace({
103
+ ...(options.command.workdir ? { explicit: options.command.workdir } : {}),
104
+ ...(options.cwd ? { cwd: options.cwd } : {}),
105
+ ...(options.homeDirectory ? { homeDirectory: options.homeDirectory } : {}),
106
+ });
107
+ let initialPath = initialWorkspace.root;
108
+ while (true) {
109
+ const selected = (await prompter.text({
110
+ id: 'migration.workspace.path',
111
+ message: 'Working directory',
112
+ initialValue: initialPath,
113
+ validate: required,
114
+ })).trim();
115
+ const loaded = await loadWorkspace(options, selected);
116
+ if (loaded.config) {
117
+ draft.workspace = loaded.workspace;
118
+ draft.config = loaded.config;
119
+ draft.sourceProvider = inferredProvider(loaded.config, draft.source, draft.sourceProfile ?? options.command.sourceProfile, draft.sourceProvider);
120
+ if (!draft.destinationKind || ['yandex-wiki', 'confluence'].includes(draft.destinationKind)) {
121
+ draft.destinationKind = inferredProvider(loaded.config, draft.destination, draft.destinationProfile ?? options.command.destinationProfile, draft.destinationKind === 'yandex-wiki' ? 'yandex-wiki' : 'confluence');
122
+ }
123
+ return 'continue';
124
+ }
125
+ prompter.error(loaded.error ?? 'Workspace configuration is unavailable.');
126
+ const action = await prompter.select({
127
+ id: 'migration.workspace.unavailable',
128
+ message: 'Workspace is not ready',
129
+ options: [
130
+ { value: 'configure', label: 'Configure this workspace', hint: 'open the initialization wizard' },
131
+ { value: 'change', label: 'Choose another directory' },
132
+ { value: 'exit', label: 'Exit without changes' },
133
+ ],
134
+ initialValue: 'configure',
135
+ });
136
+ if (action === 'exit')
137
+ return 'exit';
138
+ if (action === 'change') {
139
+ initialPath = loaded.workspace.root;
140
+ continue;
141
+ }
142
+ const initialized = await (options.initialize ?? defaultInitialize)(loaded.workspace.root, prompter);
143
+ if (initialized.code === 130 || initialized.status === 'cancelled')
144
+ throw new WizardCancelledError();
145
+ const reloaded = await loadWorkspace(options, loaded.workspace.root);
146
+ if (reloaded.config) {
147
+ draft.workspace = reloaded.workspace;
148
+ draft.config = reloaded.config;
149
+ draft.sourceProvider = inferredProvider(reloaded.config, draft.source, draft.sourceProfile ?? options.command.sourceProfile, draft.sourceProvider);
150
+ if (draft.destinationKind === 'yandex-wiki' || draft.destinationKind === 'confluence') {
151
+ draft.destinationKind = inferredProvider(reloaded.config, draft.destination, draft.destinationProfile ?? options.command.destinationProfile, draft.destinationKind);
152
+ }
153
+ return 'continue';
154
+ }
155
+ prompter.error(reloaded.error ?? 'Workspace is still not ready.');
156
+ initialPath = loaded.workspace.root;
157
+ }
158
+ }
159
+ async function sourceStep(draft, prompter) {
160
+ if (!draft.config)
161
+ throw new Error('Workspace configuration must be loaded before source selection.');
162
+ prompter.info('Step 2 of 6 · Source');
163
+ while (true) {
164
+ const provider = await prompter.select({
165
+ id: 'migration.source.provider',
166
+ message: 'Source provider',
167
+ options: [
168
+ { value: 'yandex-wiki', label: 'Yandex Wiki' },
169
+ { value: 'confluence', label: 'Confluence' },
170
+ ],
171
+ initialValue: draft.sourceProvider,
172
+ });
173
+ const available = profilesFor(draft.config, provider);
174
+ if (available.length === 0) {
175
+ prompter.error(`No ${provider} connection exists in ${draft.config.configFile}.`);
176
+ continue;
177
+ }
178
+ const locator = (await prompter.text({
179
+ id: 'migration.source.locator',
180
+ message: 'Source page URL, ID, or slug',
181
+ initialValue: draft.source,
182
+ validate: required,
183
+ })).trim();
184
+ const initialProfile = suggestedProfile(draft.config, provider, locator, draft.sourceProfile);
185
+ const profile = await prompter.select({
186
+ id: 'migration.source.profile',
187
+ message: 'Source connection',
188
+ options: available.map((item) => ({ value: item.name, label: item.name, hint: profileBase(item) })),
189
+ ...(initialProfile ? { initialValue: initialProfile } : {}),
190
+ });
191
+ const selected = draft.config.profiles[profile];
192
+ if (!selected || selected.type !== provider) {
193
+ prompter.error('Selected source connection is not compatible with the provider.');
194
+ continue;
195
+ }
196
+ if (/^https?:\/\//i.test(locator) && !matchesUrl(locator, selected)) {
197
+ prompter.error(`Source URL does not belong to ${profileBase(selected)}.`);
198
+ continue;
199
+ }
200
+ draft.sourceProvider = provider;
201
+ draft.source = locator;
202
+ draft.sourceProfile = profile;
203
+ return navigation(prompter, 'migration.source.navigation');
204
+ }
205
+ }
206
+ async function destinationStep(draft, prompter) {
207
+ if (!draft.config)
208
+ throw new Error('Workspace configuration must be loaded before destination selection.');
209
+ prompter.info('Step 3 of 6 · Destination');
210
+ while (true) {
211
+ const kind = await prompter.select({
212
+ id: 'migration.destination.kind',
213
+ message: 'Destination',
214
+ options: [
215
+ { value: 'yandex-wiki', label: 'Yandex Wiki' },
216
+ { value: 'confluence', label: 'Confluence' },
217
+ { value: 'markdown', label: 'Markdown directory' },
218
+ { value: 'html', label: 'Static HTML directory' },
219
+ ],
220
+ initialValue: draft.destinationKind,
221
+ });
222
+ if (kind === 'markdown' || kind === 'html') {
223
+ const initialDirectory = !draft.destination || /^https?:\/\//i.test(draft.destination)
224
+ ? defaultExportPath(draft.source)
225
+ : draft.destination;
226
+ const directory = (await prompter.text({
227
+ id: 'migration.destination.directory',
228
+ message: `${kind === 'html' ? 'HTML' : 'Markdown'} output directory`,
229
+ initialValue: initialDirectory,
230
+ validate: exportDirectory,
231
+ })).trim();
232
+ draft.destinationKind = kind;
233
+ draft.destination = directory;
234
+ delete draft.destinationProfile;
235
+ return navigation(prompter, 'migration.destination.navigation');
236
+ }
237
+ const available = profilesFor(draft.config, kind);
238
+ if (available.length === 0) {
239
+ prompter.error(`No ${kind} connection exists in ${draft.config.configFile}.`);
240
+ continue;
241
+ }
242
+ const locator = (await prompter.text({
243
+ id: 'migration.destination.locator',
244
+ message: 'Destination parent page URL, ID, or slug',
245
+ initialValue: draft.destination,
246
+ validate: required,
247
+ })).trim();
248
+ const initialProfile = suggestedProfile(draft.config, kind, locator, draft.destinationProfile);
249
+ const profile = await prompter.select({
250
+ id: 'migration.destination.profile',
251
+ message: 'Destination connection',
252
+ options: available.map((item) => ({ value: item.name, label: item.name, hint: profileBase(item) })),
253
+ ...(initialProfile ? { initialValue: initialProfile } : {}),
254
+ });
255
+ const selected = draft.config.profiles[profile];
256
+ if (!selected || selected.type !== kind) {
257
+ prompter.error('Selected destination connection is not compatible with the provider.');
258
+ continue;
259
+ }
260
+ if (/^https?:\/\//i.test(locator) && !matchesUrl(locator, selected)) {
261
+ prompter.error(`Destination URL does not belong to ${profileBase(selected)}.`);
262
+ continue;
263
+ }
264
+ draft.destinationKind = kind;
265
+ draft.destination = locator;
266
+ draft.destinationProfile = profile;
267
+ draft.archive = false;
268
+ return navigation(prompter, 'migration.destination.navigation');
269
+ }
270
+ }
271
+ async function scopeStep(draft, prompter) {
272
+ prompter.info('Step 4 of 6 · Scope');
273
+ draft.scope = await prompter.select({
274
+ id: 'migration.scope',
275
+ message: 'Pages to transfer',
276
+ options: [
277
+ { value: 'page', label: 'Current page only' },
278
+ { value: 'subtree', label: 'Page and all descendants' },
279
+ { value: 'linked', label: 'Page and all reachable internal links' },
280
+ ],
281
+ initialValue: draft.scope,
282
+ });
283
+ return navigation(prompter, 'migration.scope.navigation');
284
+ }
285
+ async function commentsStep(draft, prompter) {
286
+ prompter.info('Step 5 of 6 · Comments');
287
+ const comments = await prompter.select({
288
+ id: 'migration.comments',
289
+ message: 'Archive page comments',
290
+ options: [
291
+ { value: 'yes', label: 'Transfer comments' },
292
+ { value: 'no', label: 'Skip comments' },
293
+ ],
294
+ initialValue: draft.comments ? 'yes' : 'no',
295
+ });
296
+ draft.comments = comments === 'yes';
297
+ return navigation(prompter, 'migration.comments.navigation');
298
+ }
299
+ async function archiveStep(draft, prompter) {
300
+ prompter.info('Step 6 of 6 · Archive');
301
+ const archive = await prompter.select({
302
+ id: 'migration.archive',
303
+ message: 'Also create a ZIP archive',
304
+ options: [
305
+ { value: 'no', label: 'Do not create ZIP' },
306
+ { value: 'yes', label: 'Create ZIP next to the export directory' },
307
+ ],
308
+ initialValue: draft.archive ? 'yes' : 'no',
309
+ });
310
+ draft.archive = archive === 'yes';
311
+ return navigation(prompter, 'migration.archive.navigation');
312
+ }
313
+ function draftSummary(draft) {
314
+ const destination = draft.destinationKind === 'markdown' || draft.destinationKind === 'html'
315
+ ? `${draft.destinationKind.toUpperCase()} · ${draft.destination}`
316
+ : `${draft.destinationKind} · ${draft.destinationProfile} · ${draft.destination}`;
317
+ return [
318
+ `Workspace: ${draft.workspace?.root ?? 'not selected'}`,
319
+ `Source: ${draft.sourceProvider} · ${draft.sourceProfile} · ${draft.source}`,
320
+ `Destination: ${destination}`,
321
+ `Scope: ${draft.scope} · source status ${draft.sourceStatus}`,
322
+ `Comments: ${draft.comments ? 'enabled' : 'disabled'}`,
323
+ ...(draft.destinationKind === 'markdown' || draft.destinationKind === 'html'
324
+ ? [`ZIP archive: ${draft.archive ? 'enabled' : 'disabled'}`]
325
+ : []),
326
+ ].join('\n');
327
+ }
328
+ function readyCommand(draft, input, dryRun) {
329
+ if (!draft.workspace || !draft.config)
330
+ throw new Error('Workspace is not ready.');
331
+ if (!draft.source || !draft.destination || !draft.sourceProfile)
332
+ throw new Error('Source and destination are required.');
333
+ const fileDestination = draft.destinationKind === 'markdown' || draft.destinationKind === 'html';
334
+ if (!fileDestination && !draft.destinationProfile)
335
+ throw new Error('Remote destination profile is required.');
336
+ const common = {
337
+ command: 'migrate',
338
+ source: draft.source,
339
+ destination: draft.destination,
340
+ sourceProfile: draft.sourceProfile,
341
+ scope: draft.scope,
342
+ sourceStatus: draft.sourceStatus,
343
+ comments: draft.comments,
344
+ archive: fileDestination && draft.archive,
345
+ workdir: draft.workspace.root,
346
+ dryRun,
347
+ fresh: input.fresh,
348
+ openReport: input.openReport,
349
+ ...(input.concurrency !== undefined ? { concurrency: input.concurrency } : {}),
350
+ ...(input.stateFilename ? { stateFilename: input.stateFilename } : {}),
351
+ };
352
+ if (fileDestination)
353
+ return { ...common, format: draft.destinationKind };
354
+ return { ...common, destinationProfile: draft.destinationProfile };
355
+ }
356
+ export function liveAllowedAfterDryRun(summary) {
357
+ return summary.inventoryComplete
358
+ && summary.rootErrors === 0
359
+ && summary.failed === 0
360
+ && summary.blocked === 0
361
+ && summary.conflicts === 0;
362
+ }
363
+ async function reviewAction(draft, prompter) {
364
+ prompter.note(draftSummary(draft), 'Migration summary');
365
+ return prompter.select({
366
+ id: 'migration.review.action',
367
+ message: 'What should ywtc do?',
368
+ options: [
369
+ { value: 'dry-run', label: 'Run dry-run first', hint: 'read-only discovery and report' },
370
+ { value: 'live', label: 'Run transfer now' },
371
+ { value: 'edit', label: 'Edit parameters' },
372
+ { value: 'exit', label: 'Exit without running' },
373
+ ],
374
+ initialValue: 'dry-run',
375
+ });
376
+ }
377
+ async function editStep(prompter, draft) {
378
+ const section = await prompter.select({
379
+ id: 'migration.edit.section',
380
+ message: 'Parameter group to edit',
381
+ options: [
382
+ { value: 'workspace', label: 'Workspace' },
383
+ { value: 'source', label: 'Source' },
384
+ { value: 'destination', label: 'Destination' },
385
+ { value: 'scope', label: 'Scope' },
386
+ { value: 'comments', label: 'Comments' },
387
+ ...((draft.destinationKind === 'markdown' || draft.destinationKind === 'html')
388
+ ? [{ value: 'archive', label: 'Archive' }]
389
+ : []),
390
+ { value: 'review', label: 'Back to summary' },
391
+ { value: 'cancel', label: 'Cancel' },
392
+ ],
393
+ initialValue: 'source',
394
+ });
395
+ if (section === 'cancel')
396
+ throw new WizardCancelledError();
397
+ return { workspace: 0, source: 1, destination: 2, scope: 3, comments: 4, archive: 5, review: 6 }[section];
398
+ }
399
+ function initialDraft(command) {
400
+ const format = command.format;
401
+ return {
402
+ sourceProvider: 'yandex-wiki',
403
+ ...(command.sourceProfile ? { sourceProfile: command.sourceProfile } : {}),
404
+ source: command.source ?? '',
405
+ destinationKind: format ?? 'confluence',
406
+ ...(command.destinationProfile ? { destinationProfile: command.destinationProfile } : {}),
407
+ destination: command.destination ?? '',
408
+ scope: command.scope,
409
+ sourceStatus: command.sourceStatus,
410
+ comments: command.comments,
411
+ archive: command.archive,
412
+ };
413
+ }
414
+ export async function runInteractiveMigration(options) {
415
+ const { prompter } = options;
416
+ const execute = options.execute ?? runMigrationCommand;
417
+ const openReport = options.openReport ?? openReportFile;
418
+ const draft = initialDraft(options.command);
419
+ let step = 0;
420
+ let lastCode = 0;
421
+ let lastOutcome;
422
+ let lastCommand;
423
+ prompter.intro('ywtc interactive migration');
424
+ try {
425
+ while (true) {
426
+ if (step === 0) {
427
+ if (await workspaceStep(options, draft) === 'exit') {
428
+ prompter.outro('Migration was not started.');
429
+ return { status: 'exited', code: lastCode, ...(lastCommand ? { command: lastCommand } : {}), ...(lastOutcome ? { outcome: lastOutcome } : {}) };
430
+ }
431
+ step = 1;
432
+ continue;
433
+ }
434
+ if (step === 1) {
435
+ const next = await sourceStep(draft, prompter);
436
+ if (next === 'cancel')
437
+ throw new WizardCancelledError();
438
+ step = next === 'back' ? 0 : 2;
439
+ continue;
440
+ }
441
+ if (step === 2) {
442
+ const next = await destinationStep(draft, prompter);
443
+ if (next === 'cancel')
444
+ throw new WizardCancelledError();
445
+ step = next === 'back' ? 1 : 3;
446
+ continue;
447
+ }
448
+ if (step === 3) {
449
+ const next = await scopeStep(draft, prompter);
450
+ if (next === 'cancel')
451
+ throw new WizardCancelledError();
452
+ step = next === 'back' ? 2 : 4;
453
+ continue;
454
+ }
455
+ if (step === 4) {
456
+ const next = await commentsStep(draft, prompter);
457
+ if (next === 'cancel')
458
+ throw new WizardCancelledError();
459
+ step = next === 'back' ? 3 : (draft.destinationKind === 'markdown' || draft.destinationKind === 'html' ? 5 : 6);
460
+ continue;
461
+ }
462
+ if (step === 5) {
463
+ const next = await archiveStep(draft, prompter);
464
+ if (next === 'cancel')
465
+ throw new WizardCancelledError();
466
+ step = next === 'back' ? 4 : 6;
467
+ continue;
468
+ }
469
+ const action = await reviewAction(draft, prompter);
470
+ if (action === 'exit') {
471
+ prompter.outro(lastOutcome ? 'Migration wizard finished.' : 'Migration was not started.');
472
+ return { status: 'exited', code: lastCode, ...(lastCommand ? { command: lastCommand } : {}), ...(lastOutcome ? { outcome: lastOutcome } : {}) };
473
+ }
474
+ if (action === 'edit') {
475
+ step = await editStep(prompter, draft);
476
+ continue;
477
+ }
478
+ if (action === 'live') {
479
+ lastCommand = readyCommand(draft, options.command, false);
480
+ try {
481
+ lastOutcome = await execute(lastCommand);
482
+ lastCode = lastOutcome.code;
483
+ prompter.outro(lastCode === 0 ? 'Migration completed.' : 'Migration finished with issues.');
484
+ return { status: 'completed', code: lastCode, command: lastCommand, outcome: lastOutcome };
485
+ }
486
+ catch (error) {
487
+ prompter.error(error instanceof Error ? error.message : String(error));
488
+ prompter.outro('Migration failed. Review the printed report or diagnostic, then rerun the wizard.');
489
+ return { status: 'completed', code: 2, command: lastCommand };
490
+ }
491
+ }
492
+ while (true) {
493
+ lastCommand = readyCommand(draft, options.command, true);
494
+ try {
495
+ lastOutcome = await execute(lastCommand);
496
+ lastCode = lastOutcome.code;
497
+ }
498
+ catch (error) {
499
+ lastCode = 2;
500
+ prompter.error(error instanceof Error ? error.message : String(error));
501
+ const failureAction = await prompter.select({
502
+ id: 'migration.dry-run.failure',
503
+ message: 'Dry-run could not complete',
504
+ options: [
505
+ { value: 'edit', label: 'Edit parameters' },
506
+ { value: 'repeat', label: 'Repeat dry-run' },
507
+ { value: 'exit', label: 'Exit' },
508
+ ],
509
+ initialValue: 'edit',
510
+ });
511
+ if (failureAction === 'repeat')
512
+ continue;
513
+ if (failureAction === 'edit') {
514
+ step = await editStep(prompter, draft);
515
+ break;
516
+ }
517
+ prompter.outro('Dry-run failed; migration was not started.');
518
+ return { status: 'exited', code: lastCode, command: lastCommand };
519
+ }
520
+ if (lastOutcome.code === 130 || lastOutcome.code === 143) {
521
+ return { status: 'completed', code: lastOutcome.code, command: lastCommand, outcome: lastOutcome };
522
+ }
523
+ const allowLive = Boolean(lastOutcome.result && liveAllowedAfterDryRun(lastOutcome.result.summary));
524
+ const next = await prompter.select({
525
+ id: 'migration.after-dry-run',
526
+ message: allowLive ? 'Dry-run finished. What next?' : 'Dry-run found blocking issues. What next?',
527
+ options: [
528
+ ...(lastOutcome.reportPaths ? [{ value: 'report', label: 'Open HTML report' }] : []),
529
+ ...(allowLive ? [{ value: 'live', label: 'Run live transfer' }] : []),
530
+ { value: 'edit', label: 'Edit parameters' },
531
+ { value: 'repeat', label: 'Repeat dry-run' },
532
+ { value: 'exit', label: 'Finish' },
533
+ ],
534
+ initialValue: allowLive ? 'live' : (lastOutcome.reportPaths ? 'report' : 'edit'),
535
+ });
536
+ if (next === 'report' && lastOutcome.reportPaths) {
537
+ try {
538
+ await openReport(lastOutcome.reportPaths.html);
539
+ prompter.success(`Opened ${lastOutcome.reportPaths.html}`);
540
+ }
541
+ catch (error) {
542
+ prompter.error(error instanceof Error ? error.message : String(error));
543
+ }
544
+ continue;
545
+ }
546
+ if (next === 'repeat')
547
+ continue;
548
+ if (next === 'edit') {
549
+ step = await editStep(prompter, draft);
550
+ break;
551
+ }
552
+ if (next === 'live') {
553
+ lastCommand = readyCommand(draft, options.command, false);
554
+ try {
555
+ lastOutcome = await execute(lastCommand);
556
+ lastCode = lastOutcome.code;
557
+ prompter.outro(lastCode === 0 ? 'Migration completed.' : 'Migration finished with issues.');
558
+ return { status: 'completed', code: lastCode, command: lastCommand, outcome: lastOutcome };
559
+ }
560
+ catch (error) {
561
+ prompter.error(error instanceof Error ? error.message : String(error));
562
+ prompter.outro('Migration failed. Review the printed report or diagnostic, then rerun the wizard.');
563
+ return { status: 'completed', code: 2, command: lastCommand };
564
+ }
565
+ }
566
+ prompter.outro('Migration wizard finished after dry-run.');
567
+ return { status: 'completed', code: lastCode, command: lastCommand, outcome: lastOutcome };
568
+ }
569
+ }
570
+ }
571
+ catch (error) {
572
+ if (!(error instanceof WizardCancelledError))
573
+ throw error;
574
+ prompter.cancel('Interactive migration cancelled; no new operation was started.');
575
+ return { status: 'cancelled', code: 130, ...(lastCommand ? { command: lastCommand } : {}), ...(lastOutcome ? { outcome: lastOutcome } : {}) };
576
+ }
577
+ }
578
+ //# sourceMappingURL=interactive-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-migrate.js","sourceRoot":"","sources":["../src/interactive-migrate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAC,YAAY,EAAC,MAAM,YAAY,CAAC;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAMzD,OAAO,EAAC,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAsB,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAC,gBAAgB,EAAkB,sBAAsB,EAAC,MAAM,gBAAgB,CAAC;AAuCxF,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACjI,CAAC;AAED,SAAS,UAAU,CAAC,QAAwB,EAAE,EAAU;IACtD,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB,EAAE;QACF,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE;YACP,EAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC;YACtC,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC;YAC9B,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;SACnC;QACD,YAAY,EAAE,UAAU;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,OAA0B;IAC7C,OAAO,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,OAA0B;IAC7D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;eAClC,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IACvG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAiB,EAAE,QAAsB;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;SAClC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC9C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAiB,EACjB,QAAsB,EACtB,OAAe,EACf,SAA6B;IAE7B,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1F,MAAM,OAAO,GAAG,QAAQ;SACrB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;IAChD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAiB,EACjB,OAAe,EACf,gBAAoC,EACpC,QAAsB;IAEtB,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC3C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;IAC9D,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;AAC1F,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAwB;IACxE,OAAO,kBAAkB,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAoC,EACpC,QAAgB;IAEhB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;QACvC,QAAQ;QACR,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,sBAAsB,CAAC,SAAS,CAAC;QAAE,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,WAAW,SAAS,CAAC,UAAU,EAAE,EAAC,CAAC;IAC3G,IAAI,CAAC;QACH,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAoC,EAAE,KAAqB;IACtF,MAAM,EAAC,QAAQ,EAAC,GAAG,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,gBAAgB,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC,CAAC;IACH,IAAI,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC;IACxC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC;YACpC,EAAE,EAAE,0BAA0B;YAC9B,OAAO,EAAE,mBAAmB;YAC5B,YAAY,EAAE,WAAW;YACzB,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACnC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,KAAK,CAAC,cAAc,GAAG,gBAAgB,CACrC,MAAM,CAAC,MAAM,EACb,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,EACpD,KAAK,CAAC,cAAc,CACrB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC5F,KAAK,CAAC,eAAe,GAAG,gBAAgB,CACtC,MAAM,CAAC,MAAM,EACb,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAC9D,KAAK,CAAC,eAAe,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CACvE,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,yCAAyC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACnC,EAAE,EAAE,iCAAiC;YACrC,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE;gBACP,EAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,gCAAgC,EAAC;gBAC/F,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAC;gBACpD,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAC;aAC/C;YACD,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QACH,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QACrC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACpC,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrG,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;QACrG,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YACrC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,KAAK,CAAC,cAAc,GAAG,gBAAgB,CACrC,QAAQ,CAAC,MAAM,EACf,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,EACpD,KAAK,CAAC,cAAc,CACrB,CAAC;YACF,IAAI,KAAK,CAAC,eAAe,KAAK,aAAa,IAAI,KAAK,CAAC,eAAe,KAAK,YAAY,EAAE,CAAC;gBACtF,KAAK,CAAC,eAAe,GAAG,gBAAgB,CACtC,QAAQ,CAAC,MAAM,EACf,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAC9D,KAAK,CAAC,eAAe,CACtB,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,+BAA+B,CAAC,CAAC;QAClE,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IACtC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAqB,EAAE,QAAwB;IACvE,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACtG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAe;YACnD,EAAE,EAAE,2BAA2B;YAC/B,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE;gBACP,EAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAC;gBAC5C,EAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAC;aAC3C;YACD,YAAY,EAAE,KAAK,CAAC,cAAc;SACnC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,QAAQ,yBAAyB,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;YAClF,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC;YACnC,EAAE,EAAE,0BAA0B;YAC9B,OAAO,EAAE,8BAA8B;YACvC,YAAY,EAAE,KAAK,CAAC,MAAM;YAC1B,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC,EAAE,EAAE,0BAA0B;YAC9B,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;YACjG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAC,YAAY,EAAE,cAAc,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,QAAQ,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAClF,SAAS;QACX,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,KAAK,CAAC,iCAAiC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QACD,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC;QAChC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;QACvB,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;QAC9B,OAAO,UAAU,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,KAAqB,EAAE,QAAwB;IAC5E,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC3G,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAkB;YAClD,EAAE,EAAE,4BAA4B;YAChC,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE;gBACP,EAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAC;gBAC5C,EAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAC;gBAC1C,EAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,oBAAoB,EAAC;gBAChD,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAC;aAChD;YACD,YAAY,EAAE,KAAK,CAAC,eAAe;SACpC,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBACpF,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;gBACjC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;YACtB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC;gBACrC,EAAE,EAAE,iCAAiC;gBACrC,OAAO,EAAE,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,mBAAmB;gBACpE,YAAY,EAAE,gBAAgB;gBAC9B,QAAQ,EAAE,eAAe;aAC1B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;YAC7B,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;YAC9B,OAAO,KAAK,CAAC,kBAAkB,CAAC;YAChC,OAAO,UAAU,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,yBAAyB,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;YAC9E,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC;YACnC,EAAE,EAAE,+BAA+B;YACnC,OAAO,EAAE,0CAA0C;YACnD,YAAY,EAAE,KAAK,CAAC,WAAW;YAC/B,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC,EAAE,EAAE,+BAA+B;YACnC,OAAO,EAAE,wBAAwB;YACjC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;YACjG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAC,YAAY,EAAE,cAAc,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxC,QAAQ,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACvF,SAAS;QACX,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpE,QAAQ,CAAC,KAAK,CAAC,sCAAsC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QACD,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;QAC5B,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC;QACnC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,OAAO,UAAU,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAqB,EAAE,QAAwB;IACtE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,KAAK,CAAC,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAClC,EAAE,EAAE,iBAAiB;QACrB,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE;YACP,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAC;YAC3C,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,0BAA0B,EAAC;YACrD,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,uCAAuC,EAAC;SAClE;QACD,YAAY,EAAE,KAAK,CAAC,KAAK;KAC1B,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAqB,EAAE,QAAwB;IACzE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACrC,EAAE,EAAE,oBAAoB;QACxB,OAAO,EAAE,uBAAuB;QAChC,OAAO,EAAE;YACP,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAC;YAC1C,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAC;SACtC;QACD,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KAC5C,CAAC,CAAC;IACH,KAAK,CAAC,QAAQ,GAAG,QAAQ,KAAK,KAAK,CAAC;IACpC,OAAO,UAAU,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAqB,EAAE,QAAwB;IACxE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC,EAAE,EAAE,mBAAmB;QACvB,OAAO,EAAE,2BAA2B;QACpC,OAAO,EAAE;YACP,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAC;YACzC,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAC;SACjE;QACD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KAC3C,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,GAAG,OAAO,KAAK,KAAK,CAAC;IAClC,OAAO,UAAU,CAAC,QAAQ,EAAE,8BAA8B,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB;IACzC,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM;QAC1F,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE;QACjE,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,MAAM,KAAK,CAAC,kBAAkB,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IACpF,OAAO;QACL,cAAc,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,cAAc,EAAE;QACvD,WAAW,KAAK,CAAC,cAAc,MAAM,KAAK,CAAC,aAAa,MAAM,KAAK,CAAC,MAAM,EAAE;QAC5E,gBAAgB,WAAW,EAAE;QAC7B,UAAU,KAAK,CAAC,KAAK,oBAAoB,KAAK,CAAC,YAAY,EAAE;QAC7D,aAAa,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE;QACtD,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM;YAC1E,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB,EAAE,KAA6B,EAAE,MAAe;IACzF,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAClF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzH,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM,CAAC;IACjG,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,eAAe,IAAI,KAAK,CAAC,OAAO;QACzC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;QAC7B,MAAM;QACN,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC;IACX,IAAI,eAAe;QAAE,OAAO,EAAC,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,eAA+B,EAAC,CAAC;IACvF,OAAO,EAAC,GAAG,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,kBAAmB,EAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAA8B;IACnE,OAAO,OAAO,CAAC,iBAAiB;WAC3B,OAAO,CAAC,UAAU,KAAK,CAAC;WACxB,OAAO,CAAC,MAAM,KAAK,CAAC;WACpB,OAAO,CAAC,OAAO,KAAK,CAAC;WACrB,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAqB,EAAE,QAAwB;IACzE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,yBAAyB;QAC7B,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE;YACP,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,gCAAgC,EAAC;YACtF,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAC;YAC1C,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAC;YACzC,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAC;SAC/C;QACD,YAAY,EAAE,SAAS;KACxB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAwB,EAAE,KAAqB;IACrE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC,EAAE,EAAE,wBAAwB;QAC5B,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE;YACP,EAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAC;YACxC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;YAClC,EAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAC;YAC5C,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAC;YAChC,EAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAC;YACtC,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM,CAAC;gBAC5E,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,SAAkB,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC;gBACjD,CAAC,CAAC,EAAE,CAAC;YACP,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAC;YAC3C,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC;SACnC;QACD,YAAY,EAAE,QAAQ;KACvB,CAAC,CAAC;IACH,IAAI,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;IAC3D,OAAO,EAAC,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,YAAY,CAAC,OAA+B;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,OAAO;QACL,cAAc,EAAE,aAAa;QAC7B,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,OAAO,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC5B,eAAe,EAAE,MAAM,IAAI,YAAY;QACvC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAoC;IAChF,MAAM,EAAC,QAAQ,EAAC,GAAG,OAAO,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,mBAAmB,CAAC;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC;IACxD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAgD,CAAC;IACrD,IAAI,WAA8C,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;oBACnD,QAAQ,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBAC7C,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC;gBAC5I,CAAC;gBACD,IAAI,GAAG,CAAC,CAAC;gBACT,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC/C,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACpD,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC9C,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACjD,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChH,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAChD,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACxD,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;gBAC1F,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC;YAC5I,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACvC,SAAS;YACX,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC1D,IAAI,CAAC;oBACH,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;oBACzC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;oBAC5B,QAAQ,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;oBAC5F,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;gBAC3F,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvE,QAAQ,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;oBACpG,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,OAAO,IAAI,EAAE,CAAC;gBACZ,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;oBACzC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;gBAC9B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,GAAG,CAAC,CAAC;oBACb,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvE,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;wBAC1C,EAAE,EAAE,2BAA2B;wBAC/B,OAAO,EAAE,4BAA4B;wBACrC,OAAO,EAAE;4BACP,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAC;4BACzC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAC;4BAC1C,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC;yBAC/B;wBACD,YAAY,EAAE,MAAM;qBACrB,CAAC,CAAC;oBACH,IAAI,aAAa,KAAK,QAAQ;wBAAE,SAAS;oBACzC,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;wBAC7B,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBACvC,MAAM;oBACR,CAAC;oBACD,QAAQ,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;oBAC7D,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;gBAClE,CAAC;gBACD,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBACzD,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;gBACnG,CAAC;gBACD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACjC,EAAE,EAAE,yBAAyB;oBAC7B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,2CAA2C;oBACjG,OAAO,EAAE;wBACP,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3F,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAe,EAAE,KAAK,EAAE,mBAAmB,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC5E,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAC;wBACzC,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAC;wBAC1C,EAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAC;qBACjC;oBACD,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;iBACjF,CAAC,CAAC;gBACH,IAAI,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;oBACjD,IAAI,CAAC;wBACH,MAAM,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAC/C,QAAQ,CAAC,OAAO,CAAC,UAAU,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzE,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,KAAK,QAAQ;oBAAE,SAAS;gBAChC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;oBACpB,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACvC,MAAM;gBACR,CAAC;gBACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;oBACpB,WAAW,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC1D,IAAI,CAAC;wBACH,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;wBACzC,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;wBAC5B,QAAQ,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;wBAC5F,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;oBAC3F,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,QAAQ,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBACvE,QAAQ,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;wBACpG,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC3D,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;YAC3F,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,oBAAoB,CAAC;YAAE,MAAM,KAAK,CAAC;QAC1D,QAAQ,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC;QAClF,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC;IAC1I,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CliCommand } from './cli-arguments.js';
2
+ import type { TransferResult } from './migrator.js';
3
+ import type { MigrationReportPaths } from './report.js';
4
+ export type ParsedMigrationCommand = Extract<CliCommand, {
5
+ command: 'migrate';
6
+ }>;
7
+ export type ReadyMigrationCommand = Omit<ParsedMigrationCommand, 'source' | 'destination' | 'interactive'> & {
8
+ source: string;
9
+ destination: string;
10
+ interactive?: false;
11
+ };
12
+ export interface MigrationCommandOutcome {
13
+ code: number;
14
+ result?: TransferResult;
15
+ reportPaths?: MigrationReportPaths;
16
+ workspaceRoot: string;
17
+ }
18
+ export declare function readyMigrationCommand(command: ParsedMigrationCommand): ReadyMigrationCommand;
19
+ export declare function runMigrationCommand(command: ReadyMigrationCommand): Promise<MigrationCommandOutcome>;