@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.
- package/CHANGELOG.md +24 -0
- package/README.md +35 -0
- 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.js +25 -0
- package/src/index.js.map +1 -1
- package/src/lib/config/diagnose.js +9 -0
- package/src/lib/config/diagnose.js.map +1 -1
- package/src/lib/config/local-config.d.ts +2 -0
- package/src/lib/config/local-config.js +6 -1
- package/src/lib/config/local-config.js.map +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 +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 +3 -1
- package/src/lib/doctor/doctor-command.js +5 -5
- package/src/lib/doctor/doctor-command.js.map +1 -1
- package/src/lib/index.d.ts +2 -0
- package/src/lib/index.js +2 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/release.js +21 -3
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/ai.d.ts +30 -0
- package/src/lib/update/ai.js +44 -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/index.d.ts +12 -0
- package/src/lib/update/index.js +16 -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 +23 -0
- package/src/lib/update/package-manager.js +47 -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 +21 -0
- package/src/lib/update/pending.js +41 -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 +31 -0
- package/src/lib/update/registry.js +54 -0
- package/src/lib/update/registry.js.map +1 -0
- package/src/lib/update/run-migrations.d.ts +44 -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 +58 -0
- package/src/lib/update/tasks.js +174 -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 +304 -0
- package/src/lib/update/update-command.js.map +1 -0
package/src/lib/index.js
CHANGED
|
@@ -4,7 +4,9 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
tslib_1.__exportStar(require("./api"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./auth"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./config"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./design"), exports);
|
|
7
8
|
tslib_1.__exportStar(require("./doctor"), exports);
|
|
8
9
|
tslib_1.__exportStar(require("./invocation"), exports);
|
|
9
10
|
tslib_1.__exportStar(require("./release"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./update"), exports);
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/src/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,iDAAuB;AACvB,mDAAyB;AACzB,mDAAyB;AACzB,uDAA6B;AAC7B,oDAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,gDAAsB;AACtB,iDAAuB;AACvB,mDAAyB;AACzB,mDAAyB;AACzB,mDAAyB;AACzB,uDAA6B;AAC7B,oDAA0B;AAC1B,mDAAyB"}
|
package/src/lib/release.js
CHANGED
|
@@ -4,6 +4,25 @@ exports.release = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const child_process_1 = require("child_process");
|
|
6
6
|
const utils_1 = require("./utils");
|
|
7
|
+
const NO_CHANGESETS_MESSAGE = 'No unreleased changesets found';
|
|
8
|
+
const changesetMajorVersion = () => {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const version = (0, child_process_1.execSync)('yarn changeset --version').toString();
|
|
11
|
+
return Number((_b = (_a = /(\d+)\.\d+\.\d+/.exec(version)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : 0);
|
|
12
|
+
};
|
|
13
|
+
const runChangesetVersion = () => {
|
|
14
|
+
try {
|
|
15
|
+
return (0, child_process_1.execSync)('yarn changeset version', { stdio: 'pipe' }).toString();
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
const { stdout, stderr } = error;
|
|
19
|
+
const output = `${stdout !== null && stdout !== void 0 ? stdout : ''}${stderr !== null && stderr !== void 0 ? stderr : ''}`;
|
|
20
|
+
if (!output.includes(NO_CHANGESETS_MESSAGE))
|
|
21
|
+
throw error;
|
|
22
|
+
console.error(`${NO_CHANGESETS_MESSAGE}, aborting...\n`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
7
26
|
const release = (args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
8
27
|
const shouldForce = args.findIndex((arg) => arg.includes('--force') || arg.includes('-f')) !== -1;
|
|
9
28
|
const skipPush = args.findIndex((arg) => arg.includes('--skip-push') || arg.includes('-sp')) !== -1;
|
|
@@ -22,9 +41,8 @@ const release = (args) => tslib_1.__awaiter(void 0, void 0, void 0, function* ()
|
|
|
22
41
|
console.error('Aborting...');
|
|
23
42
|
process.exit(1);
|
|
24
43
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const changesetTag = (0, child_process_1.execSync)('yarn changeset tag').toString();
|
|
44
|
+
console.log(runChangesetVersion());
|
|
45
|
+
const changesetTag = (0, child_process_1.execSync)(`yarn changeset ${changesetMajorVersion() >= 3 ? 'git-tag' : 'tag'}`).toString();
|
|
28
46
|
console.log(changesetTag);
|
|
29
47
|
(0, child_process_1.execSync)('git add .');
|
|
30
48
|
console.log('Committing release... 🚀 \n(This may take a while depending on your pre-commit hooks) \n');
|
package/src/lib/release.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/release.ts"],"names":[],"mappings":";;;;AAAA,iDAAyC;AACzC,mCAAsC;AAE/B,MAAM,OAAO,GAAG,CAAO,IAAc,EAAE,EAAE;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClG,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpG,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE7D,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAW,EAC9B,2KAA2K,CAC5K,CAAC;IAEF,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { UpdateTask } from './tasks';
|
|
2
|
+
/** Where the agent command sits in `ethlete.config.local.json`. */
|
|
3
|
+
export declare const AGENT_COMMAND_KEY = "updateAgentCommand";
|
|
4
|
+
/** What the command template is asked to hold, so the prompt can go anywhere in it. */
|
|
5
|
+
export declare const PROMPT_PLACEHOLDER = "<prompt>";
|
|
6
|
+
/**
|
|
7
|
+
* The command that hands one task to an agent. `<prompt>` becomes the path of the task file; a template
|
|
8
|
+
* without it gets the path appended, which is what a plain `claude -p` needs.
|
|
9
|
+
*/
|
|
10
|
+
export declare const agentCommand: (options: {
|
|
11
|
+
template: string;
|
|
12
|
+
promptPath: string;
|
|
13
|
+
}) => string;
|
|
14
|
+
export type AgentRun = {
|
|
15
|
+
task: UpdateTask;
|
|
16
|
+
command: string;
|
|
17
|
+
ok: boolean;
|
|
18
|
+
reason?: string;
|
|
19
|
+
};
|
|
20
|
+
/** The tasks an agent can work on: the ones whose instructions were written as a prompt. */
|
|
21
|
+
export declare const assistedTasks: (tasks: readonly UpdateTask[]) => UpdateTask[];
|
|
22
|
+
/**
|
|
23
|
+
* Runs the configured agent once per assisted task, in order, so each run has one change to make. The
|
|
24
|
+
* command is a user-written string, so it runs through a shell.
|
|
25
|
+
*/
|
|
26
|
+
export declare const runAgentTasks: (options: {
|
|
27
|
+
root: string;
|
|
28
|
+
template: string;
|
|
29
|
+
tasks: readonly UpdateTask[];
|
|
30
|
+
}) => AgentRun[];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runAgentTasks = exports.assistedTasks = exports.agentCommand = exports.PROMPT_PLACEHOLDER = exports.AGENT_COMMAND_KEY = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
/** Where the agent command sits in `ethlete.config.local.json`. */
|
|
7
|
+
exports.AGENT_COMMAND_KEY = 'updateAgentCommand';
|
|
8
|
+
/** What the command template is asked to hold, so the prompt can go anywhere in it. */
|
|
9
|
+
exports.PROMPT_PLACEHOLDER = '<prompt>';
|
|
10
|
+
/**
|
|
11
|
+
* The command that hands one task to an agent. `<prompt>` becomes the path of the task file; a template
|
|
12
|
+
* without it gets the path appended, which is what a plain `claude -p` needs.
|
|
13
|
+
*/
|
|
14
|
+
const agentCommand = (options) => {
|
|
15
|
+
const { template, promptPath } = options;
|
|
16
|
+
const quoted = /\s/.test(promptPath) ? `"${promptPath}"` : promptPath;
|
|
17
|
+
return template.includes(exports.PROMPT_PLACEHOLDER)
|
|
18
|
+
? template.split(exports.PROMPT_PLACEHOLDER).join(quoted)
|
|
19
|
+
: `${template} ${quoted}`;
|
|
20
|
+
};
|
|
21
|
+
exports.agentCommand = agentCommand;
|
|
22
|
+
/** The tasks an agent can work on: the ones whose instructions were written as a prompt. */
|
|
23
|
+
const assistedTasks = (tasks) => tasks.filter((task) => task.kind === 'assisted' && task.instructionsFile !== undefined);
|
|
24
|
+
exports.assistedTasks = assistedTasks;
|
|
25
|
+
/**
|
|
26
|
+
* Runs the configured agent once per assisted task, in order, so each run has one change to make. The
|
|
27
|
+
* command is a user-written string, so it runs through a shell.
|
|
28
|
+
*/
|
|
29
|
+
const runAgentTasks = (options) => {
|
|
30
|
+
const { root, template, tasks } = options;
|
|
31
|
+
return (0, exports.assistedTasks)(tasks).map((task) => {
|
|
32
|
+
var _a;
|
|
33
|
+
const command = (0, exports.agentCommand)({ template, promptPath: (0, path_1.join)(root, (_a = task.instructionsFile) !== null && _a !== void 0 ? _a : '') });
|
|
34
|
+
console.log(`\n ${command}`);
|
|
35
|
+
const result = (0, child_process_1.spawnSync)(command, { cwd: root, stdio: 'inherit', shell: true });
|
|
36
|
+
if (result.error)
|
|
37
|
+
return { task, command, ok: false, reason: result.error.message };
|
|
38
|
+
if (result.status !== 0)
|
|
39
|
+
return { task, command, ok: false, reason: `exited with ${result.status}` };
|
|
40
|
+
return { task, command, ok: true };
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
exports.runAgentTasks = runAgentTasks;
|
|
44
|
+
//# sourceMappingURL=ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/ai.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAC1C,+BAA4B;AAG5B,mEAAmE;AACtD,QAAA,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD,uFAAuF;AAC1E,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAE7C;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,OAAiD,EAAE,EAAE;IAChF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtE,OAAO,QAAQ,CAAC,QAAQ,CAAC,0BAAkB,CAAC;QAC1C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,0BAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACjD,CAAC,CAAC,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;AAC9B,CAAC,CAAC;AAPW,QAAA,YAAY,gBAOvB;AASF,4FAA4F;AACrF,MAAM,aAAa,GAAG,CAAC,KAA4B,EAAE,EAAE,CAC5D,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC;AAD7E,QAAA,aAAa,iBACgE;AAE1F;;;GAGG;AACI,MAAM,aAAa,GAAG,CAAC,OAI7B,EAAc,EAAE;IACf,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1C,OAAO,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;QACvC,MAAM,OAAO,GAAG,IAAA,oBAAY,EAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAA,WAAI,EAAC,IAAI,EAAE,MAAA,IAAI,CAAC,gBAAgB,mCAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAEhG,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhF,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAEpF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAErG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AApBW,QAAA,aAAa,iBAoBxB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type UpdateArgs = {
|
|
2
|
+
/** Full package names the run is limited to. Empty means every `@ethlete/*` the manifest declares. */
|
|
3
|
+
packages: string[];
|
|
4
|
+
tag?: string;
|
|
5
|
+
/** A single version named with `--to`. */
|
|
6
|
+
version?: string;
|
|
7
|
+
/** The version the migrations of a package run from, keyed by full package name. */
|
|
8
|
+
from: Record<string, string>;
|
|
9
|
+
check: boolean;
|
|
10
|
+
dryRun: boolean;
|
|
11
|
+
install: boolean;
|
|
12
|
+
resume: boolean;
|
|
13
|
+
ai: boolean;
|
|
14
|
+
force: boolean;
|
|
15
|
+
help: boolean;
|
|
16
|
+
problems: string[];
|
|
17
|
+
};
|
|
18
|
+
/** `core` and `@ethlete/core` both name the same package on the command line. */
|
|
19
|
+
export declare const fullPackageName: (name: string) => string;
|
|
20
|
+
/** Reads the flags of `et update`, collecting every problem so one run reports them all. */
|
|
21
|
+
export declare const parseUpdateArgs: (argv: readonly string[]) => UpdateArgs;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseUpdateArgs = exports.fullPackageName = void 0;
|
|
4
|
+
const packages_1 = require("./packages");
|
|
5
|
+
const VALUE_FLAGS = ['--tag', '--to', '--from'];
|
|
6
|
+
const BOOLEAN_FLAGS = ['--check', '--dry-run', '--no-install', '--continue', '--ai', '--force', '--help', '-h'];
|
|
7
|
+
/** `core` and `@ethlete/core` both name the same package on the command line. */
|
|
8
|
+
const fullPackageName = (name) => (name.includes('/') ? name : `${packages_1.ETHLETE_SCOPE}${name}`);
|
|
9
|
+
exports.fullPackageName = fullPackageName;
|
|
10
|
+
const splitFlag = (argument) => {
|
|
11
|
+
const separator = argument.indexOf('=');
|
|
12
|
+
return separator === -1
|
|
13
|
+
? { flag: argument, inline: undefined }
|
|
14
|
+
: { flag: argument.slice(0, separator), inline: argument.slice(separator + 1) };
|
|
15
|
+
};
|
|
16
|
+
/** Reads the flags of `et update`, collecting every problem so one run reports them all. */
|
|
17
|
+
const parseUpdateArgs = (argv) => {
|
|
18
|
+
var _a;
|
|
19
|
+
const args = {
|
|
20
|
+
packages: [],
|
|
21
|
+
from: {},
|
|
22
|
+
check: false,
|
|
23
|
+
dryRun: false,
|
|
24
|
+
install: true,
|
|
25
|
+
resume: false,
|
|
26
|
+
ai: false,
|
|
27
|
+
force: false,
|
|
28
|
+
help: false,
|
|
29
|
+
problems: [],
|
|
30
|
+
};
|
|
31
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
32
|
+
const argument = (_a = argv[index]) !== null && _a !== void 0 ? _a : '';
|
|
33
|
+
if (!argument.startsWith('-')) {
|
|
34
|
+
args.packages.push((0, exports.fullPackageName)(argument));
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const { flag, inline } = splitFlag(argument);
|
|
38
|
+
if (VALUE_FLAGS.includes(flag)) {
|
|
39
|
+
const value = inline !== null && inline !== void 0 ? inline : argv[index + 1];
|
|
40
|
+
if (inline === undefined)
|
|
41
|
+
index += 1;
|
|
42
|
+
if (value === undefined || value.startsWith('-')) {
|
|
43
|
+
args.problems.push(`${flag} needs a value.`);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (flag === '--tag')
|
|
47
|
+
args.tag = value;
|
|
48
|
+
if (flag === '--to')
|
|
49
|
+
args.version = value;
|
|
50
|
+
if (flag === '--from') {
|
|
51
|
+
const separator = value.lastIndexOf('@');
|
|
52
|
+
const name = separator > 0 ? value.slice(0, separator) : undefined;
|
|
53
|
+
const version = separator > 0 ? value.slice(separator + 1) : undefined;
|
|
54
|
+
if (!name || !version)
|
|
55
|
+
args.problems.push(`--from needs <package>@<version>, not "${value}".`);
|
|
56
|
+
else
|
|
57
|
+
args.from[(0, exports.fullPackageName)(name)] = version;
|
|
58
|
+
}
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (!BOOLEAN_FLAGS.includes(flag)) {
|
|
62
|
+
args.problems.push(`Unknown flag "${flag}".`);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (flag === '--check')
|
|
66
|
+
args.check = true;
|
|
67
|
+
if (flag === '--dry-run')
|
|
68
|
+
args.dryRun = true;
|
|
69
|
+
if (flag === '--no-install')
|
|
70
|
+
args.install = false;
|
|
71
|
+
if (flag === '--continue')
|
|
72
|
+
args.resume = true;
|
|
73
|
+
if (flag === '--ai')
|
|
74
|
+
args.ai = true;
|
|
75
|
+
if (flag === '--force')
|
|
76
|
+
args.force = true;
|
|
77
|
+
if (flag === '--help' || flag === '-h')
|
|
78
|
+
args.help = true;
|
|
79
|
+
}
|
|
80
|
+
if (args.version !== undefined && args.tag !== undefined) {
|
|
81
|
+
args.problems.push('--to and --tag ask for different targets. Pass one of them.');
|
|
82
|
+
}
|
|
83
|
+
if (args.version !== undefined && args.packages.length !== 1) {
|
|
84
|
+
args.problems.push('--to sets the version of one package, so name that package.');
|
|
85
|
+
}
|
|
86
|
+
return args;
|
|
87
|
+
};
|
|
88
|
+
exports.parseUpdateArgs = parseUpdateArgs;
|
|
89
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/args.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;AAoB3C,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEhD,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAEhH,iFAAiF;AAC1E,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,wBAAa,GAAG,IAAI,EAAE,CAAC,CAAC;AAA5F,QAAA,eAAe,mBAA6E;AAEzG,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;IACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAExC,OAAO,SAAS,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;QACvC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC,CAAC;AAEF,4FAA4F;AACrF,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAc,EAAE;;IACrE,MAAM,IAAI,GAAe;QACvB,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK;QACb,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,uBAAe,EAAC,QAAQ,CAAC,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAExC,IAAI,MAAM,KAAK,SAAS;gBAAE,KAAK,IAAI,CAAC,CAAC;YAErC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;gBAC7C,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,OAAO;gBAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACvC,IAAI,IAAI,KAAK,MAAM;gBAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAE1C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnE,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEvE,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0CAA0C,KAAK,IAAI,CAAC,CAAC;;oBAC1F,IAAI,CAAC,IAAI,CAAC,IAAA,uBAAe,EAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC;YAClD,CAAC;YAED,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAC1C,IAAI,IAAI,KAAK,WAAW;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAC7C,IAAI,IAAI,KAAK,cAAc;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAClD,IAAI,IAAI,KAAK,YAAY;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAC9C,IAAI,IAAI,KAAK,MAAM;YAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAC1C,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAxEW,QAAA,eAAe,mBAwE1B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './ai';
|
|
2
|
+
export * from './args';
|
|
3
|
+
export * from './migration-manifest';
|
|
4
|
+
export * from './package-manager';
|
|
5
|
+
export * from './packages';
|
|
6
|
+
export * from './pending';
|
|
7
|
+
export * from './plan';
|
|
8
|
+
export * from './registry';
|
|
9
|
+
export * from './run-migrations';
|
|
10
|
+
export * from './semver';
|
|
11
|
+
export * from './tasks';
|
|
12
|
+
export * from './update-command';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./ai"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./args"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./migration-manifest"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./package-manager"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./packages"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./pending"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./plan"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./registry"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./run-migrations"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./semver"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./tasks"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./update-command"), exports);
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** The `package.json` field a package points at its own migration manifest with. */
|
|
2
|
+
export declare const MIGRATIONS_MANIFEST_KEY = "ethlete";
|
|
3
|
+
export declare const MIGRATION_KINDS: readonly ["auto", "manual", "assisted"];
|
|
4
|
+
export type MigrationKind = (typeof MIGRATION_KINDS)[number];
|
|
5
|
+
export type Migration = {
|
|
6
|
+
/** Unique inside its package, and stable: it names the migration in every report. */
|
|
7
|
+
name: string;
|
|
8
|
+
/** The version the change landed in. The migration is pending for an update that crosses it. */
|
|
9
|
+
version: string;
|
|
10
|
+
kind: MigrationKind;
|
|
11
|
+
description: string;
|
|
12
|
+
/** `auto` only: the Nx generator that rewrites the code, as `@ethlete/core:migrate-x`. */
|
|
13
|
+
generator?: string;
|
|
14
|
+
/** `auto` only: flags handed to the generator, for example `{ skipFormat: true }`. */
|
|
15
|
+
options?: Record<string, string | number | boolean>;
|
|
16
|
+
/** Markdown next to the manifest: the recommendation for `manual`, the prompt for `assisted`. */
|
|
17
|
+
instructions?: string;
|
|
18
|
+
/** Path on the docs site, for example `/components/button`. */
|
|
19
|
+
docs?: string;
|
|
20
|
+
};
|
|
21
|
+
export type PackageMigrations = {
|
|
22
|
+
packageName: string;
|
|
23
|
+
migrations: Migration[];
|
|
24
|
+
/** Where the manifest was read from, so an instructions path can be resolved against it. */
|
|
25
|
+
manifestPath?: string;
|
|
26
|
+
problems: string[];
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* The migrations an installed package ships, read from the manifest its `package.json` points at.
|
|
30
|
+
* A package that declares none is not a problem — most versions need no migration.
|
|
31
|
+
*/
|
|
32
|
+
export declare const readPackageMigrations: (options: {
|
|
33
|
+
root: string;
|
|
34
|
+
packageName: string;
|
|
35
|
+
}) => PackageMigrations;
|
|
36
|
+
/** The absolute path of a migration's instructions file, or `undefined` when it names none. */
|
|
37
|
+
export declare const instructionsPath: (options: {
|
|
38
|
+
manifestPath?: string;
|
|
39
|
+
migration: Migration;
|
|
40
|
+
}) => string | undefined;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.instructionsPath = exports.readPackageMigrations = exports.MIGRATION_KINDS = exports.MIGRATIONS_MANIFEST_KEY = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const semver_1 = require("./semver");
|
|
7
|
+
/** The `package.json` field a package points at its own migration manifest with. */
|
|
8
|
+
exports.MIGRATIONS_MANIFEST_KEY = 'ethlete';
|
|
9
|
+
exports.MIGRATION_KINDS = ['auto', 'manual', 'assisted'];
|
|
10
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
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 readString = (record, key) => {
|
|
20
|
+
const value = record[key];
|
|
21
|
+
return typeof value === 'string' && value.trim().length > 0 ? value : undefined;
|
|
22
|
+
};
|
|
23
|
+
const readOptions = (value) => {
|
|
24
|
+
if (!isRecord(value))
|
|
25
|
+
return undefined;
|
|
26
|
+
const options = {};
|
|
27
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
28
|
+
if (typeof entry === 'string' || typeof entry === 'number' || typeof entry === 'boolean')
|
|
29
|
+
options[key] = entry;
|
|
30
|
+
}
|
|
31
|
+
return options;
|
|
32
|
+
};
|
|
33
|
+
const parseEntry = (options) => {
|
|
34
|
+
const { value, origin, index } = options;
|
|
35
|
+
const at = `${origin} entry ${index}`;
|
|
36
|
+
if (!isRecord(value))
|
|
37
|
+
return { problem: `${at} is not an object.` };
|
|
38
|
+
const name = readString(value, 'name');
|
|
39
|
+
const version = readString(value, 'version');
|
|
40
|
+
const kind = readString(value, 'kind');
|
|
41
|
+
const description = readString(value, 'description');
|
|
42
|
+
if (!name)
|
|
43
|
+
return { problem: `${at} has no "name".` };
|
|
44
|
+
if (!version)
|
|
45
|
+
return { problem: `${origin} "${name}" has no "version".` };
|
|
46
|
+
if (!(0, semver_1.isValidVersion)(version))
|
|
47
|
+
return { problem: `${origin} "${name}" has an invalid version "${version}".` };
|
|
48
|
+
if (!kind)
|
|
49
|
+
return { problem: `${origin} "${name}" has no "kind".` };
|
|
50
|
+
if (!exports.MIGRATION_KINDS.includes(kind)) {
|
|
51
|
+
return { problem: `${origin} "${name}" has kind "${kind}" — use one of ${exports.MIGRATION_KINDS.join(', ')}.` };
|
|
52
|
+
}
|
|
53
|
+
if (!description)
|
|
54
|
+
return { problem: `${origin} "${name}" has no "description".` };
|
|
55
|
+
const generator = readString(value, 'generator');
|
|
56
|
+
const instructions = readString(value, 'instructions');
|
|
57
|
+
if (kind === 'auto' && !generator)
|
|
58
|
+
return { problem: `${origin} "${name}" is auto but names no "generator".` };
|
|
59
|
+
if (kind === 'assisted' && !instructions) {
|
|
60
|
+
return { problem: `${origin} "${name}" is assisted but names no "instructions" file.` };
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
migration: {
|
|
64
|
+
name,
|
|
65
|
+
version,
|
|
66
|
+
kind: kind,
|
|
67
|
+
description,
|
|
68
|
+
generator,
|
|
69
|
+
options: readOptions(value['options']),
|
|
70
|
+
instructions,
|
|
71
|
+
docs: readString(value, 'docs'),
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
const parseManifest = (options) => {
|
|
76
|
+
const { source, origin, packageName } = options;
|
|
77
|
+
if (!isRecord(source))
|
|
78
|
+
return { packageName, migrations: [], problems: [`${origin} is not a JSON object.`] };
|
|
79
|
+
const entries = source['migrations'];
|
|
80
|
+
if (!Array.isArray(entries))
|
|
81
|
+
return { packageName, migrations: [], problems: [`${origin} has no "migrations" array.`] };
|
|
82
|
+
const migrations = [];
|
|
83
|
+
const problems = [];
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
entries.forEach((value, index) => {
|
|
86
|
+
const parsed = parseEntry({ value, origin, index });
|
|
87
|
+
if (parsed.problem !== undefined) {
|
|
88
|
+
problems.push(parsed.problem);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const { migration } = parsed;
|
|
92
|
+
if (seen.has(migration.name)) {
|
|
93
|
+
problems.push(`${origin} declares "${migration.name}" twice.`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
seen.add(migration.name);
|
|
97
|
+
migrations.push(migration);
|
|
98
|
+
});
|
|
99
|
+
return { packageName, migrations, problems };
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* The migrations an installed package ships, read from the manifest its `package.json` points at.
|
|
103
|
+
* A package that declares none is not a problem — most versions need no migration.
|
|
104
|
+
*/
|
|
105
|
+
const readPackageMigrations = (options) => {
|
|
106
|
+
const { root, packageName } = options;
|
|
107
|
+
const packageJsonPath = (0, path_1.join)(root, 'node_modules', ...packageName.split('/'), 'package.json');
|
|
108
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
109
|
+
return { packageName, migrations: [], problems: [`${packageName} is not installed.`] };
|
|
110
|
+
}
|
|
111
|
+
const packageJson = readJson(packageJsonPath);
|
|
112
|
+
const field = isRecord(packageJson) ? packageJson[exports.MIGRATIONS_MANIFEST_KEY] : undefined;
|
|
113
|
+
const declared = isRecord(field) ? field['migrations'] : undefined;
|
|
114
|
+
if (typeof declared !== 'string')
|
|
115
|
+
return { packageName, migrations: [], problems: [] };
|
|
116
|
+
const manifestPath = (0, path_1.resolve)((0, path_1.dirname)(packageJsonPath), declared);
|
|
117
|
+
if (!(0, fs_1.existsSync)(manifestPath)) {
|
|
118
|
+
return {
|
|
119
|
+
packageName,
|
|
120
|
+
migrations: [],
|
|
121
|
+
problems: [`${packageName} points "${exports.MIGRATIONS_MANIFEST_KEY}.migrations" at ${manifestPath}, which is missing.`],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return Object.assign(Object.assign({}, parseManifest({ source: readJson(manifestPath), origin: `${packageName} migrations.json`, packageName })), { manifestPath });
|
|
125
|
+
};
|
|
126
|
+
exports.readPackageMigrations = readPackageMigrations;
|
|
127
|
+
/** The absolute path of a migration's instructions file, or `undefined` when it names none. */
|
|
128
|
+
const instructionsPath = (options) => {
|
|
129
|
+
const { manifestPath, migration } = options;
|
|
130
|
+
if (!migration.instructions)
|
|
131
|
+
return undefined;
|
|
132
|
+
if ((0, path_1.isAbsolute)(migration.instructions))
|
|
133
|
+
return migration.instructions;
|
|
134
|
+
return manifestPath ? (0, path_1.resolve)((0, path_1.dirname)(manifestPath), migration.instructions) : undefined;
|
|
135
|
+
};
|
|
136
|
+
exports.instructionsPath = instructionsPath;
|
|
137
|
+
//# sourceMappingURL=migration-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,23 @@
|
|
|
1
|
+
import { Manifest } from './packages';
|
|
2
|
+
export type PackageManagerName = 'yarn' | 'pnpm' | 'bun' | 'npm';
|
|
3
|
+
export type PackageManager = {
|
|
4
|
+
name: PackageManagerName;
|
|
5
|
+
/** The command that installs what `package.json` declares. */
|
|
6
|
+
install: string[];
|
|
7
|
+
/** How this manager runs a binary from `node_modules`, for example `yarn nx`. */
|
|
8
|
+
run: string[];
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* 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 the same one the repo already uses.
|
|
13
|
+
*/
|
|
14
|
+
export declare const detectPackageManager: (options: {
|
|
15
|
+
root: string;
|
|
16
|
+
manifest?: Manifest;
|
|
17
|
+
env?: NodeJS.ProcessEnv;
|
|
18
|
+
}) => PackageManager;
|
|
19
|
+
/** The command that runs an `nx` from this repo, for example `yarn nx generate …`. */
|
|
20
|
+
export declare const nxCommand: (options: {
|
|
21
|
+
manager: PackageManager;
|
|
22
|
+
args: readonly string[];
|
|
23
|
+
}) => string[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nxCommand = exports.detectPackageManager = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const MANAGERS = {
|
|
7
|
+
yarn: { name: 'yarn', install: ['yarn', 'install'], run: ['yarn'] },
|
|
8
|
+
pnpm: { name: 'pnpm', install: ['pnpm', 'install'], run: ['pnpm', 'exec'] },
|
|
9
|
+
bun: { name: 'bun', install: ['bun', 'install'], run: ['bunx'] },
|
|
10
|
+
npm: { name: 'npm', install: ['npm', 'install'], run: ['npx'] },
|
|
11
|
+
};
|
|
12
|
+
const LOCKFILES = [
|
|
13
|
+
['yarn.lock', 'yarn'],
|
|
14
|
+
['pnpm-lock.yaml', 'pnpm'],
|
|
15
|
+
['bun.lockb', 'bun'],
|
|
16
|
+
['bun.lock', 'bun'],
|
|
17
|
+
['package-lock.json', 'npm'],
|
|
18
|
+
];
|
|
19
|
+
const declaredName = (manifest, userAgent) => {
|
|
20
|
+
var _a;
|
|
21
|
+
const declared = (_a = manifest === null || manifest === void 0 ? void 0 : manifest.packageManager) !== null && _a !== void 0 ? _a : userAgent;
|
|
22
|
+
return declared
|
|
23
|
+
? Object.keys(MANAGERS).find((name) => declared.startsWith(name))
|
|
24
|
+
: undefined;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The package manager this repo uses: what `packageManager` declares, else the lockfile that is there,
|
|
28
|
+
* else npm. `et update` runs the install itself, so it has to be the same one the repo already uses.
|
|
29
|
+
*/
|
|
30
|
+
const detectPackageManager = (options) => {
|
|
31
|
+
var _a;
|
|
32
|
+
const { root, manifest, env = process.env } = options;
|
|
33
|
+
const declared = declaredName(manifest, env['npm_config_user_agent']);
|
|
34
|
+
if (declared)
|
|
35
|
+
return MANAGERS[declared];
|
|
36
|
+
const found = LOCKFILES.find(([fileName]) => (0, fs_1.existsSync)((0, path_1.join)(root, fileName)));
|
|
37
|
+
return MANAGERS[(_a = found === null || found === void 0 ? void 0 : found[1]) !== null && _a !== void 0 ? _a : 'npm'];
|
|
38
|
+
};
|
|
39
|
+
exports.detectPackageManager = detectPackageManager;
|
|
40
|
+
/** The command that runs an `nx` from this repo, for example `yarn nx generate …`. */
|
|
41
|
+
const nxCommand = (options) => [
|
|
42
|
+
...options.manager.run,
|
|
43
|
+
'nx',
|
|
44
|
+
...options.args,
|
|
45
|
+
];
|
|
46
|
+
exports.nxCommand = nxCommand;
|
|
47
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/package-manager.ts"],"names":[],"mappings":";;;AAAA,2BAAgC;AAChC,+BAA4B;AAa5B,MAAM,QAAQ,GAA+C;IAC3D,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE;IACnE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAC3E,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE;IAChE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE;CAChE,CAAC;AAEF,MAAM,SAAS,GAAmC;IAChD,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,UAAU,EAAE,KAAK,CAAC;IACnB,CAAC,mBAAmB,EAAE,KAAK,CAAC;CAC7B,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAA8B,EAAE,SAA6B,EAAE,EAAE;;IACrF,MAAM,QAAQ,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,mCAAI,SAAS,CAAC;IAEvD,OAAO,QAAQ;QACb,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAA0B,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,OAIpC,EAAkB,EAAE;;IACnB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IACtD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEtE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,QAAQ,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,mCAAI,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAbW,QAAA,oBAAoB,wBAa/B;AAEF,sFAAsF;AAC/E,MAAM,SAAS,GAAG,CAAC,OAA6D,EAAE,EAAE,CAAC;IAC1F,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG;IACtB,IAAI;IACJ,GAAG,OAAO,CAAC,IAAI;CAChB,CAAC;AAJW,QAAA,SAAS,aAIpB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export declare const ETHLETE_SCOPE = "@ethlete/";
|
|
2
|
+
export declare const ROOT_MANIFEST = "package.json";
|
|
3
|
+
export declare const DEPENDENCY_FIELDS: readonly ["dependencies", "devDependencies", "peerDependencies"];
|
|
4
|
+
export type DependencyField = (typeof DEPENDENCY_FIELDS)[number];
|
|
5
|
+
export type Manifest = Partial<Record<DependencyField, Record<string, string>>> & {
|
|
6
|
+
packageManager?: string;
|
|
7
|
+
};
|
|
8
|
+
/** One place a manifest declares a package: which file, which field, and the range written there. */
|
|
9
|
+
export type DeclaredSite = {
|
|
10
|
+
/** Relative to the root, with `/` separators. `package.json` for the root manifest. */
|
|
11
|
+
manifestPath: string;
|
|
12
|
+
field: DependencyField;
|
|
13
|
+
range: string;
|
|
14
|
+
/** The version the range points at, or `undefined` for a range no single version can be read from. */
|
|
15
|
+
declaredVersion?: string;
|
|
16
|
+
};
|
|
17
|
+
export type DeclaredPackage = {
|
|
18
|
+
name: string;
|
|
19
|
+
/** Every field of every manifest in the repo that declares this package. */
|
|
20
|
+
sites: DeclaredSite[];
|
|
21
|
+
/** The version in `node_modules`, which is what the migrations of an update run against. */
|
|
22
|
+
installedVersion?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare const manifestPath: (root: string) => string;
|
|
25
|
+
export declare const readManifest: (root: string, relativePath?: string) => Manifest | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Every `package.json` in the repo, root first. An Nx repo keeps a manifest per buildable library, and
|
|
28
|
+
* those pin `@ethlete/*` too, so an update that only rewrites the root leaves the rest behind.
|
|
29
|
+
*/
|
|
30
|
+
export declare const findManifests: (root: string) => string[];
|
|
31
|
+
/** The version of `packageName` in `node_modules`, which is the one the running code came from. */
|
|
32
|
+
export declare const installedVersion: (root: string, packageName: string) => string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* The version an update starts from when nothing is installed: the newest one any manifest declares, so
|
|
35
|
+
* a library manifest that lags behind the root does not read as the current version.
|
|
36
|
+
*/
|
|
37
|
+
export declare const newestDeclaredVersion: (sites: readonly DeclaredSite[]) => string | undefined;
|
|
38
|
+
/** Every `@ethlete/*` dependency the repo declares, gathered across all of its manifests. */
|
|
39
|
+
export declare const declaredEthletePackages: (options: {
|
|
40
|
+
root: string;
|
|
41
|
+
manifests?: readonly string[];
|
|
42
|
+
}) => DeclaredPackage[];
|
|
43
|
+
export type RangeWrite = {
|
|
44
|
+
name: string;
|
|
45
|
+
manifestPath: string;
|
|
46
|
+
field: DependencyField;
|
|
47
|
+
range: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Writes new ranges into the manifests they came from, keeping each file's indentation. A whole file is
|
|
51
|
+
* re-serialised, so a comment or a key order the parser cannot represent would not survive -
|
|
52
|
+
* `package.json` holds neither.
|
|
53
|
+
*/
|
|
54
|
+
export declare const writeRanges: (options: {
|
|
55
|
+
root: string;
|
|
56
|
+
writes: readonly RangeWrite[];
|
|
57
|
+
}) => string[];
|
|
58
|
+
/**
|
|
59
|
+
* The range that carries `version` while keeping how the declared one was written, for example `^`.
|
|
60
|
+
* `undefined` for a range this cannot rewrite safely, such as `workspace:*` or `>=5 <6`.
|
|
61
|
+
*/
|
|
62
|
+
export declare const rangeFor: (options: {
|
|
63
|
+
current: string;
|
|
64
|
+
version: string;
|
|
65
|
+
}) => string | undefined;
|