@iwonz/ywtc 4.0.1 → 4.1.1

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,160 @@
1
+ import { Listr } from 'listr2';
2
+ import { readWorkspaceConfig, secretValues, validateProfileSecrets } from './config.js';
3
+ import { resolveDestinationLocator, resolveSourceLocator } from './locators.js';
4
+ import { createLogger } from './logger.js';
5
+ import { initializeWorkspace, resolveWorkspace, resolveWorkspacePath } from './workspace.js';
6
+ const color = process.stdout.isTTY && !process.env.NO_COLOR;
7
+ const paint = (code, value) => color ? `\u001b[${code}m${value}\u001b[0m` : value;
8
+ function heading(label) {
9
+ console.log(`\n${paint(36, '◆')} ${paint(1, label)}`);
10
+ }
11
+ function reportBearingError(error) {
12
+ return error instanceof Error
13
+ && typeof error.reportPaths === 'object'
14
+ && typeof error.stateFilename === 'string';
15
+ }
16
+ async function printAndMaybeOpenReport(paths, workdir, shouldOpen) {
17
+ const { openReportFile, reportAccessDetails } = await import('./report-catalog.js');
18
+ const access = reportAccessDetails(paths, workdir);
19
+ console.log(` Run ID ${access.runId}`);
20
+ console.log(` Report ${access.report}`);
21
+ console.log(` URL ${access.url}`);
22
+ console.log(` Open ${access.command}`);
23
+ if (!shouldOpen)
24
+ return;
25
+ try {
26
+ await openReportFile(paths.html);
27
+ console.log(` Opened ${access.url}`);
28
+ }
29
+ catch (error) {
30
+ console.log(` ${paint(33, 'Warning')} ${error instanceof Error ? error.message : String(error)}`);
31
+ }
32
+ }
33
+ export function readyMigrationCommand(command) {
34
+ if (!command.source || !command.destination) {
35
+ throw new Error('Migration requires source and destination. Use --interactive to configure them in a TTY wizard.');
36
+ }
37
+ const { interactive: _interactive, ...rest } = command;
38
+ return { ...rest, source: command.source, destination: command.destination };
39
+ }
40
+ export async function runMigrationCommand(command) {
41
+ const workspace = await resolveWorkspace(command.workdir ? { explicit: command.workdir } : {});
42
+ const initialized = await initializeWorkspace(workspace);
43
+ const config = readWorkspaceConfig(workspace.configFile);
44
+ const secrets = secretValues(config);
45
+ const source = resolveSourceLocator(config, command.source, command.sourceProfile);
46
+ const destination = resolveDestinationLocator({
47
+ config,
48
+ value: command.destination,
49
+ ...(command.destinationProfile ? { profile: command.destinationProfile } : {}),
50
+ ...(command.format ? { format: command.format } : {}),
51
+ cwd: process.cwd(),
52
+ });
53
+ validateProfileSecrets(config, [source.profile, ...(destination.type === 'remote' ? [destination.profile] : [])]);
54
+ const stateFilename = command.stateFilename ? resolveWorkspacePath(workspace, command.stateFilename) : undefined;
55
+ const logger = createLogger(secrets);
56
+ const { Migrator: MigratorImplementation } = await import('./migrator.js');
57
+ const migrator = new MigratorImplementation(config, logger);
58
+ const controller = new AbortController();
59
+ let signalCode;
60
+ const interrupt = () => { signalCode = 130; controller.abort(new Error('Interrupted by SIGINT')); };
61
+ const terminate = () => { signalCode = 143; controller.abort(new Error('Interrupted by SIGTERM')); };
62
+ process.once('SIGINT', interrupt);
63
+ process.once('SIGTERM', terminate);
64
+ heading('ywtc transfer');
65
+ console.log(` Workdir ${workspace.root} ${paint(90, `(${workspace.source})`)}`);
66
+ console.log(` Source ${command.source} ${paint(90, `[${source.profile.name}]`)}`);
67
+ console.log(` Destination ${command.destination}${destination.type === 'remote' ? ` ${paint(90, `[${destination.profile.name}]`)}` : ` ${paint(90, `[${destination.format}]`)}`}`);
68
+ console.log(` Scope ${command.scope}`);
69
+ console.log(` Source state ${command.sourceStatus}`);
70
+ console.log(` Comments ${command.comments ? 'enabled' : 'disabled'}`);
71
+ console.log(` Mode ${command.dryRun ? paint(33, 'dry-run · read-only') : paint(35, 'live')}`);
72
+ if (initialized.created.length > 0)
73
+ console.log(` Initialized ${initialized.created.join(', ')}`);
74
+ let result;
75
+ const tasks = new Listr([
76
+ {
77
+ title: 'Discover, transfer, and verify',
78
+ task: async (_context, task) => {
79
+ result = await migrator.run({
80
+ source,
81
+ destination,
82
+ scope: command.scope,
83
+ sourceStatus: command.sourceStatus,
84
+ comments: command.comments,
85
+ dryRun: command.dryRun,
86
+ archive: command.archive,
87
+ fresh: command.fresh,
88
+ concurrency: command.concurrency ?? config.concurrency,
89
+ runtimeDirectory: workspace.statesDirectory,
90
+ cacheDirectory: workspace.cacheDirectory,
91
+ reportsDirectory: workspace.reportsDirectory,
92
+ signal: controller.signal,
93
+ ...(stateFilename ? { stateFilename } : {}),
94
+ onStatus: (message) => { task.output = message; },
95
+ });
96
+ },
97
+ },
98
+ ], {
99
+ renderer: process.stdout.isTTY ? 'default' : 'simple',
100
+ rendererOptions: { collapseErrors: false, collapseSubtasks: false },
101
+ collectErrors: true,
102
+ });
103
+ try {
104
+ await tasks.run();
105
+ }
106
+ catch (error) {
107
+ if (signalCode) {
108
+ heading('Transfer interrupted');
109
+ console.log(` Status cancelled by ${signalCode === 130 ? 'SIGINT' : 'SIGTERM'}`);
110
+ console.log(` Workdir ${workspace.root}`);
111
+ console.log(` Reports ${workspace.reportsDirectory}`);
112
+ if (reportBearingError(error))
113
+ await printAndMaybeOpenReport(error.reportPaths, workspace.root, command.openReport);
114
+ console.log(` Resume ywtc migrate --source "${command.source}" --destination "${command.destination}" --scope ${command.scope}${command.sourceStatus === 'all' ? '' : ` --source-status ${command.sourceStatus}`} --workdir "${workspace.root}"`);
115
+ return {
116
+ code: signalCode,
117
+ workspaceRoot: workspace.root,
118
+ ...(reportBearingError(error) ? { reportPaths: error.reportPaths } : {}),
119
+ };
120
+ }
121
+ if (reportBearingError(error)) {
122
+ heading('Transfer failed');
123
+ console.log(' Status failed');
124
+ console.log(` State ${error.stateFilename}`);
125
+ await printAndMaybeOpenReport(error.reportPaths, workspace.root, command.openReport);
126
+ }
127
+ throw error;
128
+ }
129
+ finally {
130
+ process.removeListener('SIGINT', interrupt);
131
+ process.removeListener('SIGTERM', terminate);
132
+ }
133
+ if (!result)
134
+ throw new Error('Transfer completed without a result');
135
+ heading(result.status === 'completed' ? 'Transfer complete' : 'Transfer finished');
136
+ console.log(` Status ${result.status}`);
137
+ console.log(` State ${result.stateFilename}`);
138
+ await printAndMaybeOpenReport(result.reportPaths, workspace.root, command.openReport);
139
+ console.log(` Source root + ${result.summary.selectedDescendants}/${result.summary.returnedDescendants} descendants · ${result.summary.excludedPages} excluded · depth ${result.summary.maximumDepth}`);
140
+ console.log(` Assets ${result.summary.pages} pages · ${result.summary.resources} files · ${result.summary.sourceBytes} known bytes${result.summary.bytesUnknown ? ` · ${result.summary.bytesUnknown} sizes unknown` : ''}`);
141
+ console.log(` Pages ${result.summary.complete} complete · ${result.summary.partial} partial · ${result.summary.failed} failed · ${result.summary.blocked} blocked · ${result.summary.conflicts} conflicts · ${result.summary.notStartedPages} not started`);
142
+ console.log(` Files ${result.summary.resourcesComplete} complete · ${result.summary.resourcesPartial} partial · ${result.summary.resourcesFailed} failed · ${result.summary.resourcesBlocked} blocked · ${result.summary.resourcesNotStarted} not started${result.summary.resourcesPlanned ? ` · ${result.summary.resourcesPlanned} planned` : ''} · ${result.summary.bytes} transferred bytes`);
143
+ console.log(` Causes ${result.summary.rootErrors} root errors · ${result.summary.dependentPages} dependent pages · ${result.summary.dependentFiles} dependent files · ${result.summary.dependentComments} dependent comment archives`);
144
+ console.log(` Content ${result.summary.links} links · ${result.summary.cycles} traversal cycles · inventory ${result.summary.inventoryComplete ? 'complete' : 'incomplete'}`);
145
+ console.log(` Comments ${result.summary.comments} entries · ${result.summary.commentThreads} threads · ${result.summary.commentParticipants} participants · ${result.summary.commentAttachments} files · ${result.summary.commentBytes} bytes`);
146
+ console.log(` Quality ${result.summary.errors} errors · ${result.summary.warnings} warnings · ${result.summary.degradations} degradations · ${result.summary.adaptations} adaptations · ${result.summary.normalizations} safe normalizations · ${result.summary.preservedExternalReferences} external references preserved`);
147
+ if (result.output)
148
+ console.log(` Output ${result.output}`);
149
+ if (result.archive)
150
+ console.log(` Archive ${result.archive}`);
151
+ if (result.hasErrors)
152
+ console.log(` Resume ywtc migrate --source "${command.source}" --destination "${command.destination}" --scope ${command.scope}${command.sourceStatus === 'all' ? '' : ` --source-status ${command.sourceStatus}`}`);
153
+ return {
154
+ code: result.hasErrors ? 1 : 0,
155
+ result,
156
+ reportPaths: result.reportPaths,
157
+ workspaceRoot: workspace.root,
158
+ };
159
+ }
160
+ //# sourceMappingURL=migration-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-command.js","sourceRoot":"","sources":["../src/migration-command.ts"],"names":[],"mappings":"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"}