@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,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":";;;AAAA,2BAAkF;AAClF,+BAA2C;AAC3C,qCAAwE;AAE3D,QAAA,aAAa,GAAG,WAAW,CAAC;AAE5B,QAAA,aAAa,GAAG,cAAc,CAAC;AAE/B,QAAA,iBAAiB,GAAG,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,CAAU,CAAC;AA0BlG,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AAEjF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,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;AAEhE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,qBAAa,CAAC,CAAC;AAA3D,QAAA,YAAY,gBAA+C;AAEjE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,YAAY,GAAG,qBAAa,EAAwB,EAAE;IAC/F,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC,CAAC;AAJW,QAAA,YAAY,gBAIvB;AAEF;;;GAGG;AACI,MAAM,aAAa,GAAG,CAAC,IAAY,EAAY,EAAE;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAE,EAAE;QACjC,IAAI,OAAiB,CAAC;QAEtB,IAAI,CAAC;YACH,OAAO,GAAG,IAAA,gBAAW,EAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,WAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAEhF,IAAI,CAAC,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAa;gBAAE,SAAS;YAE3C,KAAK,CAAC,IAAI,CAAC,IAAA,eAAQ,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEX,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,IAAI,KAAK,qBAAa;YAAE,OAAO,CAAC,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,qBAAa;YAAE,OAAO,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,aAAa,iBAkCxB;AAEF,mGAAmG;AAC5F,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,EAAE;IACpE,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,qBAAa,CAAC,CAAC;IAElF,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE9B,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B;AAEF;;;GAGG;AACI,MAAM,qBAAqB,GAAG,CAAC,KAA8B,EAAE,EAAE,CACtE,KAAK,CAAC,MAAM,CAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IAChD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAEtD,OAAO,MAAM,KAAK,SAAS,IAAI,IAAA,wBAAe,EAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;AACnH,CAAC,EAAE,SAAS,CAAC,CAAC;AALH,QAAA,qBAAqB,yBAKlB;AAEhB,6FAA6F;AACtF,MAAM,uBAAuB,GAAG,CAAC,OAGvC,EAAqB,EAAE;;IACtB,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAElD,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,KAAK,MAAM,KAAK,IAAI,yBAAiB,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAA,QAAQ,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAa,CAAC;oBAAE,SAAS;gBAE9C,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI;oBAChC,IAAI;oBACJ,KAAK,EAAE,EAAE;oBACT,gBAAgB,EAAE,IAAA,wBAAgB,EAAC,IAAI,EAAE,IAAI,CAAC;iBAC/C,CAAC;gBAEF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAA,uBAAc,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC;AA7BW,QAAA,uBAAuB,2BA6BlC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,eAAC,OAAA,MAAA,MAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,0CAAG,CAAC,CAAC,mCAAI,IAAI,CAAA,EAAA,CAAC;AASjF;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,OAAwD,EAAE,EAAE;IACtF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,YAAY,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;QAExE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,YAAY,CAAC,EAAE,CAAC;YAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAE/B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1D,IAAA,kBAAa,EAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AA3BW,QAAA,WAAW,eA2BtB;AAEF;;;GAGG;AACI,MAAM,QAAQ,GAAG,CAAC,OAA6C,EAAE,EAAE;IACxE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IAEpC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;AAClE,CAAC,CAAC;AALW,QAAA,QAAQ,YAKnB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
/** A codemod that already applied, so `--continue` does not run it a second time. */
|
|
9
|
+
export type FinishedMigration = {
|
|
10
|
+
packageName: string;
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
export type PendingUpdate = {
|
|
14
|
+
startedAt: string;
|
|
15
|
+
packages: PendingPackage[];
|
|
16
|
+
finished?: FinishedMigration[];
|
|
17
|
+
/** The `--from` versions of the run, so `--continue` migrates from the same place. */
|
|
18
|
+
from?: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Records what an update moved, before the install replaces the versions the migrations run from. An
|
|
22
|
+
* install or a codemod that fails leaves this file behind, so `et update --continue` can pick it up.
|
|
23
|
+
*/
|
|
24
|
+
export declare const writePendingUpdate: (options: {
|
|
25
|
+
root: string;
|
|
26
|
+
pending: PendingUpdate;
|
|
27
|
+
}) => void;
|
|
28
|
+
export declare const readPendingUpdate: (root: string) => PendingUpdate | undefined;
|
|
29
|
+
export declare const isFinished: (options: {
|
|
30
|
+
finished: readonly FinishedMigration[];
|
|
31
|
+
packageName: string;
|
|
32
|
+
name: string;
|
|
33
|
+
}) => boolean;
|
|
34
|
+
export declare const clearPendingUpdate: (root: string) => void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearPendingUpdate = exports.isFinished = 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
|
+
const finished = Array.isArray(parsed['finished'])
|
|
34
|
+
? parsed['finished'].filter((entry) => isRecord(entry) && typeof entry['packageName'] === 'string' && typeof entry['name'] === 'string')
|
|
35
|
+
: [];
|
|
36
|
+
const from = isRecord(parsed['from'])
|
|
37
|
+
? Object.fromEntries(Object.entries(parsed['from']).filter((entry) => typeof entry[1] === 'string'))
|
|
38
|
+
: undefined;
|
|
39
|
+
return Object.assign({ startedAt: typeof parsed['startedAt'] === 'string' ? parsed['startedAt'] : 'an earlier run', packages: packages.map((entry) => { var _a; return ({ name: entry.name, from: (_a = entry.from) !== null && _a !== void 0 ? _a : null, to: entry.to }); }), finished: finished.map((entry) => ({ packageName: entry.packageName, name: entry.name })) }, (from ? { from } : {}));
|
|
40
|
+
};
|
|
41
|
+
exports.readPendingUpdate = readPendingUpdate;
|
|
42
|
+
const isFinished = (options) => options.finished.some((entry) => entry.packageName === options.packageName && entry.name === options.name);
|
|
43
|
+
exports.isFinished = isFinished;
|
|
44
|
+
const clearPendingUpdate = (root) => (0, fs_1.rmSync)((0, path_1.join)(root, exports.PENDING_FILE), { force: true });
|
|
45
|
+
exports.clearPendingUpdate = clearPendingUpdate;
|
|
46
|
+
//# sourceMappingURL=pending.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,40 @@
|
|
|
1
|
+
import { PackageManagerName } from './package-manager';
|
|
2
|
+
export declare const DEFAULT_REGISTRY = "https://registry.npmjs.org";
|
|
3
|
+
export type RegistryPackage = {
|
|
4
|
+
distTags: Record<string, string>;
|
|
5
|
+
versions: string[];
|
|
6
|
+
};
|
|
7
|
+
export type RegistryLookup = {
|
|
8
|
+
ok: true;
|
|
9
|
+
package: RegistryPackage;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
reason: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* The registry the repo's package manager installs `@ethlete/*` from: the repo's `.npmrc`, `.yarnrc` or
|
|
16
|
+
* `.yarnrc.yml` first, since yarn 1 exports its default registry to scripts even when an `.npmrc` sets
|
|
17
|
+
* another one, then the environment, then the public registry.
|
|
18
|
+
*/
|
|
19
|
+
export declare const registryUrl: (options?: {
|
|
20
|
+
root?: string;
|
|
21
|
+
manager?: PackageManagerName;
|
|
22
|
+
env?: NodeJS.ProcessEnv;
|
|
23
|
+
}) => string;
|
|
24
|
+
export declare const packageUrl: (options: {
|
|
25
|
+
registry: string;
|
|
26
|
+
packageName: string;
|
|
27
|
+
}) => string;
|
|
28
|
+
/** Asks the registry which versions of a package exist and what each dist tag points at. */
|
|
29
|
+
export declare const fetchRegistryPackage: (options: {
|
|
30
|
+
packageName: string;
|
|
31
|
+
registry?: string;
|
|
32
|
+
}) => Promise<RegistryLookup>;
|
|
33
|
+
/**
|
|
34
|
+
* Which dist tag an update follows when the caller names none: the one the installed prerelease belongs
|
|
35
|
+
* to, so a repo on `-next.46` stays on `next` instead of being pulled back to the stable line.
|
|
36
|
+
*/
|
|
37
|
+
export declare const tagForInstalled: (options: {
|
|
38
|
+
version?: string;
|
|
39
|
+
distTags: Record<string, string>;
|
|
40
|
+
}) => string;
|
|
@@ -0,0 +1,140 @@
|
|
|
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 fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const semver_1 = require("./semver");
|
|
8
|
+
const TIMEOUT_MS = 15000;
|
|
9
|
+
exports.DEFAULT_REGISTRY = 'https://registry.npmjs.org';
|
|
10
|
+
const SCOPE = '@ethlete';
|
|
11
|
+
const unquote = (value) => value.trim().replace(/^(["'])(.*)\1$/, '$2');
|
|
12
|
+
const readText = (path) => ((0, fs_1.existsSync)(path) ? (0, fs_1.readFileSync)(path, 'utf8') : undefined);
|
|
13
|
+
const configLines = (text) => text.split(/\r?\n/).filter((line) => line.trim() !== '' && !/^\s*[#;]/.test(line));
|
|
14
|
+
const readNpmrc = (text) => {
|
|
15
|
+
const config = {};
|
|
16
|
+
for (const line of configLines(text)) {
|
|
17
|
+
const separator = line.indexOf('=');
|
|
18
|
+
if (separator < 0)
|
|
19
|
+
continue;
|
|
20
|
+
const key = line.slice(0, separator).trim();
|
|
21
|
+
const value = unquote(line.slice(separator + 1));
|
|
22
|
+
if (key === `${SCOPE}:registry`)
|
|
23
|
+
config.scoped = value;
|
|
24
|
+
if (key === 'registry')
|
|
25
|
+
config.registry = value;
|
|
26
|
+
}
|
|
27
|
+
return config;
|
|
28
|
+
};
|
|
29
|
+
const readYarnrc = (text) => {
|
|
30
|
+
const config = {};
|
|
31
|
+
for (const line of configLines(text)) {
|
|
32
|
+
const match = /^\s*("[^"]+"|\S+)\s+(.+)$/.exec(line);
|
|
33
|
+
if (!match)
|
|
34
|
+
continue;
|
|
35
|
+
const key = unquote(match[1]);
|
|
36
|
+
const value = unquote(match[2]);
|
|
37
|
+
if (key === `${SCOPE}:registry`)
|
|
38
|
+
config.scoped = value;
|
|
39
|
+
if (key === 'registry')
|
|
40
|
+
config.registry = value;
|
|
41
|
+
}
|
|
42
|
+
return config;
|
|
43
|
+
};
|
|
44
|
+
const readYarnrcYml = (text) => {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
const config = {};
|
|
47
|
+
const path = [];
|
|
48
|
+
for (const line of configLines(text)) {
|
|
49
|
+
const match = /^(\s*)([^:\s]+)\s*:\s*(.*)$/.exec(line);
|
|
50
|
+
if (!match)
|
|
51
|
+
continue;
|
|
52
|
+
const indent = match[1].length;
|
|
53
|
+
const key = unquote(match[2]);
|
|
54
|
+
const value = unquote(match[3]);
|
|
55
|
+
while (((_b = (_a = path[path.length - 1]) === null || _a === void 0 ? void 0 : _a.indent) !== null && _b !== void 0 ? _b : -1) >= indent)
|
|
56
|
+
path.pop();
|
|
57
|
+
const keys = [...path.map((entry) => entry.key), key].join('.');
|
|
58
|
+
if (value === '')
|
|
59
|
+
path.push({ indent, key });
|
|
60
|
+
else if (keys === 'npmRegistryServer')
|
|
61
|
+
config.registry = value;
|
|
62
|
+
else if (keys === `npmScopes.${SCOPE.slice(1)}.npmRegistryServer`)
|
|
63
|
+
config.scoped = value;
|
|
64
|
+
}
|
|
65
|
+
return config;
|
|
66
|
+
};
|
|
67
|
+
/** The registry settings of a repo's own config files, in the order its package manager reads them. */
|
|
68
|
+
const projectRegistryConfig = (root, manager) => {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
const npmrc = readText((0, path_1.join)(root, '.npmrc'));
|
|
71
|
+
const sources = [];
|
|
72
|
+
if (manager === 'yarn') {
|
|
73
|
+
const berry = readText((0, path_1.join)(root, '.yarnrc.yml'));
|
|
74
|
+
if (berry !== undefined)
|
|
75
|
+
return readYarnrcYml(berry);
|
|
76
|
+
const classic = readText((0, path_1.join)(root, '.yarnrc'));
|
|
77
|
+
sources.push(classic === undefined ? undefined : readYarnrc(classic));
|
|
78
|
+
}
|
|
79
|
+
sources.push(npmrc === undefined ? undefined : readNpmrc(npmrc));
|
|
80
|
+
return {
|
|
81
|
+
scoped: (_a = sources.find((source) => source === null || source === void 0 ? void 0 : source.scoped)) === null || _a === void 0 ? void 0 : _a.scoped,
|
|
82
|
+
registry: (_b = sources.find((source) => source === null || source === void 0 ? void 0 : source.registry)) === null || _b === void 0 ? void 0 : _b.registry,
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* The registry the repo's package manager installs `@ethlete/*` from: the repo's `.npmrc`, `.yarnrc` or
|
|
87
|
+
* `.yarnrc.yml` first, since yarn 1 exports its default registry to scripts even when an `.npmrc` sets
|
|
88
|
+
* another one, then the environment, then the public registry.
|
|
89
|
+
*/
|
|
90
|
+
const registryUrl = (options = {}) => {
|
|
91
|
+
var _a, _b, _c, _d;
|
|
92
|
+
const { root = process.cwd(), manager = 'npm', env = process.env } = options;
|
|
93
|
+
const project = projectRegistryConfig(root, manager);
|
|
94
|
+
return ((_d = (_c = (_b = (_a = project.scoped) !== null && _a !== void 0 ? _a : env[`npm_config_${SCOPE}:registry`]) !== null && _b !== void 0 ? _b : project.registry) !== null && _c !== void 0 ? _c : env['npm_config_registry']) !== null && _d !== void 0 ? _d : exports.DEFAULT_REGISTRY).replace(/\/+$/, '');
|
|
95
|
+
};
|
|
96
|
+
exports.registryUrl = registryUrl;
|
|
97
|
+
const packageUrl = (options) => `${options.registry}/${options.packageName.replace('/', '%2f')}`;
|
|
98
|
+
exports.packageUrl = packageUrl;
|
|
99
|
+
/** Asks the registry which versions of a package exist and what each dist tag points at. */
|
|
100
|
+
const fetchRegistryPackage = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
101
|
+
const { packageName, registry = (0, exports.registryUrl)() } = options;
|
|
102
|
+
let response;
|
|
103
|
+
try {
|
|
104
|
+
response = yield fetch((0, exports.packageUrl)({ registry, packageName }), {
|
|
105
|
+
// The abbreviated document holds the dist tags and the version list without every manifest.
|
|
106
|
+
headers: { Accept: 'application/vnd.npm.install-v1+json' },
|
|
107
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
112
|
+
}
|
|
113
|
+
if (response.status === 404)
|
|
114
|
+
return { ok: false, reason: `${registry} has no ${packageName}.` };
|
|
115
|
+
if (!response.ok)
|
|
116
|
+
return { ok: false, reason: `${registry} answered ${response.status} for ${packageName}.` };
|
|
117
|
+
const body = yield response.json().catch(() => undefined);
|
|
118
|
+
const record = typeof body === 'object' && body !== null ? body : {};
|
|
119
|
+
const tags = record['dist-tags'];
|
|
120
|
+
const versions = record['versions'];
|
|
121
|
+
return {
|
|
122
|
+
ok: true,
|
|
123
|
+
package: {
|
|
124
|
+
distTags: typeof tags === 'object' && tags !== null ? tags : {},
|
|
125
|
+
versions: typeof versions === 'object' && versions !== null ? Object.keys(versions) : [],
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
exports.fetchRegistryPackage = fetchRegistryPackage;
|
|
130
|
+
/**
|
|
131
|
+
* Which dist tag an update follows when the caller names none: the one the installed prerelease belongs
|
|
132
|
+
* to, so a repo on `-next.46` stays on `next` instead of being pulled back to the stable line.
|
|
133
|
+
*/
|
|
134
|
+
const tagForInstalled = (options) => {
|
|
135
|
+
const { version, distTags } = options;
|
|
136
|
+
const tag = version ? (0, semver_1.prereleaseTag)(version) : undefined;
|
|
137
|
+
return tag !== undefined && distTags[tag] !== undefined ? tag : 'latest';
|
|
138
|
+
};
|
|
139
|
+
exports.tagForInstalled = tagForInstalled;
|
|
140
|
+
//# 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,45 @@
|
|
|
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
|
+
env?: NodeJS.ProcessEnv;
|
|
28
|
+
}) => {
|
|
29
|
+
ok: boolean;
|
|
30
|
+
reason: string;
|
|
31
|
+
} | {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
reason?: undefined;
|
|
34
|
+
};
|
|
35
|
+
/** The command a developer runs by hand when this repo has no Nx to run the generator with. */
|
|
36
|
+
export declare const manualGeneratorCommand: (options: {
|
|
37
|
+
manager: PackageManager;
|
|
38
|
+
migration: Migration;
|
|
39
|
+
}) => string;
|
|
40
|
+
export declare const runPendingMigrations: (options: {
|
|
41
|
+
root: string;
|
|
42
|
+
manager: PackageManager;
|
|
43
|
+
pending: readonly PendingMigration[];
|
|
44
|
+
dryRun: boolean;
|
|
45
|
+
}) => MigrationOutcome[];
|