@ethlete/cli 2.1.0-next.8 → 3.0.0-next.16
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 +93 -0
- package/README.md +22 -7
- 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 +44 -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 +13 -2
- package/src/index.d.ts +1 -0
- package/src/index.js +32 -4
- package/src/index.js.map +1 -1
- package/src/lib/api/clear.js +13 -3
- package/src/lib/api/clear.js.map +1 -1
- package/src/lib/api/compose.js +5 -1
- package/src/lib/api/compose.js.map +1 -1
- package/src/lib/api/git.d.ts +11 -4
- package/src/lib/api/git.js +35 -8
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/api/load-definitions.js +10 -1
- package/src/lib/api/load-definitions.js.map +1 -1
- package/src/lib/api/ports.js +12 -3
- package/src/lib/api/ports.js.map +1 -1
- package/src/lib/api/run.js +8 -3
- package/src/lib/api/run.js.map +1 -1
- package/src/lib/api/setup.js +1 -1
- package/src/lib/api/setup.js.map +1 -1
- package/src/lib/api/state.js +7 -5
- package/src/lib/api/state.js.map +1 -1
- package/src/lib/auth/composer-auth.js +3 -2
- package/src/lib/auth/composer-auth.js.map +1 -1
- package/src/lib/auth/gitlab-token.js +1 -1
- package/src/lib/auth/gitlab-token.js.map +1 -1
- package/src/lib/config/diagnose.js +15 -9
- package/src/lib/config/diagnose.js.map +1 -1
- package/src/lib/config/local-config.d.ts +1 -1
- 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 +203 -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/design/vite-paths.d.ts +7 -0
- package/src/lib/design/vite-paths.js +15 -0
- package/src/lib/design/vite-paths.js.map +1 -0
- package/src/lib/doctor/doctor-command.js +18 -4
- package/src/lib/doctor/doctor-command.js.map +1 -1
- package/src/lib/index.d.ts +1 -0
- package/src/lib/index.js +1 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/release.d.ts +38 -1
- package/src/lib/release.js +153 -28
- 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/agent-setup.d.ts +33 -0
- package/src/lib/update/agent-setup.js +124 -0
- package/src/lib/update/agent-setup.js.map +1 -0
- package/src/lib/update/ai.d.ts +37 -8
- package/src/lib/update/ai.js +193 -24
- package/src/lib/update/ai.js.map +1 -1
- package/src/lib/update/args.d.ts +2 -0
- package/src/lib/update/args.js +22 -2
- package/src/lib/update/args.js.map +1 -1
- package/src/lib/update/available-migrations.d.ts +10 -0
- package/src/lib/update/available-migrations.js +23 -0
- package/src/lib/update/available-migrations.js.map +1 -0
- package/src/lib/update/commits.d.ts +63 -0
- package/src/lib/update/commits.js +146 -0
- package/src/lib/update/commits.js.map +1 -0
- package/src/lib/update/gitignore.d.ts +8 -0
- package/src/lib/update/gitignore.js +22 -0
- package/src/lib/update/gitignore.js.map +1 -0
- package/src/lib/update/index.d.ts +6 -0
- package/src/lib/update/index.js +6 -0
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/migration-manifest.d.ts +10 -0
- package/src/lib/update/migration-manifest.js +15 -3
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migration-record.d.ts +24 -0
- package/src/lib/update/migration-record.js +48 -0
- package/src/lib/update/migration-record.js.map +1 -0
- package/src/lib/update/migrations-command.d.ts +14 -0
- package/src/lib/update/migrations-command.js +212 -0
- package/src/lib/update/migrations-command.js.map +1 -0
- package/src/lib/update/package-manager.d.ts +20 -1
- package/src/lib/update/package-manager.js +34 -15
- package/src/lib/update/package-manager.js.map +1 -1
- package/src/lib/update/packages.d.ts +28 -8
- package/src/lib/update/packages.js +117 -36
- package/src/lib/update/packages.js.map +1 -1
- package/src/lib/update/pending.d.ts +16 -0
- package/src/lib/update/pending.js +21 -5
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/plan.d.ts +33 -8
- package/src/lib/update/plan.js +76 -7
- package/src/lib/update/plan.js.map +1 -1
- package/src/lib/update/registry.d.ts +32 -4
- package/src/lib/update/registry.js +145 -8
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +2 -0
- package/src/lib/update/run-migrations.js +20 -15
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/scan.d.ts +14 -0
- package/src/lib/update/scan.js +57 -0
- package/src/lib/update/scan.js.map +1 -0
- package/src/lib/update/semver.js +2 -1
- package/src/lib/update/semver.js.map +1 -1
- package/src/lib/update/tasks.d.ts +18 -1
- package/src/lib/update/tasks.js +114 -43
- package/src/lib/update/tasks.js.map +1 -1
- package/src/lib/update/update-command.d.ts +7 -0
- package/src/lib/update/update-command.js +300 -73
- package/src/lib/update/update-command.js.map +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ignoreUpdateDir = exports.ignoreEntry = exports.UPDATE_IGNORE_ENTRY = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const git_1 = require("../api/git");
|
|
7
|
+
exports.UPDATE_IGNORE_ENTRY = '.ethlete/update/';
|
|
8
|
+
/** Appends `entry` to `.gitignore` unless git ignores `probe` already. True when it wrote the line. */
|
|
9
|
+
const ignoreEntry = (options) => {
|
|
10
|
+
const { root, entry, probe = entry } = options;
|
|
11
|
+
if ((0, git_1.ignoredByGit)(root, probe) !== false)
|
|
12
|
+
return false;
|
|
13
|
+
const path = (0, path_1.join)(root, '.gitignore');
|
|
14
|
+
const current = (0, fs_1.existsSync)(path) ? (0, fs_1.readFileSync)(path, 'utf8') : '';
|
|
15
|
+
const separator = current.length === 0 || current.endsWith('\n') ? '' : '\n';
|
|
16
|
+
(0, fs_1.writeFileSync)(path, `${current}${separator}${entry}\n`, 'utf8');
|
|
17
|
+
return true;
|
|
18
|
+
};
|
|
19
|
+
exports.ignoreEntry = ignoreEntry;
|
|
20
|
+
const ignoreUpdateDir = (root) => (0, exports.ignoreEntry)({ root, entry: exports.UPDATE_IGNORE_ENTRY, probe: `${exports.UPDATE_IGNORE_ENTRY}pending.json` });
|
|
21
|
+
exports.ignoreUpdateDir = ignoreUpdateDir;
|
|
22
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/gitignore.ts"],"names":[],"mappings":";;;AAAA,2BAA6D;AAC7D,+BAA4B;AAC5B,oCAA0C;AAE7B,QAAA,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD,uGAAuG;AAChG,MAAM,WAAW,GAAG,CAAC,OAAwD,EAAE,EAAE;IACtF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE/C,IAAI,IAAA,kBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAEtD,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAA,eAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,IAAA,kBAAa,EAAC,IAAI,EAAE,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAZW,QAAA,WAAW,eAYtB;AAEK,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9C,IAAA,mBAAW,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,2BAAmB,EAAE,KAAK,EAAE,GAAG,2BAAmB,cAAc,EAAE,CAAC,CAAC;AADpF,QAAA,eAAe,mBACqE"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
export * from './agent-rules-sync';
|
|
1
2
|
export * from './ai';
|
|
2
3
|
export * from './args';
|
|
4
|
+
export * from './available-migrations';
|
|
5
|
+
export * from './commits';
|
|
3
6
|
export * from './migration-manifest';
|
|
7
|
+
export * from './migration-record';
|
|
8
|
+
export * from './migrations-command';
|
|
4
9
|
export * from './package-manager';
|
|
5
10
|
export * from './packages';
|
|
6
11
|
export * from './pending';
|
|
7
12
|
export * from './plan';
|
|
8
13
|
export * from './registry';
|
|
9
14
|
export * from './run-migrations';
|
|
15
|
+
export * from './scan';
|
|
10
16
|
export * from './semver';
|
|
11
17
|
export * from './tasks';
|
|
12
18
|
export * from './update-command';
|
package/src/lib/update/index.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./agent-rules-sync"), exports);
|
|
4
5
|
tslib_1.__exportStar(require("./ai"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./args"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./available-migrations"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./commits"), exports);
|
|
6
9
|
tslib_1.__exportStar(require("./migration-manifest"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./migration-record"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./migrations-command"), exports);
|
|
7
12
|
tslib_1.__exportStar(require("./package-manager"), exports);
|
|
8
13
|
tslib_1.__exportStar(require("./packages"), exports);
|
|
9
14
|
tslib_1.__exportStar(require("./pending"), exports);
|
|
10
15
|
tslib_1.__exportStar(require("./plan"), exports);
|
|
11
16
|
tslib_1.__exportStar(require("./registry"), exports);
|
|
12
17
|
tslib_1.__exportStar(require("./run-migrations"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./scan"), exports);
|
|
13
19
|
tslib_1.__exportStar(require("./semver"), exports);
|
|
14
20
|
tslib_1.__exportStar(require("./tasks"), exports);
|
|
15
21
|
tslib_1.__exportStar(require("./update-command"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqB;AACrB,iDAAuB;AACvB,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B;AAC3B,2DAAiC;AACjC,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,+CAAqB;AACrB,iDAAuB;AACvB,iEAAuC;AACvC,oDAA0B;AAC1B,+DAAqC;AACrC,6DAAmC;AACnC,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B;AAC3B,2DAAiC;AACjC,iDAAuB;AACvB,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
|
|
@@ -2,17 +2,27 @@
|
|
|
2
2
|
export declare const MIGRATIONS_MANIFEST_KEY = "ethlete";
|
|
3
3
|
export declare const MIGRATION_KINDS: readonly ["auto", "manual", "assisted"];
|
|
4
4
|
export type MigrationKind = (typeof MIGRATION_KINDS)[number];
|
|
5
|
+
export declare const MIGRATION_LEVELS: readonly ["required", "recommended", "optional"];
|
|
6
|
+
export type MigrationLevel = (typeof MIGRATION_LEVELS)[number];
|
|
5
7
|
export type Migration = {
|
|
6
8
|
/** Unique inside its package, and stable: it names the migration in every report. */
|
|
7
9
|
name: string;
|
|
8
10
|
/** The version the change landed in. The migration is pending for an update that crosses it. */
|
|
9
11
|
version: string;
|
|
10
12
|
kind: MigrationKind;
|
|
13
|
+
/** Whether `et update` must run it. A manifest entry without a level is `required`. */
|
|
14
|
+
level: MigrationLevel;
|
|
11
15
|
description: string;
|
|
12
16
|
/** `auto` only: the Nx generator that rewrites the code, as `@ethlete/core:migrate-x`. */
|
|
13
17
|
generator?: string;
|
|
14
18
|
/** `auto` only: flags handed to the generator, for example `{ skipFormat: true }`. */
|
|
15
19
|
options?: Record<string, string | number | boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* An Nx generator that finds the files the migration would touch and changes none. `et migrations` runs it
|
|
22
|
+
* with `--dry-run`, the migration's `options` and the env var `ETHLETE_SCAN_FILE` set to a path, and the
|
|
23
|
+
* generator writes a JSON array of the affected workspace-relative paths to that file.
|
|
24
|
+
*/
|
|
25
|
+
scan?: string;
|
|
16
26
|
/** Markdown next to the manifest: the recommendation for `manual`, the prompt for `assisted`. */
|
|
17
27
|
instructions?: string;
|
|
18
28
|
/** Path on the docs site, for example `/components/button`. */
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instructionsPath = exports.readPackageMigrations = exports.MIGRATION_KINDS = exports.MIGRATIONS_MANIFEST_KEY = void 0;
|
|
3
|
+
exports.instructionsPath = exports.readPackageMigrations = exports.MIGRATION_LEVELS = exports.MIGRATION_KINDS = exports.MIGRATIONS_MANIFEST_KEY = void 0;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const semver_1 = require("./semver");
|
|
7
7
|
/** The `package.json` field a package points at its own migration manifest with. */
|
|
8
8
|
exports.MIGRATIONS_MANIFEST_KEY = 'ethlete';
|
|
9
9
|
exports.MIGRATION_KINDS = ['auto', 'manual', 'assisted'];
|
|
10
|
+
exports.MIGRATION_LEVELS = ['required', 'recommended', 'optional'];
|
|
10
11
|
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11
12
|
const readJson = (path) => {
|
|
12
13
|
try {
|
|
@@ -31,6 +32,7 @@ const readOptions = (value) => {
|
|
|
31
32
|
return options;
|
|
32
33
|
};
|
|
33
34
|
const parseEntry = (options) => {
|
|
35
|
+
var _a;
|
|
34
36
|
const { value, origin, index } = options;
|
|
35
37
|
const at = `${origin} entry ${index}`;
|
|
36
38
|
if (!isRecord(value))
|
|
@@ -38,9 +40,13 @@ const parseEntry = (options) => {
|
|
|
38
40
|
const name = readString(value, 'name');
|
|
39
41
|
const version = readString(value, 'version');
|
|
40
42
|
const kind = readString(value, 'kind');
|
|
43
|
+
const level = (_a = readString(value, 'level')) !== null && _a !== void 0 ? _a : 'required';
|
|
41
44
|
const description = readString(value, 'description');
|
|
42
45
|
if (!name)
|
|
43
46
|
return { problem: `${at} has no "name".` };
|
|
47
|
+
if (!/^[\w.-]+$/.test(name) || /^\.+$/.test(name)) {
|
|
48
|
+
return { problem: `${origin} "${name}" has a name outside letters, digits, ".", "_" and "-".` };
|
|
49
|
+
}
|
|
44
50
|
if (!version)
|
|
45
51
|
return { problem: `${origin} "${name}" has no "version".` };
|
|
46
52
|
if (!(0, semver_1.isValidVersion)(version))
|
|
@@ -50,12 +56,18 @@ const parseEntry = (options) => {
|
|
|
50
56
|
if (!exports.MIGRATION_KINDS.includes(kind)) {
|
|
51
57
|
return { problem: `${origin} "${name}" has kind "${kind}" — use one of ${exports.MIGRATION_KINDS.join(', ')}.` };
|
|
52
58
|
}
|
|
59
|
+
if (!exports.MIGRATION_LEVELS.includes(level)) {
|
|
60
|
+
return { problem: `${origin} "${name}" has level "${level}" — use one of ${exports.MIGRATION_LEVELS.join(', ')}.` };
|
|
61
|
+
}
|
|
53
62
|
if (!description)
|
|
54
63
|
return { problem: `${origin} "${name}" has no "description".` };
|
|
55
64
|
const generator = readString(value, 'generator');
|
|
56
65
|
const instructions = readString(value, 'instructions');
|
|
57
66
|
if (kind === 'auto' && !generator)
|
|
58
67
|
return { problem: `${origin} "${name}" is auto but names no "generator".` };
|
|
68
|
+
if (instructions && ((0, path_1.isAbsolute)(instructions) || instructions.split(/[\\/]/).includes('..'))) {
|
|
69
|
+
return { problem: `${origin} "${name}" names "instructions" outside its package: ${instructions}.` };
|
|
70
|
+
}
|
|
59
71
|
if (kind === 'assisted' && !instructions) {
|
|
60
72
|
return { problem: `${origin} "${name}" is assisted but names no "instructions" file.` };
|
|
61
73
|
}
|
|
@@ -64,9 +76,11 @@ const parseEntry = (options) => {
|
|
|
64
76
|
name,
|
|
65
77
|
version,
|
|
66
78
|
kind: kind,
|
|
79
|
+
level: level,
|
|
67
80
|
description,
|
|
68
81
|
generator,
|
|
69
82
|
options: readOptions(value['options']),
|
|
83
|
+
scan: readString(value, 'scan'),
|
|
70
84
|
instructions,
|
|
71
85
|
docs: readString(value, 'docs'),
|
|
72
86
|
},
|
|
@@ -129,8 +143,6 @@ const instructionsPath = (options) => {
|
|
|
129
143
|
const { manifestPath, migration } = options;
|
|
130
144
|
if (!migration.instructions)
|
|
131
145
|
return undefined;
|
|
132
|
-
if ((0, path_1.isAbsolute)(migration.instructions))
|
|
133
|
-
return migration.instructions;
|
|
134
146
|
return manifestPath ? (0, path_1.resolve)((0, path_1.dirname)(manifestPath), migration.instructions) : undefined;
|
|
135
147
|
};
|
|
136
148
|
exports.instructionsPath = instructionsPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-manifest.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/migration-manifest.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA0D;AAC1D,qCAA0C;AAE1C,oFAAoF;AACvE,QAAA,uBAAuB,GAAG,SAAS,CAAC;AAEpC,QAAA,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"migration-manifest.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/migration-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const MIGRATION_RECORD_FILE: string;
|
|
2
|
+
export type MigrationRun = {
|
|
3
|
+
/** The installed version of the package when the migration ran. */
|
|
4
|
+
version: string;
|
|
5
|
+
ranAt: string;
|
|
6
|
+
};
|
|
7
|
+
/** The runs of the recommended and optional migrations, keyed by `<package>:<name>`. */
|
|
8
|
+
export type MigrationRecord = Record<string, MigrationRun>;
|
|
9
|
+
export type ReadMigrationRecord = {
|
|
10
|
+
record: MigrationRecord;
|
|
11
|
+
problems: string[];
|
|
12
|
+
};
|
|
13
|
+
export declare const migrationKey: (options: {
|
|
14
|
+
packageName: string;
|
|
15
|
+
name: string;
|
|
16
|
+
}) => string;
|
|
17
|
+
export declare const readMigrationRecord: (root: string) => ReadMigrationRecord;
|
|
18
|
+
/** Adds one run to the record, keeping the runs that are there. */
|
|
19
|
+
export declare const writeMigrationRun: (options: {
|
|
20
|
+
root: string;
|
|
21
|
+
packageName: string;
|
|
22
|
+
name: string;
|
|
23
|
+
run: MigrationRun;
|
|
24
|
+
}) => void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeMigrationRun = exports.readMigrationRecord = exports.migrationKey = exports.MIGRATION_RECORD_FILE = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
exports.MIGRATION_RECORD_FILE = (0, path_1.join)('.ethlete', 'migrations.json');
|
|
7
|
+
const migrationKey = (options) => `${options.packageName}:${options.name}`;
|
|
8
|
+
exports.migrationKey = migrationKey;
|
|
9
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
10
|
+
const isRun = (value) => isRecord(value) && typeof value['version'] === 'string' && typeof value['ranAt'] === 'string';
|
|
11
|
+
const readMigrationRecord = (root) => {
|
|
12
|
+
const path = (0, path_1.join)(root, exports.MIGRATION_RECORD_FILE);
|
|
13
|
+
if (!(0, fs_1.existsSync)(path))
|
|
14
|
+
return { record: {}, problems: [] };
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
|
|
18
|
+
}
|
|
19
|
+
catch (_a) {
|
|
20
|
+
return { record: {}, problems: [`${exports.MIGRATION_RECORD_FILE} is not valid JSON.`] };
|
|
21
|
+
}
|
|
22
|
+
if (!isRecord(parsed) || !isRecord(parsed['runs'])) {
|
|
23
|
+
return { record: {}, problems: [`${exports.MIGRATION_RECORD_FILE} has no "runs" object.`] };
|
|
24
|
+
}
|
|
25
|
+
const record = {};
|
|
26
|
+
const problems = [];
|
|
27
|
+
for (const [key, run] of Object.entries(parsed['runs'])) {
|
|
28
|
+
if (!/^@[^/:]+\/[^/:]+:.+$/.test(key))
|
|
29
|
+
problems.push(`${exports.MIGRATION_RECORD_FILE} has a run "${key}" with no package.`);
|
|
30
|
+
else if (!isRun(run))
|
|
31
|
+
problems.push(`${exports.MIGRATION_RECORD_FILE} run "${key}" needs a "version" and a "ranAt".`);
|
|
32
|
+
else
|
|
33
|
+
record[key] = { version: run.version, ranAt: run.ranAt };
|
|
34
|
+
}
|
|
35
|
+
return { record, problems };
|
|
36
|
+
};
|
|
37
|
+
exports.readMigrationRecord = readMigrationRecord;
|
|
38
|
+
/** Adds one run to the record, keeping the runs that are there. */
|
|
39
|
+
const writeMigrationRun = (options) => {
|
|
40
|
+
const { root, packageName, name, run } = options;
|
|
41
|
+
const path = (0, path_1.join)(root, exports.MIGRATION_RECORD_FILE);
|
|
42
|
+
const runs = Object.assign(Object.assign({}, (0, exports.readMigrationRecord)(root).record), { [(0, exports.migrationKey)({ packageName, name })]: run });
|
|
43
|
+
const sorted = Object.fromEntries(Object.entries(runs).sort(([left], [right]) => left.localeCompare(right)));
|
|
44
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(path), { recursive: true });
|
|
45
|
+
(0, fs_1.writeFileSync)(path, `${JSON.stringify({ runs: sorted }, null, 2)}\n`, 'utf8');
|
|
46
|
+
};
|
|
47
|
+
exports.writeMigrationRun = writeMigrationRun;
|
|
48
|
+
//# sourceMappingURL=migration-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-record.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/migration-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type MigrationsCommandOptions = {
|
|
2
|
+
/** Arguments after `migrations`, for example `['run', 'query:to-query-v3']`. */
|
|
3
|
+
argv: string[];
|
|
4
|
+
root?: string;
|
|
5
|
+
/** How the caller is invoked, used in the usage line. */
|
|
6
|
+
invocation?: string;
|
|
7
|
+
/** How `et update` is invoked in this repo, for the hint on a required migration. */
|
|
8
|
+
updateInvocation?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Lists the recommended and optional migrations this repo has not run, or runs one of them with the commit
|
|
12
|
+
* and task-report flow of `et update`, and records the run in `.ethlete/migrations.json`.
|
|
13
|
+
*/
|
|
14
|
+
export declare const migrationsCommand: ({ argv, root, invocation, updateInvocation, }: MigrationsCommandOptions) => 0 | 1;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.migrationsCommand = void 0;
|
|
4
|
+
const git_1 = require("../api/git");
|
|
5
|
+
const args_1 = require("./args");
|
|
6
|
+
const available_migrations_1 = require("./available-migrations");
|
|
7
|
+
const commits_1 = require("./commits");
|
|
8
|
+
const migration_manifest_1 = require("./migration-manifest");
|
|
9
|
+
const migration_record_1 = require("./migration-record");
|
|
10
|
+
const package_manager_1 = require("./package-manager");
|
|
11
|
+
const packages_1 = require("./packages");
|
|
12
|
+
const pending_1 = require("./pending");
|
|
13
|
+
const run_migrations_1 = require("./run-migrations");
|
|
14
|
+
const scan_1 = require("./scan");
|
|
15
|
+
const semver_1 = require("./semver");
|
|
16
|
+
const tasks_1 = require("./tasks");
|
|
17
|
+
const update_command_1 = require("./update-command");
|
|
18
|
+
const usage = (invocation) => [
|
|
19
|
+
`Usage: ${invocation}`,
|
|
20
|
+
` ${invocation} run <package>:<name> [flags]`,
|
|
21
|
+
'',
|
|
22
|
+
'Lists the recommended and optional migrations the installed @ethlete/* versions ship and this repo',
|
|
23
|
+
`has not run yet, or runs one of them. Each run is recorded in ${migration_record_1.MIGRATION_RECORD_FILE}; commit it.`,
|
|
24
|
+
'',
|
|
25
|
+
'Flags',
|
|
26
|
+
' --no-commit Leave the change uncommitted. By default the run is committed by itself',
|
|
27
|
+
' --force Run even when the working tree has uncommitted changes',
|
|
28
|
+
].join('\n');
|
|
29
|
+
const parseArgs = (argv) => {
|
|
30
|
+
const args = { commit: true, force: false, help: false, problems: [] };
|
|
31
|
+
const [first, ...rest] = argv;
|
|
32
|
+
const positional = [];
|
|
33
|
+
for (const argument of first === 'run' ? rest : argv) {
|
|
34
|
+
if (argument === '--no-commit')
|
|
35
|
+
args.commit = false;
|
|
36
|
+
else if (argument === '--force')
|
|
37
|
+
args.force = true;
|
|
38
|
+
else if (argument === '--help' || argument === '-h')
|
|
39
|
+
args.help = true;
|
|
40
|
+
else if (argument.startsWith('-'))
|
|
41
|
+
args.problems.push(`Unknown flag "${argument}".`);
|
|
42
|
+
else
|
|
43
|
+
positional.push(argument);
|
|
44
|
+
}
|
|
45
|
+
if (first !== 'run') {
|
|
46
|
+
if (positional.length > 0)
|
|
47
|
+
args.problems.push(`Unknown command "${positional.join(' ')}".`);
|
|
48
|
+
return args;
|
|
49
|
+
}
|
|
50
|
+
if (positional.length !== 1)
|
|
51
|
+
args.problems.push('run needs one migration, as <package>:<name>.');
|
|
52
|
+
else
|
|
53
|
+
args.run = positional[0];
|
|
54
|
+
return args;
|
|
55
|
+
};
|
|
56
|
+
const scanLabel = (scan) => {
|
|
57
|
+
if (scan === undefined)
|
|
58
|
+
return '';
|
|
59
|
+
if ('problem' in scan)
|
|
60
|
+
return ` - affected files unknown (${scan.problem})`;
|
|
61
|
+
return ` - ${scan.files.length} affected file${scan.files.length === 1 ? '' : 's'}`;
|
|
62
|
+
};
|
|
63
|
+
const printAvailable = (options) => {
|
|
64
|
+
const { available, invocation, scan } = options;
|
|
65
|
+
console.log(`${available.length} migration${available.length === 1 ? ' is' : 's are'} available:\n`);
|
|
66
|
+
for (const entry of available) {
|
|
67
|
+
const { migration, packageName, installed } = entry;
|
|
68
|
+
console.log(` ${migration.level} ${(0, migration_record_1.migrationKey)({ packageName, name: migration.name })} (${migration.kind})${scanLabel(scan(entry))}`);
|
|
69
|
+
console.log(` ${migration.description}`);
|
|
70
|
+
if (migration.docs)
|
|
71
|
+
console.log(` Docs: ${(0, tasks_1.docsBaseUrl)(installed)}${migration.docs}`);
|
|
72
|
+
console.log(` Run: ${invocation} run ${(0, migration_record_1.migrationKey)({ packageName, name: migration.name })}\n`);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const list = (options) => {
|
|
76
|
+
const { root, invocation } = options;
|
|
77
|
+
const { available, problems } = (0, available_migrations_1.collectAvailableMigrations)(root);
|
|
78
|
+
for (const problem of problems)
|
|
79
|
+
console.error(` ${problem}`);
|
|
80
|
+
if (available.length === 0) {
|
|
81
|
+
console.log('No recommended or optional migration is available.');
|
|
82
|
+
return problems.length > 0 ? 1 : 0;
|
|
83
|
+
}
|
|
84
|
+
const manifest = (0, packages_1.readManifest)(root);
|
|
85
|
+
const manager = manifest && (0, package_manager_1.detectPackageManager)({ root, manifest });
|
|
86
|
+
const scan = ({ migration }) => {
|
|
87
|
+
if (!migration.scan)
|
|
88
|
+
return undefined;
|
|
89
|
+
if (!manager)
|
|
90
|
+
return { problem: `${(0, packages_1.manifestPath)(root)} cannot be read` };
|
|
91
|
+
return (0, scan_1.runScan)({ root, manager, migration });
|
|
92
|
+
};
|
|
93
|
+
printAvailable({ available, invocation, scan });
|
|
94
|
+
return problems.length > 0 ? 1 : 0;
|
|
95
|
+
};
|
|
96
|
+
const findAvailable = (options) => {
|
|
97
|
+
const { root, key, invocation, updateInvocation } = options;
|
|
98
|
+
const separator = key.indexOf(':');
|
|
99
|
+
if (separator <= 0 || separator === key.length - 1) {
|
|
100
|
+
return { problem: `"${key}" names no migration. Name one as <package>:<name>.` };
|
|
101
|
+
}
|
|
102
|
+
const packageName = (0, args_1.fullPackageName)(key.slice(0, separator));
|
|
103
|
+
const name = key.slice(separator + 1);
|
|
104
|
+
const fullKey = (0, migration_record_1.migrationKey)({ packageName, name });
|
|
105
|
+
const installed = (0, packages_1.installedVersion)(root, packageName);
|
|
106
|
+
if (installed === undefined)
|
|
107
|
+
return { problem: `${packageName} is not installed.` };
|
|
108
|
+
const packageMigrations = (0, migration_manifest_1.readPackageMigrations)({ root, packageName });
|
|
109
|
+
const migration = packageMigrations.migrations.find((candidate) => candidate.name === name);
|
|
110
|
+
if (!migration) {
|
|
111
|
+
return {
|
|
112
|
+
problem: `${packageName} ${installed} ships no migration "${name}". Run \`${invocation}\` to list the available ones.`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (migration.level === 'required') {
|
|
116
|
+
return { problem: `${fullKey} is required, so \`${updateInvocation}\` runs it. It cannot run on its own.` };
|
|
117
|
+
}
|
|
118
|
+
const run = (0, migration_record_1.readMigrationRecord)(root).record[fullKey];
|
|
119
|
+
if (run)
|
|
120
|
+
return { problem: `${fullKey} already ran on ${run.ranAt}, with ${packageName} ${run.version}.` };
|
|
121
|
+
if ((0, semver_1.compareVersions)(migration.version, installed) > 0) {
|
|
122
|
+
return {
|
|
123
|
+
problem: `${fullKey} lands in ${migration.version}, and ${packageName} is on ${installed}. Run \`${updateInvocation}\` first.`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return { entry: { packageName, migration, manifestPath: packageMigrations.manifestPath, installed } };
|
|
127
|
+
};
|
|
128
|
+
const runOne = (options) => {
|
|
129
|
+
const { root, args, invocation, updateInvocation } = options;
|
|
130
|
+
const manifest = (0, packages_1.readManifest)(root);
|
|
131
|
+
if (!manifest) {
|
|
132
|
+
console.error(`${(0, packages_1.manifestPath)(root)} cannot be read.`);
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
135
|
+
const lookup = findAvailable({ root, key: args.run, invocation, updateInvocation });
|
|
136
|
+
if ('problem' in lookup) {
|
|
137
|
+
console.error(lookup.problem);
|
|
138
|
+
return 1;
|
|
139
|
+
}
|
|
140
|
+
const unfinished = (0, pending_1.readPendingUpdate)(root);
|
|
141
|
+
if (unfinished) {
|
|
142
|
+
console.error(`The update started at ${unfinished.startedAt} is not finished (${pending_1.PENDING_FILE}).\n` +
|
|
143
|
+
`Run \`${updateInvocation} --continue\` to finish it first.`);
|
|
144
|
+
return 1;
|
|
145
|
+
}
|
|
146
|
+
if (!args.force && (0, git_1.hasUncommittedChanges)(root)) {
|
|
147
|
+
console.error('The working tree has uncommitted changes, and the migration rewrites files.\n' +
|
|
148
|
+
'Commit or stash them first, or re-run with --force.');
|
|
149
|
+
return 1;
|
|
150
|
+
}
|
|
151
|
+
const { entry } = lookup;
|
|
152
|
+
const manager = (0, package_manager_1.detectPackageManager)({ root, manifest });
|
|
153
|
+
const commits = args.commit ? (0, commits_1.startCommits)(root) : undefined;
|
|
154
|
+
if (args.commit && !commits)
|
|
155
|
+
console.log(update_command_1.NOT_A_CHECKOUT);
|
|
156
|
+
const committer = commits && (0, commits_1.createStepCommitter)({ root, state: commits, save: () => undefined });
|
|
157
|
+
(0, update_command_1.ignoreTaskList)(root);
|
|
158
|
+
console.log(`\nRunning ${(0, migration_record_1.migrationKey)({ packageName: entry.packageName, name: entry.migration.name })}:\n`);
|
|
159
|
+
const outcomes = (0, run_migrations_1.runPendingMigrations)({
|
|
160
|
+
root,
|
|
161
|
+
manager,
|
|
162
|
+
pending: [entry],
|
|
163
|
+
dryRun: false,
|
|
164
|
+
afterEach: (outcome) => {
|
|
165
|
+
if (outcome.state !== 'failed') {
|
|
166
|
+
(0, migration_record_1.writeMigrationRun)({
|
|
167
|
+
root,
|
|
168
|
+
packageName: entry.packageName,
|
|
169
|
+
name: entry.migration.name,
|
|
170
|
+
run: { version: entry.installed, ranAt: new Date().toISOString() },
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
if (outcome.state === 'task' || outcome.state === 'unsupported') {
|
|
174
|
+
committer === null || committer === void 0 ? void 0 : committer.commit({
|
|
175
|
+
message: `chore(deps): Record the ${entry.packageName} ${entry.migration.name} migration`,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else
|
|
179
|
+
(0, update_command_1.commitMigration)(committer, outcome);
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
(0, update_command_1.printOutcomes)(outcomes, undefined);
|
|
183
|
+
const written = (0, tasks_1.writeUpdateTasks)({ root, updates: [], outcomes, manager, generatedAt: new Date().toISOString() });
|
|
184
|
+
if (written.tasks.length > 0) {
|
|
185
|
+
console.log(`\n ${written.tasks.length} task(s) written to ${written.reportPath}`);
|
|
186
|
+
console.log(` The same list for an agent: ${written.dataPath}`);
|
|
187
|
+
}
|
|
188
|
+
if (entry.migration.kind === 'assisted') {
|
|
189
|
+
console.log(`\n Run \`${updateInvocation} --continue --ai\` to hand the task to an agent.`);
|
|
190
|
+
}
|
|
191
|
+
return outcomes.some((outcome) => outcome.state === 'failed') ? 1 : 0;
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* Lists the recommended and optional migrations this repo has not run, or runs one of them with the commit
|
|
195
|
+
* and task-report flow of `et update`, and records the run in `.ethlete/migrations.json`.
|
|
196
|
+
*/
|
|
197
|
+
const migrationsCommand = ({ argv, root = process.cwd(), invocation = 'et migrations', updateInvocation = 'et update', }) => {
|
|
198
|
+
const args = parseArgs(argv);
|
|
199
|
+
if (args.help) {
|
|
200
|
+
console.log(usage(invocation));
|
|
201
|
+
return 0;
|
|
202
|
+
}
|
|
203
|
+
if (args.problems.length > 0) {
|
|
204
|
+
console.error(`${args.problems.join('\n')}\n\n${usage(invocation)}`);
|
|
205
|
+
return 1;
|
|
206
|
+
}
|
|
207
|
+
if (args.run === undefined)
|
|
208
|
+
return list({ root, invocation });
|
|
209
|
+
return runOne({ root, args: Object.assign(Object.assign({}, args), { run: args.run }), invocation, updateInvocation });
|
|
210
|
+
};
|
|
211
|
+
exports.migrationsCommand = migrationsCommand;
|
|
212
|
+
//# sourceMappingURL=migrations-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations-command.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/migrations-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SpawnSyncOptions } from 'child_process';
|
|
1
2
|
import { Manifest } from './packages';
|
|
2
3
|
export type PackageManagerName = 'yarn' | 'pnpm' | 'bun' | 'npm';
|
|
3
4
|
export type PackageManager = {
|
|
@@ -9,15 +10,33 @@ export type PackageManager = {
|
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
11
12
|
* The package manager this repo uses: what `packageManager` declares, else the lockfile that is there,
|
|
12
|
-
* else npm. `et update` runs the install itself, so it has to be
|
|
13
|
+
* else the one running this command, else npm. `et update` runs the install itself, so it has to be
|
|
14
|
+
* the same one the repo already uses.
|
|
13
15
|
*/
|
|
14
16
|
export declare const detectPackageManager: (options: {
|
|
15
17
|
root: string;
|
|
16
18
|
manifest?: Manifest;
|
|
17
19
|
env?: NodeJS.ProcessEnv;
|
|
18
20
|
}) => PackageManager;
|
|
21
|
+
/**
|
|
22
|
+
* The environment for the install `et update` spawns. Inside a package manager script, yarn 1 exports
|
|
23
|
+
* its own default registry as `npm_config_registry`, which the child install would read over the
|
|
24
|
+
* repo's `.npmrc` and `.yarnrc`. Dropping it lets the child read the repo's config, as it does when
|
|
25
|
+
* `et` runs outside a script.
|
|
26
|
+
*/
|
|
27
|
+
export declare const installEnv: (env?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
|
|
19
28
|
/** The command that runs an `nx` from this repo, for example `yarn nx generate …`. */
|
|
20
29
|
export declare const nxCommand: (options: {
|
|
21
30
|
manager: PackageManager;
|
|
22
31
|
args: readonly string[];
|
|
23
32
|
}) => string[];
|
|
33
|
+
/**
|
|
34
|
+
* Runs a package manager command such as `yarn install`. On Windows the managers are `.cmd` shims,
|
|
35
|
+
* which Node spawns only through a shell (CVE-2024-27980), so the command runs as one quoted line there.
|
|
36
|
+
*/
|
|
37
|
+
export declare const spawnPackageManager: (options: {
|
|
38
|
+
binary: string;
|
|
39
|
+
args: readonly string[];
|
|
40
|
+
spawn: SpawnSyncOptions;
|
|
41
|
+
platform?: NodeJS.Platform;
|
|
42
|
+
}) => import("child_process").SpawnSyncReturns<string | NonSharedBuffer>;
|