@detergent-software/atk 3.0.0-dev.17 → 3.0.0-dev.19
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/build/commands/audit.d.ts.map +1 -1
- package/build/commands/audit.js +3 -1
- package/build/commands/audit.js.map +1 -1
- package/build/commands/freeze.d.ts +1 -1
- package/build/commands/freeze.d.ts.map +1 -1
- package/build/commands/freeze.js +18 -19
- package/build/commands/freeze.js.map +1 -1
- package/build/commands/list.d.ts.map +1 -1
- package/build/commands/list.js +12 -5
- package/build/commands/list.js.map +1 -1
- package/build/commands/outdated.d.ts.map +1 -1
- package/build/commands/outdated.js +17 -8
- package/build/commands/outdated.js.map +1 -1
- package/build/commands/pin.d.ts +1 -2
- package/build/commands/pin.d.ts.map +1 -1
- package/build/commands/pin.js +29 -24
- package/build/commands/pin.js.map +1 -1
- package/build/commands/prune.d.ts.map +1 -1
- package/build/commands/prune.js +73 -136
- package/build/commands/prune.js.map +1 -1
- package/build/commands/sync.d.ts.map +1 -1
- package/build/commands/sync.js +4 -2
- package/build/commands/sync.js.map +1 -1
- package/build/commands/thaw.d.ts +1 -1
- package/build/commands/thaw.d.ts.map +1 -1
- package/build/commands/thaw.js +20 -24
- package/build/commands/thaw.js.map +1 -1
- package/build/commands/uninstall.d.ts.map +1 -1
- package/build/commands/uninstall.js +7 -7
- package/build/commands/uninstall.js.map +1 -1
- package/build/commands/unpin.d.ts +1 -2
- package/build/commands/unpin.d.ts.map +1 -1
- package/build/commands/unpin.js +10 -17
- package/build/commands/unpin.js.map +1 -1
- package/build/commands/update.d.ts.map +1 -1
- package/build/commands/update.js +7 -2
- package/build/commands/update.js.map +1 -1
- package/build/commands/why.d.ts +1 -1
- package/build/commands/why.d.ts.map +1 -1
- package/build/commands/why.js +14 -6
- package/build/commands/why.js.map +1 -1
- package/build/components/ListActionBar.d.ts +3 -1
- package/build/components/ListActionBar.d.ts.map +1 -1
- package/build/components/ListActionBar.js +4 -4
- package/build/components/ListActionBar.js.map +1 -1
- package/build/components/ListBrowseList.d.ts +3 -1
- package/build/components/ListBrowseList.d.ts.map +1 -1
- package/build/components/ListBrowseList.js +5 -3
- package/build/components/ListBrowseList.js.map +1 -1
- package/build/components/ListExpandedRow.d.ts +4 -2
- package/build/components/ListExpandedRow.d.ts.map +1 -1
- package/build/components/ListExpandedRow.js +4 -4
- package/build/components/ListExpandedRow.js.map +1 -1
- package/build/components/OrphanListItem.d.ts +15 -0
- package/build/components/OrphanListItem.d.ts.map +1 -0
- package/build/components/OrphanListItem.js +6 -0
- package/build/components/OrphanListItem.js.map +1 -0
- 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/useListActions.d.ts +2 -1
- package/build/hooks/useListActions.d.ts.map +1 -1
- package/build/hooks/useListActions.js +23 -19
- package/build/hooks/useListActions.js.map +1 -1
- package/build/hooks/useListState.d.ts +4 -0
- package/build/hooks/useListState.d.ts.map +1 -1
- package/build/hooks/useListState.js +3 -0
- package/build/hooks/useListState.js.map +1 -1
- package/build/hooks/usePruneState.d.ts +76 -0
- package/build/hooks/usePruneState.d.ts.map +1 -0
- package/build/hooks/usePruneState.js +246 -0
- package/build/hooks/usePruneState.js.map +1 -0
- package/build/lib/config.d.ts +22 -0
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +66 -0
- package/build/lib/config.js.map +1 -1
- package/build/lib/lockfile.d.ts +6 -16
- package/build/lib/lockfile.d.ts.map +1 -1
- package/build/lib/lockfile.js +10 -58
- package/build/lib/lockfile.js.map +1 -1
- package/build/lib/schemas/config.d.ts +24 -0
- package/build/lib/schemas/config.d.ts.map +1 -1
- package/build/lib/schemas/config.js +9 -0
- package/build/lib/schemas/config.js.map +1 -1
- package/build/lib/schemas/lockfile.d.ts +0 -2
- package/build/lib/schemas/lockfile.d.ts.map +1 -1
- package/build/lib/schemas/lockfile.js +0 -1
- package/build/lib/schemas/lockfile.js.map +1 -1
- package/build/lib/tool-resolver.d.ts +12 -0
- package/build/lib/tool-resolver.d.ts.map +1 -1
- package/build/lib/tool-resolver.js +23 -0
- package/build/lib/tool-resolver.js.map +1 -1
- package/build/lib/updater.d.ts +7 -4
- package/build/lib/updater.d.ts.map +1 -1
- package/build/lib/updater.js +9 -5
- package/build/lib/updater.js.map +1 -1
- package/build/lib/version.js +1 -1
- package/build/lib/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { useEffect, useReducer, useRef } from 'react';
|
|
2
|
+
import { findAllOrphanedAssets, readLockfile, removeAssetFromLockfile, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
|
|
3
|
+
import { findProjectRoot } from '../lib/paths.js';
|
|
4
|
+
import { resolveTools } from '../lib/tool-resolver.js';
|
|
5
|
+
import { removeSingleAsset } from '../lib/uninstaller.js';
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Initial state factory
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
export function createInitialState(flags) {
|
|
10
|
+
return {
|
|
11
|
+
errorMessage: '',
|
|
12
|
+
executeErrors: [],
|
|
13
|
+
executeOrphans: [],
|
|
14
|
+
executeRemoved: [],
|
|
15
|
+
flags,
|
|
16
|
+
outcome: null,
|
|
17
|
+
phase: 'loading',
|
|
18
|
+
progress: 'Initializing...',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Pure reducer
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
export function pruneReducer(state, action) {
|
|
25
|
+
switch (action.type) {
|
|
26
|
+
case 'CANCEL': {
|
|
27
|
+
if (state.phase !== 'confirming')
|
|
28
|
+
return state;
|
|
29
|
+
return { ...state, phase: 'done' };
|
|
30
|
+
}
|
|
31
|
+
case 'CONFIRM': {
|
|
32
|
+
if (state.phase !== 'confirming')
|
|
33
|
+
return state;
|
|
34
|
+
return { ...state, phase: 'executing', progress: 'Executing...' };
|
|
35
|
+
}
|
|
36
|
+
case 'ERROR':
|
|
37
|
+
return { ...state, errorMessage: action.message, phase: 'error' };
|
|
38
|
+
case 'EXECUTE_DONE': {
|
|
39
|
+
// Extract toolNames from the previous confirming outcome for the pruned outcome
|
|
40
|
+
const toolNames = state.outcome && 'toolNames' in state.outcome ? state.outcome.toolNames : [];
|
|
41
|
+
return {
|
|
42
|
+
...state,
|
|
43
|
+
executeErrors: action.errors,
|
|
44
|
+
executeOrphans: action.orphans,
|
|
45
|
+
executeRemoved: action.removed,
|
|
46
|
+
outcome: {
|
|
47
|
+
errors: action.errors,
|
|
48
|
+
orphans: action.orphans,
|
|
49
|
+
outcome: 'pruned',
|
|
50
|
+
removed: action.removed,
|
|
51
|
+
toolNames,
|
|
52
|
+
},
|
|
53
|
+
phase: 'done',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
case 'EXECUTE_ERROR': {
|
|
57
|
+
return { ...state, errorMessage: action.message, phase: 'error' };
|
|
58
|
+
}
|
|
59
|
+
case 'EXECUTE_PROGRESS': {
|
|
60
|
+
if (state.phase !== 'executing')
|
|
61
|
+
return state;
|
|
62
|
+
return { ...state, progress: action.message };
|
|
63
|
+
}
|
|
64
|
+
case 'LOAD_DONE': {
|
|
65
|
+
const { outcome } = action;
|
|
66
|
+
switch (outcome.outcome) {
|
|
67
|
+
case 'confirming':
|
|
68
|
+
return { ...state, outcome, phase: 'confirming' };
|
|
69
|
+
case 'dry-run':
|
|
70
|
+
case 'no-orphans':
|
|
71
|
+
case 'pruned':
|
|
72
|
+
return { ...state, outcome, phase: 'done' };
|
|
73
|
+
default:
|
|
74
|
+
return { ...state, outcome, phase: 'done' };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
case 'LOAD_PROGRESS': {
|
|
78
|
+
if (state.phase !== 'loading')
|
|
79
|
+
return state;
|
|
80
|
+
return { ...state, progress: action.message };
|
|
81
|
+
}
|
|
82
|
+
default:
|
|
83
|
+
return state;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// Hook
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
export function usePruneState(flags) {
|
|
90
|
+
const [state, dispatch] = useReducer(pruneReducer, undefined, () => createInitialState(flags));
|
|
91
|
+
// Guard against React development-mode double-firing of effects.
|
|
92
|
+
const hasLoadedRef = useRef(false);
|
|
93
|
+
// --- Loading phase-gated effect ---
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (state.phase !== 'loading')
|
|
96
|
+
return;
|
|
97
|
+
if (hasLoadedRef.current)
|
|
98
|
+
return;
|
|
99
|
+
hasLoadedRef.current = true;
|
|
100
|
+
let cancelled = false;
|
|
101
|
+
const load = async () => {
|
|
102
|
+
const { dryRun, projectRoot, tool, yes } = state.flags;
|
|
103
|
+
const projectDir = findProjectRoot(projectRoot);
|
|
104
|
+
const resolved = await resolveTools(tool, projectDir);
|
|
105
|
+
const defaultAdapter = resolved[0].adapter;
|
|
106
|
+
const toolNames = resolved.map((r) => r.tool);
|
|
107
|
+
if (cancelled)
|
|
108
|
+
return;
|
|
109
|
+
dispatch({ message: 'Reading lockfile...', type: 'LOAD_PROGRESS' });
|
|
110
|
+
const lockfile = await readLockfile(projectDir);
|
|
111
|
+
if (cancelled)
|
|
112
|
+
return;
|
|
113
|
+
if ((lockfile.assets ?? []).length === 0) {
|
|
114
|
+
dispatch({ outcome: { outcome: 'no-orphans', toolNames }, type: 'LOAD_DONE' });
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
dispatch({ message: 'Scanning for orphaned dependencies...', type: 'LOAD_PROGRESS' });
|
|
118
|
+
const orphans = findAllOrphanedAssets(lockfile);
|
|
119
|
+
if (orphans.length === 0) {
|
|
120
|
+
dispatch({ outcome: { outcome: 'no-orphans', toolNames }, type: 'LOAD_DONE' });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (dryRun) {
|
|
124
|
+
dispatch({ outcome: { orphans, outcome: 'dry-run', toolNames }, type: 'LOAD_DONE' });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (yes) {
|
|
128
|
+
dispatch({ message: 'Removing orphans...', type: 'LOAD_PROGRESS' });
|
|
129
|
+
const result = await withLockfileErrorHandling(projectDir, async () => {
|
|
130
|
+
// Re-read lockfile inside the lock for freshness
|
|
131
|
+
let currentLockfile = await readLockfile(projectDir);
|
|
132
|
+
const freshOrphans = findAllOrphanedAssets(currentLockfile);
|
|
133
|
+
const removed = [];
|
|
134
|
+
const errors = [];
|
|
135
|
+
for (const orphan of freshOrphans) {
|
|
136
|
+
if (cancelled)
|
|
137
|
+
break;
|
|
138
|
+
try {
|
|
139
|
+
dispatch({ message: `Removing ${orphan.name}...`, type: 'LOAD_PROGRESS' });
|
|
140
|
+
await removeSingleAsset(orphan, defaultAdapter, projectDir);
|
|
141
|
+
currentLockfile = removeAssetFromLockfile(currentLockfile, orphan.name, orphan.type);
|
|
142
|
+
removed.push(orphan.name);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
errors.push({
|
|
146
|
+
error: err instanceof Error ? err.message : String(err),
|
|
147
|
+
name: orphan.name,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
dispatch({ message: 'Updating lockfile...', type: 'LOAD_PROGRESS' });
|
|
152
|
+
await writeLockfile(projectDir, currentLockfile);
|
|
153
|
+
return { errors, orphans: freshOrphans, removed };
|
|
154
|
+
});
|
|
155
|
+
if (cancelled)
|
|
156
|
+
return;
|
|
157
|
+
dispatch({
|
|
158
|
+
outcome: { errors: result.errors, orphans: result.orphans, outcome: 'pruned', removed: result.removed, toolNames },
|
|
159
|
+
type: 'LOAD_DONE',
|
|
160
|
+
});
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Confirmation path — check for interactive TTY
|
|
164
|
+
if (!process.stdin.isTTY) {
|
|
165
|
+
dispatch({
|
|
166
|
+
message: 'Confirmation required but stdin is not interactive. Use --yes (-y) to skip the prompt.',
|
|
167
|
+
type: 'ERROR',
|
|
168
|
+
});
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
dispatch({
|
|
172
|
+
outcome: { defaultAdapter, orphans, outcome: 'confirming', toolNames },
|
|
173
|
+
type: 'LOAD_DONE',
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
load().catch((err) => {
|
|
177
|
+
if (!cancelled) {
|
|
178
|
+
dispatch({ message: err instanceof Error ? err.message : String(err), type: 'ERROR' });
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
return () => {
|
|
182
|
+
cancelled = true;
|
|
183
|
+
};
|
|
184
|
+
// Phase-gated effect: only runs when entering 'loading'
|
|
185
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
186
|
+
}, [state.phase]);
|
|
187
|
+
// --- Executing phase-gated effect ---
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
if (state.phase !== 'executing')
|
|
190
|
+
return;
|
|
191
|
+
let cancelled = false;
|
|
192
|
+
const execute = async () => {
|
|
193
|
+
const { outcome } = state;
|
|
194
|
+
if (!outcome || outcome.outcome !== 'confirming') {
|
|
195
|
+
dispatch({ message: 'Internal error: no confirming outcome available for execution.', type: 'EXECUTE_ERROR' });
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const { defaultAdapter } = outcome;
|
|
199
|
+
const { projectRoot } = state.flags;
|
|
200
|
+
const projectDir = findProjectRoot(projectRoot);
|
|
201
|
+
const result = await withLockfileErrorHandling(projectDir, async () => {
|
|
202
|
+
// Re-read lockfile inside the lock for freshness
|
|
203
|
+
let currentLockfile = await readLockfile(projectDir);
|
|
204
|
+
const freshOrphans = findAllOrphanedAssets(currentLockfile);
|
|
205
|
+
const removed = [];
|
|
206
|
+
const errors = [];
|
|
207
|
+
for (const orphan of freshOrphans) {
|
|
208
|
+
if (cancelled)
|
|
209
|
+
break;
|
|
210
|
+
try {
|
|
211
|
+
if (!cancelled)
|
|
212
|
+
dispatch({ message: `Removing ${orphan.name}...`, type: 'EXECUTE_PROGRESS' });
|
|
213
|
+
await removeSingleAsset(orphan, defaultAdapter, projectDir);
|
|
214
|
+
currentLockfile = removeAssetFromLockfile(currentLockfile, orphan.name, orphan.type);
|
|
215
|
+
removed.push(orphan.name);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
errors.push({
|
|
219
|
+
error: err instanceof Error ? err.message : String(err),
|
|
220
|
+
name: orphan.name,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (!cancelled)
|
|
225
|
+
dispatch({ message: 'Updating lockfile...', type: 'EXECUTE_PROGRESS' });
|
|
226
|
+
await writeLockfile(projectDir, currentLockfile);
|
|
227
|
+
return { errors, orphans: freshOrphans, removed };
|
|
228
|
+
});
|
|
229
|
+
if (cancelled)
|
|
230
|
+
return;
|
|
231
|
+
dispatch({ errors: result.errors, orphans: result.orphans, removed: result.removed, type: 'EXECUTE_DONE' });
|
|
232
|
+
};
|
|
233
|
+
execute().catch((err) => {
|
|
234
|
+
if (!cancelled) {
|
|
235
|
+
dispatch({ message: err instanceof Error ? err.message : String(err), type: 'EXECUTE_ERROR' });
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
return () => {
|
|
239
|
+
cancelled = true;
|
|
240
|
+
};
|
|
241
|
+
// Phase-gated effect: only runs when entering 'executing'
|
|
242
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
243
|
+
}, [state.phase]);
|
|
244
|
+
return [state, dispatch];
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=usePruneState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePruneState.js","sourceRoot":"","sources":["../../src/hooks/usePruneState.ts"],"names":[],"mappings":"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"}
|
package/build/lib/config.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import type { AssetType } from './schemas/manifest.js';
|
|
1
2
|
import { type Config, type ProjectConfig } from './schemas/config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Freeze an asset by adding it to the project config's `frozenAssets` array.
|
|
5
|
+
* No-op if the asset is already frozen with the same name, type, and org.
|
|
6
|
+
*/
|
|
7
|
+
export declare function freezeAssetInConfig(projectDir: string, name: string, type: AssetType, org?: string): Promise<void>;
|
|
2
8
|
/**
|
|
3
9
|
* Get the path to the ATK cache directory (~/.atk/cache/).
|
|
4
10
|
*/
|
|
@@ -20,6 +26,17 @@ export declare function getProjectConfigPath(projectDir: string): string;
|
|
|
20
26
|
* The config stores the developer's selected tools (`tools: string[]`).
|
|
21
27
|
*/
|
|
22
28
|
export declare function hasLocalConfig(projectDir: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check whether an asset is frozen in the project config.
|
|
31
|
+
* Loads the project config from disk each time — for batch checks use `isFrozenInConfig` instead.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isAssetFrozen(projectDir: string, name: string, type?: AssetType, org?: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Synchronous check whether an asset is frozen in a pre-loaded project config.
|
|
36
|
+
* Useful for batch operations (sync, update, outdated) where loading config once
|
|
37
|
+
* and checking many assets is more efficient.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isFrozenInConfig(config: null | ProjectConfig, name: string, type?: AssetType, org?: string): boolean;
|
|
23
40
|
/**
|
|
24
41
|
* List all known config keys with their current values and defaults.
|
|
25
42
|
*/
|
|
@@ -59,4 +76,9 @@ export declare function saveProjectConfig(projectDir: string, config: ProjectCon
|
|
|
59
76
|
* Returns the updated config. Validates the result against the schema.
|
|
60
77
|
*/
|
|
61
78
|
export declare function setConfigValue(config: Config, key: string, value: string): Config;
|
|
79
|
+
/**
|
|
80
|
+
* Thaw an asset by removing it from the project config's `frozenAssets` array.
|
|
81
|
+
* Removes all entries matching the given name, and optionally type and org.
|
|
82
|
+
*/
|
|
83
|
+
export declare function thawAssetInConfig(projectDir: string, name: string, type?: AssetType, org?: string): Promise<void>;
|
|
62
84
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EACL,KAAK,MAAM,EAGX,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAI7B;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAKnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,GAAG,aAAa,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAQ5G;AAED;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAUlD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CASzF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBpE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB9D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BjF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
package/build/lib/config.js
CHANGED
|
@@ -6,6 +6,29 @@ import { z } from 'zod';
|
|
|
6
6
|
import { parseAndValidate } from './parse-json.js';
|
|
7
7
|
import { ConfigSchema, DEFAULT_CONFIG, ProjectConfigSchema, } from './schemas/config.js';
|
|
8
8
|
const ATKRC_FILENAME = '.atkrc.json';
|
|
9
|
+
/**
|
|
10
|
+
* Freeze an asset by adding it to the project config's `frozenAssets` array.
|
|
11
|
+
* No-op if the asset is already frozen with the same name, type, and org.
|
|
12
|
+
*/
|
|
13
|
+
export async function freezeAssetInConfig(projectDir, name, type, org) {
|
|
14
|
+
const config = await loadProjectConfig(projectDir);
|
|
15
|
+
if (!config) {
|
|
16
|
+
throw new Error(`No project config found in ${projectDir}. Run \`atk setup\` first.`);
|
|
17
|
+
}
|
|
18
|
+
const frozenAssets = config.frozenAssets ?? [];
|
|
19
|
+
// Already frozen — nothing to do
|
|
20
|
+
if (frozenAssets.some((entry) => entry.name === name && entry.type === type && entry.org === org)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const entry = { name, type };
|
|
24
|
+
if (org !== undefined) {
|
|
25
|
+
entry.org = org;
|
|
26
|
+
}
|
|
27
|
+
await saveProjectConfig(projectDir, {
|
|
28
|
+
...config,
|
|
29
|
+
frozenAssets: [...frozenAssets, entry],
|
|
30
|
+
});
|
|
31
|
+
}
|
|
9
32
|
/**
|
|
10
33
|
* Get the path to the ATK cache directory (~/.atk/cache/).
|
|
11
34
|
*/
|
|
@@ -40,6 +63,27 @@ export function getProjectConfigPath(projectDir) {
|
|
|
40
63
|
export function hasLocalConfig(projectDir) {
|
|
41
64
|
return existsSync(getProjectConfigPath(projectDir));
|
|
42
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Check whether an asset is frozen in the project config.
|
|
68
|
+
* Loads the project config from disk each time — for batch checks use `isFrozenInConfig` instead.
|
|
69
|
+
*/
|
|
70
|
+
export async function isAssetFrozen(projectDir, name, type, org) {
|
|
71
|
+
const config = await loadProjectConfig(projectDir);
|
|
72
|
+
return isFrozenInConfig(config, name, type, org);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Synchronous check whether an asset is frozen in a pre-loaded project config.
|
|
76
|
+
* Useful for batch operations (sync, update, outdated) where loading config once
|
|
77
|
+
* and checking many assets is more efficient.
|
|
78
|
+
*/
|
|
79
|
+
export function isFrozenInConfig(config, name, type, org) {
|
|
80
|
+
if (!config?.frozenAssets) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return config.frozenAssets.some((entry) => entry.name === name &&
|
|
84
|
+
(type === undefined || entry.type === type) &&
|
|
85
|
+
(org === undefined || entry.org === org));
|
|
86
|
+
}
|
|
43
87
|
/**
|
|
44
88
|
* List all known config keys with their current values and defaults.
|
|
45
89
|
*/
|
|
@@ -130,6 +174,10 @@ export async function saveProjectConfig(projectDir, config) {
|
|
|
130
174
|
const toSave = {
|
|
131
175
|
tools: config.tools,
|
|
132
176
|
};
|
|
177
|
+
// Include frozenAssets only when non-empty to keep the file minimal
|
|
178
|
+
if (config.frozenAssets && config.frozenAssets.length > 0) {
|
|
179
|
+
toSave.frozenAssets = config.frozenAssets;
|
|
180
|
+
}
|
|
133
181
|
await writeFile(configPath, JSON.stringify(toSave, null, '\t') + '\n', 'utf-8');
|
|
134
182
|
}
|
|
135
183
|
/**
|
|
@@ -159,4 +207,22 @@ export function setConfigValue(config, key, value) {
|
|
|
159
207
|
}
|
|
160
208
|
return result.data;
|
|
161
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Thaw an asset by removing it from the project config's `frozenAssets` array.
|
|
212
|
+
* Removes all entries matching the given name, and optionally type and org.
|
|
213
|
+
*/
|
|
214
|
+
export async function thawAssetInConfig(projectDir, name, type, org) {
|
|
215
|
+
const config = await loadProjectConfig(projectDir);
|
|
216
|
+
if (!config) {
|
|
217
|
+
throw new Error(`No project config found in ${projectDir}. Run \`atk setup\` first.`);
|
|
218
|
+
}
|
|
219
|
+
const frozenAssets = config.frozenAssets ?? [];
|
|
220
|
+
const filtered = frozenAssets.filter((entry) => !(entry.name === name &&
|
|
221
|
+
(type === undefined || entry.type === type) &&
|
|
222
|
+
(org === undefined || entry.org === org)));
|
|
223
|
+
await saveProjectConfig(projectDir, {
|
|
224
|
+
...config,
|
|
225
|
+
frozenAssets: filtered,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
162
228
|
//# sourceMappingURL=config.js.map
|
package/build/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/build/lib/lockfile.d.ts
CHANGED
|
@@ -94,13 +94,6 @@ export declare function findInstalledAsset(lockfile: Lockfile, name: string, typ
|
|
|
94
94
|
* (b) no other remaining installed asset (excluding those in otherNamesBeingRemoved) lists it in dependencies.
|
|
95
95
|
*/
|
|
96
96
|
export declare function findOrphanedDependencies(lockfile: Lockfile, assetBeingRemoved: InstalledAsset, otherNamesBeingRemoved?: string[]): InstalledAsset[];
|
|
97
|
-
/**
|
|
98
|
-
* Freeze an installed asset to prevent sync and update from overwriting it.
|
|
99
|
-
* Only direct installs can be frozen; freezing a dependency throws an error.
|
|
100
|
-
*
|
|
101
|
-
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
102
|
-
*/
|
|
103
|
-
export declare function freezeAsset(lockfile: Lockfile, name: string, type?: AssetType, org?: string): Lockfile;
|
|
104
97
|
/**
|
|
105
98
|
* Get all installed assets, optionally filtered by type.
|
|
106
99
|
*/
|
|
@@ -117,12 +110,6 @@ export declare function getLockfilePath(projectDir: string): string;
|
|
|
117
110
|
* Get the path to the lock sentinel file for the given project directory.
|
|
118
111
|
*/
|
|
119
112
|
export declare function getLockSentinelPath(projectDir: string): string;
|
|
120
|
-
/**
|
|
121
|
-
* Check whether an asset is frozen in the lockfile.
|
|
122
|
-
* Returns `true` if the asset exists and has `frozen === true`, `false` otherwise.
|
|
123
|
-
* This is a read-only query that never throws.
|
|
124
|
-
*/
|
|
125
|
-
export declare function isFrozen(lockfile: Lockfile, name: string, type?: AssetType, org?: string): boolean;
|
|
126
113
|
/**
|
|
127
114
|
* Check if an asset is installed.
|
|
128
115
|
*/
|
|
@@ -159,11 +146,14 @@ export declare function releaseLockfileLock(projectDir: string): Promise<void>;
|
|
|
159
146
|
*/
|
|
160
147
|
export declare function removeAssetFromLockfile(lockfile: Lockfile, name: string, type?: AssetType, org?: string): Lockfile;
|
|
161
148
|
/**
|
|
162
|
-
*
|
|
149
|
+
* Validate that an asset is installed and was directly installed (not as a dependency).
|
|
150
|
+
* Throws a descriptive `LockfileError` if the asset is not found or is a dependency.
|
|
163
151
|
*
|
|
152
|
+
* @param operation - A verb describing the operation being guarded (e.g. "frozen", "thawed", "pinned").
|
|
153
|
+
* Used in the error message: "dependency and cannot be {operation}".
|
|
164
154
|
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
165
155
|
*/
|
|
166
|
-
export declare function
|
|
156
|
+
export declare function requireDirectInstall(lockfile: Lockfile, name: string, operation: string, type?: AssetType, org?: string): InstalledAsset;
|
|
167
157
|
/**
|
|
168
158
|
* Trace the reverse dependency chain from a given asset upward to all
|
|
169
159
|
* direct-install roots.
|
|
@@ -178,7 +168,7 @@ export declare function traceDependencyChain(lockfile: Lockfile, assetName: stri
|
|
|
178
168
|
/**
|
|
179
169
|
* Remove the version pin from an installed asset.
|
|
180
170
|
*
|
|
181
|
-
* @throws {LockfileError} if the asset is not found
|
|
171
|
+
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
182
172
|
*/
|
|
183
173
|
export declare function unpinAssetVersion(lockfile: Lockfile, name: string, type?: AssetType, org?: string): Lockfile;
|
|
184
174
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAkB,MAAM,uBAAuB,CAAC;AAe3F,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,+DAA+D;IAC/D,aAAa,EAAE,YAAY,GAAG,QAAQ,CAAC;IACvC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC9E;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC3C;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAO9C,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAI9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DzG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,GAAG,QAAQ,CAStF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,EAAE,CAM1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,SAAS,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,EAAE,CAMlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,cAAc,GAAG,SAAS,CAE5B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,cAAc,EACjC,sBAAsB,GAAE,MAAM,EAAO,GACpC,cAAc,EAAE,CA6BlB;AAED
|
|
1
|
+
{"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"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"}
|
package/build/lib/lockfile.js
CHANGED
|
@@ -163,30 +163,6 @@ export function findOrphanedDependencies(lockfile, assetBeingRemoved, otherNames
|
|
|
163
163
|
}
|
|
164
164
|
return orphans;
|
|
165
165
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Freeze an installed asset to prevent sync and update from overwriting it.
|
|
168
|
-
* Only direct installs can be frozen; freezing a dependency throws an error.
|
|
169
|
-
*
|
|
170
|
-
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
171
|
-
*/
|
|
172
|
-
export function freezeAsset(lockfile, name, type, org) {
|
|
173
|
-
const asset = findInstalledAsset(lockfile, name, type, org);
|
|
174
|
-
if (!asset) {
|
|
175
|
-
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
176
|
-
}
|
|
177
|
-
if ((asset.installReason ?? 'direct') === 'dependency') {
|
|
178
|
-
throw new LockfileError(`Asset '${name}' is a dependency and cannot be frozen — only directly installed assets can be frozen`);
|
|
179
|
-
}
|
|
180
|
-
return {
|
|
181
|
-
...lockfile,
|
|
182
|
-
assets: (lockfile.assets ?? []).map((a) => {
|
|
183
|
-
if (a.name === name && (!type || a.type === type) && a.org === org) {
|
|
184
|
-
return { ...a, frozen: true };
|
|
185
|
-
}
|
|
186
|
-
return a;
|
|
187
|
-
}),
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
166
|
/**
|
|
191
167
|
* Get all installed assets, optionally filtered by type.
|
|
192
168
|
*/
|
|
@@ -212,15 +188,6 @@ export function getLockfilePath(projectDir) {
|
|
|
212
188
|
export function getLockSentinelPath(projectDir) {
|
|
213
189
|
return join(projectDir, LOCK_SENTINEL_NAME);
|
|
214
190
|
}
|
|
215
|
-
/**
|
|
216
|
-
* Check whether an asset is frozen in the lockfile.
|
|
217
|
-
* Returns `true` if the asset exists and has `frozen === true`, `false` otherwise.
|
|
218
|
-
* This is a read-only query that never throws.
|
|
219
|
-
*/
|
|
220
|
-
export function isFrozen(lockfile, name, type, org) {
|
|
221
|
-
const asset = findInstalledAsset(lockfile, name, type, org);
|
|
222
|
-
return asset !== undefined && asset.frozen === true;
|
|
223
|
-
}
|
|
224
191
|
/**
|
|
225
192
|
* Check if an asset is installed.
|
|
226
193
|
*/
|
|
@@ -249,13 +216,7 @@ export function lockfileExists(projectDir) {
|
|
|
249
216
|
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
250
217
|
*/
|
|
251
218
|
export function pinAssetVersion(lockfile, name, version, type, org) {
|
|
252
|
-
|
|
253
|
-
if (!asset) {
|
|
254
|
-
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
255
|
-
}
|
|
256
|
-
if ((asset.installReason ?? 'direct') === 'dependency') {
|
|
257
|
-
throw new LockfileError(`Asset '${name}' is a dependency and cannot be pinned — only directly installed assets can be pinned`);
|
|
258
|
-
}
|
|
219
|
+
requireDirectInstall(lockfile, name, 'pinned', type, org);
|
|
259
220
|
return {
|
|
260
221
|
...lockfile,
|
|
261
222
|
assets: (lockfile.assets ?? []).map((a) => {
|
|
@@ -314,28 +275,22 @@ export function removeAssetFromLockfile(lockfile, name, type, org) {
|
|
|
314
275
|
};
|
|
315
276
|
}
|
|
316
277
|
/**
|
|
317
|
-
*
|
|
278
|
+
* Validate that an asset is installed and was directly installed (not as a dependency).
|
|
279
|
+
* Throws a descriptive `LockfileError` if the asset is not found or is a dependency.
|
|
318
280
|
*
|
|
281
|
+
* @param operation - A verb describing the operation being guarded (e.g. "frozen", "thawed", "pinned").
|
|
282
|
+
* Used in the error message: "dependency and cannot be {operation}".
|
|
319
283
|
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
320
284
|
*/
|
|
321
|
-
export function
|
|
285
|
+
export function requireDirectInstall(lockfile, name, operation, type, org) {
|
|
322
286
|
const asset = findInstalledAsset(lockfile, name, type, org);
|
|
323
287
|
if (!asset) {
|
|
324
288
|
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
325
289
|
}
|
|
326
290
|
if ((asset.installReason ?? 'direct') === 'dependency') {
|
|
327
|
-
throw new LockfileError(`Asset '${name}' is a dependency and cannot be
|
|
291
|
+
throw new LockfileError(`Asset '${name}' is a dependency and cannot be ${operation} — only directly installed assets can be ${operation}`);
|
|
328
292
|
}
|
|
329
|
-
return
|
|
330
|
-
...lockfile,
|
|
331
|
-
assets: (lockfile.assets ?? []).map((a) => {
|
|
332
|
-
if (a.name === name && (!type || a.type === type) && a.org === org) {
|
|
333
|
-
const { frozen: _, ...rest } = a;
|
|
334
|
-
return rest;
|
|
335
|
-
}
|
|
336
|
-
return a;
|
|
337
|
-
}),
|
|
338
|
-
};
|
|
293
|
+
return asset;
|
|
339
294
|
}
|
|
340
295
|
/**
|
|
341
296
|
* Trace the reverse dependency chain from a given asset upward to all
|
|
@@ -366,13 +321,10 @@ export function traceDependencyChain(lockfile, assetName, assetType, assetOrg) {
|
|
|
366
321
|
/**
|
|
367
322
|
* Remove the version pin from an installed asset.
|
|
368
323
|
*
|
|
369
|
-
* @throws {LockfileError} if the asset is not found
|
|
324
|
+
* @throws {LockfileError} if the asset is not found or is not a direct install
|
|
370
325
|
*/
|
|
371
326
|
export function unpinAssetVersion(lockfile, name, type, org) {
|
|
372
|
-
|
|
373
|
-
if (!asset) {
|
|
374
|
-
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
375
|
-
}
|
|
327
|
+
requireDirectInstall(lockfile, name, 'unpinned', type, org);
|
|
376
328
|
return {
|
|
377
329
|
...lockfile,
|
|
378
330
|
assets: (lockfile.assets ?? []).map((a) => {
|