@detergent-software/atk 7.13.0-dev.2 → 7.13.0
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/README.md +5 -6
- package/build/commands/promote.d.ts +1 -10
- package/build/commands/promote.d.ts.map +1 -1
- package/build/commands/promote.js +31 -30
- package/build/commands/promote.js.map +1 -1
- package/build/commands/release-notes.js +1 -1
- package/build/commands/release-notes.js.map +1 -1
- package/build/commands/unpublish.d.ts +1 -10
- package/build/commands/unpublish.d.ts.map +1 -1
- package/build/commands/unpublish.js +19 -30
- package/build/commands/unpublish.js.map +1 -1
- package/build/components/index.d.ts +0 -1
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +0 -1
- package/build/components/index.js.map +1 -1
- package/build/hooks/usePromoteState.d.ts +51 -0
- package/build/hooks/usePromoteState.d.ts.map +1 -0
- package/build/hooks/usePromoteState.js +139 -0
- package/build/hooks/usePromoteState.js.map +1 -0
- package/build/hooks/useUnpublishState.d.ts +52 -0
- package/build/hooks/useUnpublishState.d.ts.map +1 -0
- package/build/hooks/useUnpublishState.js +140 -0
- package/build/hooks/useUnpublishState.js.map +1 -0
- package/build/lib/api/index.d.ts +2 -2
- package/build/lib/api/index.d.ts.map +1 -1
- package/build/lib/api/index.js +1 -1
- package/build/lib/api/index.js.map +1 -1
- package/build/lib/api/sdk.gen.d.ts +1 -21
- package/build/lib/api/sdk.gen.d.ts.map +1 -1
- package/build/lib/api/sdk.gen.js +0 -56
- package/build/lib/api/sdk.gen.js.map +1 -1
- package/build/lib/api/types.gen.d.ts +0 -387
- package/build/lib/api/types.gen.d.ts.map +1 -1
- package/build/lib/api-client.d.ts +0 -5
- package/build/lib/api-client.d.ts.map +1 -1
- package/build/lib/api-client.js +0 -31
- package/build/lib/api-client.js.map +1 -1
- package/build/lib/auth.d.ts +14 -1
- package/build/lib/auth.d.ts.map +1 -1
- package/build/lib/auth.js +30 -1
- package/build/lib/auth.js.map +1 -1
- package/build/lib/diagnostics.d.ts.map +1 -1
- package/build/lib/diagnostics.js +19 -1
- package/build/lib/diagnostics.js.map +1 -1
- package/build/lib/publisher.d.ts.map +1 -1
- package/build/lib/publisher.js +7 -1
- package/build/lib/publisher.js.map +1 -1
- package/build/lib/registry-mutate.d.ts +64 -23
- package/build/lib/registry-mutate.d.ts.map +1 -1
- package/build/lib/registry-mutate.js +409 -50
- package/build/lib/registry-mutate.js.map +1 -1
- package/build/lib/registry-repo.d.ts +3 -2
- package/build/lib/registry-repo.d.ts.map +1 -1
- package/build/lib/registry-repo.js +3 -2
- package/build/lib/registry-repo.js.map +1 -1
- package/build/lib/release-notes.d.ts +14 -18
- package/build/lib/release-notes.d.ts.map +1 -1
- package/build/lib/release-notes.js +42 -10
- package/build/lib/release-notes.js.map +1 -1
- package/package.json +1 -1
- package/build/components/RegistryChangeSummary.d.ts +0 -21
- package/build/components/RegistryChangeSummary.d.ts.map +0 -1
- package/build/components/RegistryChangeSummary.js +0 -24
- package/build/components/RegistryChangeSummary.js.map +0 -1
- package/build/hooks/useRegistryChangeState.d.ts +0 -57
- package/build/hooks/useRegistryChangeState.d.ts.map +0 -1
- package/build/hooks/useRegistryChangeState.js +0 -112
- package/build/hooks/useRegistryChangeState.js.map +0 -1
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { eq as semverEq, gt as semverGt, prerelease as semverPrerelease, rcompare as semverRcompare, valid as semverValid, } from 'semver';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { getGitHubToken } from './auth.js';
|
|
3
|
+
import { fetchWithRetry } from './fetch-retry.js';
|
|
4
4
|
import { CLI_VERSION, isPreRelease } from './version.js';
|
|
5
5
|
/** Default number of releases shown in list mode before `--all` is needed. */
|
|
6
6
|
export const DEFAULT_RELEASE_LIMIT = 15;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* The CLI's own source repository (distinct from the registry repo).
|
|
9
|
+
* GitHub Releases for this repo are the source of the `release-notes` command.
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_CLI_REPO = 'EmergentSoftware/agentic-toolkit-cli';
|
|
12
|
+
const RELEASES_URL = `https://api.github.com/repos/${DEFAULT_CLI_REPO}/releases?per_page=100`;
|
|
13
|
+
/**
|
|
14
|
+
* Fetch GitHub Releases for the CLI repo and return release notes for browsing.
|
|
10
15
|
*
|
|
11
16
|
* Without a `version`, returns the release history (newest-first), channel-filtered
|
|
12
17
|
* and capped at a limit, with each entry flagged for whether it is the installed
|
|
@@ -21,9 +26,14 @@ export const DEFAULT_RELEASE_LIMIT = 15;
|
|
|
21
26
|
* command can surface them via `ErrorView`.
|
|
22
27
|
*/
|
|
23
28
|
export async function getReleaseNotes(options = {}, progress) {
|
|
29
|
+
progress?.('Authenticating...');
|
|
30
|
+
const token = await getGitHubToken();
|
|
24
31
|
progress?.('Fetching releases...');
|
|
25
|
-
const
|
|
26
|
-
|
|
32
|
+
const response = await fetchWithRetry(RELEASES_URL, { headers: buildGitHubHeaders(token) });
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(httpErrorMessage(response.status, 'CLI releases'));
|
|
35
|
+
}
|
|
36
|
+
const raw = (await response.json());
|
|
27
37
|
// A specific version lookup ignores the channel filter so you can always read
|
|
28
38
|
// the notes for any published version (including pre-releases).
|
|
29
39
|
if (options.version) {
|
|
@@ -48,7 +58,7 @@ export async function getReleaseNotes(options = {}, progress) {
|
|
|
48
58
|
};
|
|
49
59
|
}
|
|
50
60
|
/**
|
|
51
|
-
* Pure selection logic: from raw releases, return valid releases ordered
|
|
61
|
+
* Pure selection logic: from raw GitHub releases, return valid releases ordered
|
|
52
62
|
* newest-first, optionally including pre-releases, with each entry flagged for
|
|
53
63
|
* whether it is the installed version or newer than it. Exported separately so
|
|
54
64
|
* channel filtering, version comparison, and flagging are unit-testable without
|
|
@@ -56,14 +66,14 @@ export async function getReleaseNotes(options = {}, progress) {
|
|
|
56
66
|
*
|
|
57
67
|
* - Tags are normalized by stripping a leading `v`; entries that aren't valid
|
|
58
68
|
* semver are skipped.
|
|
59
|
-
* - A release's channel is `dev` when
|
|
69
|
+
* - A release's channel is `dev` when GitHub's `prerelease` flag is set OR the
|
|
60
70
|
* version carries a semver pre-release component; otherwise `latest`.
|
|
61
71
|
* - When `includePrerelease` is false, `dev` releases are dropped.
|
|
62
72
|
*/
|
|
63
73
|
export function selectReleaseNotes(raw, currentVersion, includePrerelease) {
|
|
64
74
|
const notes = [];
|
|
65
75
|
for (const entry of raw) {
|
|
66
|
-
const version = normalizeTag(entry.
|
|
76
|
+
const version = normalizeTag(entry.tag_name);
|
|
67
77
|
if (!version || !semverValid(version)) {
|
|
68
78
|
continue;
|
|
69
79
|
}
|
|
@@ -78,13 +88,35 @@ export function selectReleaseNotes(raw, currentVersion, includePrerelease) {
|
|
|
78
88
|
installed: semverValid(currentVersion) ? semverEq(version, currentVersion) : false,
|
|
79
89
|
newer: semverValid(currentVersion) ? semverGt(version, currentVersion) : false,
|
|
80
90
|
prerelease,
|
|
81
|
-
publishedAt: entry.
|
|
91
|
+
publishedAt: entry.published_at ?? null,
|
|
82
92
|
version,
|
|
83
93
|
});
|
|
84
94
|
}
|
|
85
95
|
notes.sort((a, b) => semverRcompare(a.version, b.version));
|
|
86
96
|
return notes;
|
|
87
97
|
}
|
|
98
|
+
/** Standard GitHub REST API headers for the releases request. */
|
|
99
|
+
function buildGitHubHeaders(token) {
|
|
100
|
+
return {
|
|
101
|
+
Accept: 'application/vnd.github+json',
|
|
102
|
+
Authorization: `Bearer ${token}`,
|
|
103
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** User-friendly message for a failed GitHub API response. */
|
|
107
|
+
function httpErrorMessage(status, resource) {
|
|
108
|
+
switch (status) {
|
|
109
|
+
case 401:
|
|
110
|
+
case 403:
|
|
111
|
+
return 'Authentication failed. Check your GitHub token or run `gh auth login`.';
|
|
112
|
+
case 404:
|
|
113
|
+
return `File not found at ${resource}.`;
|
|
114
|
+
case 429:
|
|
115
|
+
return 'GitHub API rate limit exceeded. Try again later.';
|
|
116
|
+
default:
|
|
117
|
+
return `Failed to fetch ${resource}: HTTP ${status}`;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
88
120
|
/** Strip a single leading `v` from a release tag, returning undefined when empty. */
|
|
89
121
|
function normalizeTag(tagName) {
|
|
90
122
|
if (!tagName)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,IAAI,QAAQ,EACd,EAAE,IAAI,QAAQ,EACd,UAAU,IAAI,gBAAgB,EAC9B,QAAQ,IAAI,cAAc,EAC1B,KAAK,IAAI,WAAW,GACrB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"release-notes.js","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { RegistryChangePlan, RegistryChangeResponse } from '../lib/registry-mutate.js';
|
|
2
|
-
interface RegistryChangePlanViewProps {
|
|
3
|
-
plan: RegistryChangePlan;
|
|
4
|
-
/** Render the dry-run banner and branch line (dry run) or the confirmation prompt (confirming). */
|
|
5
|
-
variant: 'confirm' | 'dry-run';
|
|
6
|
-
}
|
|
7
|
-
interface RegistryChangeResultViewProps {
|
|
8
|
-
plan: RegistryChangePlan | undefined;
|
|
9
|
-
result: RegistryChangeResponse;
|
|
10
|
-
}
|
|
11
|
-
/** `@org/name` or `name`, optionally with an asset type prefix (`skill my-skill`). */
|
|
12
|
-
export declare function formatChangeTarget(plan: Pick<RegistryChangePlan, 'assetType' | 'kind' | 'name' | 'org'>): string;
|
|
13
|
-
/** The PR the API opened for an unpublish / promote. */
|
|
14
|
-
export declare function RegistryChangeResult({ plan, result }: RegistryChangeResultViewProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
-
/**
|
|
16
|
-
* The server's plan for `atk unpublish` / `atk promote`: target, versions,
|
|
17
|
-
* one line per version directory (`remove:` or `move: from → to`), warnings.
|
|
18
|
-
*/
|
|
19
|
-
export default function RegistryChangeSummary({ plan, variant }: RegistryChangePlanViewProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=RegistryChangeSummary.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RegistryChangeSummary.d.ts","sourceRoot":"","sources":["../../src/components/RegistryChangeSummary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAI5F,UAAU,2BAA2B;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,mGAAmG;IACnG,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;CAChC;AAED,UAAU,6BAA6B;IACrC,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,MAAM,CAIhH;AAED,wDAAwD;AACxD,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,6BAA6B,2CA4BnF;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,2BAA2B,2CA+D3F"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from 'ink';
|
|
3
|
-
import { CheckIcon } from './StatusBadge.js';
|
|
4
|
-
/** `@org/name` or `name`, optionally with an asset type prefix (`skill my-skill`). */
|
|
5
|
-
export function formatChangeTarget(plan) {
|
|
6
|
-
const scoped = plan.org ? `@${plan.org}/${plan.name}` : plan.name;
|
|
7
|
-
const label = plan.kind === 'bundle' ? 'bundle' : plan.assetType;
|
|
8
|
-
return label ? `${label} ${scoped}` : scoped;
|
|
9
|
-
}
|
|
10
|
-
/** The PR the API opened for an unpublish / promote. */
|
|
11
|
-
export function RegistryChangeResult({ plan, result }) {
|
|
12
|
-
const verb = plan?.action === 'promote' ? 'Promote' : 'Unpublish';
|
|
13
|
-
const target = plan ? formatChangeTarget(plan) : undefined;
|
|
14
|
-
return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { color: 'green', children: [verb, " PR #", result.prNumber, " opened", target ? ' for ' : '', target ? _jsx(Text, { bold: true, children: target }) : null] }), _jsx(Text, { children: " " }), _jsxs(Text, { children: ["PR: ", _jsx(Text, { color: 'cyan', children: result.prUrl })] }), _jsxs(Text, { children: ["Branch: ", _jsx(Text, { dimColor: true, children: result.branchName })] }), result.warnings.length > 0 ? (_jsx(Box, { flexDirection: 'column', marginTop: 1, children: result.warnings.map((w) => (_jsxs(Text, { children: [_jsx(CheckIcon, { status: 'warn' }), " ", w] }, w))) })) : null] }));
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* The server's plan for `atk unpublish` / `atk promote`: target, versions,
|
|
18
|
-
* one line per version directory (`remove:` or `move: from → to`), warnings.
|
|
19
|
-
*/
|
|
20
|
-
export default function RegistryChangeSummary({ plan, variant }) {
|
|
21
|
-
const verb = plan.action === 'promote' ? 'Promote' : 'Unpublish';
|
|
22
|
-
return (_jsxs(Box, { flexDirection: 'column', children: [variant === 'dry-run' ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: 'yellow', children: "~ Dry run \u2014 no changes will be made" }), _jsx(Text, { children: " " })] })) : (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, children: [verb, " Summary"] }) })), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Target: " }), _jsx(Text, { bold: true, children: formatChangeTarget(plan) }), plan.action === 'promote' ? _jsx(Text, { children: " \u2192 global" }) : null] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Versions: " }), plan.versions.length > 0 ? plan.versions.join(', ') : '(none)'] }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: plan.action === 'promote' ? 'Path moves:' : 'Paths to remove:' }), plan.changes.map((change) => (_jsxs(Text, { children: [' ', change.to ? (_jsxs(_Fragment, { children: [change.from, "/ \u2192 ", change.to, "/"] })) : (_jsxs(_Fragment, { children: [change.from, "/"] }))] }, change.from))), plan.warnings.length > 0 ? (_jsx(Box, { flexDirection: 'column', marginTop: 1, children: plan.warnings.map((w) => (_jsxs(Text, { children: [_jsx(CheckIcon, { status: 'warn' }), " ", w] }, w))) })) : null, _jsx(Text, { children: " " }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Branch: " }), plan.branchName] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "Action: " }), "Create PR"] }), variant === 'confirm' ? (_jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Proceed? (y/n)" }) })) : null] }));
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=RegistryChangeSummary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RegistryChangeSummary.js","sourceRoot":"","sources":["../../src/components/RegistryChangeSummary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { RegistryChangePlan, RegistryChangeResponse } from '../lib/registry-mutate.js';
|
|
2
|
-
export type RegistryChangeAction = {
|
|
3
|
-
command?: string;
|
|
4
|
-
hint?: string;
|
|
5
|
-
message: string;
|
|
6
|
-
type: 'ERROR';
|
|
7
|
-
} | {
|
|
8
|
-
message: string;
|
|
9
|
-
type: 'PROGRESS';
|
|
10
|
-
} | {
|
|
11
|
-
plan: RegistryChangePlan;
|
|
12
|
-
type: 'PLAN_READY';
|
|
13
|
-
} | {
|
|
14
|
-
result: RegistryChangeResponse;
|
|
15
|
-
type: 'DONE';
|
|
16
|
-
} | {
|
|
17
|
-
type: 'CANCEL';
|
|
18
|
-
} | {
|
|
19
|
-
type: 'CONFIRM';
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* What a registry-change command (`unpublish`, `promote`) plugs into the shared
|
|
23
|
-
* flow: fetch the server's plan, then ask the server to open the PR.
|
|
24
|
-
*/
|
|
25
|
-
export interface RegistryChangeOptions {
|
|
26
|
-
/** Shown as the error message when the user declines the confirmation. */
|
|
27
|
-
cancelledMessage: string;
|
|
28
|
-
dryRun: boolean;
|
|
29
|
-
execute: (progress: (message: string) => void) => Promise<RegistryChangeResponse>;
|
|
30
|
-
plan: () => Promise<RegistryChangePlan>;
|
|
31
|
-
projectRoot?: string;
|
|
32
|
-
}
|
|
33
|
-
export type RegistryChangePhase = 'confirming' | 'done' | 'dry-run-result' | 'error' | 'executing' | 'planning';
|
|
34
|
-
export interface RegistryChangeState {
|
|
35
|
-
cancelledMessage: string;
|
|
36
|
-
dryRun: boolean;
|
|
37
|
-
errorCommand?: string;
|
|
38
|
-
errorHint?: string;
|
|
39
|
-
errorMessage: string;
|
|
40
|
-
phase: RegistryChangePhase;
|
|
41
|
-
plan: RegistryChangePlan | undefined;
|
|
42
|
-
progressMessage: string;
|
|
43
|
-
result: RegistryChangeResponse | undefined;
|
|
44
|
-
}
|
|
45
|
-
export declare function createInitialState(options: {
|
|
46
|
-
cancelledMessage: string;
|
|
47
|
-
dryRun: boolean;
|
|
48
|
-
}): RegistryChangeState;
|
|
49
|
-
export declare function registryChangeReducer(state: RegistryChangeState, action: RegistryChangeAction): RegistryChangeState;
|
|
50
|
-
/**
|
|
51
|
-
* Plan → confirm → execute flow shared by `atk unpublish` and `atk promote`.
|
|
52
|
-
* The plan comes from the API, so `--dry-run` shows exactly what the server
|
|
53
|
-
* would do; confirmation (or `--yes`) is driven by the command via
|
|
54
|
-
* `CONFIRM` / `CANCEL`.
|
|
55
|
-
*/
|
|
56
|
-
export declare function useRegistryChangeState(options: RegistryChangeOptions): readonly [RegistryChangeState, React.Dispatch<RegistryChangeAction>];
|
|
57
|
-
//# sourceMappingURL=useRegistryChangeState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRegistryChangeState.d.ts","sourceRoot":"","sources":["../../src/hooks/useRegistryChangeState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAQ5F,MAAM,MAAM,oBAAoB,GAC5B;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACnE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClF,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;AAEhH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC5C;AAMD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,mBAAmB,CAU9G;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,GAAG,mBAAmB,CA+BnH;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,qBAAqB,GAC7B,SAAS,CAAC,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAmDtE"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { useEffect, useReducer } from 'react';
|
|
2
|
-
import { findProjectRoot } from '../lib/paths.js';
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// Reducer
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
export function createInitialState(options) {
|
|
7
|
-
return {
|
|
8
|
-
cancelledMessage: options.cancelledMessage,
|
|
9
|
-
dryRun: options.dryRun,
|
|
10
|
-
errorMessage: '',
|
|
11
|
-
phase: 'planning',
|
|
12
|
-
plan: undefined,
|
|
13
|
-
progressMessage: '',
|
|
14
|
-
result: undefined,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export function registryChangeReducer(state, action) {
|
|
18
|
-
switch (action.type) {
|
|
19
|
-
case 'CANCEL':
|
|
20
|
-
if (state.phase !== 'confirming')
|
|
21
|
-
return state;
|
|
22
|
-
return { ...state, errorMessage: state.cancelledMessage, phase: 'error' };
|
|
23
|
-
case 'CONFIRM':
|
|
24
|
-
if (state.phase !== 'confirming')
|
|
25
|
-
return state;
|
|
26
|
-
return { ...state, phase: 'executing' };
|
|
27
|
-
case 'DONE':
|
|
28
|
-
return { ...state, phase: 'done', result: action.result };
|
|
29
|
-
case 'ERROR':
|
|
30
|
-
return {
|
|
31
|
-
...state,
|
|
32
|
-
errorCommand: action.command,
|
|
33
|
-
errorHint: action.hint,
|
|
34
|
-
errorMessage: action.message,
|
|
35
|
-
phase: 'error',
|
|
36
|
-
};
|
|
37
|
-
case 'PLAN_READY':
|
|
38
|
-
return { ...state, phase: state.dryRun ? 'dry-run-result' : 'confirming', plan: action.plan };
|
|
39
|
-
case 'PROGRESS':
|
|
40
|
-
return { ...state, progressMessage: action.message };
|
|
41
|
-
default:
|
|
42
|
-
return state;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
// Hook
|
|
47
|
-
// ---------------------------------------------------------------------------
|
|
48
|
-
/**
|
|
49
|
-
* Plan → confirm → execute flow shared by `atk unpublish` and `atk promote`.
|
|
50
|
-
* The plan comes from the API, so `--dry-run` shows exactly what the server
|
|
51
|
-
* would do; confirmation (or `--yes`) is driven by the command via
|
|
52
|
-
* `CONFIRM` / `CANCEL`.
|
|
53
|
-
*/
|
|
54
|
-
export function useRegistryChangeState(options) {
|
|
55
|
-
const [state, dispatch] = useReducer(registryChangeReducer, options, createInitialState);
|
|
56
|
-
// --- Phase: planning ---
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
if (state.phase !== 'planning')
|
|
59
|
-
return;
|
|
60
|
-
let cancelled = false;
|
|
61
|
-
const run = async () => {
|
|
62
|
-
// Resolve the project root so the setup gateway behaves as it does for publish.
|
|
63
|
-
findProjectRoot(options.projectRoot);
|
|
64
|
-
const plan = await options.plan();
|
|
65
|
-
if (!cancelled)
|
|
66
|
-
dispatch({ plan, type: 'PLAN_READY' });
|
|
67
|
-
};
|
|
68
|
-
run().catch((err) => {
|
|
69
|
-
if (!cancelled)
|
|
70
|
-
dispatch(toErrorAction(err));
|
|
71
|
-
});
|
|
72
|
-
return () => {
|
|
73
|
-
cancelled = true;
|
|
74
|
-
};
|
|
75
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
|
-
}, [state.phase]);
|
|
77
|
-
// --- Phase: executing ---
|
|
78
|
-
useEffect(() => {
|
|
79
|
-
if (state.phase !== 'executing')
|
|
80
|
-
return;
|
|
81
|
-
let cancelled = false;
|
|
82
|
-
const run = async () => {
|
|
83
|
-
const progress = (message) => {
|
|
84
|
-
if (!cancelled)
|
|
85
|
-
dispatch({ message, type: 'PROGRESS' });
|
|
86
|
-
};
|
|
87
|
-
const result = await options.execute(progress);
|
|
88
|
-
if (!cancelled)
|
|
89
|
-
dispatch({ result, type: 'DONE' });
|
|
90
|
-
};
|
|
91
|
-
run().catch((err) => {
|
|
92
|
-
if (!cancelled)
|
|
93
|
-
dispatch(toErrorAction(err));
|
|
94
|
-
});
|
|
95
|
-
return () => {
|
|
96
|
-
cancelled = true;
|
|
97
|
-
};
|
|
98
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
99
|
-
}, [state.phase]);
|
|
100
|
-
return [state, dispatch];
|
|
101
|
-
}
|
|
102
|
-
/** Carry an error's message plus any `hint` / `command` (ApiRequestError, AuthError) into state. */
|
|
103
|
-
function toErrorAction(err) {
|
|
104
|
-
const { command, hint } = (typeof err === 'object' && err !== null ? err : {});
|
|
105
|
-
return {
|
|
106
|
-
command: typeof command === 'string' ? command : undefined,
|
|
107
|
-
hint: typeof hint === 'string' ? hint : undefined,
|
|
108
|
-
message: err instanceof Error ? err.message : String(err),
|
|
109
|
-
type: 'ERROR',
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=useRegistryChangeState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRegistryChangeState.js","sourceRoot":"","sources":["../../src/hooks/useRegistryChangeState.ts"],"names":[],"mappings":"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"}
|