@ethlete/cli 2.1.0-next.10 → 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 +14 -0
- package/README.md +10 -5
- package/package.json +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/api/git.d.ts +2 -0
- package/src/lib/api/git.js +9 -1
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/config/local-config.d.ts +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 +14 -7
- package/src/lib/update/ai.js +49 -22
- package/src/lib/update/ai.js.map +1 -1
- 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 +1 -0
- package/src/lib/update/index.js +1 -0
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/package-manager.d.ts +7 -0
- package/src/lib/update/package-manager.js +14 -1
- package/src/lib/update/package-manager.js.map +1 -1
- package/src/lib/update/pending.d.ts +13 -0
- package/src/lib/update/pending.js +10 -5
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/registry.d.ts +11 -2
- package/src/lib/update/registry.js +88 -2
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +1 -0
- package/src/lib/update/run-migrations.js +2 -2
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/tasks.d.ts +18 -1
- package/src/lib/update/tasks.js +106 -39
- package/src/lib/update/tasks.js.map +1 -1
- package/src/lib/update/update-command.js +161 -54
- package/src/lib/update/update-command.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ethlete/cli
|
|
2
2
|
|
|
3
|
+
## 2.1.0-next.11
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- `et update` runs `ethlete-agents sync` after the install when it moved `@ethlete/agent-rules` and the repo has an `ethlete-agents.config.json`, so the regenerated rules and skills match the tasks the update writes.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- `et update --ai` stops before any change when `updateAgentCommand` is missing, hands the agent a real prompt, reports each task, and works on the tasks an earlier run left.
|
|
12
|
+
- `et update` gitignores its task list, so a later run no longer needs `--force`, and `--continue` keeps the `--from` versions and the codemods an earlier run applied.
|
|
13
|
+
- Fix `et update` for a real consumer: the `et` bin runs, `--continue` skips applied codemods, `--check` reports an unfinished run, lookups use the repo's registry, task links point at the right docs site, and failed syncs are reported.
|
|
14
|
+
- `yarn et update` on yarn 1 installs from the registry the repo's `.npmrc` or `.yarnrc` names, not the default registry yarn exports to scripts.
|
|
15
|
+
- `et update` drops deleted tasks from `tasks.md` even when nothing is pending, prints "none" for an empty dry-run migration list, and aligns the `--continue` plan.
|
|
16
|
+
|
|
3
17
|
## 2.1.0-next.10
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ Repo tooling - installs the `et` binary.
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
yarn add --dev @ethlete/cli
|
|
8
|
+
yarn add --dev @ethlete/cli@next
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
## `et release`
|
|
@@ -57,13 +57,18 @@ The install runs before the migrations are read, because the migrations of a ver
|
|
|
57
57
|
version. A run that stops leaves `.ethlete/update/pending.json` behind, and `--continue` picks it up -
|
|
58
58
|
starting over would skip every migration the stopped run had not reached.
|
|
59
59
|
|
|
60
|
+
When the update moved `@ethlete/agent-rules`, it runs `ethlete-agents sync` before the codemods, so the
|
|
61
|
+
rules and skills match the tasks it writes. `--continue` skips the codemods that already applied, and
|
|
62
|
+
`--check` exits 1 while a stopped run is unfinished.
|
|
63
|
+
|
|
60
64
|
Everything a codemod cannot decide is written to `.ethlete/update`: `tasks.md` for you, `tasks.json`
|
|
61
65
|
for an agent, and one file per task holding the instructions the package ships. A task is `manual` (it
|
|
62
66
|
needs a decision), `assisted` (written as a prompt for an agent) or `unsupported` (a codemod this repo
|
|
63
67
|
has no Nx to run, with the command to run it by hand).
|
|
64
68
|
|
|
65
|
-
`--ai` hands each assisted task to the command in `updateAgentCommand` in
|
|
66
|
-
`ethlete.config.local.json
|
|
69
|
+
`--ai` hands each open assisted task to the command in `updateAgentCommand` in
|
|
70
|
+
`ethlete.config.local.json` (for example `claude --permission-mode acceptEdits -p`), one run per task,
|
|
71
|
+
and reports each run. It also works on the tasks an earlier run left. No agent is detected automatically.
|
|
67
72
|
|
|
68
73
|
A package declares its migrations in `migrations.json` at its own root, pointed at from `package.json`
|
|
69
74
|
with `"ethlete": { "migrations": "./migrations.json" }`. The full format is on the docs site.
|
|
@@ -174,5 +179,5 @@ fallback with a warning. Add `ethlete.config.local.json` to your `.gitignore`.
|
|
|
174
179
|
|
|
175
180
|
Full command reference on the docs site:
|
|
176
181
|
|
|
177
|
-
- [Overview & usage](https://ethlete-sdk-docs.web.app/cli/)
|
|
178
|
-
- [Updating the SDK](https://ethlete-sdk-docs.web.app/cli/update)
|
|
182
|
+
- [Overview & usage](https://ethlete-sdk-docs-next.web.app/cli/)
|
|
183
|
+
- [Updating the SDK](https://ethlete-sdk-docs-next.web.app/cli/update)
|
package/package.json
CHANGED
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/cli/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/cli/src/index.ts"],"names":[],"mappings":"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"}
|
package/src/lib/api/git.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export type GitResult = {
|
|
|
6
6
|
export declare const currentBranch: (cwd: string) => string | undefined;
|
|
7
7
|
/** Modified tracked files and untracked files, as git's own porcelain lines. */
|
|
8
8
|
export declare const uncommittedChanges: (cwd: string) => string[];
|
|
9
|
+
/** Whether git ignores a repo-relative path, or `undefined` outside a git checkout. */
|
|
10
|
+
export declare const ignoredByGit: (cwd: string, path: string) => boolean | undefined;
|
|
9
11
|
export declare const hasUncommittedChanges: (cwd: string) => boolean;
|
|
10
12
|
/** Commits on any local branch that no remote holds, so work is never removed with a checkout. */
|
|
11
13
|
export declare const unpushedCommits: (cwd: string) => string[];
|
package/src/lib/api/git.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pullApiBranch = exports.checkoutApiBranch = exports.unpushedCommits = exports.hasUncommittedChanges = exports.uncommittedChanges = exports.currentBranch = void 0;
|
|
3
|
+
exports.pullApiBranch = exports.checkoutApiBranch = exports.unpushedCommits = exports.hasUncommittedChanges = exports.ignoredByGit = exports.uncommittedChanges = exports.currentBranch = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const git = (cwd, args) => {
|
|
6
6
|
var _a, _b, _c;
|
|
@@ -23,6 +23,14 @@ const uncommittedChanges = (cwd) => {
|
|
|
23
23
|
return stdout.length > 0 ? stdout.split('\n') : [];
|
|
24
24
|
};
|
|
25
25
|
exports.uncommittedChanges = uncommittedChanges;
|
|
26
|
+
/** Whether git ignores a repo-relative path, or `undefined` outside a git checkout. */
|
|
27
|
+
const ignoredByGit = (cwd, path) => {
|
|
28
|
+
const { status } = git(cwd, ['check-ignore', '--quiet', '--no-index', path]);
|
|
29
|
+
if (status === 0)
|
|
30
|
+
return true;
|
|
31
|
+
return status === 1 ? false : undefined;
|
|
32
|
+
};
|
|
33
|
+
exports.ignoredByGit = ignoredByGit;
|
|
26
34
|
const hasUncommittedChanges = (cwd) => (0, exports.uncommittedChanges)(cwd).length > 0;
|
|
27
35
|
exports.hasUncommittedChanges = hasUncommittedChanges;
|
|
28
36
|
/** Commits on any local branch that no remote holds, so work is never removed with a checkout. */
|
package/src/lib/api/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/api/git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/api/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export type LocalConfig = {
|
|
|
15
15
|
apiRepoPaths?: Record<string, string>;
|
|
16
16
|
/** Branch that represents each API's deployed state, keyed by app name. `"*"` matches any app. */
|
|
17
17
|
apiRepoBranches?: Record<string, string>;
|
|
18
|
-
/** Command `et update --ai` hands an assisted migration task to, for example `claude -p`. */
|
|
18
|
+
/** Command `et update --ai` hands an assisted migration task to, for example `claude --permission-mode acceptEdits -p`. */
|
|
19
19
|
updateAgentCommand?: string;
|
|
20
20
|
};
|
|
21
21
|
export declare const LOCAL_CONFIG_KEYS: (keyof LocalConfig)[];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PackageManager } from './package-manager';
|
|
2
|
+
import { UpdatedPackage } from './plan';
|
|
3
|
+
export declare const AGENT_RULES_PACKAGE = "@ethlete/agent-rules";
|
|
4
|
+
export declare const AGENT_RULES_CONFIG_FILE = "ethlete-agents.config.json";
|
|
5
|
+
export type AgentRulesSyncPlan = {
|
|
6
|
+
state: 'not-updated';
|
|
7
|
+
} | {
|
|
8
|
+
state: 'no-config';
|
|
9
|
+
command: string[];
|
|
10
|
+
} | {
|
|
11
|
+
state: 'sync';
|
|
12
|
+
command: string[];
|
|
13
|
+
};
|
|
14
|
+
export type AgentRulesSyncOutcome = {
|
|
15
|
+
state: 'not-updated';
|
|
16
|
+
} | {
|
|
17
|
+
state: 'no-config';
|
|
18
|
+
command: string[];
|
|
19
|
+
} | {
|
|
20
|
+
state: 'synced';
|
|
21
|
+
command: string[];
|
|
22
|
+
} | {
|
|
23
|
+
state: 'failed';
|
|
24
|
+
command: string[];
|
|
25
|
+
reason: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const agentRulesSyncCommand: (manager: PackageManager) => string[];
|
|
28
|
+
/**
|
|
29
|
+
* Whether an update has to regenerate the repo's agent rules and skills: only when it moved
|
|
30
|
+
* `@ethlete/agent-rules`, and only in a repo that configured them.
|
|
31
|
+
*/
|
|
32
|
+
export declare const planAgentRulesSync: (options: {
|
|
33
|
+
root: string;
|
|
34
|
+
manager: PackageManager;
|
|
35
|
+
updates: readonly UpdatedPackage[];
|
|
36
|
+
}) => AgentRulesSyncPlan;
|
|
37
|
+
export declare const runAgentRulesSync: (plan: AgentRulesSyncPlan, root: string) => AgentRulesSyncOutcome;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runAgentRulesSync = exports.planAgentRulesSync = exports.agentRulesSyncCommand = exports.AGENT_RULES_CONFIG_FILE = exports.AGENT_RULES_PACKAGE = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
exports.AGENT_RULES_PACKAGE = '@ethlete/agent-rules';
|
|
8
|
+
exports.AGENT_RULES_CONFIG_FILE = 'ethlete-agents.config.json';
|
|
9
|
+
const agentRulesSyncCommand = (manager) => [...manager.run, 'ethlete-agents', 'sync'];
|
|
10
|
+
exports.agentRulesSyncCommand = agentRulesSyncCommand;
|
|
11
|
+
/**
|
|
12
|
+
* Whether an update has to regenerate the repo's agent rules and skills: only when it moved
|
|
13
|
+
* `@ethlete/agent-rules`, and only in a repo that configured them.
|
|
14
|
+
*/
|
|
15
|
+
const planAgentRulesSync = (options) => {
|
|
16
|
+
const { root, manager, updates } = options;
|
|
17
|
+
if (!updates.some((update) => update.name === exports.AGENT_RULES_PACKAGE))
|
|
18
|
+
return { state: 'not-updated' };
|
|
19
|
+
const command = (0, exports.agentRulesSyncCommand)(manager);
|
|
20
|
+
if (!(0, fs_1.existsSync)((0, path_1.join)(root, exports.AGENT_RULES_CONFIG_FILE)))
|
|
21
|
+
return { state: 'no-config', command };
|
|
22
|
+
return { state: 'sync', command };
|
|
23
|
+
};
|
|
24
|
+
exports.planAgentRulesSync = planAgentRulesSync;
|
|
25
|
+
const runAgentRulesSync = (plan, root) => {
|
|
26
|
+
if (plan.state !== 'sync')
|
|
27
|
+
return plan;
|
|
28
|
+
const [binary, ...args] = plan.command;
|
|
29
|
+
if (binary === undefined)
|
|
30
|
+
return { state: 'failed', command: plan.command, reason: 'no command to run sync with' };
|
|
31
|
+
const result = (0, child_process_1.spawnSync)(binary, args, { cwd: root, stdio: 'inherit' });
|
|
32
|
+
if (result.error)
|
|
33
|
+
return { state: 'failed', command: plan.command, reason: result.error.message };
|
|
34
|
+
if (result.status !== 0) {
|
|
35
|
+
return { state: 'failed', command: plan.command, reason: `${binary} exited with ${result.status}` };
|
|
36
|
+
}
|
|
37
|
+
return { state: 'synced', command: plan.command };
|
|
38
|
+
};
|
|
39
|
+
exports.runAgentRulesSync = runAgentRulesSync;
|
|
40
|
+
//# sourceMappingURL=agent-rules-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-rules-sync.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/agent-rules-sync.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAC1C,2BAAgC;AAChC,+BAA4B;AAIf,QAAA,mBAAmB,GAAG,sBAAsB,CAAC;AAC7C,QAAA,uBAAuB,GAAG,4BAA4B,CAAC;AAW7D,MAAM,qBAAqB,GAAG,CAAC,OAAuB,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAAhG,QAAA,qBAAqB,yBAA2E;AAE7G;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,OAIlC,EAAsB,EAAE;IACvB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,2BAAmB,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAEpG,MAAM,OAAO,GAAG,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,CAAC,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,IAAI,EAAE,+BAAuB,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAE7F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC,CAAC;AAdW,QAAA,kBAAkB,sBAc7B;AAEK,MAAM,iBAAiB,GAAG,CAAC,IAAwB,EAAE,IAAY,EAAyB,EAAE;IACjG,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;IAEvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;IAEnH,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAExE,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAElG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IACtG,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACpD,CAAC,CAAC;AAhBW,QAAA,iBAAiB,qBAgB5B"}
|
package/src/lib/update/ai.d.ts
CHANGED
|
@@ -1,27 +1,34 @@
|
|
|
1
1
|
import { UpdateTask } from './tasks';
|
|
2
2
|
/** Where the agent command sits in `ethlete.config.local.json`. */
|
|
3
3
|
export declare const AGENT_COMMAND_KEY = "updateAgentCommand";
|
|
4
|
-
/**
|
|
4
|
+
/** An agent command that can edit files without asking, for the docs and the error that names the key. */
|
|
5
|
+
export declare const AGENT_COMMAND_EXAMPLE = "claude --permission-mode acceptEdits -p";
|
|
6
|
+
/** Where the command template takes the whole prompt. */
|
|
5
7
|
export declare const PROMPT_PLACEHOLDER = "<prompt>";
|
|
8
|
+
/** Where the command template takes only the path of the task file. */
|
|
9
|
+
export declare const FILE_PLACEHOLDER = "<file>";
|
|
10
|
+
/** The prompt one assisted task is handed to an agent with. */
|
|
11
|
+
export declare const agentPrompt: (taskPath: string) => string;
|
|
6
12
|
/**
|
|
7
|
-
* The command that hands one task to an agent. `<prompt>` becomes the
|
|
8
|
-
*
|
|
13
|
+
* The command that hands one task to an agent. `<prompt>` becomes the prompt, `<file>` the path of the
|
|
14
|
+
* task file; a template with neither gets the prompt appended, which is what `claude -p` needs.
|
|
9
15
|
*/
|
|
10
16
|
export declare const agentCommand: (options: {
|
|
11
17
|
template: string;
|
|
12
|
-
|
|
18
|
+
taskPath: string;
|
|
13
19
|
}) => string;
|
|
20
|
+
export type AgentRunState = 'done' | 'open' | 'failed';
|
|
14
21
|
export type AgentRun = {
|
|
15
22
|
task: UpdateTask;
|
|
16
23
|
command: string;
|
|
17
|
-
|
|
24
|
+
state: AgentRunState;
|
|
18
25
|
reason?: string;
|
|
19
26
|
};
|
|
20
27
|
/** The tasks an agent can work on: the ones whose instructions were written as a prompt. */
|
|
21
28
|
export declare const assistedTasks: (tasks: readonly UpdateTask[]) => UpdateTask[];
|
|
22
29
|
/**
|
|
23
|
-
* Runs the configured agent once per assisted task, in order, so each run has one change to make
|
|
24
|
-
* command is a user-written string, so it runs through a shell.
|
|
30
|
+
* Runs the configured agent once per assisted task, in order, so each run has one change to make, and
|
|
31
|
+
* reports each one as it ends. The command is a user-written string, so it runs through a shell.
|
|
25
32
|
*/
|
|
26
33
|
export declare const runAgentTasks: (options: {
|
|
27
34
|
root: string;
|
package/src/lib/update/ai.js
CHANGED
|
@@ -1,43 +1,70 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.runAgentTasks = exports.assistedTasks = exports.agentCommand = exports.PROMPT_PLACEHOLDER = exports.AGENT_COMMAND_KEY = void 0;
|
|
3
|
+
exports.runAgentTasks = exports.assistedTasks = exports.agentCommand = exports.agentPrompt = exports.FILE_PLACEHOLDER = exports.PROMPT_PLACEHOLDER = exports.AGENT_COMMAND_EXAMPLE = exports.AGENT_COMMAND_KEY = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
|
+
const fs_1 = require("fs");
|
|
5
6
|
const path_1 = require("path");
|
|
6
7
|
/** Where the agent command sits in `ethlete.config.local.json`. */
|
|
7
8
|
exports.AGENT_COMMAND_KEY = 'updateAgentCommand';
|
|
8
|
-
/**
|
|
9
|
+
/** An agent command that can edit files without asking, for the docs and the error that names the key. */
|
|
10
|
+
exports.AGENT_COMMAND_EXAMPLE = 'claude --permission-mode acceptEdits -p';
|
|
11
|
+
/** Where the command template takes the whole prompt. */
|
|
9
12
|
exports.PROMPT_PLACEHOLDER = '<prompt>';
|
|
13
|
+
/** Where the command template takes only the path of the task file. */
|
|
14
|
+
exports.FILE_PLACEHOLDER = '<file>';
|
|
15
|
+
/** The prompt one assisted task is handed to an agent with. */
|
|
16
|
+
const agentPrompt = (taskPath) => `Apply the migration task described in ${taskPath} to this repository. ` +
|
|
17
|
+
'Follow its instructions, then delete that file once the change is complete.';
|
|
18
|
+
exports.agentPrompt = agentPrompt;
|
|
19
|
+
const quoted = (value) => (/\s/.test(value) ? `"${value}"` : value);
|
|
10
20
|
/**
|
|
11
|
-
* The command that hands one task to an agent. `<prompt>` becomes the
|
|
12
|
-
*
|
|
21
|
+
* The command that hands one task to an agent. `<prompt>` becomes the prompt, `<file>` the path of the
|
|
22
|
+
* task file; a template with neither gets the prompt appended, which is what `claude -p` needs.
|
|
13
23
|
*/
|
|
14
24
|
const agentCommand = (options) => {
|
|
15
|
-
const { template,
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
const { template, taskPath } = options;
|
|
26
|
+
const prompt = quoted((0, exports.agentPrompt)(taskPath));
|
|
27
|
+
if (template.includes(exports.PROMPT_PLACEHOLDER) || template.includes(exports.FILE_PLACEHOLDER)) {
|
|
28
|
+
return template.split(exports.PROMPT_PLACEHOLDER).join(prompt).split(exports.FILE_PLACEHOLDER).join(quoted(taskPath));
|
|
29
|
+
}
|
|
30
|
+
return `${template} ${prompt}`;
|
|
20
31
|
};
|
|
21
32
|
exports.agentCommand = agentCommand;
|
|
22
33
|
/** The tasks an agent can work on: the ones whose instructions were written as a prompt. */
|
|
23
34
|
const assistedTasks = (tasks) => tasks.filter((task) => task.kind === 'assisted' && task.instructionsFile !== undefined);
|
|
24
35
|
exports.assistedTasks = assistedTasks;
|
|
36
|
+
const runOne = (options) => {
|
|
37
|
+
var _a;
|
|
38
|
+
const { root, template, task } = options;
|
|
39
|
+
const taskPath = (0, path_1.join)(root, (_a = task.instructionsFile) !== null && _a !== void 0 ? _a : '');
|
|
40
|
+
const command = (0, exports.agentCommand)({ template, taskPath });
|
|
41
|
+
console.log(` ${command}\n`);
|
|
42
|
+
const result = (0, child_process_1.spawnSync)(command, { cwd: root, stdio: 'inherit', shell: true });
|
|
43
|
+
if (result.error)
|
|
44
|
+
return { task, command, state: 'failed', reason: result.error.message };
|
|
45
|
+
if (result.status !== 0)
|
|
46
|
+
return { task, command, state: 'failed', reason: `exited with ${result.status}` };
|
|
47
|
+
if ((0, fs_1.existsSync)(taskPath)) {
|
|
48
|
+
return { task, command, state: 'open', reason: `the agent left ${task.instructionsFile}, so the task stays open` };
|
|
49
|
+
}
|
|
50
|
+
return { task, command, state: 'done' };
|
|
51
|
+
};
|
|
25
52
|
/**
|
|
26
|
-
* Runs the configured agent once per assisted task, in order, so each run has one change to make
|
|
27
|
-
* command is a user-written string, so it runs through a shell.
|
|
53
|
+
* Runs the configured agent once per assisted task, in order, so each run has one change to make, and
|
|
54
|
+
* reports each one as it ends. The command is a user-written string, so it runs through a shell.
|
|
28
55
|
*/
|
|
29
56
|
const runAgentTasks = (options) => {
|
|
30
|
-
const { root, template
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
console.log(`\n ${
|
|
35
|
-
const
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return
|
|
57
|
+
const { root, template } = options;
|
|
58
|
+
const tasks = (0, exports.assistedTasks)(options.tasks);
|
|
59
|
+
return tasks.map((task, index) => {
|
|
60
|
+
const label = `[${index + 1}/${tasks.length}] ${task.packageName} ${task.name}`;
|
|
61
|
+
console.log(`\n ${label}`);
|
|
62
|
+
const run = runOne({ root, template, task });
|
|
63
|
+
if (run.state === 'done')
|
|
64
|
+
console.log(`\n ${label}: done`);
|
|
65
|
+
else
|
|
66
|
+
console.error(`\n ${label}: ${run.reason}`);
|
|
67
|
+
return run;
|
|
41
68
|
});
|
|
42
69
|
};
|
|
43
70
|
exports.runAgentTasks = runAgentTasks;
|
package/src/lib/update/ai.js.map
CHANGED
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ignoreUpdateDir = exports.UPDATE_IGNORE_ENTRY = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const git_1 = require("../api/git");
|
|
7
|
+
exports.UPDATE_IGNORE_ENTRY = '.ethlete/update/';
|
|
8
|
+
const ignoreUpdateDir = (root) => {
|
|
9
|
+
if ((0, git_1.ignoredByGit)(root, `${exports.UPDATE_IGNORE_ENTRY}pending.json`) !== false)
|
|
10
|
+
return false;
|
|
11
|
+
const path = (0, path_1.join)(root, '.gitignore');
|
|
12
|
+
const current = (0, fs_1.existsSync)(path) ? (0, fs_1.readFileSync)(path, 'utf8') : '';
|
|
13
|
+
const separator = current.length === 0 || current.endsWith('\n') ? '' : '\n';
|
|
14
|
+
(0, fs_1.writeFileSync)(path, `${current}${separator}${exports.UPDATE_IGNORE_ENTRY}\n`, 'utf8');
|
|
15
|
+
return true;
|
|
16
|
+
};
|
|
17
|
+
exports.ignoreUpdateDir = ignoreUpdateDir;
|
|
18
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/gitignore.ts"],"names":[],"mappings":";;;AAAA,2BAA6D;AAC7D,+BAA4B;AAC5B,oCAA0C;AAE7B,QAAA,mBAAmB,GAAG,kBAAkB,CAAC;AAE/C,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;IAC9C,IAAI,IAAA,kBAAY,EAAC,IAAI,EAAE,GAAG,2BAAmB,cAAc,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAErF,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAA,eAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,IAAA,kBAAa,EAAC,IAAI,EAAE,GAAG,OAAO,GAAG,SAAS,GAAG,2BAAmB,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9E,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B"}
|
package/src/lib/update/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./agent-rules-sync"), exports);
|
|
4
5
|
tslib_1.__exportStar(require("./ai"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./args"), exports);
|
|
6
7
|
tslib_1.__exportStar(require("./migration-manifest"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqB;AACrB,iDAAuB;AACvB,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B;AAC3B,2DAAiC;AACjC,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,+CAAqB;AACrB,iDAAuB;AACvB,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B;AAC3B,2DAAiC;AACjC,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
|
|
@@ -16,6 +16,13 @@ export declare const detectPackageManager: (options: {
|
|
|
16
16
|
manifest?: Manifest;
|
|
17
17
|
env?: NodeJS.ProcessEnv;
|
|
18
18
|
}) => PackageManager;
|
|
19
|
+
/**
|
|
20
|
+
* The environment for the install `et update` spawns. Inside a package manager script, yarn 1 exports
|
|
21
|
+
* its own default registry as `npm_config_registry`, which the child install would read over the
|
|
22
|
+
* repo's `.npmrc` and `.yarnrc`. Dropping it lets the child read the repo's config, as it does when
|
|
23
|
+
* `et` runs outside a script.
|
|
24
|
+
*/
|
|
25
|
+
export declare const installEnv: (env?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
|
|
19
26
|
/** The command that runs an `nx` from this repo, for example `yarn nx generate …`. */
|
|
20
27
|
export declare const nxCommand: (options: {
|
|
21
28
|
manager: PackageManager;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nxCommand = exports.detectPackageManager = void 0;
|
|
3
|
+
exports.nxCommand = exports.installEnv = exports.detectPackageManager = void 0;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const MANAGERS = {
|
|
@@ -37,6 +37,19 @@ const detectPackageManager = (options) => {
|
|
|
37
37
|
return MANAGERS[(_a = found === null || found === void 0 ? void 0 : found[1]) !== null && _a !== void 0 ? _a : 'npm'];
|
|
38
38
|
};
|
|
39
39
|
exports.detectPackageManager = detectPackageManager;
|
|
40
|
+
const INJECTED_REGISTRY = /^npm_config_(@[^:]+:)?registry$/i;
|
|
41
|
+
/**
|
|
42
|
+
* The environment for the install `et update` spawns. Inside a package manager script, yarn 1 exports
|
|
43
|
+
* its own default registry as `npm_config_registry`, which the child install would read over the
|
|
44
|
+
* repo's `.npmrc` and `.yarnrc`. Dropping it lets the child read the repo's config, as it does when
|
|
45
|
+
* `et` runs outside a script.
|
|
46
|
+
*/
|
|
47
|
+
const installEnv = (env = process.env) => {
|
|
48
|
+
if (env['npm_lifecycle_event'] === undefined)
|
|
49
|
+
return env;
|
|
50
|
+
return Object.fromEntries(Object.entries(env).filter(([key]) => !INJECTED_REGISTRY.test(key)));
|
|
51
|
+
};
|
|
52
|
+
exports.installEnv = installEnv;
|
|
40
53
|
/** The command that runs an `nx` from this repo, for example `yarn nx generate …`. */
|
|
41
54
|
const nxCommand = (options) => [
|
|
42
55
|
...options.manager.run,
|
|
@@ -1 +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"}
|
|
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,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AAE7D;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAqB,EAAE;IACpF,IAAI,GAAG,CAAC,qBAAqB,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAEzD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC,CAAC;AAJW,QAAA,UAAU,cAIrB;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"}
|
|
@@ -5,9 +5,17 @@ export type PendingPackage = {
|
|
|
5
5
|
from: string | null;
|
|
6
6
|
to: string;
|
|
7
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
|
+
};
|
|
8
13
|
export type PendingUpdate = {
|
|
9
14
|
startedAt: string;
|
|
10
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>;
|
|
11
19
|
};
|
|
12
20
|
/**
|
|
13
21
|
* Records what an update moved, before the install replaces the versions the migrations run from. An
|
|
@@ -18,4 +26,9 @@ export declare const writePendingUpdate: (options: {
|
|
|
18
26
|
pending: PendingUpdate;
|
|
19
27
|
}) => void;
|
|
20
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;
|
|
21
34
|
export declare const clearPendingUpdate: (root: string) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clearPendingUpdate = exports.readPendingUpdate = exports.writePendingUpdate = exports.PENDING_FILE = void 0;
|
|
3
|
+
exports.clearPendingUpdate = exports.isFinished = exports.readPendingUpdate = exports.writePendingUpdate = exports.PENDING_FILE = void 0;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const tasks_1 = require("./tasks");
|
|
@@ -30,12 +30,17 @@ const readPendingUpdate = (root) => {
|
|
|
30
30
|
if (!isRecord(parsed) || !Array.isArray(parsed['packages']))
|
|
31
31
|
return undefined;
|
|
32
32
|
const packages = parsed['packages'].filter((entry) => isRecord(entry) && typeof entry['name'] === 'string' && typeof entry['to'] === 'string');
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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 } : {}));
|
|
37
40
|
};
|
|
38
41
|
exports.readPendingUpdate = readPendingUpdate;
|
|
42
|
+
const isFinished = (options) => options.finished.some((entry) => entry.packageName === options.packageName && entry.name === options.name);
|
|
43
|
+
exports.isFinished = isFinished;
|
|
39
44
|
const clearPendingUpdate = (root) => (0, fs_1.rmSync)((0, path_1.join)(root, exports.PENDING_FILE), { force: true });
|
|
40
45
|
exports.clearPendingUpdate = clearPendingUpdate;
|
|
41
46
|
//# sourceMappingURL=pending.js.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"pending.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PackageManagerName } from './package-manager';
|
|
1
2
|
export declare const DEFAULT_REGISTRY = "https://registry.npmjs.org";
|
|
2
3
|
export type RegistryPackage = {
|
|
3
4
|
distTags: Record<string, string>;
|
|
@@ -10,8 +11,16 @@ export type RegistryLookup = {
|
|
|
10
11
|
ok: false;
|
|
11
12
|
reason: string;
|
|
12
13
|
};
|
|
13
|
-
/**
|
|
14
|
-
|
|
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;
|
|
15
24
|
export declare const packageUrl: (options: {
|
|
16
25
|
registry: string;
|
|
17
26
|
packageName: string;
|