@ethlete/cli 2.0.1-next.2 → 2.1.0-next.11
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.
- package/CHANGELOG.md +109 -0
- package/README.md +178 -6
- package/design/define-call.ts +92 -0
- package/design/web/env.d.ts +11 -0
- package/design/web/frame.html +17 -0
- package/design/web/frame.ts +38 -0
- package/design/web/host.css +494 -0
- package/design/web/host.ts +445 -0
- package/design/web/index.html +11 -0
- package/package.json +12 -1
- package/src/index.d.ts +2 -1
- package/src/index.js +97 -10
- package/src/index.js.map +1 -1
- package/src/lib/api/api-command.d.ts +5 -0
- package/src/lib/api/api-command.js +27 -0
- package/src/lib/api/api-command.js.map +1 -0
- package/src/lib/api/auth-hint.d.ts +16 -0
- package/src/lib/api/auth-hint.js +59 -0
- package/src/lib/api/auth-hint.js.map +1 -0
- package/src/lib/api/clear.d.ts +36 -0
- package/src/lib/api/clear.js +121 -0
- package/src/lib/api/clear.js.map +1 -0
- package/src/lib/api/clone.d.ts +12 -0
- package/src/lib/api/clone.js +24 -0
- package/src/lib/api/clone.js.map +1 -0
- package/src/lib/api/compose.d.ts +46 -0
- package/src/lib/api/compose.js +101 -0
- package/src/lib/api/compose.js.map +1 -0
- package/src/lib/api/definition.d.ts +37 -0
- package/src/lib/api/definition.js +33 -0
- package/src/lib/api/definition.js.map +1 -0
- package/src/lib/api/git.d.ts +27 -0
- package/src/lib/api/git.js +79 -0
- package/src/lib/api/git.js.map +1 -0
- package/src/lib/api/help.d.ts +11 -0
- package/src/lib/api/help.js +72 -0
- package/src/lib/api/help.js.map +1 -0
- package/src/lib/api/index.d.ts +15 -0
- package/src/lib/api/index.js +19 -0
- package/src/lib/api/index.js.map +1 -0
- package/src/lib/api/load-definitions.d.ts +16 -0
- package/src/lib/api/load-definitions.js +22 -0
- package/src/lib/api/load-definitions.js.map +1 -0
- package/src/lib/api/ports.d.ts +13 -0
- package/src/lib/api/ports.js +98 -0
- package/src/lib/api/ports.js.map +1 -0
- package/src/lib/api/resolve-checkout.d.ts +45 -0
- package/src/lib/api/resolve-checkout.js +91 -0
- package/src/lib/api/resolve-checkout.js.map +1 -0
- package/src/lib/api/run.d.ts +10 -0
- package/src/lib/api/run.js +332 -0
- package/src/lib/api/run.js.map +1 -0
- package/src/lib/api/setup.d.ts +15 -0
- package/src/lib/api/setup.js +41 -0
- package/src/lib/api/setup.js.map +1 -0
- package/src/lib/api/state.d.ts +20 -0
- package/src/lib/api/state.js +33 -0
- package/src/lib/api/state.js.map +1 -0
- package/src/lib/api/suggest.d.ts +7 -0
- package/src/lib/api/suggest.js +35 -0
- package/src/lib/api/suggest.js.map +1 -0
- package/src/lib/auth/auth-command.d.ts +11 -0
- package/src/lib/auth/auth-command.js +165 -0
- package/src/lib/auth/auth-command.js.map +1 -0
- package/src/lib/auth/composer-auth.d.ts +30 -0
- package/src/lib/auth/composer-auth.js +70 -0
- package/src/lib/auth/composer-auth.js.map +1 -0
- package/src/lib/auth/composer-repositories.d.ts +5 -0
- package/src/lib/auth/composer-repositories.js +33 -0
- package/src/lib/auth/composer-repositories.js.map +1 -0
- package/src/lib/auth/gitlab-token.d.ts +43 -0
- package/src/lib/auth/gitlab-token.js +72 -0
- package/src/lib/auth/gitlab-token.js.map +1 -0
- package/src/lib/auth/index.d.ts +4 -0
- package/src/lib/auth/index.js +8 -0
- package/src/lib/auth/index.js.map +1 -0
- package/src/lib/config/diagnose.d.ts +7 -0
- package/src/lib/config/diagnose.js +112 -0
- package/src/lib/config/diagnose.js.map +1 -0
- package/src/lib/config/index.d.ts +2 -0
- package/src/lib/config/index.js +6 -0
- package/src/lib/config/index.js.map +1 -0
- package/src/lib/config/local-config.d.ts +46 -0
- package/src/lib/config/local-config.js +57 -0
- package/src/lib/config/local-config.js.map +1 -0
- package/src/lib/design/calls-tsconfig.d.ts +6 -0
- package/src/lib/design/calls-tsconfig.js +37 -0
- package/src/lib/design/calls-tsconfig.js.map +1 -0
- package/src/lib/design/check.d.ts +11 -0
- package/src/lib/design/check.js +192 -0
- package/src/lib/design/check.js.map +1 -0
- package/src/lib/design/design-command.d.ts +10 -0
- package/src/lib/design/design-command.js +32 -0
- package/src/lib/design/design-command.js.map +1 -0
- package/src/lib/design/index.d.ts +5 -0
- package/src/lib/design/index.js +9 -0
- package/src/lib/design/index.js.map +1 -0
- package/src/lib/design/paths.d.ts +24 -0
- package/src/lib/design/paths.js +31 -0
- package/src/lib/design/paths.js.map +1 -0
- package/src/lib/design/serve.d.ts +7 -0
- package/src/lib/design/serve.js +144 -0
- package/src/lib/design/serve.js.map +1 -0
- package/src/lib/doctor/doctor-command.d.ts +7 -0
- package/src/lib/doctor/doctor-command.js +62 -0
- package/src/lib/doctor/doctor-command.js.map +1 -0
- package/src/lib/doctor/index.d.ts +1 -0
- package/src/lib/doctor/index.js +5 -0
- package/src/lib/doctor/index.js.map +1 -0
- package/src/lib/index.d.ts +7 -0
- package/src/lib/index.js +7 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/invocation.d.ts +9 -0
- package/src/lib/invocation.js +47 -0
- package/src/lib/invocation.js.map +1 -0
- package/src/lib/release.js +21 -3
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/agent-rules-sync.d.ts +37 -0
- package/src/lib/update/agent-rules-sync.js +40 -0
- package/src/lib/update/agent-rules-sync.js.map +1 -0
- package/src/lib/update/ai.d.ts +37 -0
- package/src/lib/update/ai.js +71 -0
- package/src/lib/update/ai.js.map +1 -0
- package/src/lib/update/args.d.ts +21 -0
- package/src/lib/update/args.js +89 -0
- package/src/lib/update/args.js.map +1 -0
- package/src/lib/update/gitignore.d.ts +2 -0
- package/src/lib/update/gitignore.js +18 -0
- package/src/lib/update/gitignore.js.map +1 -0
- package/src/lib/update/index.d.ts +13 -0
- package/src/lib/update/index.js +17 -0
- package/src/lib/update/index.js.map +1 -0
- package/src/lib/update/migration-manifest.d.ts +40 -0
- package/src/lib/update/migration-manifest.js +137 -0
- package/src/lib/update/migration-manifest.js.map +1 -0
- package/src/lib/update/package-manager.d.ts +30 -0
- package/src/lib/update/package-manager.js +60 -0
- package/src/lib/update/package-manager.js.map +1 -0
- package/src/lib/update/packages.d.ts +65 -0
- package/src/lib/update/packages.js +147 -0
- package/src/lib/update/packages.js.map +1 -0
- package/src/lib/update/pending.d.ts +34 -0
- package/src/lib/update/pending.js +46 -0
- package/src/lib/update/pending.js.map +1 -0
- package/src/lib/update/plan.d.ts +51 -0
- package/src/lib/update/plan.js +101 -0
- package/src/lib/update/plan.js.map +1 -0
- package/src/lib/update/registry.d.ts +40 -0
- package/src/lib/update/registry.js +140 -0
- package/src/lib/update/registry.js.map +1 -0
- package/src/lib/update/run-migrations.d.ts +45 -0
- package/src/lib/update/run-migrations.js +73 -0
- package/src/lib/update/run-migrations.js.map +1 -0
- package/src/lib/update/semver.d.ts +19 -0
- package/src/lib/update/semver.js +79 -0
- package/src/lib/update/semver.js.map +1 -0
- package/src/lib/update/tasks.d.ts +75 -0
- package/src/lib/update/tasks.js +241 -0
- package/src/lib/update/tasks.js.map +1 -0
- package/src/lib/update/update-command.d.ts +12 -0
- package/src/lib/update/update-command.js +411 -0
- package/src/lib/update/update-command.js.map +1 -0
- package/src/lib/utils.d.ts +14 -0
- package/src/lib/utils.js +14 -1
- package/src/lib/utils.js.map +1 -1
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateCommand = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const git_1 = require("../api/git");
|
|
6
|
+
const local_config_1 = require("../config/local-config");
|
|
7
|
+
const ai_1 = require("./ai");
|
|
8
|
+
const agent_rules_sync_1 = require("./agent-rules-sync");
|
|
9
|
+
const args_1 = require("./args");
|
|
10
|
+
const gitignore_1 = require("./gitignore");
|
|
11
|
+
const migration_manifest_1 = require("./migration-manifest");
|
|
12
|
+
const package_manager_1 = require("./package-manager");
|
|
13
|
+
const packages_1 = require("./packages");
|
|
14
|
+
const plan_1 = require("./plan");
|
|
15
|
+
const pending_1 = require("./pending");
|
|
16
|
+
const registry_1 = require("./registry");
|
|
17
|
+
const run_migrations_1 = require("./run-migrations");
|
|
18
|
+
const tasks_1 = require("./tasks");
|
|
19
|
+
const usage = (invocation) => [
|
|
20
|
+
`Usage: ${invocation} [packages...] [flags]`,
|
|
21
|
+
'',
|
|
22
|
+
'Moves the @ethlete/* packages this repo declares to a newer version, then runs the migrations',
|
|
23
|
+
'those versions ship: the codemods by itself, and a report for everything that needs a decision.',
|
|
24
|
+
'',
|
|
25
|
+
'Every package.json in the repo is rewritten, not only the root one, so a library manifest that',
|
|
26
|
+
'pins @ethlete/* moves with it.',
|
|
27
|
+
'',
|
|
28
|
+
'A package may be named short (`core`) or in full (`@ethlete/core`). With no name, every',
|
|
29
|
+
'@ethlete/* dependency is updated.',
|
|
30
|
+
'',
|
|
31
|
+
'Flags',
|
|
32
|
+
' --check Print what would change and exit 1 when an update is pending. Writes nothing',
|
|
33
|
+
' --dry-run Print the plan, and the migrations the installed versions know about',
|
|
34
|
+
' --tag <tag> Dist tag to update to. Defaults to the tag the installed prerelease is on',
|
|
35
|
+
' --to <version> Exact version for the one package you name',
|
|
36
|
+
' --from <p@ver> The version a package migrates from, when the installed one is already newer',
|
|
37
|
+
' --no-install Write package.json, then stop. Install yourself and re-run with --continue',
|
|
38
|
+
' --continue Run the migrations of an update that was written but never finished',
|
|
39
|
+
' --ai Hand every open agent-assisted task to the command in updateAgentCommand',
|
|
40
|
+
' --force Update even when the working tree has uncommitted changes',
|
|
41
|
+
].join('\n');
|
|
42
|
+
const padded = (value, width) => value.padEnd(width);
|
|
43
|
+
const printUpdates = (updates) => {
|
|
44
|
+
var _a;
|
|
45
|
+
const width = Math.max(...updates.map((update) => update.name.length));
|
|
46
|
+
for (const update of updates) {
|
|
47
|
+
const tag = update.tag ? ` (${update.tag})` : '';
|
|
48
|
+
console.log(` ${padded(update.name, width)} ${(_a = update.from) !== null && _a !== void 0 ? _a : 'not installed'} → ${update.to}${tag}`);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const problemsOf = (updates) => updates.flatMap((update) => update.unwritable.map((site) => `${site.manifestPath} declares ${update.name} as "${site.range}", which no single version can be ` +
|
|
52
|
+
`written into. Change it to ${update.to} by hand.`));
|
|
53
|
+
const resolveUpdates = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
const { root, manager, declared, version, tag } = options;
|
|
55
|
+
const registry = (0, registry_1.registryUrl)({ root, manager: manager.name });
|
|
56
|
+
const result = { updates: [], problems: [], upToDate: [] };
|
|
57
|
+
const lookups = yield Promise.all(declared.map((entry) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
58
|
+
return ({
|
|
59
|
+
entry,
|
|
60
|
+
lookup: yield (0, registry_1.fetchRegistryPackage)({ packageName: entry.name, registry }),
|
|
61
|
+
});
|
|
62
|
+
})));
|
|
63
|
+
for (const { entry, lookup } of lookups) {
|
|
64
|
+
if (!lookup.ok) {
|
|
65
|
+
result.problems.push(`${entry.name}: ${lookup.reason}`);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const choice = (0, plan_1.chooseTarget)({ declared: entry, registry: lookup.package, request: { version, tag } });
|
|
69
|
+
if ('problem' in choice) {
|
|
70
|
+
result.problems.push(choice.problem);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if ('upToDate' in choice) {
|
|
74
|
+
result.upToDate.push(entry.name);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
result.updates.push(choice.update);
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
});
|
|
81
|
+
const collectMigrations = (options) => {
|
|
82
|
+
var _a;
|
|
83
|
+
const { root, updates, from } = options;
|
|
84
|
+
const collected = { pending: [], notes: [], problems: [] };
|
|
85
|
+
for (const update of updates) {
|
|
86
|
+
const start = (_a = from[update.name]) !== null && _a !== void 0 ? _a : update.from;
|
|
87
|
+
if (start === undefined) {
|
|
88
|
+
collected.notes.push(`${update.name} was not installed before, so it has nothing to migrate.`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const packageMigrations = (0, migration_manifest_1.readPackageMigrations)({ root, packageName: update.name });
|
|
92
|
+
collected.problems.push(...packageMigrations.problems);
|
|
93
|
+
collected.pending.push(...(0, plan_1.pendingMigrations)({ packageMigrations, from: start, to: update.to }));
|
|
94
|
+
}
|
|
95
|
+
collected.pending = (0, plan_1.orderMigrations)(collected.pending);
|
|
96
|
+
return collected;
|
|
97
|
+
};
|
|
98
|
+
const printMigrations = (pending) => {
|
|
99
|
+
if (pending.length === 0)
|
|
100
|
+
console.log(' none');
|
|
101
|
+
for (const entry of pending) {
|
|
102
|
+
console.log(` ${entry.migration.version} ${entry.packageName} ${entry.migration.name} (${entry.migration.kind})`);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const printOutcomes = (outcomes, syncFailure) => {
|
|
106
|
+
const applied = outcomes.filter((outcome) => outcome.state === 'applied').length;
|
|
107
|
+
const failed = outcomes.filter((outcome) => outcome.state === 'failed');
|
|
108
|
+
const tasks = outcomes.filter((outcome) => outcome.state === 'task' || outcome.state === 'unsupported').length;
|
|
109
|
+
const failedCount = failed.length + (syncFailure ? 1 : 0);
|
|
110
|
+
console.log(`\n ${applied} codemod(s) applied, ${tasks} task(s) left, ${failedCount} failed`);
|
|
111
|
+
for (const outcome of failed) {
|
|
112
|
+
console.error(` - ${outcome.pending.packageName} ${outcome.pending.migration.name}: ${outcome.reason}`);
|
|
113
|
+
}
|
|
114
|
+
if (syncFailure)
|
|
115
|
+
console.error(` - ${syncFailure.command}: ${syncFailure.reason}`);
|
|
116
|
+
};
|
|
117
|
+
const syncAgentRules = (options) => {
|
|
118
|
+
const { root, manager, updates, dryRun } = options;
|
|
119
|
+
const plan = (0, agent_rules_sync_1.planAgentRulesSync)({ root, manager, updates });
|
|
120
|
+
if (plan.state === 'not-updated')
|
|
121
|
+
return undefined;
|
|
122
|
+
const command = plan.command.join(' ');
|
|
123
|
+
if (plan.state === 'no-config') {
|
|
124
|
+
console.log(`\n ${agent_rules_sync_1.AGENT_RULES_PACKAGE} moved, but this repo has no config for it. Run \`${command}\` where it has one.`);
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
if (dryRun) {
|
|
128
|
+
console.log(`\n ${agent_rules_sync_1.AGENT_RULES_PACKAGE} moved: a real run regenerates the agent rules with \`${command}\`.`);
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
console.log(`\n ${agent_rules_sync_1.AGENT_RULES_PACKAGE} moved, so the agent rules and skills are regenerated.\n\n ${command}\n`);
|
|
132
|
+
const outcome = (0, agent_rules_sync_1.runAgentRulesSync)(plan, root);
|
|
133
|
+
if (outcome.state !== 'failed')
|
|
134
|
+
return undefined;
|
|
135
|
+
console.error(` The agent rules sync failed: ${outcome.reason}`);
|
|
136
|
+
return { command, reason: outcome.reason };
|
|
137
|
+
};
|
|
138
|
+
/** Hands the open assisted tasks to the agent and reports the runs. False when one of them failed. */
|
|
139
|
+
const handToAgent = (options) => {
|
|
140
|
+
const { root, template, tasks } = options;
|
|
141
|
+
if ((0, ai_1.assistedTasks)(tasks).length === 0) {
|
|
142
|
+
console.log('\n --ai had nothing to do: no open task is agent-assisted.');
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
const runs = (0, ai_1.runAgentTasks)({ root, template, tasks });
|
|
146
|
+
const count = (state) => runs.filter((run) => run.state === state).length;
|
|
147
|
+
console.log(`\n ${count('done')} agent task(s) done, ${count('open')} still open, ${count('failed')} failed`);
|
|
148
|
+
return count('failed') === 0;
|
|
149
|
+
};
|
|
150
|
+
const agentFailedHint = (invocation) => `\nAn agent run failed. Run \`${invocation} --ai\` again to hand it the tasks that are still open.`;
|
|
151
|
+
const runMigrationPhase = (options) => {
|
|
152
|
+
var _a;
|
|
153
|
+
const { root, manager, pendingUpdate, updates, from, dryRun, agent } = options;
|
|
154
|
+
const finished = (_a = pendingUpdate.finished) !== null && _a !== void 0 ? _a : [];
|
|
155
|
+
const collected = collectMigrations({ root, updates, from });
|
|
156
|
+
const skipped = collected.pending.filter((entry) => (0, pending_1.isFinished)({ finished, packageName: entry.packageName, name: entry.migration.name }));
|
|
157
|
+
collected.pending = collected.pending.filter((entry) => !skipped.includes(entry));
|
|
158
|
+
if (skipped.length > 0)
|
|
159
|
+
console.log(`\n ${skipped.length} codemod(s) already applied in the earlier run.`);
|
|
160
|
+
for (const note of collected.notes)
|
|
161
|
+
console.log(` ${note}`);
|
|
162
|
+
for (const problem of collected.problems)
|
|
163
|
+
console.error(` ${problem}`);
|
|
164
|
+
// Before the tasks and any --ai run: the tasks assume the skills of the version that was installed.
|
|
165
|
+
const syncFailure = syncAgentRules({ root, manager, updates, dryRun });
|
|
166
|
+
const nothingPending = collected.pending.length === 0;
|
|
167
|
+
if (nothingPending)
|
|
168
|
+
console.log('\nNo migration is pending for those versions.');
|
|
169
|
+
else {
|
|
170
|
+
console.log(`\n${collected.pending.length} migration(s) to run:\n`);
|
|
171
|
+
printMigrations(collected.pending);
|
|
172
|
+
if (!(0, run_migrations_1.hasNx)(root)) {
|
|
173
|
+
console.log('\n This repo has no Nx, so every codemod is reported as a command to run by hand.');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const outcomes = (0, run_migrations_1.runPendingMigrations)({ root, manager, pending: collected.pending, dryRun });
|
|
177
|
+
if (!nothingPending)
|
|
178
|
+
printOutcomes(outcomes, syncFailure);
|
|
179
|
+
if (!dryRun) {
|
|
180
|
+
const applied = outcomes
|
|
181
|
+
.filter((outcome) => outcome.state === 'applied')
|
|
182
|
+
.map((outcome) => ({ packageName: outcome.pending.packageName, name: outcome.pending.migration.name }));
|
|
183
|
+
(0, pending_1.writePendingUpdate)({ root, pending: Object.assign(Object.assign({}, pendingUpdate), { finished: [...finished, ...applied] }) });
|
|
184
|
+
}
|
|
185
|
+
if (dryRun) {
|
|
186
|
+
if (!nothingPending)
|
|
187
|
+
console.log('\nDry run: no report was written.');
|
|
188
|
+
return {
|
|
189
|
+
failed: nothingPending && (collected.problems.length > 0 || syncFailure !== undefined),
|
|
190
|
+
agentFailed: false,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const written = (0, tasks_1.writeUpdateTasks)({
|
|
194
|
+
root,
|
|
195
|
+
updates,
|
|
196
|
+
outcomes: [...skipped.map((entry) => ({ pending: entry, state: 'applied' })), ...outcomes],
|
|
197
|
+
manager,
|
|
198
|
+
generatedAt: new Date().toISOString(),
|
|
199
|
+
syncFailure,
|
|
200
|
+
});
|
|
201
|
+
if (written.tasks.length > 0) {
|
|
202
|
+
console.log(`\n ${written.tasks.length} task(s) written to ${written.reportPath}`);
|
|
203
|
+
console.log(` The same list for an agent: ${written.dataPath}`);
|
|
204
|
+
}
|
|
205
|
+
const agentOk = agent === undefined || handToAgent({ root, template: agent, tasks: written.tasks });
|
|
206
|
+
return {
|
|
207
|
+
agentFailed: !agentOk,
|
|
208
|
+
failed: outcomes.some((outcome) => outcome.state === 'failed') ||
|
|
209
|
+
collected.problems.length > 0 ||
|
|
210
|
+
syncFailure !== undefined,
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
const ignoreTaskList = (root) => {
|
|
214
|
+
if (!(0, gitignore_1.ignoreUpdateDir)(root))
|
|
215
|
+
return;
|
|
216
|
+
console.log(`\n ${gitignore_1.UPDATE_IGNORE_ENTRY} added to .gitignore: the task list is yours, not the repo's.`);
|
|
217
|
+
};
|
|
218
|
+
const continueHint = (invocation) => `\nRun \`${invocation} --continue\` again once the failures above are fixed.`;
|
|
219
|
+
/** Hands the tasks an earlier run left to the agent, for an `--ai` run that has no update to make. */
|
|
220
|
+
const workOpenTasks = (options) => {
|
|
221
|
+
const { root, agent, invocation } = options;
|
|
222
|
+
const tasks = (0, tasks_1.refreshUpdateTasks)(root);
|
|
223
|
+
if (tasks === undefined) {
|
|
224
|
+
console.log(`\n --ai had nothing to do: ${tasks_1.UPDATE_DIR} holds no task list.`);
|
|
225
|
+
return 0;
|
|
226
|
+
}
|
|
227
|
+
if (handToAgent({ root, template: agent, tasks }))
|
|
228
|
+
return 0;
|
|
229
|
+
console.error(agentFailedHint(invocation));
|
|
230
|
+
return 1;
|
|
231
|
+
};
|
|
232
|
+
const exitAfterAgent = (options) => {
|
|
233
|
+
if (!options.agentFailed)
|
|
234
|
+
return 0;
|
|
235
|
+
console.error(agentFailedHint(options.invocation));
|
|
236
|
+
return 1;
|
|
237
|
+
};
|
|
238
|
+
const resume = (options) => {
|
|
239
|
+
const { root, manager, argv, invocation, agent } = options;
|
|
240
|
+
const pending = (0, pending_1.readPendingUpdate)(root);
|
|
241
|
+
if (!pending && agent !== undefined && !argv.dryRun) {
|
|
242
|
+
console.log(`No update to continue: handing the open tasks in ${tasks_1.UPDATE_DIR} to the agent.`);
|
|
243
|
+
return workOpenTasks({ root, agent, invocation });
|
|
244
|
+
}
|
|
245
|
+
if (!pending) {
|
|
246
|
+
console.error(`Nothing to continue: ${pending_1.PENDING_FILE} is not there.`);
|
|
247
|
+
return 1;
|
|
248
|
+
}
|
|
249
|
+
if (!argv.dryRun)
|
|
250
|
+
ignoreTaskList(root);
|
|
251
|
+
console.log(`\nContinuing the update started at ${pending.startedAt}:\n`);
|
|
252
|
+
const updates = pending.packages.map((entry) => {
|
|
253
|
+
var _a;
|
|
254
|
+
return ({
|
|
255
|
+
name: entry.name,
|
|
256
|
+
from: (_a = entry.from) !== null && _a !== void 0 ? _a : undefined,
|
|
257
|
+
to: entry.to,
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
printUpdates(updates);
|
|
261
|
+
const result = runMigrationPhase({
|
|
262
|
+
root,
|
|
263
|
+
manager,
|
|
264
|
+
pendingUpdate: pending,
|
|
265
|
+
updates,
|
|
266
|
+
from: Object.assign(Object.assign({}, pending.from), argv.from),
|
|
267
|
+
dryRun: argv.dryRun,
|
|
268
|
+
agent,
|
|
269
|
+
});
|
|
270
|
+
if (argv.dryRun)
|
|
271
|
+
return result.failed ? 1 : 0;
|
|
272
|
+
if (result.failed) {
|
|
273
|
+
console.error(continueHint(invocation));
|
|
274
|
+
return 1;
|
|
275
|
+
}
|
|
276
|
+
(0, pending_1.clearPendingUpdate)(root);
|
|
277
|
+
return exitAfterAgent({ agentFailed: result.agentFailed, invocation });
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Moves this repo's `@ethlete/*` dependencies to a newer version and runs the migrations those versions
|
|
281
|
+
* ship. Everything the codemods cannot decide is written to a task list under `.ethlete/update`.
|
|
282
|
+
*/
|
|
283
|
+
const updateCommand = (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ argv, root = process.cwd(), invocation = 'et update', }) {
|
|
284
|
+
var _b;
|
|
285
|
+
const args = (0, args_1.parseUpdateArgs)(argv);
|
|
286
|
+
if (args.help) {
|
|
287
|
+
console.log(usage(invocation));
|
|
288
|
+
return 0;
|
|
289
|
+
}
|
|
290
|
+
if (args.problems.length > 0) {
|
|
291
|
+
console.error(`${args.problems.join('\n')}\n\n${usage(invocation)}`);
|
|
292
|
+
return 1;
|
|
293
|
+
}
|
|
294
|
+
const agent = args.ai ? (0, local_config_1.readLocalConfig)(root).config.updateAgentCommand : undefined;
|
|
295
|
+
if (args.ai && !agent) {
|
|
296
|
+
console.error(`--ai needs "${ai_1.AGENT_COMMAND_KEY}" in ethlete.config.local.json, for example "${ai_1.AGENT_COMMAND_EXAMPLE}".\n` +
|
|
297
|
+
'Nothing was changed.');
|
|
298
|
+
return 1;
|
|
299
|
+
}
|
|
300
|
+
const manifest = (0, packages_1.readManifest)(root);
|
|
301
|
+
if (!manifest) {
|
|
302
|
+
console.error(`${(0, packages_1.manifestPath)(root)} cannot be read, so there is nothing to update.`);
|
|
303
|
+
return 1;
|
|
304
|
+
}
|
|
305
|
+
const manager = (0, package_manager_1.detectPackageManager)({ root, manifest });
|
|
306
|
+
const unfinished = args.check ? (0, pending_1.readPendingUpdate)(root) : undefined;
|
|
307
|
+
if (unfinished) {
|
|
308
|
+
console.error(`\nThe update started at ${unfinished.startedAt} is not finished (${pending_1.PENDING_FILE}).\n` +
|
|
309
|
+
`Run \`${invocation} --continue\` to finish it.`);
|
|
310
|
+
return 1;
|
|
311
|
+
}
|
|
312
|
+
if (args.resume)
|
|
313
|
+
return resume({ root, manager, argv: args, invocation, agent });
|
|
314
|
+
const manifests = (0, packages_1.findManifests)(root);
|
|
315
|
+
const all = (0, packages_1.declaredEthletePackages)({ root, manifests });
|
|
316
|
+
const named = args.packages.filter((name) => !all.some((entry) => entry.name === name));
|
|
317
|
+
if (named.length > 0) {
|
|
318
|
+
console.error(`This repo declares no ${named.join(', ')}.`);
|
|
319
|
+
return 1;
|
|
320
|
+
}
|
|
321
|
+
const declared = args.packages.length === 0 ? all : all.filter((entry) => args.packages.includes(entry.name));
|
|
322
|
+
if (declared.length === 0) {
|
|
323
|
+
console.log('This repo declares no @ethlete/* dependency.');
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
const resolved = yield resolveUpdates({ root, manager, declared, version: args.version, tag: args.tag });
|
|
327
|
+
for (const problem of resolved.problems)
|
|
328
|
+
console.error(` ${problem}`);
|
|
329
|
+
if (resolved.updates.length === 0) {
|
|
330
|
+
if (resolved.problems.length > 0) {
|
|
331
|
+
console.error(`\n${resolved.problems.length} lookup(s) failed, ${resolved.upToDate.length} package(s) on their newest version.`);
|
|
332
|
+
return 1;
|
|
333
|
+
}
|
|
334
|
+
console.log(`\nEvery @ethlete package is on its newest version (${resolved.upToDate.length} checked).`);
|
|
335
|
+
if (args.check || args.dryRun)
|
|
336
|
+
return 0;
|
|
337
|
+
if (agent !== undefined)
|
|
338
|
+
return workOpenTasks({ root, agent, invocation });
|
|
339
|
+
(0, tasks_1.refreshUpdateTasks)(root);
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
console.log('');
|
|
343
|
+
if (manifests.length > 1)
|
|
344
|
+
console.log(` ${manifests.length} package.json files scanned.\n`);
|
|
345
|
+
printUpdates(resolved.updates);
|
|
346
|
+
for (const update of resolved.updates.filter(plan_1.isDowngrade)) {
|
|
347
|
+
console.log(`\n ${update.name} moves back to ${update.to}, which is older than the installed ${update.from}.`);
|
|
348
|
+
}
|
|
349
|
+
const rangeProblems = problemsOf(resolved.updates);
|
|
350
|
+
for (const problem of rangeProblems)
|
|
351
|
+
console.error(`\n ${problem}`);
|
|
352
|
+
const writable = resolved.updates.filter((update) => update.writes.length > 0);
|
|
353
|
+
if (args.check) {
|
|
354
|
+
console.log(`\nRun \`${invocation}\` to apply this.`);
|
|
355
|
+
return 1;
|
|
356
|
+
}
|
|
357
|
+
if (args.dryRun) {
|
|
358
|
+
console.log('\nMigrations the installed versions know about. The target may ship more:\n');
|
|
359
|
+
printMigrations(collectMigrations({ root, updates: writable, from: args.from }).pending);
|
|
360
|
+
console.log('\nDry run: nothing was written.');
|
|
361
|
+
return 0;
|
|
362
|
+
}
|
|
363
|
+
if (writable.length === 0) {
|
|
364
|
+
console.error('\nNo range could be written. Nothing was changed.');
|
|
365
|
+
return 1;
|
|
366
|
+
}
|
|
367
|
+
if (!args.force && (0, git_1.hasUncommittedChanges)(root)) {
|
|
368
|
+
console.error('\nThe working tree has uncommitted changes, and the codemods rewrite files.\n' +
|
|
369
|
+
'Commit or stash them first, or re-run with --force.');
|
|
370
|
+
return 1;
|
|
371
|
+
}
|
|
372
|
+
ignoreTaskList(root);
|
|
373
|
+
const changedManifests = (0, packages_1.writeRanges)({ root, writes: writable.flatMap((update) => update.writes) });
|
|
374
|
+
const pendingUpdate = Object.assign({ startedAt: new Date().toISOString(), packages: writable.map((update) => { var _a; return ({ name: update.name, from: (_a = update.from) !== null && _a !== void 0 ? _a : null, to: update.to }); }) }, (Object.keys(args.from).length > 0 ? { from: args.from } : {}));
|
|
375
|
+
(0, pending_1.writePendingUpdate)({ root, pending: pendingUpdate });
|
|
376
|
+
const manifestNote = changedManifests.length === 1
|
|
377
|
+
? ((_b = changedManifests[0]) !== null && _b !== void 0 ? _b : packages_1.ROOT_MANIFEST)
|
|
378
|
+
: `${changedManifests.length} package.json files`;
|
|
379
|
+
console.log(`\n ${manifestNote} updated. The migration plan is in ${pending_1.PENDING_FILE}.`);
|
|
380
|
+
if (!args.install) {
|
|
381
|
+
console.log(`\nInstall the new versions, then run \`${invocation} --continue\`.`);
|
|
382
|
+
return 0;
|
|
383
|
+
}
|
|
384
|
+
console.log(`\n ${manager.install.join(' ')}\n`);
|
|
385
|
+
const installed = (0, run_migrations_1.runInstall)({ root, manager });
|
|
386
|
+
if (!installed.ok) {
|
|
387
|
+
console.error(`\nThe install failed: ${installed.reason}\n` +
|
|
388
|
+
`Fix it, then run \`${invocation} --continue\` to run the migrations.`);
|
|
389
|
+
return 1;
|
|
390
|
+
}
|
|
391
|
+
const result = runMigrationPhase({
|
|
392
|
+
root,
|
|
393
|
+
manager,
|
|
394
|
+
pendingUpdate,
|
|
395
|
+
updates: writable,
|
|
396
|
+
from: args.from,
|
|
397
|
+
dryRun: false,
|
|
398
|
+
agent,
|
|
399
|
+
});
|
|
400
|
+
if (result.failed) {
|
|
401
|
+
console.error(continueHint(invocation));
|
|
402
|
+
return 1;
|
|
403
|
+
}
|
|
404
|
+
(0, pending_1.clearPendingUpdate)(root);
|
|
405
|
+
console.log(`\nDone. Read ${tasks_1.UPDATE_DIR} for anything left to do.`);
|
|
406
|
+
if (result.agentFailed)
|
|
407
|
+
return exitAfterAgent({ agentFailed: true, invocation });
|
|
408
|
+
return rangeProblems.length > 0 ? 1 : 0;
|
|
409
|
+
});
|
|
410
|
+
exports.updateCommand = updateCommand;
|
|
411
|
+
//# sourceMappingURL=update-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/update-command.ts"],"names":[],"mappings":"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"}
|
package/src/lib/utils.d.ts
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
1
|
export declare const askQuestion: (question: string) => Promise<string>;
|
|
2
|
+
export type ConfirmOptions = {
|
|
3
|
+
/** What is wrong, or what is about to happen. Printed above the question. */
|
|
4
|
+
problem: string;
|
|
5
|
+
question: string;
|
|
6
|
+
/** Printed instead of the question when no terminal can answer it. It names the flag that skips it. */
|
|
7
|
+
hint: string;
|
|
8
|
+
/** What an empty answer means. Pass `false` for anything that deletes. */
|
|
9
|
+
defaultsToYes: boolean;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Asks a yes or no question. Without a terminal it prints the hint and answers no, so nothing
|
|
13
|
+
* applies itself in a script that cannot be asked.
|
|
14
|
+
*/
|
|
15
|
+
export declare const confirm: ({ problem, question, hint, defaultsToYes }: ConfirmOptions) => Promise<boolean>;
|
package/src/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.askQuestion = void 0;
|
|
3
|
+
exports.confirm = exports.askQuestion = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const promises_1 = require("readline/promises");
|
|
6
6
|
const askQuestion = (question) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -16,4 +16,17 @@ const askQuestion = (question) => tslib_1.__awaiter(void 0, void 0, void 0, func
|
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
exports.askQuestion = askQuestion;
|
|
19
|
+
/**
|
|
20
|
+
* Asks a yes or no question. Without a terminal it prints the hint and answers no, so nothing
|
|
21
|
+
* applies itself in a script that cannot be asked.
|
|
22
|
+
*/
|
|
23
|
+
const confirm = (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ problem, question, hint, defaultsToYes }) {
|
|
24
|
+
if (!process.stdin.isTTY) {
|
|
25
|
+
console.error(`${problem}\n\n${hint}`);
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const answer = (yield (0, exports.askQuestion)(`${problem}\n\n${question} ${defaultsToYes ? '[Y/n]' : '[y/N]'} `)).trim();
|
|
29
|
+
return defaultsToYes ? !/^n(o)?$/i.test(answer) : /^y(es)?$/i.test(answer);
|
|
30
|
+
});
|
|
31
|
+
exports.confirm = confirm;
|
|
19
32
|
//# sourceMappingURL=utils.js.map
|
package/src/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/utils.ts"],"names":[],"mappings":";;;;AAAA,gDAAoD;AAE7C,MAAM,WAAW,GAAG,CAAO,QAAgB,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,0BAAe,EAAC;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,WAAW,eAWtB"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/utils.ts"],"names":[],"mappings":";;;;AAAA,gDAAoD;AAE7C,MAAM,WAAW,GAAG,CAAO,QAAgB,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,0BAAe,EAAC;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,WAAW,eAWtB;AAYF;;;GAGG;AACI,MAAM,OAAO,GAAG,KAAmE,EAAE,oDAA9D,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAkB;IACtF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC;QAEvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,IAAA,mBAAW,EAAC,GAAG,OAAO,OAAO,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE7G,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC,CAAA,CAAC;AAVW,QAAA,OAAO,WAUlB"}
|