@detergent-software/atk 3.0.0 → 5.0.0-dev.1
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 +361 -0
- package/build/commands/_app.d.ts.map +1 -1
- package/build/commands/_app.js +23 -3
- package/build/commands/_app.js.map +1 -1
- package/build/commands/audit.d.ts.map +1 -1
- package/build/commands/audit.js +76 -37
- package/build/commands/audit.js.map +1 -1
- package/build/commands/browse.d.ts.map +1 -1
- package/build/commands/browse.js +126 -154
- package/build/commands/browse.js.map +1 -1
- package/build/commands/cache.d.ts.map +1 -1
- package/build/commands/cache.js +13 -15
- package/build/commands/cache.js.map +1 -1
- package/build/commands/config.d.ts +1 -1
- package/build/commands/config.d.ts.map +1 -1
- package/build/commands/config.js +7 -3
- package/build/commands/config.js.map +1 -1
- package/build/commands/diff.d.ts.map +1 -1
- package/build/commands/diff.js +4 -117
- package/build/commands/diff.js.map +1 -1
- package/build/commands/freeze.d.ts +1 -2
- package/build/commands/freeze.d.ts.map +1 -1
- package/build/commands/freeze.js +17 -37
- package/build/commands/freeze.js.map +1 -1
- package/build/commands/info.d.ts +1 -2
- package/build/commands/info.d.ts.map +1 -1
- package/build/commands/info.js +43 -38
- package/build/commands/info.js.map +1 -1
- package/build/commands/init.d.ts.map +1 -1
- package/build/commands/init.js +41 -414
- package/build/commands/init.js.map +1 -1
- package/build/commands/install.d.ts.map +1 -1
- package/build/commands/install.js +79 -72
- package/build/commands/install.js.map +1 -1
- package/build/commands/list.d.ts +2 -2
- package/build/commands/list.d.ts.map +1 -1
- package/build/commands/list.js +138 -27
- package/build/commands/list.js.map +1 -1
- package/build/commands/outdated.d.ts.map +1 -1
- package/build/commands/outdated.js +20 -10
- 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 +44 -47
- package/build/commands/pin.js.map +1 -1
- package/build/commands/prune.d.ts.map +1 -1
- package/build/commands/prune.js +76 -151
- package/build/commands/prune.js.map +1 -1
- package/build/commands/publish.d.ts +4 -1
- package/build/commands/publish.d.ts.map +1 -1
- package/build/commands/publish.js +139 -388
- package/build/commands/publish.js.map +1 -1
- package/build/commands/search.d.ts.map +1 -1
- package/build/commands/search.js +14 -19
- package/build/commands/search.js.map +1 -1
- package/build/commands/setup.d.ts +1 -1
- package/build/commands/setup.d.ts.map +1 -1
- package/build/commands/setup.js +48 -253
- package/build/commands/setup.js.map +1 -1
- package/build/commands/sync.d.ts.map +1 -1
- package/build/commands/sync.js +43 -169
- package/build/commands/sync.js.map +1 -1
- package/build/commands/thaw.d.ts +1 -2
- package/build/commands/thaw.d.ts.map +1 -1
- package/build/commands/thaw.js +19 -37
- package/build/commands/thaw.js.map +1 -1
- package/build/commands/uninstall.d.ts.map +1 -1
- package/build/commands/uninstall.js +106 -221
- 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 +23 -38
- package/build/commands/unpin.js.map +1 -1
- package/build/commands/update.d.ts.map +1 -1
- package/build/commands/update.js +57 -54
- 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/AssetDetail.d.ts +1 -3
- package/build/components/AssetDetail.d.ts.map +1 -1
- package/build/components/AssetDetail.js +22 -21
- package/build/components/AssetDetail.js.map +1 -1
- package/build/components/AssetTable.d.ts +5 -2
- package/build/components/AssetTable.d.ts.map +1 -1
- package/build/components/AssetTable.js +37 -40
- package/build/components/AssetTable.js.map +1 -1
- package/build/components/AssetVersionLine.d.ts +27 -0
- package/build/components/AssetVersionLine.d.ts.map +1 -0
- package/build/components/AssetVersionLine.js +10 -0
- package/build/components/AssetVersionLine.js.map +1 -0
- package/build/components/BrowseExpandedBundle.d.ts +10 -1
- package/build/components/BrowseExpandedBundle.d.ts.map +1 -1
- package/build/components/BrowseExpandedBundle.js +28 -3
- package/build/components/BrowseExpandedBundle.js.map +1 -1
- package/build/components/BrowseExpandedRow.d.ts +9 -1
- package/build/components/BrowseExpandedRow.d.ts.map +1 -1
- package/build/components/BrowseExpandedRow.js +35 -3
- package/build/components/BrowseExpandedRow.js.map +1 -1
- package/build/components/BrowseList.d.ts +5 -1
- package/build/components/BrowseList.d.ts.map +1 -1
- package/build/components/BrowseList.js +57 -47
- package/build/components/BrowseList.js.map +1 -1
- package/build/components/BundleDetail.d.ts +2 -1
- package/build/components/BundleDetail.d.ts.map +1 -1
- package/build/components/BundleDetail.js +3 -2
- package/build/components/BundleDetail.js.map +1 -1
- package/build/components/DiffView.d.ts +0 -2
- package/build/components/DiffView.d.ts.map +1 -1
- package/build/components/DiffView.js +11 -5
- package/build/components/DiffView.js.map +1 -1
- package/build/components/DryRunBanner.d.ts +3 -3
- package/build/components/DryRunBanner.d.ts.map +1 -1
- package/build/components/DryRunBanner.js +2 -2
- package/build/components/DryRunBanner.js.map +1 -1
- package/build/components/FilterBar.d.ts +10 -3
- package/build/components/FilterBar.d.ts.map +1 -1
- package/build/components/FilterBar.js +4 -4
- package/build/components/FilterBar.js.map +1 -1
- package/build/components/FrozenSkippedHint.d.ts +11 -0
- package/build/components/FrozenSkippedHint.d.ts.map +1 -0
- package/build/components/FrozenSkippedHint.js +12 -0
- package/build/components/FrozenSkippedHint.js.map +1 -0
- package/build/components/HelpBar.d.ts.map +1 -1
- package/build/components/HelpBar.js +3 -3
- package/build/components/HelpBar.js.map +1 -1
- package/build/components/InitSuccess.d.ts +5 -0
- package/build/components/InitSuccess.d.ts.map +1 -0
- package/build/components/InitSuccess.js +20 -0
- package/build/components/InitSuccess.js.map +1 -0
- package/build/components/InstallSummary.d.ts +3 -3
- package/build/components/InstallSummary.d.ts.map +1 -1
- package/build/components/InstallSummary.js +2 -2
- package/build/components/InstallSummary.js.map +1 -1
- package/build/components/Link.d.ts +7 -0
- package/build/components/Link.d.ts.map +1 -0
- package/build/components/Link.js +6 -0
- package/build/components/Link.js.map +1 -0
- package/build/components/ListActionBar.d.ts +11 -0
- package/build/components/ListActionBar.d.ts.map +1 -0
- package/build/components/ListActionBar.js +30 -0
- package/build/components/ListActionBar.js.map +1 -0
- package/build/components/ListBrowseList.d.ts +27 -0
- package/build/components/ListBrowseList.d.ts.map +1 -0
- package/build/components/ListBrowseList.js +57 -0
- package/build/components/ListBrowseList.js.map +1 -0
- package/build/components/ListExpandedRow.d.ts +38 -0
- package/build/components/ListExpandedRow.d.ts.map +1 -0
- package/build/components/ListExpandedRow.js +49 -0
- package/build/components/ListExpandedRow.js.map +1 -0
- package/build/components/ListHelpBar.d.ts +19 -0
- package/build/components/ListHelpBar.d.ts.map +1 -0
- package/build/components/ListHelpBar.js +11 -0
- package/build/components/ListHelpBar.js.map +1 -0
- 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/PromptField.d.ts +19 -0
- package/build/components/PromptField.d.ts.map +1 -0
- package/build/components/PromptField.js +7 -0
- package/build/components/PromptField.js.map +1 -0
- package/build/components/SkippedAssetSection.d.ts +35 -0
- package/build/components/SkippedAssetSection.d.ts.map +1 -0
- package/build/components/SkippedAssetSection.js +15 -0
- package/build/components/SkippedAssetSection.js.map +1 -0
- package/build/components/StatusBadge.d.ts +1 -1
- package/build/components/StatusBadge.d.ts.map +1 -1
- package/build/components/StatusBadge.js +4 -0
- package/build/components/StatusBadge.js.map +1 -1
- package/build/components/SyncAllInSync.d.ts +14 -0
- package/build/components/SyncAllInSync.d.ts.map +1 -0
- package/build/components/SyncAllInSync.js +10 -0
- package/build/components/SyncAllInSync.js.map +1 -0
- package/build/components/SyncDriftedList.d.ts +24 -0
- package/build/components/SyncDriftedList.d.ts.map +1 -0
- package/build/components/SyncDriftedList.js +17 -0
- package/build/components/SyncDriftedList.js.map +1 -0
- package/build/components/SyncNoAssets.d.ts +12 -0
- package/build/components/SyncNoAssets.d.ts.map +1 -0
- package/build/components/SyncNoAssets.js +9 -0
- package/build/components/SyncNoAssets.js.map +1 -0
- package/build/components/index.d.ts +16 -2
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +16 -2
- package/build/components/index.js.map +1 -1
- package/build/hooks/useBrowseState.d.ts +44 -1
- package/build/hooks/useBrowseState.d.ts.map +1 -1
- package/build/hooks/useBrowseState.js +148 -13
- package/build/hooks/useBrowseState.js.map +1 -1
- package/build/hooks/useConfirmation.d.ts +18 -0
- package/build/hooks/useConfirmation.d.ts.map +1 -0
- package/build/hooks/useConfirmation.js +56 -0
- package/build/hooks/useConfirmation.js.map +1 -0
- package/build/hooks/useInitState.d.ts +109 -0
- package/build/hooks/useInitState.d.ts.map +1 -0
- package/build/hooks/useInitState.js +474 -0
- package/build/hooks/useInitState.js.map +1 -0
- package/build/hooks/useListActions.d.ts +15 -0
- package/build/hooks/useListActions.d.ts.map +1 -0
- package/build/hooks/useListActions.js +155 -0
- package/build/hooks/useListActions.js.map +1 -0
- package/build/hooks/useListState.d.ts +151 -0
- package/build/hooks/useListState.d.ts.map +1 -0
- package/build/hooks/useListState.js +448 -0
- package/build/hooks/useListState.js.map +1 -0
- package/build/hooks/usePruneState.d.ts +76 -0
- package/build/hooks/usePruneState.d.ts.map +1 -0
- package/build/hooks/usePruneState.js +252 -0
- package/build/hooks/usePruneState.js.map +1 -0
- package/build/hooks/usePublishState.d.ts +147 -0
- package/build/hooks/usePublishState.d.ts.map +1 -0
- package/build/hooks/usePublishState.js +916 -0
- package/build/hooks/usePublishState.js.map +1 -0
- package/build/hooks/useSetupState.d.ts +57 -0
- package/build/hooks/useSetupState.d.ts.map +1 -0
- package/build/hooks/useSetupState.js +236 -0
- package/build/hooks/useSetupState.js.map +1 -0
- package/build/hooks/useUninstallState.d.ts +102 -0
- package/build/hooks/useUninstallState.d.ts.map +1 -0
- package/build/hooks/useUninstallState.js +342 -0
- package/build/hooks/useUninstallState.js.map +1 -0
- package/build/lib/adapter.d.ts +21 -0
- package/build/lib/adapter.d.ts.map +1 -1
- package/build/lib/adapter.js +59 -1
- package/build/lib/adapter.js.map +1 -1
- package/build/lib/checksum.d.ts +39 -0
- package/build/lib/checksum.d.ts.map +1 -1
- package/build/lib/checksum.js +98 -13
- package/build/lib/checksum.js.map +1 -1
- package/build/lib/config.d.ts +38 -18
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +103 -55
- package/build/lib/config.js.map +1 -1
- package/build/lib/detector.d.ts +2 -11
- package/build/lib/detector.d.ts.map +1 -1
- package/build/lib/detector.js +2 -64
- package/build/lib/detector.js.map +1 -1
- package/build/lib/diagnostics.d.ts +7 -0
- package/build/lib/diagnostics.d.ts.map +1 -1
- package/build/lib/diagnostics.js +54 -34
- package/build/lib/diagnostics.js.map +1 -1
- package/build/lib/diff-command.d.ts +40 -0
- package/build/lib/diff-command.d.ts.map +1 -0
- package/build/lib/diff-command.js +145 -0
- package/build/lib/diff-command.js.map +1 -0
- package/build/lib/diff.d.ts +7 -0
- package/build/lib/diff.d.ts.map +1 -1
- package/build/lib/diff.js +15 -10
- package/build/lib/diff.js.map +1 -1
- package/build/lib/format.d.ts +6 -0
- package/build/lib/format.d.ts.map +1 -0
- package/build/lib/format.js +18 -0
- package/build/lib/format.js.map +1 -0
- package/build/lib/github.d.ts +35 -0
- package/build/lib/github.d.ts.map +1 -1
- package/build/lib/github.js +44 -0
- package/build/lib/github.js.map +1 -1
- package/build/lib/gitignore.d.ts +17 -0
- package/build/lib/gitignore.d.ts.map +1 -1
- package/build/lib/gitignore.js +17 -1
- package/build/lib/gitignore.js.map +1 -1
- package/build/lib/init.d.ts +22 -0
- package/build/lib/init.d.ts.map +1 -1
- package/build/lib/init.js +163 -18
- package/build/lib/init.js.map +1 -1
- package/build/lib/installer.d.ts +1 -0
- package/build/lib/installer.d.ts.map +1 -1
- package/build/lib/installer.js +7 -7
- package/build/lib/installer.js.map +1 -1
- package/build/lib/lockfile.d.ts +19 -17
- package/build/lib/lockfile.d.ts.map +1 -1
- package/build/lib/lockfile.js +45 -68
- package/build/lib/lockfile.js.map +1 -1
- package/build/lib/publisher.d.ts +41 -12
- package/build/lib/publisher.d.ts.map +1 -1
- package/build/lib/publisher.js +226 -64
- package/build/lib/publisher.js.map +1 -1
- package/build/lib/registry.d.ts +20 -5
- package/build/lib/registry.d.ts.map +1 -1
- package/build/lib/registry.js +45 -33
- package/build/lib/registry.js.map +1 -1
- package/build/lib/sanitize.d.ts +25 -0
- package/build/lib/sanitize.d.ts.map +1 -0
- package/build/lib/sanitize.js +61 -0
- package/build/lib/sanitize.js.map +1 -0
- package/build/lib/schemas/config.d.ts +31 -3
- package/build/lib/schemas/config.d.ts.map +1 -1
- package/build/lib/schemas/config.js +21 -2
- package/build/lib/schemas/config.js.map +1 -1
- package/build/lib/schemas/index.d.ts +1 -1
- package/build/lib/schemas/index.d.ts.map +1 -1
- package/build/lib/schemas/index.js +1 -1
- package/build/lib/schemas/index.js.map +1 -1
- package/build/lib/schemas/lockfile.d.ts +20 -4
- package/build/lib/schemas/lockfile.d.ts.map +1 -1
- package/build/lib/schemas/lockfile.js +7 -1
- package/build/lib/schemas/lockfile.js.map +1 -1
- package/build/lib/schemas/manifest.d.ts +1 -1
- package/build/lib/schemas/manifest.d.ts.map +1 -1
- package/build/lib/schemas/manifest.js +7 -2
- package/build/lib/schemas/manifest.js.map +1 -1
- package/build/lib/schemas/registry.d.ts +2 -4
- package/build/lib/schemas/registry.d.ts.map +1 -1
- package/build/lib/schemas/registry.js +1 -1
- package/build/lib/schemas/registry.js.map +1 -1
- package/build/lib/search.d.ts +15 -1
- package/build/lib/search.d.ts.map +1 -1
- package/build/lib/search.js +65 -65
- package/build/lib/search.js.map +1 -1
- package/build/lib/setup.d.ts +28 -0
- package/build/lib/setup.d.ts.map +1 -0
- package/build/lib/setup.js +98 -0
- package/build/lib/setup.js.map +1 -0
- package/build/lib/sync.d.ts +109 -0
- package/build/lib/sync.d.ts.map +1 -0
- package/build/lib/sync.js +217 -0
- package/build/lib/sync.js.map +1 -0
- package/build/lib/tool-resolver.d.ts +29 -6
- package/build/lib/tool-resolver.d.ts.map +1 -1
- package/build/lib/tool-resolver.js +54 -15
- 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 +10 -6
- 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 +79 -65
- package/tool-adapters/claude-code.json +1 -1
- package/tool-adapters/copilot-cli.json +1 -1
package/build/lib/checksum.js
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { readdir, readFile } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
+
/** Recursively collect all files in a directory. */
|
|
5
|
+
export async function collectFilesRecursive(dirPath, baseDir) {
|
|
6
|
+
const results = [];
|
|
7
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
8
|
+
for (const entry of entries) {
|
|
9
|
+
const fullPath = join(dirPath, entry.name);
|
|
10
|
+
if (entry.isDirectory()) {
|
|
11
|
+
const subFiles = await collectFilesRecursive(fullPath, baseDir);
|
|
12
|
+
results.push(...subFiles);
|
|
13
|
+
}
|
|
14
|
+
else if (entry.isFile()) {
|
|
15
|
+
const relativePath = fullPath.slice(baseDir.length + 1).replace(/\\/g, '/');
|
|
16
|
+
results.push({ absolutePath: fullPath, relativePath });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return results;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compute a deterministic SHA-256 checksum for a config entry value.
|
|
23
|
+
*
|
|
24
|
+
* Strips the `_managedBy` metadata key (added by ATK at write time),
|
|
25
|
+
* serializes the remaining keys in sorted order, and returns the hex digest.
|
|
26
|
+
* Both the installer (write path) and the verifier (read path) use this
|
|
27
|
+
* helper so the checksum logic stays in one place.
|
|
28
|
+
*/
|
|
29
|
+
export function computeConfigEntryChecksum(entry) {
|
|
30
|
+
const cleaned = { ...entry };
|
|
31
|
+
delete cleaned['_managedBy'];
|
|
32
|
+
const serialized = JSON.stringify(cleaned, Object.keys(cleaned).sort());
|
|
33
|
+
return hashString(serialized);
|
|
34
|
+
}
|
|
4
35
|
/**
|
|
5
36
|
* Compute a combined SHA-256 hash for all files in a directory (recursively).
|
|
6
37
|
* Files are sorted by relative path to ensure deterministic output.
|
|
7
38
|
*/
|
|
8
39
|
export async function hashDirectory(dirPath) {
|
|
9
|
-
const files = await
|
|
40
|
+
const files = await collectFilesRecursive(dirPath, dirPath);
|
|
10
41
|
files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
11
42
|
const hash = createHash('sha256');
|
|
12
43
|
for (const file of files) {
|
|
@@ -58,21 +89,75 @@ export async function verifyChecksums(files) {
|
|
|
58
89
|
}
|
|
59
90
|
return failures;
|
|
60
91
|
}
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Verify config-file entries against their expected checksums.
|
|
94
|
+
*
|
|
95
|
+
* For each entry the function:
|
|
96
|
+
* 1. Reads and parses the config file as JSON → `CONFIG_FILE_NOT_FOUND` on failure.
|
|
97
|
+
* 2. Splits the dot-path key into section/child and looks up the value →
|
|
98
|
+
* `CONFIG_KEY_NOT_FOUND` if missing.
|
|
99
|
+
* 3. Computes a checksum via `computeConfigEntryChecksum()` and compares →
|
|
100
|
+
* `CONFIG_CHECKSUM_MISMATCH` on divergence.
|
|
101
|
+
*
|
|
102
|
+
* Returns only the entries that failed (empty array = all OK).
|
|
103
|
+
*/
|
|
104
|
+
export async function verifyConfigEntries(entries, projectDir) {
|
|
105
|
+
const failures = [];
|
|
65
106
|
for (const entry of entries) {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
107
|
+
const absolutePath = join(projectDir, entry.file);
|
|
108
|
+
// 1. Read and parse the config file
|
|
109
|
+
let config;
|
|
110
|
+
try {
|
|
111
|
+
const raw = await readFile(absolutePath, 'utf-8');
|
|
112
|
+
config = JSON.parse(raw);
|
|
70
113
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
114
|
+
catch {
|
|
115
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_FILE_NOT_FOUND' });
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// 2. Look up the value via dot-path (sectionKey.childKey)
|
|
119
|
+
const dotIndex = entry.key.indexOf('.');
|
|
120
|
+
const sectionKey = dotIndex === -1 ? entry.key : entry.key.slice(0, dotIndex);
|
|
121
|
+
const childKey = dotIndex === -1 ? undefined : entry.key.slice(dotIndex + 1);
|
|
122
|
+
const section = config[sectionKey];
|
|
123
|
+
if (childKey === undefined || section === null || section === undefined || typeof section !== 'object') {
|
|
124
|
+
// No child key means the key format is unexpected, or section missing
|
|
125
|
+
if (childKey === undefined) {
|
|
126
|
+
// Single-segment key — look up directly
|
|
127
|
+
if (!(sectionKey in config)) {
|
|
128
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const value = config[sectionKey];
|
|
132
|
+
if (value === null || value === undefined || typeof value !== 'object') {
|
|
133
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const actual = computeConfigEntryChecksum(value);
|
|
137
|
+
if (actual !== entry.checksum) {
|
|
138
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_CHECKSUM_MISMATCH' });
|
|
139
|
+
}
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const sectionObj = section;
|
|
146
|
+
if (!(childKey in sectionObj)) {
|
|
147
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const value = sectionObj[childKey];
|
|
151
|
+
if (value === null || value === undefined || typeof value !== 'object') {
|
|
152
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// 3. Compute checksum and compare
|
|
156
|
+
const actual = computeConfigEntryChecksum(value);
|
|
157
|
+
if (actual !== entry.checksum) {
|
|
158
|
+
failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_CHECKSUM_MISMATCH' });
|
|
74
159
|
}
|
|
75
160
|
}
|
|
76
|
-
return
|
|
161
|
+
return failures;
|
|
77
162
|
}
|
|
78
163
|
//# sourceMappingURL=checksum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/lib/checksum.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
|
*/
|
|
@@ -11,6 +17,26 @@ export declare function getConfigPath(): string;
|
|
|
11
17
|
* Get a single config value by key.
|
|
12
18
|
*/
|
|
13
19
|
export declare function getConfigValue(config: Config, key: string): unknown;
|
|
20
|
+
/**
|
|
21
|
+
* Get the path to the project-level config file (.atkrc.json in project root).
|
|
22
|
+
*/
|
|
23
|
+
export declare function getProjectConfigPath(projectDir: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Check whether a local project config (.atkrc.json) exists in the given directory.
|
|
26
|
+
* The config stores the developer's selected tools (`tools: string[]`).
|
|
27
|
+
*/
|
|
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;
|
|
14
40
|
/**
|
|
15
41
|
* List all known config keys with their current values and defaults.
|
|
16
42
|
*/
|
|
@@ -25,6 +51,12 @@ export declare function listConfigEntries(config: Config): Array<{
|
|
|
25
51
|
* Creates no file if none exists — defaults are used.
|
|
26
52
|
*/
|
|
27
53
|
export declare function loadConfig(): Promise<Config>;
|
|
54
|
+
/**
|
|
55
|
+
* Load the project-level config from .atkrc.json in the project directory.
|
|
56
|
+
* Returns null if no project config exists.
|
|
57
|
+
* Legacy `{ tool: string }` files are automatically migrated to `{ tools: string[] }` on read via schema preprocess.
|
|
58
|
+
*/
|
|
59
|
+
export declare function loadProjectConfig(projectDir: string): Promise<null | ProjectConfig>;
|
|
28
60
|
/**
|
|
29
61
|
* Reset a config key back to its default value.
|
|
30
62
|
* Returns the updated config.
|
|
@@ -34,26 +66,9 @@ export declare function resetConfigValue(config: Config, key: string): Config;
|
|
|
34
66
|
* Save the full config object to ~/.atkrc.json.
|
|
35
67
|
*/
|
|
36
68
|
export declare function saveConfig(config: Config): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Get the path to the project-level config file (.atkrc.json in project root).
|
|
39
|
-
*/
|
|
40
|
-
export declare function getProjectConfigPath(projectDir: string): string;
|
|
41
|
-
/**
|
|
42
|
-
* Check whether a local project config (.atkrc.json) exists in the given directory.
|
|
43
|
-
*/
|
|
44
|
-
export declare function hasLocalConfig(projectDir: string): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Load merged config: user-level config only.
|
|
47
|
-
* Project config now only stores `{ tool }` and does not contribute to Config fields.
|
|
48
|
-
*/
|
|
49
|
-
export declare function loadMergedConfig(projectDir: string): Promise<Config>;
|
|
50
|
-
/**
|
|
51
|
-
* Load the project-level config from .atkrc.json in the project directory.
|
|
52
|
-
* Returns null if no project config exists.
|
|
53
|
-
*/
|
|
54
|
-
export declare function loadProjectConfig(projectDir: string): Promise<null | ProjectConfig>;
|
|
55
69
|
/**
|
|
56
70
|
* Save the project-level config to .atkrc.json in the project directory.
|
|
71
|
+
* Always writes the new `{ tools: string[] }` format, never the legacy `{ tool }` format.
|
|
57
72
|
*/
|
|
58
73
|
export declare function saveProjectConfig(projectDir: string, config: ProjectConfig): Promise<void>;
|
|
59
74
|
/**
|
|
@@ -61,4 +76,9 @@ export declare function saveProjectConfig(projectDir: string, config: ProjectCon
|
|
|
61
76
|
* Returns the updated config. Validates the result against the schema.
|
|
62
77
|
*/
|
|
63
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>;
|
|
64
84
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,MAAM,EAGX,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAI7B;;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,
|
|
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,CAAC,MAAM,EAAE,IAAI,GAAG,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CASpH;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,CAkBf"}
|
package/build/lib/config.js
CHANGED
|
@@ -2,9 +2,33 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { dirname, join } from 'node:path';
|
|
5
|
+
import { z } from 'zod';
|
|
5
6
|
import { parseAndValidate } from './parse-json.js';
|
|
6
7
|
import { ConfigSchema, DEFAULT_CONFIG, ProjectConfigSchema, } from './schemas/config.js';
|
|
7
|
-
const
|
|
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
|
+
}
|
|
8
32
|
/**
|
|
9
33
|
* Get the path to the ATK cache directory (~/.atk/cache/).
|
|
10
34
|
*/
|
|
@@ -15,29 +39,54 @@ export function getCacheDir(config) {
|
|
|
15
39
|
* Get the path to the user's config file (~/.atkrc.json).
|
|
16
40
|
*/
|
|
17
41
|
export function getConfigPath() {
|
|
18
|
-
return join(homedir(),
|
|
42
|
+
return join(homedir(), ATKRC_FILENAME);
|
|
19
43
|
}
|
|
20
44
|
/**
|
|
21
45
|
* Get a single config value by key.
|
|
22
46
|
*/
|
|
23
47
|
export function getConfigValue(config, key) {
|
|
24
|
-
if (!(key in
|
|
25
|
-
|
|
48
|
+
if (!(key in ConfigSchema.shape)) {
|
|
49
|
+
throw new Error(`Unknown config key: ${key}`);
|
|
26
50
|
}
|
|
27
51
|
return config[key];
|
|
28
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the path to the project-level config file (.atkrc.json in project root).
|
|
55
|
+
*/
|
|
56
|
+
export function getProjectConfigPath(projectDir) {
|
|
57
|
+
return join(projectDir, ATKRC_FILENAME);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check whether a local project config (.atkrc.json) exists in the given directory.
|
|
61
|
+
* The config stores the developer's selected tools (`tools: string[]`).
|
|
62
|
+
*/
|
|
63
|
+
export function hasLocalConfig(projectDir) {
|
|
64
|
+
return existsSync(getProjectConfigPath(projectDir));
|
|
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 && (type === undefined || entry.type === type) && (org === undefined || entry.org === org));
|
|
84
|
+
}
|
|
29
85
|
/**
|
|
30
86
|
* List all known config keys with their current values and defaults.
|
|
31
87
|
*/
|
|
32
88
|
export function listConfigEntries(config) {
|
|
33
|
-
const allKeys =
|
|
34
|
-
'registryUrl',
|
|
35
|
-
'registryBranch',
|
|
36
|
-
'cacheDir',
|
|
37
|
-
'cacheTtlMinutes',
|
|
38
|
-
'githubToken',
|
|
39
|
-
'org',
|
|
40
|
-
];
|
|
89
|
+
const allKeys = Object.keys(ConfigSchema.shape);
|
|
41
90
|
return allKeys.map((key) => ({
|
|
42
91
|
isDefault: config[key] === undefined || config[key] === DEFAULT_CONFIG[key],
|
|
43
92
|
key,
|
|
@@ -58,6 +107,19 @@ export async function loadConfig() {
|
|
|
58
107
|
const parsed = parseAndValidate(raw, ConfigSchema, `Invalid config at ${configPath}`);
|
|
59
108
|
return { ...DEFAULT_CONFIG, ...parsed };
|
|
60
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Load the project-level config from .atkrc.json in the project directory.
|
|
112
|
+
* Returns null if no project config exists.
|
|
113
|
+
* Legacy `{ tool: string }` files are automatically migrated to `{ tools: string[] }` on read via schema preprocess.
|
|
114
|
+
*/
|
|
115
|
+
export async function loadProjectConfig(projectDir) {
|
|
116
|
+
const configPath = getProjectConfigPath(projectDir);
|
|
117
|
+
if (!existsSync(configPath)) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const raw = await readFile(configPath, 'utf-8');
|
|
121
|
+
return parseAndValidate(raw, ProjectConfigSchema, `Invalid project config at ${configPath}`);
|
|
122
|
+
}
|
|
61
123
|
/**
|
|
62
124
|
* Reset a config key back to its default value.
|
|
63
125
|
* Returns the updated config.
|
|
@@ -96,43 +158,9 @@ export async function saveConfig(config) {
|
|
|
96
158
|
}
|
|
97
159
|
await writeFile(configPath, JSON.stringify(toSave, null, '\t') + '\n', 'utf-8');
|
|
98
160
|
}
|
|
99
|
-
const PROJECT_CONFIG_FILENAME = '.atkrc.json';
|
|
100
|
-
/**
|
|
101
|
-
* Get the path to the project-level config file (.atkrc.json in project root).
|
|
102
|
-
*/
|
|
103
|
-
export function getProjectConfigPath(projectDir) {
|
|
104
|
-
return join(projectDir, PROJECT_CONFIG_FILENAME);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Check whether a local project config (.atkrc.json) exists in the given directory.
|
|
108
|
-
*/
|
|
109
|
-
export function hasLocalConfig(projectDir) {
|
|
110
|
-
return existsSync(getProjectConfigPath(projectDir));
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Load merged config: user-level config only.
|
|
114
|
-
* Project config now only stores `{ tool }` and does not contribute to Config fields.
|
|
115
|
-
*/
|
|
116
|
-
export async function loadMergedConfig(projectDir) {
|
|
117
|
-
// projectDir is accepted for API compatibility but project config
|
|
118
|
-
// no longer overrides any Config fields (it only stores the tool choice).
|
|
119
|
-
void projectDir;
|
|
120
|
-
return loadConfig();
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Load the project-level config from .atkrc.json in the project directory.
|
|
124
|
-
* Returns null if no project config exists.
|
|
125
|
-
*/
|
|
126
|
-
export async function loadProjectConfig(projectDir) {
|
|
127
|
-
const configPath = getProjectConfigPath(projectDir);
|
|
128
|
-
if (!existsSync(configPath)) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
const raw = await readFile(configPath, 'utf-8');
|
|
132
|
-
return parseAndValidate(raw, ProjectConfigSchema, `Invalid project config at ${configPath}`);
|
|
133
|
-
}
|
|
134
161
|
/**
|
|
135
162
|
* Save the project-level config to .atkrc.json in the project directory.
|
|
163
|
+
* Always writes the new `{ tools: string[] }` format, never the legacy `{ tool }` format.
|
|
136
164
|
*/
|
|
137
165
|
export async function saveProjectConfig(projectDir, config) {
|
|
138
166
|
const configPath = getProjectConfigPath(projectDir);
|
|
@@ -140,12 +168,13 @@ export async function saveProjectConfig(projectDir, config) {
|
|
|
140
168
|
if (!existsSync(dir)) {
|
|
141
169
|
await mkdir(dir, { recursive: true });
|
|
142
170
|
}
|
|
143
|
-
//
|
|
144
|
-
const toSave = {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
171
|
+
// Explicitly write `tools` array format — never the legacy `tool` field
|
|
172
|
+
const toSave = {
|
|
173
|
+
tools: config.tools,
|
|
174
|
+
};
|
|
175
|
+
// Include frozenAssets only when non-empty to keep the file minimal
|
|
176
|
+
if (config.frozenAssets && config.frozenAssets.length > 0) {
|
|
177
|
+
toSave.frozenAssets = config.frozenAssets;
|
|
149
178
|
}
|
|
150
179
|
await writeFile(configPath, JSON.stringify(toSave, null, '\t') + '\n', 'utf-8');
|
|
151
180
|
}
|
|
@@ -157,9 +186,12 @@ export function setConfigValue(config, key, value) {
|
|
|
157
186
|
if (!(key in ConfigSchema.shape)) {
|
|
158
187
|
throw new Error(`Unknown config key: ${key}`);
|
|
159
188
|
}
|
|
160
|
-
//
|
|
189
|
+
// Schema-driven type coercion: detect number fields from the Zod schema
|
|
190
|
+
// and coerce string CLI input to numbers automatically.
|
|
161
191
|
let coerced = value;
|
|
162
|
-
|
|
192
|
+
const fieldSchema = ConfigSchema.shape[key];
|
|
193
|
+
const jsonSchema = z.toJSONSchema(fieldSchema);
|
|
194
|
+
if ('type' in jsonSchema && jsonSchema.type === 'number') {
|
|
163
195
|
const num = Number(value);
|
|
164
196
|
if (Number.isNaN(num)) {
|
|
165
197
|
throw new Error(`Invalid value for ${key}: expected a number`);
|
|
@@ -173,4 +205,20 @@ export function setConfigValue(config, key, value) {
|
|
|
173
205
|
}
|
|
174
206
|
return result.data;
|
|
175
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Thaw an asset by removing it from the project config's `frozenAssets` array.
|
|
210
|
+
* Removes all entries matching the given name, and optionally type and org.
|
|
211
|
+
*/
|
|
212
|
+
export async function thawAssetInConfig(projectDir, name, type, org) {
|
|
213
|
+
const config = await loadProjectConfig(projectDir);
|
|
214
|
+
if (!config) {
|
|
215
|
+
throw new Error(`No project config found in ${projectDir}. Run \`atk setup\` first.`);
|
|
216
|
+
}
|
|
217
|
+
const frozenAssets = config.frozenAssets ?? [];
|
|
218
|
+
const filtered = frozenAssets.filter((entry) => !(entry.name === name && (type === undefined || entry.type === type) && (org === undefined || entry.org === org)));
|
|
219
|
+
await saveProjectConfig(projectDir, {
|
|
220
|
+
...config,
|
|
221
|
+
frozenAssets: filtered,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
176
224
|
//# 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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/build/lib/detector.d.ts
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
adaptersLoaded: number;
|
|
4
|
-
directoryExists: boolean;
|
|
5
|
-
failures: AdapterLoadFailure[];
|
|
6
|
-
filesFound: number;
|
|
7
|
-
}
|
|
8
|
-
export interface AdapterLoadFailure {
|
|
9
|
-
filename: string;
|
|
10
|
-
reason: string;
|
|
11
|
-
}
|
|
1
|
+
import { type AdapterDiagnostics } from './adapter.js';
|
|
2
|
+
export type { AdapterDiagnostics, AdapterLoadFailure } from './adapter.js';
|
|
12
3
|
export interface DetectionResult {
|
|
13
4
|
confidence: 'high' | 'low' | 'medium';
|
|
14
5
|
displayName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAmD,MAAM,cAAc,CAAC;AAExG,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAG3F;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAyChF;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAGzE"}
|
package/build/lib/detector.js
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { dirname, join } from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import { safeParseJson } from './parse-json.js';
|
|
7
|
-
import { AdapterSchema } from './schemas/adapter.js';
|
|
8
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
-
/** Resolve tool-adapters directory relative to the package root (works both in dev and when installed via npm). */
|
|
10
|
-
const ADAPTERS_DIR = join(__dirname, '..', '..', 'tool-adapters');
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { loadAllAdapters, loadAllAdaptersWithDiagnostics } from './adapter.js';
|
|
11
4
|
/**
|
|
12
5
|
* Detect the primary tool in use. Returns the highest-confidence match,
|
|
13
6
|
* or null if no tool is detected.
|
|
@@ -67,59 +60,4 @@ export async function getAdapterDiagnostics() {
|
|
|
67
60
|
const { diagnostics } = await loadAllAdaptersWithDiagnostics();
|
|
68
61
|
return diagnostics;
|
|
69
62
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Load all adapter JSON files from the tool-adapters directory.
|
|
72
|
-
*/
|
|
73
|
-
async function loadAllAdapters() {
|
|
74
|
-
const { adapters } = await loadAllAdaptersWithDiagnostics();
|
|
75
|
-
return adapters;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Load all adapter JSON files from the tool-adapters directory,
|
|
79
|
-
* tracking diagnostic information about the loading process.
|
|
80
|
-
*/
|
|
81
|
-
async function loadAllAdaptersWithDiagnostics() {
|
|
82
|
-
const diagnostics = {
|
|
83
|
-
adaptersDir: ADAPTERS_DIR,
|
|
84
|
-
adaptersLoaded: 0,
|
|
85
|
-
directoryExists: false,
|
|
86
|
-
failures: [],
|
|
87
|
-
filesFound: 0,
|
|
88
|
-
};
|
|
89
|
-
if (!existsSync(ADAPTERS_DIR)) {
|
|
90
|
-
return { adapters: [], diagnostics };
|
|
91
|
-
}
|
|
92
|
-
diagnostics.directoryExists = true;
|
|
93
|
-
const entries = await readdir(ADAPTERS_DIR);
|
|
94
|
-
const adapters = [];
|
|
95
|
-
for (const entry of entries) {
|
|
96
|
-
// Skip schema files and non-JSON files
|
|
97
|
-
if (entry.startsWith('_') || !entry.endsWith('.json')) {
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
diagnostics.filesFound++;
|
|
101
|
-
const filePath = join(ADAPTERS_DIR, entry);
|
|
102
|
-
try {
|
|
103
|
-
const raw = await readFile(filePath, 'utf-8');
|
|
104
|
-
const result = safeParseJson(raw, AdapterSchema, `Schema validation failed`);
|
|
105
|
-
if (result.success) {
|
|
106
|
-
adapters.push(result.data);
|
|
107
|
-
diagnostics.adaptersLoaded++;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
diagnostics.failures.push({
|
|
111
|
-
filename: entry,
|
|
112
|
-
reason: result.error,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
diagnostics.failures.push({
|
|
118
|
-
filename: entry,
|
|
119
|
-
reason: err instanceof Error ? err.message : 'Unknown parse error',
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return { adapters, diagnostics };
|
|
124
|
-
}
|
|
125
63
|
//# sourceMappingURL=detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAA2B,eAAe,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAWxG;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YAErC,IAAI,UAAqC,CAAC;YAC1C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,UAAU,GAAG,MAAM,CAAC;YACtB,CAAC;iBAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,UAAU,GAAG,QAAQ,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,iBAAiB,EAAE,OAAO;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAElE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,8BAA8B,EAAE,CAAC;IAC/D,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { DiagnosticCheck } from '../components/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check whether the given Node.js version string meets the project requirements.
|
|
4
|
+
*
|
|
5
|
+
* @param version - a Node.js-style version string such as `process.version` (e.g. "v24.5.0")
|
|
6
|
+
* @returns a `DiagnosticCheck` with status pass / warn / fail
|
|
7
|
+
*/
|
|
8
|
+
export declare function checkNodeVersion(version: string): DiagnosticCheck;
|
|
2
9
|
/**
|
|
3
10
|
* Run all environment diagnostic checks and return the results.
|
|
4
11
|
* Extracted from the `doctor` command so it can be tested independently.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,eAAe,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAqBjE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,eAAe,EAAE,CAAC,CA8L5B"}
|