@detergent-software/atk 8.1.2-dev.3 → 8.1.2-dev.30
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 +195 -0
- package/build/commands/browse.js +5 -9
- package/build/commands/browse.js.map +1 -1
- package/build/commands/install.js +2 -2
- package/build/commands/install.js.map +1 -1
- package/build/commands/list.js +2 -2
- package/build/commands/list.js.map +1 -1
- package/build/commands/login.js +2 -2
- package/build/commands/login.js.map +1 -1
- package/build/commands/register.js +3 -3
- package/build/commands/register.js.map +1 -1
- package/build/commands/sync.d.ts.map +1 -1
- package/build/commands/sync.js +16 -11
- package/build/commands/sync.js.map +1 -1
- package/build/commands/uninstall.d.ts +9 -1
- package/build/commands/uninstall.d.ts.map +1 -1
- package/build/commands/uninstall.js +23 -26
- package/build/commands/uninstall.js.map +1 -1
- package/build/commands/update.d.ts +9 -1
- package/build/commands/update.d.ts.map +1 -1
- package/build/commands/update.js +54 -14
- package/build/commands/update.js.map +1 -1
- package/build/components/InstallConfirmBar.d.ts.map +1 -1
- package/build/components/InstallConfirmBar.js +2 -1
- package/build/components/InstallConfirmBar.js.map +1 -1
- package/build/components/ListActionBar.d.ts.map +1 -1
- package/build/components/ListActionBar.js +3 -2
- package/build/components/ListActionBar.js.map +1 -1
- package/build/components/RunStoppedHint.d.ts +13 -0
- package/build/components/RunStoppedHint.d.ts.map +1 -0
- package/build/components/RunStoppedHint.js +12 -0
- package/build/components/RunStoppedHint.js.map +1 -0
- package/build/components/SkippedAssetSection.d.ts +2 -0
- package/build/components/SkippedAssetSection.d.ts.map +1 -1
- package/build/components/SkippedAssetSection.js +1 -1
- package/build/components/SkippedAssetSection.js.map +1 -1
- package/build/components/SyncDriftedList.d.ts +3 -2
- package/build/components/SyncDriftedList.d.ts.map +1 -1
- package/build/components/SyncDriftedList.js +11 -3
- package/build/components/SyncDriftedList.js.map +1 -1
- package/build/components/index.d.ts +1 -0
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +1 -0
- package/build/components/index.js.map +1 -1
- package/build/hooks/useCommand.js +2 -2
- package/build/hooks/useCommand.js.map +1 -1
- package/build/hooks/useInitState.js +5 -5
- package/build/hooks/useInitState.js.map +1 -1
- package/build/hooks/useListActions.d.ts.map +1 -1
- package/build/hooks/useListActions.js +34 -18
- package/build/hooks/useListActions.js.map +1 -1
- package/build/hooks/usePruneState.js +7 -7
- package/build/hooks/usePruneState.js.map +1 -1
- package/build/hooks/usePublishState.js +3 -3
- package/build/hooks/usePublishState.js.map +1 -1
- package/build/hooks/useRegistryChangeState.js +2 -2
- package/build/hooks/useRegistryChangeState.js.map +1 -1
- package/build/hooks/useSetupState.js +3 -3
- package/build/hooks/useSetupState.js.map +1 -1
- package/build/hooks/useUninstallState.d.ts +16 -29
- package/build/hooks/useUninstallState.d.ts.map +1 -1
- package/build/hooks/useUninstallState.js +147 -140
- package/build/hooks/useUninstallState.js.map +1 -1
- package/build/lib/adapter.d.ts.map +1 -1
- package/build/lib/adapter.js +3 -3
- package/build/lib/adapter.js.map +1 -1
- package/build/lib/asset-tools.d.ts +5 -0
- package/build/lib/asset-tools.d.ts.map +1 -1
- package/build/lib/asset-tools.js +7 -0
- package/build/lib/asset-tools.js.map +1 -1
- package/build/lib/auth.d.ts.map +1 -1
- package/build/lib/auth.js +3 -3
- package/build/lib/auth.js.map +1 -1
- package/build/lib/checksum.d.ts.map +1 -1
- package/build/lib/checksum.js +2 -1
- package/build/lib/checksum.js.map +1 -1
- package/build/lib/diagnostics.d.ts.map +1 -1
- package/build/lib/diagnostics.js +6 -5
- package/build/lib/diagnostics.js.map +1 -1
- package/build/lib/diff-command.d.ts.map +1 -1
- package/build/lib/diff-command.js +10 -6
- package/build/lib/diff-command.js.map +1 -1
- package/build/lib/entra.d.ts.map +1 -1
- package/build/lib/entra.js +3 -2
- package/build/lib/entra.js.map +1 -1
- package/build/lib/errors.d.ts +9 -0
- package/build/lib/errors.d.ts.map +1 -1
- package/build/lib/errors.js +29 -0
- package/build/lib/errors.js.map +1 -1
- package/build/lib/file-snapshot.d.ts +17 -0
- package/build/lib/file-snapshot.d.ts.map +1 -0
- package/build/lib/file-snapshot.js +41 -0
- package/build/lib/file-snapshot.js.map +1 -0
- package/build/lib/installer.d.ts +61 -0
- package/build/lib/installer.d.ts.map +1 -1
- package/build/lib/installer.js +148 -43
- package/build/lib/installer.js.map +1 -1
- package/build/lib/lockfile.d.ts +23 -4
- package/build/lib/lockfile.d.ts.map +1 -1
- package/build/lib/lockfile.js +32 -14
- package/build/lib/lockfile.js.map +1 -1
- package/build/lib/org.d.ts +16 -0
- package/build/lib/org.d.ts.map +1 -1
- package/build/lib/org.js +18 -0
- package/build/lib/org.js.map +1 -1
- package/build/lib/owned-paths.d.ts +9 -0
- package/build/lib/owned-paths.d.ts.map +1 -0
- package/build/lib/owned-paths.js +23 -0
- package/build/lib/owned-paths.js.map +1 -0
- package/build/lib/publisher.d.ts.map +1 -1
- package/build/lib/publisher.js +2 -1
- package/build/lib/publisher.js.map +1 -1
- package/build/lib/registry.d.ts.map +1 -1
- package/build/lib/registry.js +10 -6
- package/build/lib/registry.js.map +1 -1
- package/build/lib/setup.d.ts.map +1 -1
- package/build/lib/setup.js +4 -3
- package/build/lib/setup.js.map +1 -1
- package/build/lib/sync.d.ts +17 -4
- package/build/lib/sync.d.ts.map +1 -1
- package/build/lib/sync.js +110 -41
- package/build/lib/sync.js.map +1 -1
- package/build/lib/uninstaller.d.ts +21 -4
- package/build/lib/uninstaller.d.ts.map +1 -1
- package/build/lib/uninstaller.js +45 -36
- package/build/lib/uninstaller.js.map +1 -1
- package/build/lib/updater.d.ts +64 -3
- package/build/lib/updater.d.ts.map +1 -1
- package/build/lib/updater.js +355 -83
- package/build/lib/updater.js.map +1 -1
- package/package.json +1 -1
package/build/lib/sync.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { resolveInstalledPaths } from './adapter.js';
|
|
3
3
|
import { isExcludedForTool, supportsType } from './asset-tools.js';
|
|
4
|
+
import { getCredential } from './auth.js';
|
|
4
5
|
import { verifyChecksums, verifyConfigEntries } from './checksum.js';
|
|
5
6
|
import { getConfigEntriesForTool, needsConfigRegistration } from './config-entries.js';
|
|
6
7
|
import { isFrozenInConfig } from './config.js';
|
|
7
|
-
import { errorGuidance } from './errors.js';
|
|
8
|
+
import { errorGuidance, GuidedError, isRunWideFailure } from './errors.js';
|
|
8
9
|
import { hookScriptPath, lacksExecBit } from './hook-script.js';
|
|
9
|
-
import { executeInstallPlan,
|
|
10
|
-
import { addAssetToLockfile, readLockfile, removeAssetFromLockfile, withLockfileErrorHandling, writeLockfile, } from './lockfile.js';
|
|
11
|
-
import {
|
|
10
|
+
import { executeInstallPlan, fetchPlanFiles, installFailureMessage } from './installer.js';
|
|
11
|
+
import { addAssetToLockfile, getLockfilePath, LockfileError, readLockfile, removeAssetFromLockfile, withLockfileErrorHandling, writeLockfile, } from './lockfile.js';
|
|
12
|
+
import { scopeSwitchGuidance } from './org.js';
|
|
13
|
+
import { findAsset } from './registry.js';
|
|
14
|
+
import { resolveInstallPlan } from './resolver.js';
|
|
12
15
|
import { removeSingleAsset, UninstallerError } from './uninstaller.js';
|
|
16
|
+
export class SyncError extends GuidedError {
|
|
17
|
+
name = 'SyncError';
|
|
18
|
+
}
|
|
13
19
|
// ---------------------------------------------------------------------------
|
|
14
20
|
// Dry-run orchestration
|
|
15
21
|
// ---------------------------------------------------------------------------
|
|
@@ -98,7 +104,7 @@ export async function classifySyncEntries(options) {
|
|
|
98
104
|
* installed assets, which the original inline dry-run path in sync.tsx omitted.
|
|
99
105
|
*/
|
|
100
106
|
export async function dryRunSync(options) {
|
|
101
|
-
const { force, onProgress, projectConfig, projectDir, tools } = options;
|
|
107
|
+
const { force, onProgress, projectConfig, projectDir, registry, tools } = options;
|
|
102
108
|
onProgress?.('Reading lockfile...');
|
|
103
109
|
const lockfile = await readLockfile(projectDir);
|
|
104
110
|
const toolResults = [];
|
|
@@ -122,12 +128,31 @@ export async function dryRunSync(options) {
|
|
|
122
128
|
projectConfig,
|
|
123
129
|
projectDir,
|
|
124
130
|
});
|
|
131
|
+
const toSync = [];
|
|
132
|
+
const wouldFail = [];
|
|
133
|
+
for (const entry of classified.toSync) {
|
|
134
|
+
const refusal = scopeSwitchError(registry, entry.asset);
|
|
135
|
+
if (refusal) {
|
|
136
|
+
const { asset } = entry;
|
|
137
|
+
wouldFail.push({
|
|
138
|
+
assetName: asset.name,
|
|
139
|
+
assetType: asset.type,
|
|
140
|
+
error: refusal.message,
|
|
141
|
+
version: asset.version,
|
|
142
|
+
...errorGuidance(refusal),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
toSync.push(entry);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
125
149
|
toolResults.push({
|
|
126
150
|
...(classified.excludedSkipped > 0 ? { excludedSkipped: classified.excludedSkipped } : {}),
|
|
127
151
|
frozenSkipped: classified.frozenSkipped,
|
|
128
152
|
skipped: classified.skipped,
|
|
129
153
|
tool: toolName,
|
|
130
|
-
toSync
|
|
154
|
+
toSync,
|
|
155
|
+
...(wouldFail.length > 0 ? { wouldFail } : {}),
|
|
131
156
|
});
|
|
132
157
|
}
|
|
133
158
|
return toolResults;
|
|
@@ -186,73 +211,101 @@ export async function syncAssets(options) {
|
|
|
186
211
|
});
|
|
187
212
|
continue;
|
|
188
213
|
}
|
|
214
|
+
// Resolve the credential once, up front. A missing or expired sign-in carries no API code
|
|
215
|
+
// for isRunWideFailure, and with a fresh registry cache it would otherwise fail each
|
|
216
|
+
// asset's download in turn.
|
|
217
|
+
await getCredential();
|
|
189
218
|
const failures = [];
|
|
190
|
-
|
|
219
|
+
let notAttempted;
|
|
220
|
+
for (const [index, entry] of classified.toSync.entries()) {
|
|
191
221
|
onProgress?.(`Syncing ${entry.asset.name} for ${toolName}...`);
|
|
192
222
|
// Save the original lockfile entry so we can restore it on reinstall failure
|
|
193
223
|
const originalEntry = entry.asset;
|
|
194
|
-
//
|
|
195
|
-
//
|
|
196
|
-
//
|
|
197
|
-
try {
|
|
198
|
-
await removeSingleAsset(originalEntry, adapter, projectDir, onProgress);
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
if (!(error instanceof UninstallerError)) {
|
|
202
|
-
throw error;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// Step 2: Track removal in the in-memory lockfile
|
|
206
|
-
lockfile = removeAssetFromLockfile(lockfile, originalEntry.name, originalEntry.type, originalEntry.org);
|
|
207
|
-
// Step 3: Reinstall the direct asset only (not dependencies — intentional per F4.2).
|
|
208
|
-
// Resolve the full plan but filter to just the direct asset entry.
|
|
224
|
+
// An error in this asset's re-sync is recorded as its failure and the run moves on,
|
|
225
|
+
// as update does. A lockfile that can't be read aborts the run instead: every later
|
|
226
|
+
// asset would hit it too, after its files were already removed.
|
|
209
227
|
try {
|
|
228
|
+
// Refuse before planning, downloading or removing anything, as update does.
|
|
229
|
+
const refusal = scopeSwitchError(registry, originalEntry);
|
|
230
|
+
if (refusal)
|
|
231
|
+
throw refusal;
|
|
232
|
+
// Step 1: Plan the reinstall of the direct asset only (not dependencies — intentional
|
|
233
|
+
// per F4.2). Resolve the full plan but filter to just the direct asset entry.
|
|
210
234
|
const plan = resolveInstallPlan(registry, originalEntry.name, originalEntry.type, originalEntry.version, originalEntry.org);
|
|
211
|
-
// The
|
|
212
|
-
//
|
|
213
|
-
//
|
|
235
|
+
// The resolver marks only the requested asset 'direct'. Its dependencies may share
|
|
236
|
+
// its name. The plan treats the asset as a fresh top-level install, so carry over
|
|
237
|
+
// what the lockfile entry recorded: a dependency stays a dependency, a pin stays
|
|
238
|
+
// pinned (sync reinstalls the locked version), and a bundle member keeps its bundle.
|
|
214
239
|
const directEntries = plan.entries
|
|
215
|
-
.filter((e) => e.
|
|
240
|
+
.filter((e) => e.reason === 'direct')
|
|
216
241
|
.map((e) => ({ ...e, reason: originalEntry.installReason ?? 'direct' }));
|
|
217
242
|
const directPlan = { entries: directEntries, totalCount: directEntries.length };
|
|
243
|
+
// Step 2: Download before removing anything, so a refused download (an outdated CLI,
|
|
244
|
+
// an expired sign-in, the API down) leaves the installed files in place.
|
|
245
|
+
const files = await fetchPlanFiles(directPlan, adapter);
|
|
246
|
+
// Step 3: Disk-only cleanup via removeSingleAsset (no lockfile I/O).
|
|
247
|
+
// Tolerate UninstallerError (e.g., files already missing); any other error fails
|
|
248
|
+
// this asset without reinstalling over a half-removed state.
|
|
249
|
+
try {
|
|
250
|
+
await removeSingleAsset(originalEntry, adapter, projectDir, { lockfile, onProgress });
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
if (!(error instanceof UninstallerError)) {
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Step 4: Track removal in the in-memory lockfile, then reinstall
|
|
258
|
+
lockfile = removeAssetFromLockfile(lockfile, originalEntry.name, originalEntry.type, originalEntry.org);
|
|
218
259
|
const results = await executeInstallPlan(directPlan, {
|
|
219
260
|
adapter,
|
|
220
261
|
...(originalEntry.bundleOrigin ? { bundleOrigin: originalEntry.bundleOrigin } : {}),
|
|
262
|
+
files,
|
|
221
263
|
onProgress,
|
|
222
264
|
pin: !!originalEntry.pinnedVersion,
|
|
223
265
|
projectDir,
|
|
224
266
|
});
|
|
225
|
-
|
|
226
|
-
// Step 4: After successful reinstall, re-read the lockfile from disk
|
|
267
|
+
// Step 5: After successful reinstall, re-read the lockfile from disk
|
|
227
268
|
// to capture the state that executeInstallPlan wrote, and keep our
|
|
228
269
|
// in-memory copy in sync.
|
|
229
270
|
lockfile = await readLockfile(projectDir);
|
|
271
|
+
entry.result = results[0];
|
|
230
272
|
}
|
|
231
273
|
catch (error) {
|
|
232
|
-
if (error
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
274
|
+
if (isLockfileReadFailure(error, projectDir)) {
|
|
275
|
+
throw error;
|
|
276
|
+
}
|
|
277
|
+
// The failure is reported under the asset's name, so don't name it again.
|
|
278
|
+
const message = installFailureMessage(error, originalEntry);
|
|
279
|
+
onProgress?.(`Failed to sync ${originalEntry.name}: ${message}`);
|
|
280
|
+
// Restore the original InstalledAsset entry in the in-memory lockfile so it is
|
|
281
|
+
// not silently dropped (an upsert, so a cleanup failure cannot duplicate it).
|
|
282
|
+
lockfile = addAssetToLockfile(lockfile, originalEntry);
|
|
283
|
+
const guidance = errorGuidance(error);
|
|
284
|
+
failures.push({
|
|
285
|
+
assetName: originalEntry.name,
|
|
286
|
+
assetType: originalEntry.type,
|
|
287
|
+
error: message,
|
|
288
|
+
version: originalEntry.version,
|
|
289
|
+
...guidance,
|
|
290
|
+
});
|
|
291
|
+
// The same error would fail every remaining asset and tool.
|
|
292
|
+
if (isRunWideFailure(guidance)) {
|
|
293
|
+
notAttempted = classified.toSync.slice(index + 1).map((e) => e.asset.name);
|
|
294
|
+
break;
|
|
244
295
|
}
|
|
245
|
-
throw error;
|
|
246
296
|
}
|
|
247
297
|
}
|
|
248
298
|
toolResults.push({
|
|
249
299
|
...(classified.excludedSkipped > 0 ? { excludedSkipped: classified.excludedSkipped } : {}),
|
|
250
300
|
failures,
|
|
251
301
|
frozenSkipped: classified.frozenSkipped,
|
|
302
|
+
...(notAttempted ? { notAttempted } : {}),
|
|
252
303
|
skipped: classified.skipped,
|
|
253
304
|
synced: classified.toSync.filter((e) => e.result !== undefined),
|
|
254
305
|
tool: toolName,
|
|
255
306
|
});
|
|
307
|
+
if (notAttempted)
|
|
308
|
+
break;
|
|
256
309
|
}
|
|
257
310
|
// Write the lockfile once at the end to persist any in-memory mutations
|
|
258
311
|
// (e.g., restored entries from failed reinstalls)
|
|
@@ -260,4 +313,20 @@ export async function syncAssets(options) {
|
|
|
260
313
|
return toolResults;
|
|
261
314
|
});
|
|
262
315
|
}
|
|
316
|
+
/** A lockfile that is invalid (`LockfileError`) or that the filesystem refused to read. */
|
|
317
|
+
function isLockfileReadFailure(error, projectDir) {
|
|
318
|
+
return (error instanceof LockfileError ||
|
|
319
|
+
(error instanceof Error && 'path' in error && error.path === getLockfilePath(projectDir)));
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* The refusal for an org entry whose asset is gone from the registry: its lookup falls back to the
|
|
323
|
+
* global asset of the same name, which is another asset, so sync does not reinstall from it.
|
|
324
|
+
*/
|
|
325
|
+
function scopeSwitchError(registry, entry) {
|
|
326
|
+
const current = findAsset(registry, entry.name, entry.type, undefined, entry.org);
|
|
327
|
+
if (!current || current.asset.org === entry.org)
|
|
328
|
+
return undefined;
|
|
329
|
+
const { message, ...guidance } = scopeSwitchGuidance(entry, current.asset, 'sync');
|
|
330
|
+
return new SyncError(message, guidance);
|
|
331
|
+
}
|
|
263
332
|
//# sourceMappingURL=sync.js.map
|
package/build/lib/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Adapter } from './schemas/adapter.js';
|
|
2
|
+
import type { AssetType } from './schemas/index.js';
|
|
2
3
|
import type { InstalledAsset, Lockfile } from './schemas/lockfile.js';
|
|
3
4
|
import { GuidedError } from './errors.js';
|
|
4
5
|
export interface BundleUninstallPlan {
|
|
@@ -65,6 +66,13 @@ export interface UninstallOptions {
|
|
|
65
66
|
keepLockfileEntry?: boolean;
|
|
66
67
|
/** Pre-computed lockfile to avoid re-reading from disk. */
|
|
67
68
|
lockfile?: Lockfile;
|
|
69
|
+
/**
|
|
70
|
+
* The lockfile as the removing tool has it, for deciding which of the primary asset's files
|
|
71
|
+
* another installed asset still owns. In a multi-tool update the shared lockfile can list an
|
|
72
|
+
* asset an earlier tool installed that this tool does not have. Only that decision uses it;
|
|
73
|
+
* the lockfile written back is `lockfile`. Defaults to `lockfile`.
|
|
74
|
+
*/
|
|
75
|
+
managedFrom?: Lockfile;
|
|
68
76
|
/** Callback for progress updates. */
|
|
69
77
|
onProgress?: (message: string) => void;
|
|
70
78
|
/** Optional org scope for asset identity matching. */
|
|
@@ -83,6 +91,8 @@ export interface UninstallOptions {
|
|
|
83
91
|
toolScope?: {
|
|
84
92
|
configuredAdapters: Adapter[];
|
|
85
93
|
};
|
|
94
|
+
/** Type of the asset to uninstall. Omit to take the first entry with the name, of any type. */
|
|
95
|
+
type?: AssetType;
|
|
86
96
|
}
|
|
87
97
|
export interface UninstallPlan {
|
|
88
98
|
/** Other installed assets that depend on the asset being removed. */
|
|
@@ -120,23 +130,30 @@ export declare function executeBundleUninstall(plan: BundleUninstallPlan, option
|
|
|
120
130
|
* Compute a bundle uninstall plan.
|
|
121
131
|
* Identifies which bundle assets can be removed, which must be skipped (because
|
|
122
132
|
* non-bundle assets depend on them), and which transitive dependencies would
|
|
123
|
-
* become orphaned.
|
|
133
|
+
* become orphaned. `removingTools` works as in {@link planUninstall}.
|
|
124
134
|
*/
|
|
125
|
-
export declare function planBundleUninstall(lockfile: Lockfile, bundleName: string, bundleVersion: string, bundleOrg?: string): BundleUninstallPlan;
|
|
135
|
+
export declare function planBundleUninstall(lockfile: Lockfile, bundleName: string, bundleVersion: string, bundleOrg?: string, removingTools?: string[]): BundleUninstallPlan;
|
|
126
136
|
/**
|
|
127
137
|
* Compute the uninstall plan before removing anything.
|
|
128
138
|
* Identifies dependents (for warnings) and orphaned dependencies (for cascade removal).
|
|
129
139
|
* Handles transitive orphans via BFS.
|
|
140
|
+
*
|
|
141
|
+
* A tool-scoped uninstall passes the tools it removes for as `removingTools`, so that assets
|
|
142
|
+
* already uninstalled for all of them are not counted as dependents.
|
|
130
143
|
*/
|
|
131
|
-
export declare function planUninstall(lockfile: Lockfile, assetName: string, org?: string): UninstallPlan;
|
|
144
|
+
export declare function planUninstall(lockfile: Lockfile, assetName: string, org?: string, type?: AssetType, removingTools?: string[]): UninstallPlan;
|
|
132
145
|
/**
|
|
133
146
|
* Remove a single asset's files and config entries from disk.
|
|
134
147
|
* Does NOT touch the lockfile — caller is responsible for lockfile updates.
|
|
135
148
|
*
|
|
136
149
|
* Uses the adapter to dynamically resolve installed file paths and config entries
|
|
137
150
|
* from the asset's source paths, rather than reading pre-computed paths from the lockfile.
|
|
151
|
+
* A file that another entry of `lockfile` also places for the tool is kept.
|
|
138
152
|
*/
|
|
139
|
-
export declare function removeSingleAsset(installed: InstalledAsset, adapter: Adapter, projectDir: string,
|
|
153
|
+
export declare function removeSingleAsset(installed: InstalledAsset, adapter: Adapter, projectDir: string, { lockfile, onProgress }: {
|
|
154
|
+
lockfile: Lockfile;
|
|
155
|
+
onProgress?: (message: string) => void;
|
|
156
|
+
}): Promise<{
|
|
140
157
|
configEntriesCleaned: Array<{
|
|
141
158
|
file: string;
|
|
142
159
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstaller.d.ts","sourceRoot":"","sources":["../../src/lib/uninstaller.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAYtE,OAAO,
|
|
1
|
+
{"version":3,"file":"uninstaller.d.ts","sourceRoot":"","sources":["../../src/lib/uninstaller.ts"],"names":[],"mappings":"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"}
|
package/build/lib/uninstaller.js
CHANGED
|
@@ -2,12 +2,13 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { readdir, readFile, rmdir, unlink } from 'node:fs/promises';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { getPlacement, resolveInstalledPaths } from './adapter.js';
|
|
5
|
-
import { excludeToolFromAsset, getRemainingTools, supportsType } from './asset-tools.js';
|
|
5
|
+
import { excludeToolFromAsset, getRemainingTools, isExcludedForTools, supportsType } from './asset-tools.js';
|
|
6
6
|
import { getConfigEntriesForTool } from './config-entries.js';
|
|
7
7
|
import { detectConfigFormat, readConfigFile, resolveConfigFormat, writeConfigFile, } from './config-file.js';
|
|
8
|
-
import { GuidedError } from './errors.js';
|
|
8
|
+
import { errorMessage, GuidedError } from './errors.js';
|
|
9
9
|
import { removeHookGroup } from './hook-config.js';
|
|
10
|
-
import { findDependents, findInstalledAsset, findOrphanedDependencies, readLockfile, removeAssetFromLockfile, withLockfileLock, writeLockfile, } from './lockfile.js';
|
|
10
|
+
import { findDependents, findInstalledAsset, findOrphanedDependencies, identityKey, readLockfile, removeAssetFromLockfile, withLockfileLock, writeLockfile, } from './lockfile.js';
|
|
11
|
+
import { pathsOwnedByOthers } from './owned-paths.js';
|
|
11
12
|
import { writeTextFile } from './write-file.js';
|
|
12
13
|
export class UninstallerError extends GuidedError {
|
|
13
14
|
name = 'UninstallerError';
|
|
@@ -38,7 +39,7 @@ export async function executeBundleUninstall(plan, options) {
|
|
|
38
39
|
for (const asset of plan.assetsToRemove) {
|
|
39
40
|
try {
|
|
40
41
|
onProgress?.(`Removing ${asset.name}...`);
|
|
41
|
-
await removeAssetForAdapters(asset, adapters, projectDir, onProgress);
|
|
42
|
+
await removeAssetForAdapters(asset, adapters, projectDir, lockfile, onProgress);
|
|
42
43
|
const dropped = dropOrExcludeEntry(lockfile, asset, adapters, toolScope);
|
|
43
44
|
lockfile = dropped.lockfile;
|
|
44
45
|
if (dropped.remainingTools.length > 0) {
|
|
@@ -49,7 +50,7 @@ export async function executeBundleUninstall(plan, options) {
|
|
|
49
50
|
catch (err) {
|
|
50
51
|
errors.push({
|
|
51
52
|
asset: asset.name,
|
|
52
|
-
error:
|
|
53
|
+
error: errorMessage(err),
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
56
|
}
|
|
@@ -57,7 +58,7 @@ export async function executeBundleUninstall(plan, options) {
|
|
|
57
58
|
for (const orphan of plan.orphansToRemove) {
|
|
58
59
|
try {
|
|
59
60
|
onProgress?.(`Removing orphaned dependency ${orphan.name}...`);
|
|
60
|
-
await removeAssetForAdapters(orphan, adapters, projectDir, onProgress);
|
|
61
|
+
await removeAssetForAdapters(orphan, adapters, projectDir, lockfile, onProgress);
|
|
61
62
|
const dropped = dropOrExcludeEntry(lockfile, orphan, adapters, toolScope);
|
|
62
63
|
lockfile = dropped.lockfile;
|
|
63
64
|
if (dropped.remainingTools.length > 0) {
|
|
@@ -68,7 +69,7 @@ export async function executeBundleUninstall(plan, options) {
|
|
|
68
69
|
catch (err) {
|
|
69
70
|
errors.push({
|
|
70
71
|
asset: orphan.name,
|
|
71
|
-
error:
|
|
72
|
+
error: errorMessage(err),
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
}
|
|
@@ -88,9 +89,9 @@ export async function executeBundleUninstall(plan, options) {
|
|
|
88
89
|
* Compute a bundle uninstall plan.
|
|
89
90
|
* Identifies which bundle assets can be removed, which must be skipped (because
|
|
90
91
|
* non-bundle assets depend on them), and which transitive dependencies would
|
|
91
|
-
* become orphaned.
|
|
92
|
+
* become orphaned. `removingTools` works as in {@link planUninstall}.
|
|
92
93
|
*/
|
|
93
|
-
export function planBundleUninstall(lockfile, bundleName, bundleVersion, bundleOrg) {
|
|
94
|
+
export function planBundleUninstall(lockfile, bundleName, bundleVersion, bundleOrg, removingTools = []) {
|
|
94
95
|
const emptyPlan = {
|
|
95
96
|
assetsToRemove: [],
|
|
96
97
|
assetsToSkip: [],
|
|
@@ -107,14 +108,14 @@ export function planBundleUninstall(lockfile, bundleName, bundleVersion, bundleO
|
|
|
107
108
|
if (bundleAssets.length === 0) {
|
|
108
109
|
return emptyPlan;
|
|
109
110
|
}
|
|
110
|
-
const
|
|
111
|
+
const bundleAssetKeys = new Set(bundleAssets.map(identityKey));
|
|
111
112
|
const assetsToRemove = [];
|
|
112
113
|
const assetsToSkip = [];
|
|
113
114
|
// Determine which assets can be removed and which must be skipped
|
|
114
115
|
for (const asset of bundleAssets) {
|
|
115
116
|
const dependents = findDependents(lockfile, asset.name, asset.type, asset.org);
|
|
116
117
|
// A non-bundle dependent is one with a different bundleOrigin or no bundleOrigin at all
|
|
117
|
-
const nonBundleDependents = dependents.filter((d) => !isThisBundle(d.bundleOrigin));
|
|
118
|
+
const nonBundleDependents = dependents.filter((d) => !isThisBundle(d.bundleOrigin) && !isExcludedForTools(d, removingTools));
|
|
118
119
|
if (nonBundleDependents.length > 0) {
|
|
119
120
|
const dependentNames = nonBundleDependents.map((d) => d.name);
|
|
120
121
|
assetsToSkip.push({
|
|
@@ -129,14 +130,14 @@ export function planBundleUninstall(lockfile, bundleName, bundleVersion, bundleO
|
|
|
129
130
|
// Order removable assets so dependents are removed before their dependencies
|
|
130
131
|
const ordered = topologicalSortForRemoval(assetsToRemove);
|
|
131
132
|
// Compute orphaned transitive dependencies
|
|
132
|
-
const namesBeingRemoved = new Set(ordered.map((a) => a.name));
|
|
133
133
|
const orphanSet = new Map();
|
|
134
134
|
for (const asset of ordered) {
|
|
135
|
-
const orphans = findOrphanedDependencies(lockfile, asset, [...
|
|
135
|
+
const orphans = findOrphanedDependencies(lockfile, asset, [...ordered, ...orphanSet.values()], removingTools);
|
|
136
136
|
for (const orphan of orphans) {
|
|
137
137
|
// Only include orphans that are NOT themselves bundle assets
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
const key = identityKey(orphan);
|
|
139
|
+
if (!bundleAssetKeys.has(key) && !orphanSet.has(key)) {
|
|
140
|
+
orphanSet.set(key, orphan);
|
|
140
141
|
}
|
|
141
142
|
}
|
|
142
143
|
}
|
|
@@ -153,27 +154,27 @@ export function planBundleUninstall(lockfile, bundleName, bundleVersion, bundleO
|
|
|
153
154
|
* Compute the uninstall plan before removing anything.
|
|
154
155
|
* Identifies dependents (for warnings) and orphaned dependencies (for cascade removal).
|
|
155
156
|
* Handles transitive orphans via BFS.
|
|
157
|
+
*
|
|
158
|
+
* A tool-scoped uninstall passes the tools it removes for as `removingTools`, so that assets
|
|
159
|
+
* already uninstalled for all of them are not counted as dependents.
|
|
156
160
|
*/
|
|
157
|
-
export function planUninstall(lockfile, assetName, org) {
|
|
158
|
-
const primary = findInstalledAsset(lockfile, assetName,
|
|
161
|
+
export function planUninstall(lockfile, assetName, org, type, removingTools = []) {
|
|
162
|
+
const primary = findInstalledAsset(lockfile, assetName, type, org);
|
|
159
163
|
if (!primary) {
|
|
160
164
|
throw new UninstallerError(`Asset "${assetName}" is not installed.`);
|
|
161
165
|
}
|
|
162
|
-
const dependents = findDependents(lockfile, assetName, primary.type, org);
|
|
166
|
+
const dependents = findDependents(lockfile, assetName, primary.type, org).filter((d) => !isExcludedForTools(d, removingTools));
|
|
163
167
|
// Collect orphaned dependencies using BFS for transitive orphans
|
|
164
168
|
const allOrphans = [];
|
|
165
|
-
const visited = new Set();
|
|
169
|
+
const visited = new Set([identityKey(primary)]);
|
|
166
170
|
const queue = [primary];
|
|
167
|
-
const allBeingRemoved = [assetName];
|
|
168
|
-
visited.add(primary.name);
|
|
169
171
|
while (queue.length > 0) {
|
|
170
172
|
const current = queue.shift();
|
|
171
|
-
const orphans = findOrphanedDependencies(lockfile, current,
|
|
173
|
+
const orphans = findOrphanedDependencies(lockfile, current, [primary, ...allOrphans], removingTools);
|
|
172
174
|
for (const orphan of orphans) {
|
|
173
|
-
if (!visited.has(orphan
|
|
174
|
-
visited.add(orphan
|
|
175
|
+
if (!visited.has(identityKey(orphan))) {
|
|
176
|
+
visited.add(identityKey(orphan));
|
|
175
177
|
allOrphans.push(orphan);
|
|
176
|
-
allBeingRemoved.push(orphan.name);
|
|
177
178
|
queue.push(orphan);
|
|
178
179
|
}
|
|
179
180
|
}
|
|
@@ -190,15 +191,21 @@ export function planUninstall(lockfile, assetName, org) {
|
|
|
190
191
|
*
|
|
191
192
|
* Uses the adapter to dynamically resolve installed file paths and config entries
|
|
192
193
|
* from the asset's source paths, rather than reading pre-computed paths from the lockfile.
|
|
194
|
+
* A file that another entry of `lockfile` also places for the tool is kept.
|
|
193
195
|
*/
|
|
194
|
-
export async function removeSingleAsset(installed, adapter, projectDir, onProgress) {
|
|
196
|
+
export async function removeSingleAsset(installed, adapter, projectDir, { lockfile, onProgress }) {
|
|
195
197
|
onProgress?.(`Removing files for ${installed.name}...`);
|
|
196
198
|
// Dynamically resolve installed paths and config entries via the adapter
|
|
197
199
|
const resolved = resolveInstalledPaths(installed, adapter, projectDir);
|
|
200
|
+
const ownedByOthers = pathsOwnedByOthers(lockfile, installed, adapter, projectDir);
|
|
198
201
|
// Delete placed files (resolve relative paths to absolute)
|
|
199
202
|
const filesRemoved = [];
|
|
200
203
|
for (const file of resolved.files) {
|
|
201
204
|
const absolutePath = join(projectDir, file.installedPath);
|
|
205
|
+
if (ownedByOthers.has(absolutePath)) {
|
|
206
|
+
onProgress?.(`Keeping ${absolutePath}: another installed asset also owns it`);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
202
209
|
if (existsSync(absolutePath)) {
|
|
203
210
|
await unlink(absolutePath);
|
|
204
211
|
filesRemoved.push(absolutePath);
|
|
@@ -247,15 +254,17 @@ export async function removeSingleAsset(installed, adapter, projectDir, onProgre
|
|
|
247
254
|
* Uninstall a single asset by name, with optional cascade removal of orphaned dependencies.
|
|
248
255
|
*/
|
|
249
256
|
export async function uninstallAsset(assetName, options) {
|
|
250
|
-
const { adapter, additionalAdapters = [], cascade = true, keepLockfileEntry = false, lockfile: precomputedLockfile, onProgress, org, plan: precomputedPlan, projectDir, toolScope, } = options;
|
|
257
|
+
const { adapter, additionalAdapters = [], cascade = true, keepLockfileEntry = false, lockfile: precomputedLockfile, managedFrom, onProgress, org, plan: precomputedPlan, projectDir, toolScope, type, } = options;
|
|
251
258
|
const adapters = [adapter, ...additionalAdapters];
|
|
252
259
|
onProgress?.(`Reading lockfile...`);
|
|
253
260
|
let lockfile = precomputedLockfile ?? (await readLockfile(projectDir));
|
|
254
261
|
// Compute the plan before removing anything
|
|
255
|
-
|
|
262
|
+
// Outside a tool scope the entries are dropped for every tool, so every dependent counts.
|
|
263
|
+
const removingTools = toolScope ? adapters.map((a) => a.tool) : [];
|
|
264
|
+
const plan = precomputedPlan ?? planUninstall(lockfile, assetName, org, type, removingTools);
|
|
256
265
|
// Remove primary asset. Key the lockfile removal on the entry the plan resolved,
|
|
257
266
|
// not the caller-supplied org — the lookup may have fallen back to a global entry.
|
|
258
|
-
const primaryRemoval = await removeAssetForAdapters(plan.primary, adapters, projectDir, onProgress);
|
|
267
|
+
const primaryRemoval = await removeAssetForAdapters(plan.primary, adapters, projectDir, managedFrom ?? lockfile, onProgress);
|
|
259
268
|
let primaryRemainingTools = [];
|
|
260
269
|
if (!keepLockfileEntry) {
|
|
261
270
|
const dropped = dropOrExcludeEntry(lockfile, plan.primary, adapters, toolScope);
|
|
@@ -276,7 +285,7 @@ export async function uninstallAsset(assetName, options) {
|
|
|
276
285
|
if (cascade && plan.orphanedDependencies.length > 0) {
|
|
277
286
|
for (const orphan of plan.orphanedDependencies) {
|
|
278
287
|
onProgress?.(`Removing orphaned dependency ${orphan.name}...`);
|
|
279
|
-
const orphanRemoval = await removeAssetForAdapters(orphan, adapters, projectDir, onProgress);
|
|
288
|
+
const orphanRemoval = await removeAssetForAdapters(orphan, adapters, projectDir, lockfile, onProgress);
|
|
280
289
|
const dropped = dropOrExcludeEntry(lockfile, orphan, adapters, toolScope);
|
|
281
290
|
lockfile = dropped.lockfile;
|
|
282
291
|
results.push({
|
|
@@ -319,7 +328,7 @@ async function cleanupEmptyDirectories(dirPath, onProgress) {
|
|
|
319
328
|
}
|
|
320
329
|
catch (error) {
|
|
321
330
|
// Directory doesn't exist or can't be read — log for debugging
|
|
322
|
-
onProgress?.(`Warning: Failed to clean up directory ${dirPath} — ${
|
|
331
|
+
onProgress?.(`Warning: Failed to clean up directory ${dirPath} — ${errorMessage(error)}`);
|
|
323
332
|
}
|
|
324
333
|
}
|
|
325
334
|
/**
|
|
@@ -350,11 +359,11 @@ function keptEntryFields(remainingTools) {
|
|
|
350
359
|
* Remove a single asset from disk for every given adapter, merging the per-tool results.
|
|
351
360
|
* Each adapter only cleans the files and config entries of its own tool.
|
|
352
361
|
*/
|
|
353
|
-
async function removeAssetForAdapters(installed, adapters, projectDir, onProgress) {
|
|
362
|
+
async function removeAssetForAdapters(installed, adapters, projectDir, lockfile, onProgress) {
|
|
354
363
|
const configEntriesCleaned = [];
|
|
355
364
|
const filesRemoved = [];
|
|
356
365
|
for (const adapter of adapters) {
|
|
357
|
-
const removal = await removeSingleAsset(installed, adapter, projectDir, onProgress);
|
|
366
|
+
const removal = await removeSingleAsset(installed, adapter, projectDir, { lockfile, onProgress });
|
|
358
367
|
configEntriesCleaned.push(...removal.configEntriesCleaned);
|
|
359
368
|
filesRemoved.push(...removal.filesRemoved);
|
|
360
369
|
}
|
|
@@ -412,7 +421,7 @@ async function removeConfigEntry(configFilePath, configKeyPath, assetName, comma
|
|
|
412
421
|
}
|
|
413
422
|
catch (error) {
|
|
414
423
|
// Non-fatal — log but don't fail the uninstall
|
|
415
|
-
onProgress?.(`Warning: Failed to remove config entry from ${configFilePath} — ${
|
|
424
|
+
onProgress?.(`Warning: Failed to remove config entry from ${configFilePath} — ${errorMessage(error)}`);
|
|
416
425
|
return false;
|
|
417
426
|
}
|
|
418
427
|
}
|
|
@@ -453,7 +462,7 @@ async function removeFromEnabledList(enabledListFilePath, enabledListKey, names,
|
|
|
453
462
|
}
|
|
454
463
|
catch (error) {
|
|
455
464
|
// Non-fatal — log but don't fail the uninstall
|
|
456
|
-
onProgress?.(`Warning: Failed to update enabled list ${enabledListFilePath} — ${
|
|
465
|
+
onProgress?.(`Warning: Failed to update enabled list ${enabledListFilePath} — ${errorMessage(error)}`);
|
|
457
466
|
return false;
|
|
458
467
|
}
|
|
459
468
|
}
|
|
@@ -488,7 +497,7 @@ async function removeMemoryTemplateSection(filePath, assetName, onProgress) {
|
|
|
488
497
|
return true;
|
|
489
498
|
}
|
|
490
499
|
catch (error) {
|
|
491
|
-
onProgress?.(`Warning: Failed to remove memory-template section from ${filePath} — ${
|
|
500
|
+
onProgress?.(`Warning: Failed to remove memory-template section from ${filePath} — ${errorMessage(error)}`);
|
|
492
501
|
return false;
|
|
493
502
|
}
|
|
494
503
|
}
|