@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,58 +1,417 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { cp, mkdir, readdir, rm } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
import { updateManifestField } from './publisher.js';
|
|
8
|
+
import { DEFAULT_REGISTRY_BRANCH, DEFAULT_REGISTRY_REPO } from './registry-repo.js';
|
|
9
|
+
import { findAsset, findBundle, getAssetsByOrg } from './registry.js';
|
|
10
|
+
const execFileAsync = promisify(execFile);
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Promote
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
export function buildPromotePlan(registry, rawName, org) {
|
|
15
|
+
if (!org) {
|
|
16
|
+
throw new Error("Promote requires an org-scoped name like '@org/name'.");
|
|
17
|
+
}
|
|
18
|
+
// Look for org-scoped entries only — promote has no meaning for already-global assets.
|
|
19
|
+
const orgAssets = getAssetsByOrg(registry, org);
|
|
20
|
+
const asset = orgAssets.find((a) => a.name === rawName);
|
|
21
|
+
const orgBundle = asset ? undefined : findBundle(registry, rawName, org);
|
|
22
|
+
if (!asset && !orgBundle) {
|
|
23
|
+
throw new Error(`Org-scoped asset or bundle '@${org}/${rawName}' not found in the registry.`);
|
|
24
|
+
}
|
|
25
|
+
let target;
|
|
26
|
+
let sourceBase;
|
|
27
|
+
let destBase;
|
|
28
|
+
let manifestFile;
|
|
29
|
+
let versions;
|
|
30
|
+
if (asset) {
|
|
31
|
+
// Fail fast if a global entry with the same name+type already exists.
|
|
32
|
+
const global = registry.assets.find((a) => a.name === rawName && a.type === asset.type && a.org === undefined);
|
|
33
|
+
if (global) {
|
|
34
|
+
throw new Error(`Cannot promote '@${org}/${rawName}': a global ${asset.type} '${rawName}' already exists in the registry.`);
|
|
35
|
+
}
|
|
36
|
+
// Block if any published bundle references this asset in its current
|
|
37
|
+
// (org) scope — promoting it to global would change its identity and
|
|
38
|
+
// break those bundles' unqualified/own-org refs.
|
|
39
|
+
const referencing = findReferencingBundles(registry, rawName, asset.type, org);
|
|
40
|
+
if (referencing.length > 0) {
|
|
41
|
+
throw new Error(`Cannot promote '@${org}/${rawName}': it is referenced by published bundle(s):\n` +
|
|
42
|
+
referencing.map((b) => ` - ${b}`).join('\n') +
|
|
43
|
+
`\nPromoting it would change its scope and break those bundles. Update or unpublish them first.`);
|
|
44
|
+
}
|
|
45
|
+
target = { assetType: asset.type, name: rawName, org, type: 'asset' };
|
|
46
|
+
sourceBase = `assets/${asset.type}s/@${org}/${rawName}`;
|
|
47
|
+
destBase = `assets/${asset.type}s/${rawName}`;
|
|
48
|
+
manifestFile = 'manifest.json';
|
|
49
|
+
versions = Object.keys(asset.versions);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const globalBundle = findBundle(registry, rawName);
|
|
53
|
+
if (globalBundle) {
|
|
54
|
+
throw new Error(`Cannot promote '@${org}/${rawName}': a global bundle '${rawName}' already exists in the registry.`);
|
|
55
|
+
}
|
|
56
|
+
// A promoted bundle becomes global and must satisfy the global-bundle rule:
|
|
57
|
+
// no org-scoped refs, and every unqualified ref must resolve globally
|
|
58
|
+
// (bundle-org fallback disappears with the promotion).
|
|
59
|
+
const offendingRefs = [];
|
|
60
|
+
for (const ref of orgBundle.assets ?? []) {
|
|
61
|
+
if (ref.org) {
|
|
62
|
+
offendingRefs.push(`${ref.type}:@${ref.org}/${ref.name} — org-scoped refs are not allowed in global bundles`);
|
|
63
|
+
}
|
|
64
|
+
else if (!findAsset(registry, ref.name, ref.type, ref.version)) {
|
|
65
|
+
offendingRefs.push(`${ref.type}:${ref.name} — does not resolve in the global scope`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (offendingRefs.length > 0) {
|
|
69
|
+
throw new Error(`Cannot promote '@${org}/${rawName}': a global bundle may only reference global assets.\n` +
|
|
70
|
+
offendingRefs.map((r) => ` - ${r}`).join('\n'));
|
|
71
|
+
}
|
|
72
|
+
target = { name: rawName, org, type: 'bundle' };
|
|
73
|
+
sourceBase = `bundles/@${org}/${rawName}`;
|
|
74
|
+
destBase = `bundles/${rawName}`;
|
|
75
|
+
manifestFile = 'bundle.json';
|
|
76
|
+
versions = [orgBundle.version];
|
|
77
|
+
}
|
|
78
|
+
const pairs = versions.map((version) => ({
|
|
79
|
+
from: `${sourceBase}/${version}`,
|
|
80
|
+
manifestFile,
|
|
81
|
+
to: `${destBase}/${version}`,
|
|
82
|
+
}));
|
|
83
|
+
const branchName = buildPromoteBranchName(target);
|
|
84
|
+
const prTitle = buildPromotePrTitle(target);
|
|
85
|
+
const prBody = buildPromotePrBody(target, versions, pairs);
|
|
86
|
+
return {
|
|
87
|
+
branchName,
|
|
88
|
+
name: target.name,
|
|
89
|
+
org,
|
|
90
|
+
pairs,
|
|
91
|
+
prBody,
|
|
92
|
+
prTitle,
|
|
93
|
+
removePath: sourceBase,
|
|
94
|
+
target,
|
|
95
|
+
versions,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function buildUnpublishPlan(registry, rawName, org, version) {
|
|
99
|
+
let asset = findAsset(registry, rawName, undefined, undefined, org);
|
|
100
|
+
// An explicit org names an org-scoped entry: never let findAsset's global
|
|
101
|
+
// fallback silently substitute a same-named global asset.
|
|
102
|
+
if (asset && org && asset.asset.org !== org) {
|
|
103
|
+
asset = undefined;
|
|
104
|
+
}
|
|
105
|
+
// Bundle identity is (name, org) with exact matching — `@org/name` targets
|
|
106
|
+
// only the org bundle, never a same-named global one (and vice versa).
|
|
107
|
+
const bundle = asset ? undefined : findBundle(registry, rawName, org);
|
|
108
|
+
if (!asset && !bundle) {
|
|
109
|
+
const orgSuffix = org ? ` in org '${org}'` : '';
|
|
110
|
+
throw new Error(`Asset or bundle '${rawName}'${orgSuffix} not found in the registry.`);
|
|
111
|
+
}
|
|
112
|
+
let target;
|
|
113
|
+
let basePath;
|
|
114
|
+
if (asset) {
|
|
115
|
+
const resolvedOrg = asset.asset.org;
|
|
116
|
+
target = {
|
|
117
|
+
assetType: asset.asset.type,
|
|
118
|
+
name: rawName,
|
|
119
|
+
org: resolvedOrg,
|
|
120
|
+
type: 'asset',
|
|
121
|
+
};
|
|
122
|
+
basePath = resolvedOrg
|
|
123
|
+
? `assets/${asset.asset.type}s/@${resolvedOrg}/${rawName}`
|
|
124
|
+
: `assets/${asset.asset.type}s/${rawName}`;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
target = { name: rawName, ...(org !== undefined ? { org } : {}), type: 'bundle' };
|
|
128
|
+
basePath = org ? `bundles/@${org}/${rawName}` : `bundles/${rawName}`;
|
|
129
|
+
}
|
|
130
|
+
if (version) {
|
|
131
|
+
// Validate the version exists so we fail fast instead of opening an empty PR.
|
|
132
|
+
if (asset) {
|
|
133
|
+
const versions = Object.keys(asset.asset.versions);
|
|
134
|
+
if (!versions.includes(version)) {
|
|
135
|
+
throw new Error(`Version '${version}' of '${rawName}' not found in the registry.`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (bundle && bundle.version !== version) {
|
|
139
|
+
throw new Error(`Version '${version}' of bundle '${rawName}' not found in the registry.`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Block unpublishing an asset that published bundles depend on. A whole-asset
|
|
143
|
+
// removal breaks every referencing bundle; a version-scoped removal only
|
|
144
|
+
// breaks bundles whose refs pin that exact version.
|
|
145
|
+
if (asset) {
|
|
146
|
+
const referencing = findReferencingBundles(registry, rawName, asset.asset.type, target.org, version);
|
|
147
|
+
if (referencing.length > 0) {
|
|
148
|
+
const scopeLabel = target.org ? `@${target.org}/${rawName}` : rawName;
|
|
149
|
+
const versionLabel = version ? ` version '${version}'` : '';
|
|
150
|
+
throw new Error(`Cannot unpublish '${scopeLabel}'${versionLabel}: it is referenced by published bundle(s):\n` +
|
|
151
|
+
referencing.map((b) => ` - ${b}`).join('\n') +
|
|
152
|
+
`\nUnpublishing it would break those bundles. Update or unpublish them first.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const paths = [version ? `${basePath}/${version}` : basePath];
|
|
156
|
+
const branchName = buildUnpublishBranchName(target, version);
|
|
157
|
+
const prTitle = buildUnpublishPrTitle(target, version);
|
|
158
|
+
const prBody = buildUnpublishPrBody(target, version, paths);
|
|
159
|
+
return {
|
|
160
|
+
branchName,
|
|
161
|
+
name: target.name,
|
|
162
|
+
...(target.org !== undefined ? { org: target.org } : {}),
|
|
163
|
+
paths,
|
|
164
|
+
prBody,
|
|
165
|
+
prTitle,
|
|
166
|
+
target,
|
|
167
|
+
...(version !== undefined ? { version } : {}),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export async function executePromote(plan, token, progressCallback) {
|
|
171
|
+
const tempDir = join(tmpdir(), `atk-promote-${crypto.randomUUID()}`);
|
|
172
|
+
try {
|
|
173
|
+
progressCallback('Cloning registry repository...');
|
|
174
|
+
await execFileAsync('git', [
|
|
175
|
+
'-c',
|
|
176
|
+
'credential.helper=',
|
|
177
|
+
'clone',
|
|
178
|
+
'--depth',
|
|
179
|
+
'1',
|
|
180
|
+
'--branch',
|
|
181
|
+
DEFAULT_REGISTRY_BRANCH,
|
|
182
|
+
`https://x-access-token:${token}@github.com/${DEFAULT_REGISTRY_REPO}.git`,
|
|
183
|
+
tempDir,
|
|
184
|
+
]);
|
|
185
|
+
progressCallback('Creating branch...');
|
|
186
|
+
await execFileAsync('git', ['-C', tempDir, 'checkout', '-b', plan.branchName]);
|
|
187
|
+
progressCallback('Copying versioned files...');
|
|
188
|
+
for (const pair of plan.pairs) {
|
|
189
|
+
const fromAbs = join(tempDir, pair.from);
|
|
190
|
+
const toAbs = join(tempDir, pair.to);
|
|
191
|
+
if (!existsSync(fromAbs)) {
|
|
192
|
+
throw new Error(`Source path '${pair.from}' does not exist.`);
|
|
193
|
+
}
|
|
194
|
+
await mkdir(toAbs, { recursive: true });
|
|
195
|
+
await copyDirectoryContents(fromAbs, toAbs);
|
|
196
|
+
await updateManifestField(toAbs, pair.manifestFile, 'org', undefined);
|
|
197
|
+
}
|
|
198
|
+
progressCallback('Removing original org path...');
|
|
199
|
+
const removeAbs = join(tempDir, plan.removePath);
|
|
200
|
+
if (existsSync(removeAbs)) {
|
|
201
|
+
await rm(removeAbs, { force: true, recursive: true });
|
|
202
|
+
}
|
|
203
|
+
return await commitPushAndOpenPr(tempDir, plan.branchName, plan.prTitle, plan.prBody, progressCallback);
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
await rm(tempDir, { force: true, recursive: true }).catch(() => { });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
export async function executeUnpublish(plan, token, progressCallback) {
|
|
210
|
+
const tempDir = join(tmpdir(), `atk-unpublish-${crypto.randomUUID()}`);
|
|
211
|
+
try {
|
|
212
|
+
progressCallback('Cloning registry repository...');
|
|
213
|
+
await execFileAsync('git', [
|
|
214
|
+
'-c',
|
|
215
|
+
'credential.helper=',
|
|
216
|
+
'clone',
|
|
217
|
+
'--depth',
|
|
218
|
+
'1',
|
|
219
|
+
'--branch',
|
|
220
|
+
DEFAULT_REGISTRY_BRANCH,
|
|
221
|
+
`https://x-access-token:${token}@github.com/${DEFAULT_REGISTRY_REPO}.git`,
|
|
222
|
+
tempDir,
|
|
223
|
+
]);
|
|
224
|
+
progressCallback('Creating branch...');
|
|
225
|
+
await execFileAsync('git', ['-C', tempDir, 'checkout', '-b', plan.branchName]);
|
|
226
|
+
progressCallback('Removing files...');
|
|
227
|
+
for (const relPath of plan.paths) {
|
|
228
|
+
const absPath = join(tempDir, relPath);
|
|
229
|
+
if (!existsSync(absPath)) {
|
|
230
|
+
throw new Error(`Registry path '${relPath}' does not exist.`);
|
|
231
|
+
}
|
|
232
|
+
await rm(absPath, { force: true, recursive: true });
|
|
233
|
+
}
|
|
234
|
+
return await commitPushAndOpenPr(tempDir, plan.branchName, plan.prTitle, plan.prBody, progressCallback);
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
await rm(tempDir, { force: true, recursive: true }).catch(() => { });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
1
240
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
241
|
+
* Find published bundles whose refs resolve to a specific asset in its current
|
|
242
|
+
* scope, so an asset promote/unpublish can hard-block instead of silently
|
|
243
|
+
* breaking them (design §6.6, B4). Returns bundle display names (`@org/name`
|
|
244
|
+
* for org bundles, bare `name` for global ones).
|
|
4
245
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
import { errorCodeOf, getApiClient, unwrap } from './api-client.js';
|
|
12
|
-
import { promote as apiPromote, promotePlan as apiPromotePlan, unpublish as apiUnpublish, unpublishPlan as apiUnpublishPlan, } from './api/sdk.gen.js';
|
|
13
|
-
/**
|
|
14
|
-
* Map a `--type` flag (an asset type, or `bundle`) to the request fields that
|
|
15
|
-
* pin the target when a name exists more than once in a scope.
|
|
246
|
+
* A ref resolves to the asset when it explicitly targets the asset's org, or
|
|
247
|
+
* when it is unqualified and the bundle's own-org-then-global fallback lands on
|
|
248
|
+
* this asset (mirroring `resolveBundleInstallPlan`). When `version` is given,
|
|
249
|
+
* only refs pinned to that exact version are considered — a version-scoped
|
|
250
|
+
* removal cannot break an unpinned ref, which simply tracks the new latest.
|
|
16
251
|
*/
|
|
17
|
-
export function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
252
|
+
export function findReferencingBundles(registry, name, type, assetOrg, version) {
|
|
253
|
+
const names = [];
|
|
254
|
+
for (const bundle of registry.bundles ?? []) {
|
|
255
|
+
const referenced = (bundle.assets ?? []).some((ref) => {
|
|
256
|
+
if (ref.name !== name || ref.type !== type)
|
|
257
|
+
return false;
|
|
258
|
+
if (version && ref.version !== version)
|
|
259
|
+
return false;
|
|
260
|
+
if (ref.org != null)
|
|
261
|
+
return ref.org === assetOrg;
|
|
262
|
+
// Unqualified ref: resolve in the bundle's own org first, then global.
|
|
263
|
+
if (assetOrg === bundle.org)
|
|
264
|
+
return true;
|
|
265
|
+
if (assetOrg === undefined) {
|
|
266
|
+
// Global asset: an org bundle's unqualified ref only lands globally when
|
|
267
|
+
// no same-named asset shadows it in the bundle's own org.
|
|
268
|
+
const shadowed = registry.assets.some((a) => a.name === name && a.type === type && a.org === bundle.org);
|
|
269
|
+
return !shadowed;
|
|
270
|
+
}
|
|
271
|
+
return false;
|
|
272
|
+
});
|
|
273
|
+
if (referenced) {
|
|
274
|
+
names.push(bundle.org ? `@${bundle.org}/${bundle.name}` : bundle.name);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return names;
|
|
41
278
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
279
|
+
// ---------------------------------------------------------------------------
|
|
280
|
+
// Error mapping (shared with publisher)
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
export function mapRegistryMutateError(error) {
|
|
283
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
284
|
+
if (msg.includes('already exists') && msg.includes('branch')) {
|
|
285
|
+
return 'Branch already exists. A PR may already be open for this change.';
|
|
286
|
+
}
|
|
287
|
+
if (msg.includes('rejected')) {
|
|
288
|
+
return 'Branch already exists on remote. A PR may already be open for this change.';
|
|
289
|
+
}
|
|
290
|
+
if (msg.includes('Authentication') || msg.includes('auth') || msg.includes('403') || msg.includes('401')) {
|
|
291
|
+
return "GitHub authentication failed. Run 'gh auth login' or set GITHUB_TOKEN.";
|
|
52
292
|
}
|
|
53
|
-
|
|
293
|
+
if (msg.includes('ENOENT') || msg.includes('not recognized') || msg.includes('command not found')) {
|
|
294
|
+
return 'GitHub CLI (gh) is required. Install it from https://cli.github.com';
|
|
295
|
+
}
|
|
296
|
+
if (msg.includes('Could not resolve host') || msg.includes('ENOTFOUND') || msg.includes('network')) {
|
|
297
|
+
return 'Failed to reach GitHub. Check your internet connection.';
|
|
298
|
+
}
|
|
299
|
+
if (msg.includes('permission') || msg.includes('denied')) {
|
|
300
|
+
return 'Push failed. Check that you have write access to the repository.';
|
|
301
|
+
}
|
|
302
|
+
return msg;
|
|
54
303
|
}
|
|
55
|
-
|
|
56
|
-
|
|
304
|
+
// ---------------------------------------------------------------------------
|
|
305
|
+
// Helpers
|
|
306
|
+
// ---------------------------------------------------------------------------
|
|
307
|
+
function buildPromoteBranchName(target) {
|
|
308
|
+
const kind = target.type === 'bundle' ? 'bundle' : target.assetType;
|
|
309
|
+
return `promote/${kind}/${target.org}/${target.name}`;
|
|
310
|
+
}
|
|
311
|
+
function buildPromotePrBody(target, versions, pairs) {
|
|
312
|
+
const kind = target.type === 'bundle' ? 'bundle' : target.assetType;
|
|
313
|
+
const lines = [
|
|
314
|
+
`## Promote ${kind}: ${target.name}`,
|
|
315
|
+
'',
|
|
316
|
+
`**From:** \`@${target.org}/${target.name}\``,
|
|
317
|
+
`**To:** \`${target.name}\` (global)`,
|
|
318
|
+
'',
|
|
319
|
+
'### Versions',
|
|
320
|
+
'',
|
|
321
|
+
];
|
|
322
|
+
for (const v of versions) {
|
|
323
|
+
lines.push(`- ${v}`);
|
|
324
|
+
}
|
|
325
|
+
lines.push('', '### Path Moves', '');
|
|
326
|
+
for (const pair of pairs) {
|
|
327
|
+
lines.push(`- \`${pair.from}/\` → \`${pair.to}/\``);
|
|
328
|
+
}
|
|
329
|
+
lines.push('', '### Notes', '', '- The `org` field is removed from each manifest.');
|
|
330
|
+
lines.push('- The original org-scoped directory is deleted.');
|
|
331
|
+
lines.push('- `registry.json` will be regenerated by the registry repo CI on merge.');
|
|
332
|
+
lines.push('', '---', '*Submitted via `atk promote`*');
|
|
333
|
+
return lines.join('\n');
|
|
334
|
+
}
|
|
335
|
+
function buildPromotePrTitle(target) {
|
|
336
|
+
const kind = target.type === 'bundle' ? 'bundle' : target.assetType;
|
|
337
|
+
return `refactor(registry): promote ${kind} ${target.name} from @${target.org} to global`;
|
|
338
|
+
}
|
|
339
|
+
function buildUnpublishBranchName(target, version) {
|
|
340
|
+
const kind = target.type === 'bundle' ? 'bundle' : target.assetType;
|
|
341
|
+
const orgSegment = target.org ? `${target.org}/` : '';
|
|
342
|
+
const versionSegment = version ? `/${version}` : '';
|
|
343
|
+
return `unpublish/${kind}/${orgSegment}${target.name}${versionSegment}`;
|
|
344
|
+
}
|
|
345
|
+
function buildUnpublishPrBody(target, version, paths) {
|
|
346
|
+
const kind = target.type === 'bundle' ? 'bundle' : target.assetType;
|
|
347
|
+
const display = target.org ? `@${target.org}/${target.name}` : target.name;
|
|
348
|
+
const suffix = version ? `@${version}` : '';
|
|
349
|
+
const lines = [
|
|
350
|
+
`## Unpublish ${kind}: ${display}${suffix}`,
|
|
351
|
+
'',
|
|
352
|
+
version
|
|
353
|
+
? `Removes only version **${version}** from the registry.`
|
|
354
|
+
: `Removes **all versions** of this ${kind} from the registry.`,
|
|
355
|
+
'',
|
|
356
|
+
'### Paths Removed',
|
|
357
|
+
'',
|
|
358
|
+
];
|
|
359
|
+
for (const p of paths) {
|
|
360
|
+
lines.push(`- \`${p}/\``);
|
|
361
|
+
}
|
|
362
|
+
lines.push('', '### Notes', '', '- `registry.json` will be regenerated by the registry repo CI on merge.');
|
|
363
|
+
lines.push('', '---', '*Submitted via `atk unpublish`*');
|
|
364
|
+
return lines.join('\n');
|
|
365
|
+
}
|
|
366
|
+
function buildUnpublishPrTitle(target, version) {
|
|
367
|
+
const kind = target.type === 'bundle' ? 'bundle' : target.assetType;
|
|
368
|
+
const display = target.org ? `@${target.org}/${target.name}` : target.name;
|
|
369
|
+
const suffix = version ? `@${version}` : '';
|
|
370
|
+
return `chore(registry): unpublish ${kind} ${display}${suffix}`;
|
|
371
|
+
}
|
|
372
|
+
async function commitPushAndOpenPr(tempDir, branchName, prTitle, prBody, progressCallback) {
|
|
373
|
+
progressCallback('Committing changes...');
|
|
374
|
+
await execFileAsync('git', ['-C', tempDir, 'add', '-A']);
|
|
375
|
+
await execFileAsync('git', ['-C', tempDir, 'commit', '-m', prTitle]);
|
|
376
|
+
progressCallback('Pushing changes...');
|
|
377
|
+
await execFileAsync('git', [
|
|
378
|
+
'-C',
|
|
379
|
+
tempDir,
|
|
380
|
+
'-c',
|
|
381
|
+
'credential.helper=',
|
|
382
|
+
'push',
|
|
383
|
+
'origin',
|
|
384
|
+
'--delete',
|
|
385
|
+
branchName,
|
|
386
|
+
]).catch(() => { });
|
|
387
|
+
await execFileAsync('git', ['-C', tempDir, '-c', 'credential.helper=', 'push', 'origin', branchName]);
|
|
388
|
+
progressCallback('Creating pull request...');
|
|
389
|
+
const { stdout } = await execFileAsync('gh', [
|
|
390
|
+
'pr',
|
|
391
|
+
'create',
|
|
392
|
+
'--repo',
|
|
393
|
+
DEFAULT_REGISTRY_REPO,
|
|
394
|
+
'--base',
|
|
395
|
+
DEFAULT_REGISTRY_BRANCH,
|
|
396
|
+
'--head',
|
|
397
|
+
branchName,
|
|
398
|
+
'--title',
|
|
399
|
+
prTitle,
|
|
400
|
+
'--body',
|
|
401
|
+
prBody,
|
|
402
|
+
]);
|
|
403
|
+
return {
|
|
404
|
+
branchName,
|
|
405
|
+
mode: 'pr',
|
|
406
|
+
prUrl: stdout.trim(),
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
async function copyDirectoryContents(from, to) {
|
|
410
|
+
const entries = await readdir(from, { withFileTypes: true });
|
|
411
|
+
for (const entry of entries) {
|
|
412
|
+
const src = join(from, entry.name);
|
|
413
|
+
const dst = join(to, entry.name);
|
|
414
|
+
await cp(src, dst, { recursive: true });
|
|
415
|
+
}
|
|
57
416
|
}
|
|
58
417
|
//# sourceMappingURL=registry-mutate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-mutate.js","sourceRoot":"","sources":["../../src/lib/registry-mutate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EACL,OAAO,IAAI,UAAU,EACrB,WAAW,IAAI,cAAc,EAC7B,SAAS,IAAI,YAAY,EACzB,aAAa,IAAI,gBAAgB,GAClC,MAAM,kBAAkB,CAAC;AAI1B;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAsC;IAEtC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1E,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,gBAAuC;IAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,OAAO,mBAAmB,CACxB,CAAC,qBAAqB,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,EACnG,SAAS,EACT,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAyB,EACzB,gBAAuC;IAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,OAAO,mBAAmB,CACxB,CAAC,qBAAqB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,EACrG,WAAW,EACX,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,OAAO,MAAM,CAAC,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAC7F,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAyB;IAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,OAAO,MAAM,CAAC,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACjG,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,mBAAmB,CAChC,IAAoF,EACpF,QAAgB,EAChB,gBAAuC;IAEvC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;IAC5C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,eAAe,EAAE,CAAC;QACrF,gBAAgB,CAAC,8BAA8B,CAAC,CAAC;QACjD,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,UAAU,CAA8C,OAAU,EAAE,qBAAqB,GAAG,KAAK;IACxG,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;AAC9D,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry-mutate.js","sourceRoot":"","sources":["../../src/lib/registry-mutate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Facts about the registry GitHub repository that the CLI still needs after
|
|
3
|
-
* the data layer moved to the ATK API: its coordinates (for browsable links
|
|
4
|
-
* and the
|
|
3
|
+
* the data layer moved to the ATK API: its coordinates (for browsable links
|
|
4
|
+
* and the git-based `unpublish`/`promote` commands) and the directory layout
|
|
5
|
+
* of an asset version inside it.
|
|
5
6
|
*/
|
|
6
7
|
export declare const DEFAULT_REGISTRY_REPO = "EmergentSoftware/agentic-toolkit-registry";
|
|
7
8
|
export declare const DEFAULT_REGISTRY_BRANCH = "main";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-repo.d.ts","sourceRoot":"","sources":["../../src/lib/registry-repo.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry-repo.d.ts","sourceRoot":"","sources":["../../src/lib/registry-repo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,qBAAqB,8CAA8C,CAAC;AACjF,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjH;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3G"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Facts about the registry GitHub repository that the CLI still needs after
|
|
3
|
-
* the data layer moved to the ATK API: its coordinates (for browsable links
|
|
4
|
-
* and the
|
|
3
|
+
* the data layer moved to the ATK API: its coordinates (for browsable links
|
|
4
|
+
* and the git-based `unpublish`/`promote` commands) and the directory layout
|
|
5
|
+
* of an asset version inside it.
|
|
5
6
|
*/
|
|
6
7
|
export const DEFAULT_REGISTRY_REPO = 'EmergentSoftware/agentic-toolkit-registry';
|
|
7
8
|
export const DEFAULT_REGISTRY_BRANCH = 'main';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-repo.js","sourceRoot":"","sources":["../../src/lib/registry-repo.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry-repo.js","sourceRoot":"","sources":["../../src/lib/registry-repo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,2CAA2C,CAAC;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAmD,EAAE,OAAe;IACvG,OAAO,KAAK,CAAC,GAAG;QACd,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;QAChE,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,OAAe,EAAE,GAAY;IAC9E,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;IACtE,OAAO,sBAAsB,qBAAqB,SAAS,uBAAuB,IAAI,SAAS,IAAI,OAAO,YAAY,CAAC;AACzH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmD,EAAE,OAAe;IACjG,OAAO,sBAAsB,qBAAqB,SAAS,uBAAuB,IAAI,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;AACzI,CAAC"}
|
|
@@ -2,20 +2,9 @@
|
|
|
2
2
|
export declare const DEFAULT_RELEASE_LIMIT = 15;
|
|
3
3
|
/** Release channel. `latest` = stable; `dev` = pre-release (`-dev.N`, betas, etc.). */
|
|
4
4
|
export type ReleaseChannel = 'dev' | 'latest';
|
|
5
|
-
/**
|
|
6
|
-
* One release as input to {@link selectReleaseNotes}: the API's `CliRelease`
|
|
7
|
-
* (`version` without the `v`), or anything carrying just a `tag`.
|
|
8
|
-
*/
|
|
9
|
-
export interface ReleaseInput {
|
|
10
|
-
body?: null | string;
|
|
11
|
-
prerelease?: boolean;
|
|
12
|
-
publishedAt?: null | string;
|
|
13
|
-
tag?: string;
|
|
14
|
-
version?: string;
|
|
15
|
-
}
|
|
16
5
|
/** A single published release. */
|
|
17
6
|
export interface ReleaseNote {
|
|
18
|
-
/** Raw markdown body of the release (changelog). */
|
|
7
|
+
/** Raw markdown body of the GitHub release (changelog). */
|
|
19
8
|
body: string;
|
|
20
9
|
/** Resolved channel for this release. */
|
|
21
10
|
channel: ReleaseChannel;
|
|
@@ -23,7 +12,7 @@ export interface ReleaseNote {
|
|
|
23
12
|
installed: boolean;
|
|
24
13
|
/** True when this version is newer than the installed CLI version. */
|
|
25
14
|
newer: boolean;
|
|
26
|
-
/**
|
|
15
|
+
/** GitHub's `prerelease` flag for the release. */
|
|
27
16
|
prerelease: boolean;
|
|
28
17
|
/** ISO timestamp the release was published, or null if unknown. */
|
|
29
18
|
publishedAt: null | string;
|
|
@@ -60,9 +49,15 @@ export type ReleaseNotesOutcome = {
|
|
|
60
49
|
outcome: 'single';
|
|
61
50
|
release: ReleaseNote;
|
|
62
51
|
};
|
|
52
|
+
/** Shape of a GitHub Releases API list entry (only the fields we use). */
|
|
53
|
+
interface GitHubRelease {
|
|
54
|
+
body?: null | string;
|
|
55
|
+
prerelease?: boolean;
|
|
56
|
+
published_at?: null | string;
|
|
57
|
+
tag_name?: string;
|
|
58
|
+
}
|
|
63
59
|
/**
|
|
64
|
-
* Fetch the CLI
|
|
65
|
-
* release notes for browsing.
|
|
60
|
+
* Fetch GitHub Releases for the CLI repo and return release notes for browsing.
|
|
66
61
|
*
|
|
67
62
|
* Without a `version`, returns the release history (newest-first), channel-filtered
|
|
68
63
|
* and capped at a limit, with each entry flagged for whether it is the installed
|
|
@@ -78,7 +73,7 @@ export type ReleaseNotesOutcome = {
|
|
|
78
73
|
*/
|
|
79
74
|
export declare function getReleaseNotes(options?: ReleaseNotesOptions, progress?: (message: string) => void): Promise<ReleaseNotesOutcome>;
|
|
80
75
|
/**
|
|
81
|
-
* Pure selection logic: from raw releases, return valid releases ordered
|
|
76
|
+
* Pure selection logic: from raw GitHub releases, return valid releases ordered
|
|
82
77
|
* newest-first, optionally including pre-releases, with each entry flagged for
|
|
83
78
|
* whether it is the installed version or newer than it. Exported separately so
|
|
84
79
|
* channel filtering, version comparison, and flagging are unit-testable without
|
|
@@ -86,9 +81,10 @@ export declare function getReleaseNotes(options?: ReleaseNotesOptions, progress?
|
|
|
86
81
|
*
|
|
87
82
|
* - Tags are normalized by stripping a leading `v`; entries that aren't valid
|
|
88
83
|
* semver are skipped.
|
|
89
|
-
* - A release's channel is `dev` when
|
|
84
|
+
* - A release's channel is `dev` when GitHub's `prerelease` flag is set OR the
|
|
90
85
|
* version carries a semver pre-release component; otherwise `latest`.
|
|
91
86
|
* - When `includePrerelease` is false, `dev` releases are dropped.
|
|
92
87
|
*/
|
|
93
|
-
export declare function selectReleaseNotes(raw:
|
|
88
|
+
export declare function selectReleaseNotes(raw: GitHubRelease[], currentVersion: string, includePrerelease: boolean): ReleaseNote[];
|
|
89
|
+
export {};
|
|
94
90
|
//# sourceMappingURL=release-notes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-notes.d.ts","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"AAYA,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"release-notes.d.ts","sourceRoot":"","sources":["../../src/lib/release-notes.ts"],"names":[],"mappings":"AAYA,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9C,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,OAAO,EAAE,cAAc,CAAC;IACxB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,KAAK,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,MAAM,mBAAmB,GAC3B;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1G;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC5C;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAExE,0EAA0E;AAC1E,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,mBAAwB,EACjC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAqC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,aAAa,EAAE,EACpB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,OAAO,GACzB,WAAW,EAAE,CA6Bf"}
|