@ethlete/cli 2.1.0-next.7 → 2.1.0-next.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +35 -0
  3. package/design/define-call.ts +92 -0
  4. package/design/web/env.d.ts +11 -0
  5. package/design/web/frame.html +17 -0
  6. package/design/web/frame.ts +38 -0
  7. package/design/web/host.css +494 -0
  8. package/design/web/host.ts +445 -0
  9. package/design/web/index.html +11 -0
  10. package/package.json +12 -1
  11. package/src/index.js +25 -0
  12. package/src/index.js.map +1 -1
  13. package/src/lib/config/diagnose.js +9 -0
  14. package/src/lib/config/diagnose.js.map +1 -1
  15. package/src/lib/config/local-config.d.ts +2 -0
  16. package/src/lib/config/local-config.js +6 -1
  17. package/src/lib/config/local-config.js.map +1 -1
  18. package/src/lib/design/calls-tsconfig.d.ts +6 -0
  19. package/src/lib/design/calls-tsconfig.js +37 -0
  20. package/src/lib/design/calls-tsconfig.js.map +1 -0
  21. package/src/lib/design/check.d.ts +11 -0
  22. package/src/lib/design/check.js +192 -0
  23. package/src/lib/design/check.js.map +1 -0
  24. package/src/lib/design/design-command.d.ts +10 -0
  25. package/src/lib/design/design-command.js +32 -0
  26. package/src/lib/design/design-command.js.map +1 -0
  27. package/src/lib/design/index.d.ts +5 -0
  28. package/src/lib/design/index.js +9 -0
  29. package/src/lib/design/index.js.map +1 -0
  30. package/src/lib/design/paths.d.ts +24 -0
  31. package/src/lib/design/paths.js +31 -0
  32. package/src/lib/design/paths.js.map +1 -0
  33. package/src/lib/design/serve.d.ts +7 -0
  34. package/src/lib/design/serve.js +144 -0
  35. package/src/lib/design/serve.js.map +1 -0
  36. package/src/lib/doctor/doctor-command.d.ts +3 -1
  37. package/src/lib/doctor/doctor-command.js +5 -5
  38. package/src/lib/doctor/doctor-command.js.map +1 -1
  39. package/src/lib/index.d.ts +2 -0
  40. package/src/lib/index.js +2 -0
  41. package/src/lib/index.js.map +1 -1
  42. package/src/lib/release.js +21 -3
  43. package/src/lib/release.js.map +1 -1
  44. package/src/lib/update/ai.d.ts +30 -0
  45. package/src/lib/update/ai.js +44 -0
  46. package/src/lib/update/ai.js.map +1 -0
  47. package/src/lib/update/args.d.ts +21 -0
  48. package/src/lib/update/args.js +89 -0
  49. package/src/lib/update/args.js.map +1 -0
  50. package/src/lib/update/index.d.ts +12 -0
  51. package/src/lib/update/index.js +16 -0
  52. package/src/lib/update/index.js.map +1 -0
  53. package/src/lib/update/migration-manifest.d.ts +40 -0
  54. package/src/lib/update/migration-manifest.js +137 -0
  55. package/src/lib/update/migration-manifest.js.map +1 -0
  56. package/src/lib/update/package-manager.d.ts +23 -0
  57. package/src/lib/update/package-manager.js +47 -0
  58. package/src/lib/update/package-manager.js.map +1 -0
  59. package/src/lib/update/packages.d.ts +65 -0
  60. package/src/lib/update/packages.js +147 -0
  61. package/src/lib/update/packages.js.map +1 -0
  62. package/src/lib/update/pending.d.ts +21 -0
  63. package/src/lib/update/pending.js +41 -0
  64. package/src/lib/update/pending.js.map +1 -0
  65. package/src/lib/update/plan.d.ts +51 -0
  66. package/src/lib/update/plan.js +101 -0
  67. package/src/lib/update/plan.js.map +1 -0
  68. package/src/lib/update/registry.d.ts +31 -0
  69. package/src/lib/update/registry.js +54 -0
  70. package/src/lib/update/registry.js.map +1 -0
  71. package/src/lib/update/run-migrations.d.ts +44 -0
  72. package/src/lib/update/run-migrations.js +73 -0
  73. package/src/lib/update/run-migrations.js.map +1 -0
  74. package/src/lib/update/semver.d.ts +19 -0
  75. package/src/lib/update/semver.js +79 -0
  76. package/src/lib/update/semver.js.map +1 -0
  77. package/src/lib/update/tasks.d.ts +58 -0
  78. package/src/lib/update/tasks.js +174 -0
  79. package/src/lib/update/tasks.js.map +1 -0
  80. package/src/lib/update/update-command.d.ts +12 -0
  81. package/src/lib/update/update-command.js +304 -0
  82. package/src/lib/update/update-command.js.map +1 -0
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rangeFor = exports.writeRanges = exports.declaredEthletePackages = exports.newestDeclaredVersion = exports.installedVersion = exports.findManifests = exports.readManifest = exports.manifestPath = exports.DEPENDENCY_FIELDS = exports.ROOT_MANIFEST = exports.ETHLETE_SCOPE = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const semver_1 = require("./semver");
7
+ exports.ETHLETE_SCOPE = '@ethlete/';
8
+ exports.ROOT_MANIFEST = 'package.json';
9
+ exports.DEPENDENCY_FIELDS = ['dependencies', 'devDependencies', 'peerDependencies'];
10
+ const SKIPPED_DIRECTORIES = new Set(['coverage', 'dist', 'node_modules', 'tmp']);
11
+ const readJson = (path) => {
12
+ try {
13
+ return JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
14
+ }
15
+ catch (_a) {
16
+ return undefined;
17
+ }
18
+ };
19
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
20
+ const manifestPath = (root) => (0, path_1.join)(root, exports.ROOT_MANIFEST);
21
+ exports.manifestPath = manifestPath;
22
+ const readManifest = (root, relativePath = exports.ROOT_MANIFEST) => {
23
+ const parsed = readJson((0, path_1.join)(root, relativePath));
24
+ return isRecord(parsed) ? parsed : undefined;
25
+ };
26
+ exports.readManifest = readManifest;
27
+ /**
28
+ * Every `package.json` in the repo, root first. An Nx repo keeps a manifest per buildable library, and
29
+ * those pin `@ethlete/*` too, so an update that only rewrites the root leaves the rest behind.
30
+ */
31
+ const findManifests = (root) => {
32
+ const found = [];
33
+ const walk = (directory) => {
34
+ let entries;
35
+ try {
36
+ entries = (0, fs_1.readdirSync)(directory, { withFileTypes: true });
37
+ }
38
+ catch (_a) {
39
+ return;
40
+ }
41
+ for (const entry of entries) {
42
+ if (entry.isDirectory()) {
43
+ if (entry.name.startsWith('.') || SKIPPED_DIRECTORIES.has(entry.name))
44
+ continue;
45
+ walk((0, path_1.join)(directory, entry.name));
46
+ continue;
47
+ }
48
+ if (entry.name !== exports.ROOT_MANIFEST)
49
+ continue;
50
+ found.push((0, path_1.relative)(root, (0, path_1.join)(directory, entry.name)).split(path_1.sep).join('/'));
51
+ }
52
+ };
53
+ walk(root);
54
+ return found.sort((left, right) => {
55
+ if (left === exports.ROOT_MANIFEST)
56
+ return -1;
57
+ if (right === exports.ROOT_MANIFEST)
58
+ return 1;
59
+ return left.localeCompare(right);
60
+ });
61
+ };
62
+ exports.findManifests = findManifests;
63
+ /** The version of `packageName` in `node_modules`, which is the one the running code came from. */
64
+ const installedVersion = (root, packageName) => {
65
+ const path = (0, path_1.join)(root, 'node_modules', ...packageName.split('/'), exports.ROOT_MANIFEST);
66
+ if (!(0, fs_1.existsSync)(path))
67
+ return undefined;
68
+ const parsed = readJson(path);
69
+ return isRecord(parsed) && typeof parsed['version'] === 'string' ? parsed['version'] : undefined;
70
+ };
71
+ exports.installedVersion = installedVersion;
72
+ /**
73
+ * The version an update starts from when nothing is installed: the newest one any manifest declares, so
74
+ * a library manifest that lags behind the root does not read as the current version.
75
+ */
76
+ const newestDeclaredVersion = (sites) => sites.reduce((newest, site) => {
77
+ if (site.declaredVersion === undefined)
78
+ return newest;
79
+ return newest === undefined || (0, semver_1.compareVersions)(site.declaredVersion, newest) > 0 ? site.declaredVersion : newest;
80
+ }, undefined);
81
+ exports.newestDeclaredVersion = newestDeclaredVersion;
82
+ /** Every `@ethlete/*` dependency the repo declares, gathered across all of its manifests. */
83
+ const declaredEthletePackages = (options) => {
84
+ var _a, _b;
85
+ const { root, manifests = (0, exports.findManifests)(root) } = options;
86
+ const byName = new Map();
87
+ for (const relativePath of manifests) {
88
+ const manifest = (0, exports.readManifest)(root, relativePath);
89
+ if (!manifest)
90
+ continue;
91
+ for (const field of exports.DEPENDENCY_FIELDS) {
92
+ for (const [name, range] of Object.entries((_a = manifest[field]) !== null && _a !== void 0 ? _a : {})) {
93
+ if (!name.startsWith(exports.ETHLETE_SCOPE))
94
+ continue;
95
+ const entry = (_b = byName.get(name)) !== null && _b !== void 0 ? _b : {
96
+ name,
97
+ sites: [],
98
+ installedVersion: (0, exports.installedVersion)(root, name),
99
+ };
100
+ entry.sites.push({ manifestPath: relativePath, field, range, declaredVersion: (0, semver_1.versionOfRange)(range) });
101
+ byName.set(name, entry);
102
+ }
103
+ }
104
+ }
105
+ return [...byName.values()];
106
+ };
107
+ exports.declaredEthletePackages = declaredEthletePackages;
108
+ const detectIndent = (source) => { var _a, _b; return (_b = (_a = /\n([ \t]+)"/.exec(source)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : ' '; };
109
+ /**
110
+ * Writes new ranges into the manifests they came from, keeping each file's indentation. A whole file is
111
+ * re-serialised, so a comment or a key order the parser cannot represent would not survive -
112
+ * `package.json` holds neither.
113
+ */
114
+ const writeRanges = (options) => {
115
+ const { root, writes } = options;
116
+ const written = [];
117
+ for (const relativePath of new Set(writes.map((write) => write.manifestPath))) {
118
+ const path = (0, path_1.join)(root, relativePath);
119
+ const source = (0, fs_1.readFileSync)(path, 'utf8');
120
+ const parsed = JSON.parse(source);
121
+ if (!isRecord(parsed))
122
+ throw new Error(`${path} is not a JSON object.`);
123
+ for (const write of writes.filter((candidate) => candidate.manifestPath === relativePath)) {
124
+ const field = parsed[write.field];
125
+ if (!isRecord(field))
126
+ continue;
127
+ field[write.name] = write.range;
128
+ }
129
+ const indent = detectIndent(source);
130
+ const trailingNewline = source.endsWith('\n') ? '\n' : '';
131
+ (0, fs_1.writeFileSync)(path, `${JSON.stringify(parsed, null, indent)}${trailingNewline}`, 'utf8');
132
+ written.push(relativePath);
133
+ }
134
+ return written;
135
+ };
136
+ exports.writeRanges = writeRanges;
137
+ /**
138
+ * The range that carries `version` while keeping how the declared one was written, for example `^`.
139
+ * `undefined` for a range this cannot rewrite safely, such as `workspace:*` or `>=5 <6`.
140
+ */
141
+ const rangeFor = (options) => {
142
+ const { current, version } = options;
143
+ const prefix = (0, semver_1.rangePrefix)(current);
144
+ return prefix === undefined ? undefined : `${prefix}${version}`;
145
+ };
146
+ exports.rangeFor = rangeFor;
147
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/packages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const PENDING_FILE: string;
2
+ export type PendingPackage = {
3
+ name: string;
4
+ /** The version that was installed before the update, which the migrations run from. */
5
+ from: string | null;
6
+ to: string;
7
+ };
8
+ export type PendingUpdate = {
9
+ startedAt: string;
10
+ packages: PendingPackage[];
11
+ };
12
+ /**
13
+ * Records what an update moved, before the install replaces the versions the migrations run from. An
14
+ * install or a codemod that fails leaves this file behind, so `et update --continue` can pick it up.
15
+ */
16
+ export declare const writePendingUpdate: (options: {
17
+ root: string;
18
+ pending: PendingUpdate;
19
+ }) => void;
20
+ export declare const readPendingUpdate: (root: string) => PendingUpdate | undefined;
21
+ export declare const clearPendingUpdate: (root: string) => void;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearPendingUpdate = exports.readPendingUpdate = exports.writePendingUpdate = exports.PENDING_FILE = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const tasks_1 = require("./tasks");
7
+ exports.PENDING_FILE = (0, path_1.join)(tasks_1.UPDATE_DIR, 'pending.json');
8
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
9
+ /**
10
+ * Records what an update moved, before the install replaces the versions the migrations run from. An
11
+ * install or a codemod that fails leaves this file behind, so `et update --continue` can pick it up.
12
+ */
13
+ const writePendingUpdate = (options) => {
14
+ const { root, pending } = options;
15
+ (0, fs_1.mkdirSync)((0, path_1.join)(root, tasks_1.UPDATE_DIR), { recursive: true });
16
+ (0, fs_1.writeFileSync)((0, path_1.join)(root, exports.PENDING_FILE), `${JSON.stringify(pending, null, 2)}\n`, 'utf8');
17
+ };
18
+ exports.writePendingUpdate = writePendingUpdate;
19
+ const readPendingUpdate = (root) => {
20
+ const path = (0, path_1.join)(root, exports.PENDING_FILE);
21
+ if (!(0, fs_1.existsSync)(path))
22
+ return undefined;
23
+ let parsed;
24
+ try {
25
+ parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
26
+ }
27
+ catch (_a) {
28
+ return undefined;
29
+ }
30
+ if (!isRecord(parsed) || !Array.isArray(parsed['packages']))
31
+ return undefined;
32
+ const packages = parsed['packages'].filter((entry) => isRecord(entry) && typeof entry['name'] === 'string' && typeof entry['to'] === 'string');
33
+ return {
34
+ startedAt: typeof parsed['startedAt'] === 'string' ? parsed['startedAt'] : 'an earlier run',
35
+ packages: packages.map((entry) => { var _a; return ({ name: entry.name, from: (_a = entry.from) !== null && _a !== void 0 ? _a : null, to: entry.to }); }),
36
+ };
37
+ };
38
+ exports.readPendingUpdate = readPendingUpdate;
39
+ const clearPendingUpdate = (root) => (0, fs_1.rmSync)((0, path_1.join)(root, exports.PENDING_FILE), { force: true });
40
+ exports.clearPendingUpdate = clearPendingUpdate;
41
+ //# sourceMappingURL=pending.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/pending.ts"],"names":[],"mappings":";;;AAAA,2BAAgF;AAChF,+BAA4B;AAC5B,mCAAqC;AAExB,QAAA,YAAY,GAAG,IAAA,WAAI,EAAC,kBAAU,EAAE,cAAc,CAAC,CAAC;AAc7D,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,OAAiD,EAAE,EAAE;IACtF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAElC,IAAA,cAAS,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,kBAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,oBAAY,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3F,CAAC,CAAC;AALW,QAAA,kBAAkB,sBAK7B;AAEK,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAA6B,EAAE;IAC3E,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,oBAAY,CAAC,CAAC;IAEtC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9E,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CACxC,CAAC,KAAK,EAA2B,EAAE,CACjC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAC1F,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB;QAC3F,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAA,KAAK,CAAC,IAAI,mCAAI,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA,EAAA,CAAC;KAClG,CAAC;AACJ,CAAC,CAAC;AAxBW,QAAA,iBAAiB,qBAwB5B;AAEK,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAA,WAAM,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,oBAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAAzF,QAAA,kBAAkB,sBAAuE"}
@@ -0,0 +1,51 @@
1
+ import { DeclaredPackage, DeclaredSite, RangeWrite } from './packages';
2
+ import { Migration, PackageMigrations } from './migration-manifest';
3
+ import { RegistryPackage } from './registry';
4
+ export type UpdatedPackage = {
5
+ name: string;
6
+ /** The installed version the migrations run from, or `undefined` when nothing is installed. */
7
+ from?: string;
8
+ to: string;
9
+ };
10
+ export type PackageUpdate = UpdatedPackage & {
11
+ /** The dist tag the target came from, absent when the caller named a version. */
12
+ tag?: string;
13
+ /** Every range to rewrite, one per manifest and field that declares the package. */
14
+ writes: RangeWrite[];
15
+ /** The sites whose declared range no single version can be written into. */
16
+ unwritable: DeclaredSite[];
17
+ };
18
+ export type TargetChoice = {
19
+ update: PackageUpdate;
20
+ } | {
21
+ problem: string;
22
+ } | {
23
+ upToDate: true;
24
+ };
25
+ export type TargetRequest = {
26
+ /** A version the caller named with `--to`. */
27
+ version?: string;
28
+ /** A dist tag the caller named with `--tag`. */
29
+ tag?: string;
30
+ };
31
+ /** The version an update moves a package to, from the registry's dist tags or the caller's request. */
32
+ export declare const chooseTarget: (options: {
33
+ declared: DeclaredPackage;
34
+ registry: RegistryPackage;
35
+ request?: TargetRequest;
36
+ }) => TargetChoice;
37
+ export declare const isDowngrade: (update: PackageUpdate) => boolean;
38
+ export type PendingMigration = {
39
+ packageName: string;
40
+ migration: Migration;
41
+ /** Where the instructions of this migration live, when it names any. */
42
+ manifestPath?: string;
43
+ };
44
+ /** The migrations of one package that an update from `from` to `to` crosses. */
45
+ export declare const pendingMigrations: (options: {
46
+ packageMigrations: PackageMigrations;
47
+ from: string;
48
+ to: string;
49
+ }) => PendingMigration[];
50
+ /** Oldest version first, and inside one version the package that others build on first. */
51
+ export declare const orderMigrations: (pending: readonly PendingMigration[]) => PendingMigration[];
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.orderMigrations = exports.pendingMigrations = exports.isDowngrade = exports.chooseTarget = void 0;
4
+ const packages_1 = require("./packages");
5
+ const registry_1 = require("./registry");
6
+ const semver_1 = require("./semver");
7
+ /**
8
+ * The order two migrations of the same version run in, following the dependency layering: a rewrite in
9
+ * `core` lands before the `components` one that builds on it.
10
+ */
11
+ const PACKAGE_ORDER = [
12
+ '@ethlete/types',
13
+ '@ethlete/core',
14
+ '@ethlete/query',
15
+ '@ethlete/components',
16
+ '@ethlete/contentful',
17
+ '@ethlete/query-devtools',
18
+ '@ethlete/cdk',
19
+ '@ethlete/eslint-plugin',
20
+ '@ethlete/agent-rules',
21
+ '@ethlete/cli',
22
+ ];
23
+ /** The version an update moves a package to, from the registry's dist tags or the caller's request. */
24
+ const chooseTarget = (options) => {
25
+ var _a, _b, _c;
26
+ const { declared, registry, request = {} } = options;
27
+ const current = (_a = declared.installedVersion) !== null && _a !== void 0 ? _a : (0, packages_1.newestDeclaredVersion)(declared.sites);
28
+ if (request.version !== undefined) {
29
+ if (!(0, semver_1.isValidVersion)(request.version))
30
+ return { problem: `"${request.version}" is not a version.` };
31
+ if (!registry.versions.includes(request.version)) {
32
+ return { problem: `${declared.name}@${request.version} is not on the registry.` };
33
+ }
34
+ }
35
+ const tag = request.version === undefined
36
+ ? ((_b = request.tag) !== null && _b !== void 0 ? _b : (0, registry_1.tagForInstalled)({ version: current, distTags: registry.distTags }))
37
+ : undefined;
38
+ const to = (_c = request.version) !== null && _c !== void 0 ? _c : (tag === undefined ? undefined : registry.distTags[tag]);
39
+ if (to === undefined) {
40
+ return { problem: `${declared.name} has no "${tag}" version on the registry.` };
41
+ }
42
+ if (current !== undefined && (0, semver_1.compareVersions)(to, current) === 0)
43
+ return { upToDate: true };
44
+ // A dist tag can point at an older version than the installed one - the release of a package that
45
+ // never had a stable version leaves `next` behind. Following the tag this command picks by itself
46
+ // would be a silent downgrade, so it takes `--to` or `--tag` to ask for one.
47
+ const inferredTag = request.version === undefined && request.tag === undefined;
48
+ if (inferredTag && current !== undefined && (0, semver_1.compareVersions)(to, current) < 0) {
49
+ return {
50
+ problem: `${declared.name}: the "${tag}" tag points at ${to}, which is older than the ${current} this repo is on. ` +
51
+ `The tag is stale. Pass \`--to ${to}\` to move back on purpose.`,
52
+ };
53
+ }
54
+ const writes = [];
55
+ const unwritable = [];
56
+ for (const site of declared.sites) {
57
+ const range = (0, packages_1.rangeFor)({ current: site.range, version: to });
58
+ if (range === undefined)
59
+ unwritable.push(site);
60
+ else
61
+ writes.push({ name: declared.name, manifestPath: site.manifestPath, field: site.field, range });
62
+ }
63
+ return {
64
+ update: {
65
+ name: declared.name,
66
+ from: declared.installedVersion,
67
+ to,
68
+ tag,
69
+ writes,
70
+ unwritable,
71
+ },
72
+ };
73
+ };
74
+ exports.chooseTarget = chooseTarget;
75
+ const isDowngrade = (update) => update.from !== undefined && !(0, semver_1.isNewer)(update.to, update.from);
76
+ exports.isDowngrade = isDowngrade;
77
+ /** The migrations of one package that an update from `from` to `to` crosses. */
78
+ const pendingMigrations = (options) => {
79
+ const { packageMigrations, from, to } = options;
80
+ return packageMigrations.migrations
81
+ .filter((migration) => (0, semver_1.isInUpdateRange)({ version: migration.version, after: from, upTo: to }))
82
+ .map((migration) => ({
83
+ packageName: packageMigrations.packageName,
84
+ migration,
85
+ manifestPath: packageMigrations.manifestPath,
86
+ }));
87
+ };
88
+ exports.pendingMigrations = pendingMigrations;
89
+ const packageRank = (name) => {
90
+ const index = PACKAGE_ORDER.indexOf(name);
91
+ return index === -1 ? PACKAGE_ORDER.length : index;
92
+ };
93
+ /** Oldest version first, and inside one version the package that others build on first. */
94
+ const orderMigrations = (pending) => [...pending].sort((left, right) => {
95
+ const byVersion = (0, semver_1.compareVersions)(left.migration.version, right.migration.version);
96
+ if (byVersion !== 0)
97
+ return byVersion;
98
+ return packageRank(left.packageName) - packageRank(right.packageName);
99
+ });
100
+ exports.orderMigrations = orderMigrations;
101
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare const DEFAULT_REGISTRY = "https://registry.npmjs.org";
2
+ export type RegistryPackage = {
3
+ distTags: Record<string, string>;
4
+ versions: string[];
5
+ };
6
+ export type RegistryLookup = {
7
+ ok: true;
8
+ package: RegistryPackage;
9
+ } | {
10
+ ok: false;
11
+ reason: string;
12
+ };
13
+ /** The registry npm would use, so a run inside a repo with its own registry reads the same one. */
14
+ export declare const registryUrl: (env?: NodeJS.ProcessEnv) => string;
15
+ export declare const packageUrl: (options: {
16
+ registry: string;
17
+ packageName: string;
18
+ }) => string;
19
+ /** Asks the registry which versions of a package exist and what each dist tag points at. */
20
+ export declare const fetchRegistryPackage: (options: {
21
+ packageName: string;
22
+ registry?: string;
23
+ }) => Promise<RegistryLookup>;
24
+ /**
25
+ * Which dist tag an update follows when the caller names none: the one the installed prerelease belongs
26
+ * to, so a repo on `-next.46` stays on `next` instead of being pulled back to the stable line.
27
+ */
28
+ export declare const tagForInstalled: (options: {
29
+ version?: string;
30
+ distTags: Record<string, string>;
31
+ }) => string;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tagForInstalled = exports.fetchRegistryPackage = exports.packageUrl = exports.registryUrl = exports.DEFAULT_REGISTRY = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const semver_1 = require("./semver");
6
+ const TIMEOUT_MS = 15000;
7
+ exports.DEFAULT_REGISTRY = 'https://registry.npmjs.org';
8
+ /** The registry npm would use, so a run inside a repo with its own registry reads the same one. */
9
+ const registryUrl = (env = process.env) => { var _a, _b; return ((_b = (_a = env['npm_config_@ethlete:registry']) !== null && _a !== void 0 ? _a : env['npm_config_registry']) !== null && _b !== void 0 ? _b : exports.DEFAULT_REGISTRY).replace(/\/+$/, ''); };
10
+ exports.registryUrl = registryUrl;
11
+ const packageUrl = (options) => `${options.registry}/${options.packageName.replace('/', '%2f')}`;
12
+ exports.packageUrl = packageUrl;
13
+ /** Asks the registry which versions of a package exist and what each dist tag points at. */
14
+ const fetchRegistryPackage = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
15
+ const { packageName, registry = (0, exports.registryUrl)() } = options;
16
+ let response;
17
+ try {
18
+ response = yield fetch((0, exports.packageUrl)({ registry, packageName }), {
19
+ // The abbreviated document holds the dist tags and the version list without every manifest.
20
+ headers: { Accept: 'application/vnd.npm.install-v1+json' },
21
+ signal: AbortSignal.timeout(TIMEOUT_MS),
22
+ });
23
+ }
24
+ catch (error) {
25
+ return { ok: false, reason: error instanceof Error ? error.message : String(error) };
26
+ }
27
+ if (response.status === 404)
28
+ return { ok: false, reason: `${registry} has no ${packageName}.` };
29
+ if (!response.ok)
30
+ return { ok: false, reason: `${registry} answered ${response.status} for ${packageName}.` };
31
+ const body = yield response.json().catch(() => undefined);
32
+ const record = typeof body === 'object' && body !== null ? body : {};
33
+ const tags = record['dist-tags'];
34
+ const versions = record['versions'];
35
+ return {
36
+ ok: true,
37
+ package: {
38
+ distTags: typeof tags === 'object' && tags !== null ? tags : {},
39
+ versions: typeof versions === 'object' && versions !== null ? Object.keys(versions) : [],
40
+ },
41
+ };
42
+ });
43
+ exports.fetchRegistryPackage = fetchRegistryPackage;
44
+ /**
45
+ * Which dist tag an update follows when the caller names none: the one the installed prerelease belongs
46
+ * to, so a repo on `-next.46` stays on `next` instead of being pulled back to the stable line.
47
+ */
48
+ const tagForInstalled = (options) => {
49
+ const { version, distTags } = options;
50
+ const tag = version ? (0, semver_1.prereleaseTag)(version) : undefined;
51
+ return tag !== undefined && distTags[tag] !== undefined ? tag : 'latest';
52
+ };
53
+ exports.tagForInstalled = tagForInstalled;
54
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { Migration } from './migration-manifest';
2
+ import { PackageManager } from './package-manager';
3
+ import { PendingMigration } from './plan';
4
+ export type MigrationState = 'applied' | 'failed' | 'unsupported' | 'task' | 'planned';
5
+ export type MigrationOutcome = {
6
+ pending: PendingMigration;
7
+ state: MigrationState;
8
+ /** Why it did not apply, for a state other than `applied`. */
9
+ reason?: string;
10
+ };
11
+ /** Nx runs the auto migrations, so a repo without it gets the command printed instead. */
12
+ export declare const hasNx: (root: string) => boolean;
13
+ /** The `nx generate` arguments for one auto migration. Non-interactive: an update must not stop to ask. */
14
+ export declare const generatorArgs: (options: {
15
+ migration: Migration;
16
+ dryRun: boolean;
17
+ }) => string[];
18
+ export declare const runAutoMigration: (options: {
19
+ root: string;
20
+ manager: PackageManager;
21
+ pending: PendingMigration;
22
+ dryRun: boolean;
23
+ }) => MigrationOutcome;
24
+ export declare const runInstall: (options: {
25
+ root: string;
26
+ manager: PackageManager;
27
+ }) => {
28
+ ok: boolean;
29
+ reason: string;
30
+ } | {
31
+ ok: boolean;
32
+ reason?: undefined;
33
+ };
34
+ /** The command a developer runs by hand when this repo has no Nx to run the generator with. */
35
+ export declare const manualGeneratorCommand: (options: {
36
+ manager: PackageManager;
37
+ migration: Migration;
38
+ }) => string;
39
+ export declare const runPendingMigrations: (options: {
40
+ root: string;
41
+ manager: PackageManager;
42
+ pending: readonly PendingMigration[];
43
+ dryRun: boolean;
44
+ }) => MigrationOutcome[];
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runPendingMigrations = exports.manualGeneratorCommand = exports.runInstall = exports.runAutoMigration = exports.generatorArgs = exports.hasNx = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const package_manager_1 = require("./package-manager");
8
+ /** Nx runs the auto migrations, so a repo without it gets the command printed instead. */
9
+ const hasNx = (root) => (0, fs_1.existsSync)((0, path_1.join)(root, 'node_modules', 'nx', 'package.json')) && (0, fs_1.existsSync)((0, path_1.join)(root, 'nx.json'));
10
+ exports.hasNx = hasNx;
11
+ /** The `nx generate` arguments for one auto migration. Non-interactive: an update must not stop to ask. */
12
+ const generatorArgs = (options) => {
13
+ var _a, _b;
14
+ const { migration, dryRun } = options;
15
+ return [
16
+ 'generate',
17
+ (_a = migration.generator) !== null && _a !== void 0 ? _a : '',
18
+ '--interactive=false',
19
+ ...Object.entries((_b = migration.options) !== null && _b !== void 0 ? _b : {}).map(([key, value]) => `--${key}=${String(value)}`),
20
+ ...(dryRun ? ['--dry-run'] : []),
21
+ ];
22
+ };
23
+ exports.generatorArgs = generatorArgs;
24
+ const runAutoMigration = (options) => {
25
+ const { root, manager, pending, dryRun } = options;
26
+ const [binary, ...args] = (0, package_manager_1.nxCommand)({
27
+ manager,
28
+ args: (0, exports.generatorArgs)({ migration: pending.migration, dryRun }),
29
+ });
30
+ if (binary === undefined)
31
+ return { pending, state: 'failed', reason: 'no command to run the generator with' };
32
+ const result = (0, child_process_1.spawnSync)(binary, args, { cwd: root, stdio: 'inherit' });
33
+ if (result.error)
34
+ return { pending, state: 'failed', reason: result.error.message };
35
+ if (result.status !== 0)
36
+ return { pending, state: 'failed', reason: `${binary} exited with ${result.status}` };
37
+ return { pending, state: dryRun ? 'planned' : 'applied' };
38
+ };
39
+ exports.runAutoMigration = runAutoMigration;
40
+ const runInstall = (options) => {
41
+ const { root, manager } = options;
42
+ const [binary, ...args] = manager.install;
43
+ if (binary === undefined)
44
+ return { ok: false, reason: 'no install command' };
45
+ const result = (0, child_process_1.spawnSync)(binary, args, { cwd: root, stdio: 'inherit' });
46
+ if (result.error)
47
+ return { ok: false, reason: result.error.message };
48
+ if (result.status !== 0)
49
+ return { ok: false, reason: `${manager.install.join(' ')} exited with ${result.status}` };
50
+ return { ok: true };
51
+ };
52
+ exports.runInstall = runInstall;
53
+ /** The command a developer runs by hand when this repo has no Nx to run the generator with. */
54
+ const manualGeneratorCommand = (options) => (0, package_manager_1.nxCommand)({ manager: options.manager, args: (0, exports.generatorArgs)({ migration: options.migration, dryRun: false }) }).join(' ');
55
+ exports.manualGeneratorCommand = manualGeneratorCommand;
56
+ const runPendingMigrations = (options) => {
57
+ const { root, manager, pending, dryRun } = options;
58
+ const nxAvailable = (0, exports.hasNx)(root);
59
+ return pending.map((entry) => {
60
+ if (entry.migration.kind !== 'auto')
61
+ return { pending: entry, state: 'task' };
62
+ if (!nxAvailable) {
63
+ return {
64
+ pending: entry,
65
+ state: 'unsupported',
66
+ reason: 'this repo has no Nx, so the generator has to be run by hand',
67
+ };
68
+ }
69
+ return (0, exports.runAutoMigration)({ root, manager, pending: entry, dryRun });
70
+ });
71
+ };
72
+ exports.runPendingMigrations = runPendingMigrations;
73
+ //# sourceMappingURL=run-migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-migrations.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/run-migrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** `-1`, `0` or `1`, prerelease-aware for the `x.y.z-next.N` versions this repo publishes. */
2
+ export declare const compareVersions: (left: string, right: string) => 0 | 1 | -1;
3
+ export declare const isNewer: (candidate: string, than: string) => boolean;
4
+ /** True when `version` sits inside `(after, upTo]`, the range a pending migration is selected by. */
5
+ export declare const isInUpdateRange: (options: {
6
+ version: string;
7
+ after: string;
8
+ upTo: string;
9
+ }) => boolean;
10
+ export declare const isValidVersion: (version: string) => boolean;
11
+ /**
12
+ * The dist tag a prerelease belongs to, for example `next` for `5.0.0-next.46`. A stable version has
13
+ * none, and neither has a prerelease that only numbers its identifiers.
14
+ */
15
+ export declare const prereleaseTag: (version: string) => string | undefined;
16
+ /** The `^` or `~` a range keeps, or `''` for an exact one. `undefined` for a range with no single version. */
17
+ export declare const rangePrefix: (range: string) => string | undefined;
18
+ /** The version a range points at, for example `5.0.0-next.46` for `^5.0.0-next.46`. */
19
+ export declare const versionOfRange: (range: string) => string | undefined;