@detergent-software/atk 3.0.0-dev.13 → 3.0.0-dev.15

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.
Files changed (38) hide show
  1. package/build/commands/diff.d.ts.map +1 -1
  2. package/build/commands/diff.js +4 -116
  3. package/build/commands/diff.js.map +1 -1
  4. package/build/commands/freeze.d.ts +1 -2
  5. package/build/commands/freeze.d.ts.map +1 -1
  6. package/build/commands/freeze.js +18 -37
  7. package/build/commands/freeze.js.map +1 -1
  8. package/build/commands/pin.d.ts.map +1 -1
  9. package/build/commands/pin.js +24 -32
  10. package/build/commands/pin.js.map +1 -1
  11. package/build/commands/thaw.d.ts +1 -2
  12. package/build/commands/thaw.d.ts.map +1 -1
  13. package/build/commands/thaw.js +23 -37
  14. package/build/commands/thaw.js.map +1 -1
  15. package/build/commands/unpin.d.ts.map +1 -1
  16. package/build/commands/unpin.js +19 -27
  17. package/build/commands/unpin.js.map +1 -1
  18. package/build/components/DiffView.d.ts +0 -2
  19. package/build/components/DiffView.d.ts.map +1 -1
  20. package/build/components/DiffView.js +11 -5
  21. package/build/components/DiffView.js.map +1 -1
  22. package/build/lib/diagnostics.d.ts +7 -0
  23. package/build/lib/diagnostics.d.ts.map +1 -1
  24. package/build/lib/diagnostics.js +54 -34
  25. package/build/lib/diagnostics.js.map +1 -1
  26. package/build/lib/diff-command.d.ts +40 -0
  27. package/build/lib/diff-command.d.ts.map +1 -0
  28. package/build/lib/diff-command.js +145 -0
  29. package/build/lib/diff-command.js.map +1 -0
  30. package/build/lib/diff.d.ts +7 -0
  31. package/build/lib/diff.d.ts.map +1 -1
  32. package/build/lib/diff.js +15 -10
  33. package/build/lib/diff.js.map +1 -1
  34. package/build/lib/lockfile.d.ts +13 -1
  35. package/build/lib/lockfile.d.ts.map +1 -1
  36. package/build/lib/lockfile.js +28 -1
  37. package/build/lib/lockfile.js.map +1 -1
  38. package/package.json +1 -1
@@ -7,8 +7,6 @@ export interface FileDiffEntry {
7
7
  status: 'added' | 'missing-local' | 'modified' | 'removed' | 'unchanged';
8
8
  }
9
9
  interface DiffViewProps {
10
- /** Number of context lines to show around changes in unified diff output */
11
- contextLines?: number;
12
10
  /** Array of file-level diffs */
13
11
  diffs: FileDiffEntry[];
14
12
  /** Installed version string */
@@ -1 +1 @@
1
- {"version":3,"file":"DiffView.d.ts","sourceRoot":"","sources":["../../src/components/DiffView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;CAC1E;AAED,UAAU,aAAa;IACrB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,aAAa,2CAyD5G"}
1
+ {"version":3,"file":"DiffView.d.ts","sourceRoot":"","sources":["../../src/components/DiffView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;CAC1E;AAED,UAAU,aAAa;IACrB,gCAAgC;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,aAAa,2CA+B5G"}
@@ -8,11 +8,17 @@ import { FileStatusIcon } from './StatusBadge.js';
8
8
  */
9
9
  export default function DiffView({ diffs, installedVersion, latestVersion, name, sameVersion }) {
10
10
  const hasChanges = diffs.some((d) => d.status !== 'unchanged');
11
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { bold: true, children: ["Diff for ", _jsx(Text, { color: 'cyan', children: name })] }), _jsxs(Text, { children: ["Installed: ", _jsxs(Text, { color: sameVersion ? 'green' : 'red', children: ["v", installedVersion] }), ' → ', "Latest: ", _jsxs(Text, { color: 'green', children: ["v", latestVersion] }), sameVersion && _jsx(Text, { dimColor: true, children: " (same version)" })] }), _jsx(Text, { children: " " }), !hasChanges ? (_jsx(Text, { color: 'green', children: "\u2713 No differences found. Local files match the registry." })) : (_jsxs(_Fragment, { children: [diffs.map((diff, index) => {
12
- const hasDiffLines = diff.diffLines && diff.diffLines.length > 0;
13
- const isLastEntry = index === diffs.length - 1;
14
- return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [' ', _jsx(FileStatusIcon, { status: diff.status }), " ", diff.fileName, diff.status === 'modified' && (_jsxs(Text, { dimColor: true, children: [' ', "(", diff.localLines, " lines local, ", diff.remoteLines, " lines remote)"] })), diff.status === 'added' && _jsx(Text, { dimColor: true, children: " (new in registry)" }), diff.status === 'removed' && _jsx(Text, { dimColor: true, children: " (removed from registry)" }), diff.status === 'missing-local' && _jsx(Text, { dimColor: true, children: " (file missing locally)" })] }), hasDiffLines && (_jsx(Box, { flexDirection: 'column', paddingLeft: 4, children: diff.diffLines.map((line, lineIndex) => (_jsx(DiffLineView, { line: line }, lineIndex))) })), hasDiffLines && !isLastEntry && _jsx(Text, { children: " " })] }, diff.fileName));
15
- }), _jsx(Text, { children: " " }), _jsxs(Text, { dimColor: true, children: ["Run ", _jsxs(Text, { bold: true, children: ["atk update ", name] }), " to update to the latest version."] })] }))] }));
11
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { bold: true, children: ["Diff for ", _jsx(Text, { color: 'cyan', children: name })] }), _jsxs(Text, { children: ["Installed: ", _jsxs(Text, { color: sameVersion ? 'green' : 'red', children: ["v", installedVersion] }), ' → ', "Latest: ", _jsxs(Text, { color: 'green', children: ["v", latestVersion] }), sameVersion && _jsx(Text, { dimColor: true, children: " (same version)" })] }), _jsx(Text, { dimColor: true, children: '- registry + local' }), _jsx(Text, { children: " " }), !hasChanges ? (_jsx(Text, { color: 'green', children: "\u2713 No differences found. Local files match the registry." })) : (_jsxs(_Fragment, { children: [diffs.map((diff, index) => (_jsx(DiffFileEntry, { diff: diff, isLastEntry: index === diffs.length - 1 }, diff.fileName))), _jsx(Text, { children: " " }), _jsxs(Text, { dimColor: true, children: ["Run ", _jsxs(Text, { bold: true, children: ["atk update ", name] }), " to update to the latest version."] })] }))] }));
12
+ }
13
+ /**
14
+ * Renders a single file entry within the diff view, including its status
15
+ * icon, metadata, and inline diff lines when available.
16
+ */
17
+ function DiffFileEntry({ diff, isLastEntry }) {
18
+ const hasDiffLines = diff.diffLines && diff.diffLines.length > 0;
19
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: [' ', _jsx(FileStatusIcon, { status: diff.status }), " ", diff.fileName, diff.status === 'modified' && (_jsxs(Text, { dimColor: true, children: [' ', "(", diff.localLines, " lines local, ", diff.remoteLines, " lines remote)"] })), diff.status === 'added' && _jsx(Text, { dimColor: true, children: " (new in registry)" }), diff.status === 'removed' && (_jsx(Text, { dimColor: true, children: hasDiffLines ? ' (removed from registry)' : ' (file already deleted locally)' })), diff.status === 'missing-local' && _jsx(Text, { dimColor: true, children: " (file missing locally)" })] }), hasDiffLines && (_jsx(Box, { flexDirection: 'column', paddingLeft: 4, children: diff.diffLines.map((line, lineIndex) => (
20
+ // Index key is intentional: diff lines are a static, non-reorderable list
21
+ _jsx(DiffLineView, { line: line }, lineIndex))) })), hasDiffLines && !isLastEntry && _jsx(Text, { children: " " })] }));
16
22
  }
17
23
  /**
18
24
  * Renders a single diff line with appropriate color and prefix based on its type.
@@ -1 +1 @@
1
- {"version":3,"file":"DiffView.js","sourceRoot":"","sources":["../../src/components/DiffView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiffView.js","sourceRoot":"","sources":["../../src/components/DiffView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAIhC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAuBlD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAiB;IAC3G,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAE/D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,IAAI,gCACC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,IAAI,GAAQ,IACpC,EACP,MAAC,IAAI,8BACQ,MAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,kBAAI,gBAAgB,IAAQ,EAChF,KAAK,cACE,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,kBAAG,aAAa,IAAQ,EAClD,WAAW,IAAI,KAAC,IAAI,IAAC,QAAQ,sCAAuB,IAChD,EACP,KAAC,IAAI,IAAC,QAAQ,kBAAE,qBAAqB,GAAQ,EAC7C,KAAC,IAAI,oBAAS,EACb,CAAC,UAAU,CAAC,CAAC,CAAC,CACb,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,6EAA+D,CACnF,CAAC,CAAC,CAAC,CACF,8BACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAO,IAAI,CAAC,QAAQ,CAAI,CAC3F,CAAC,EACF,KAAC,IAAI,oBAAS,EACd,MAAC,IAAI,IAAC,QAAQ,2BACR,MAAC,IAAI,IAAC,IAAI,kCAAa,IAAI,IAAQ,yCAClC,IACN,CACJ,IACG,CACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAiD;IACzF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,eACF,IAAI,EACL,KAAC,cAAc,IAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAI,OAAE,IAAI,CAAC,QAAQ,EACrD,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAC7B,MAAC,IAAI,IAAC,QAAQ,mBACX,GAAG,OACF,IAAI,CAAC,UAAU,oBAAgB,IAAI,CAAC,WAAW,sBAC5C,CACR,EACA,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,yCAA0B,EACnE,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAC5B,KAAC,IAAI,IAAC,QAAQ,kBACX,YAAY,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,iCAAiC,GACzE,CACR,EACA,IAAI,CAAC,MAAM,KAAK,eAAe,IAAI,KAAC,IAAI,IAAC,QAAQ,8CAA+B,IAC5E,EACN,YAAY,IAAI,CACf,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACvC,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;gBACxC,0EAA0E;gBAC1E,KAAC,YAAY,IAAiB,IAAI,EAAE,IAAI,IAArB,SAAS,CAAgB,CAC7C,CAAC,GACE,CACP,EACA,YAAY,IAAI,CAAC,WAAW,IAAI,KAAC,IAAI,oBAAS,IAC3C,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,EAAE,IAAI,EAAsB;IAChD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,IAAI,GAAG,IAAI,CAAC,OAAO,GAAQ,CAAC;QAC1D,KAAK,SAAS;YACZ,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,GAAG,IAAI,CAAC,OAAO,GAAQ,CAAC;QACrD,KAAK,UAAU;YACb,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,IAAI,GAAG,IAAI,CAAC,OAAO,GAAQ,CAAC;QACxD,KAAK,aAAa;YAChB,OAAO,CACL,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YACpB,IAAI,CAAC,OAAO,GACR,CACR,CAAC;IACN,CAAC;AACH,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,CAsM5B"}
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"}
@@ -1,44 +1,52 @@
1
1
  import { getGitHubToken, isGhCliAvailable, validateToken } from './auth.js';
2
2
  import { loadConfig, loadProjectConfig } from './config.js';
3
3
  import { detectTools, getAdapterDiagnostics } from './detector.js';
4
- import { readLockfile } from './lockfile.js';
4
+ import { lockfileExists, readLockfile } from './lockfile.js';
5
5
  import { findProjectRoot } from './paths.js';
6
6
  import { fetchRegistry } from './registry.js';
7
7
  /**
8
- * Run all environment diagnostic checks and return the results.
9
- * Extracted from the `doctor` command so it can be tested independently.
8
+ * Check whether the given Node.js version string meets the project requirements.
10
9
  *
11
- * @param progress - callback to report progress messages
12
- * @param projectRootOverride - optional explicit project root; when omitted, discovered via `findProjectRoot()`
10
+ * @param version - a Node.js-style version string such as `process.version` (e.g. "v24.5.0")
11
+ * @returns a `DiagnosticCheck` with status pass / warn / fail
13
12
  */
14
- export async function runDiagnostics(progress, projectRootOverride) {
15
- const projectDir = findProjectRoot(projectRootOverride);
16
- const checks = [];
17
- // Check Node.js version
18
- progress('Checking Node.js...');
19
- const nodeVersion = process.version;
20
- const nodeMajor = parseInt(nodeVersion.slice(1), 10);
13
+ export function checkNodeVersion(version) {
14
+ const nodeMajor = parseInt(version.slice(1), 10);
21
15
  if (nodeMajor >= 24) {
22
- checks.push({
23
- message: `${nodeVersion} (recommended)`,
16
+ return {
17
+ message: `${version} (recommended)`,
24
18
  name: 'Node.js',
25
19
  status: 'pass',
26
- });
20
+ };
27
21
  }
28
22
  else if (nodeMajor >= 20) {
29
- checks.push({
30
- message: `${nodeVersion} (Node 24+ recommended)`,
23
+ return {
24
+ message: `${version} (Node 24+ recommended)`,
31
25
  name: 'Node.js',
32
26
  status: 'warn',
33
- });
27
+ };
34
28
  }
35
29
  else {
36
- checks.push({
37
- message: `${nodeVersion} (Node 20+ required, 24+ recommended)`,
30
+ return {
31
+ message: `${version} (Node 20+ required, 24+ recommended)`,
38
32
  name: 'Node.js',
39
33
  status: 'fail',
40
- });
34
+ };
41
35
  }
36
+ }
37
+ /**
38
+ * Run all environment diagnostic checks and return the results.
39
+ * Extracted from the `doctor` command so it can be tested independently.
40
+ *
41
+ * @param progress - callback to report progress messages
42
+ * @param projectRootOverride - optional explicit project root; when omitted, discovered via `findProjectRoot()`
43
+ */
44
+ export async function runDiagnostics(progress, projectRootOverride) {
45
+ const projectDir = findProjectRoot(projectRootOverride);
46
+ const checks = [];
47
+ // Check Node.js version
48
+ progress('Checking Node.js...');
49
+ checks.push(checkNodeVersion(process.version));
42
50
  // Check gh CLI
43
51
  progress('Checking GitHub CLI...');
44
52
  const ghAvailable = await isGhCliAvailable();
@@ -170,7 +178,9 @@ export async function runDiagnostics(progress, projectRootOverride) {
170
178
  const projectConfig = await loadProjectConfig(projectDir);
171
179
  if (projectConfig) {
172
180
  checks.push({
173
- message: `Loaded (tools: ${projectConfig.tools.join(', ')})`,
181
+ message: projectConfig.tools.length === 0
182
+ ? 'Loaded (no tools configured)'
183
+ : `Loaded (tools: ${projectConfig.tools.join(', ')})`,
174
184
  name: 'Project config',
175
185
  status: 'pass',
176
186
  });
@@ -194,23 +204,33 @@ export async function runDiagnostics(progress, projectRootOverride) {
194
204
  }
195
205
  // Check lockfile
196
206
  progress('Checking lockfile...');
197
- try {
198
- const lockfile = await readLockfile(projectDir);
199
- const assetCount = (lockfile.assets ?? []).length;
200
- checks.push({
201
- message: `Found .atk-lock.json (${assetCount} asset${assetCount === 1 ? '' : 's'})`,
202
- name: 'Lockfile',
203
- status: 'pass',
204
- });
205
- }
206
- catch {
207
+ if (!lockfileExists(projectDir)) {
207
208
  checks.push({
208
- detail: 'Run `atk setup` to initialize the project.',
209
- message: 'No lockfile found or unreadable',
209
+ detail: 'Run `atk setup` to initialize',
210
+ message: 'No lockfile found',
210
211
  name: 'Lockfile',
211
212
  status: 'warn',
212
213
  });
213
214
  }
215
+ else {
216
+ try {
217
+ const lockfile = await readLockfile(projectDir);
218
+ const assetCount = (lockfile.assets ?? []).length;
219
+ checks.push({
220
+ message: `Found .atk-lock.json (${assetCount} asset${assetCount === 1 ? '' : 's'})`,
221
+ name: 'Lockfile',
222
+ status: 'pass',
223
+ });
224
+ }
225
+ catch (err) {
226
+ checks.push({
227
+ detail: 'Run `atk setup` to re-initialize',
228
+ message: err instanceof Error ? err.message : 'Failed to read lockfile',
229
+ name: 'Lockfile',
230
+ status: 'warn',
231
+ });
232
+ }
233
+ }
214
234
  return checks;
215
235
  }
216
236
  //# sourceMappingURL=diagnostics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { FileDiffEntry } from '../components/index.js';
2
+ import type { InstalledAsset, InstalledFile } from './schemas/lockfile.js';
3
+ import type { RegistryAsset } from './schemas/registry.js';
4
+ export type DiffOutcome = {
5
+ diffs: FileDiffEntry[];
6
+ installed: InstalledAsset;
7
+ latestVersion: string;
8
+ name: string;
9
+ outcome: 'results';
10
+ registryAsset: RegistryAsset;
11
+ sameVersion: boolean;
12
+ } | {
13
+ name: string;
14
+ outcome: 'not-in-registry';
15
+ } | {
16
+ name: string;
17
+ outcome: 'not-installed';
18
+ };
19
+ /** Describes a file to fetch for diff comparison, with its installed and remote paths. */
20
+ export interface FileFetchEntry {
21
+ file: InstalledFile;
22
+ installedPath: string;
23
+ remotePath: string;
24
+ }
25
+ /**
26
+ * Core logic for the `atk diff` command. Computes the diff between a locally
27
+ * installed asset and the latest version in the registry.
28
+ *
29
+ * @param name - Asset name (without org prefix)
30
+ * @param org - Org from the --org CLI flag or inline @org/name syntax (already merged)
31
+ * @param tool - Tool override from --tool CLI flag
32
+ * @param context - Number of context lines for unified diff output
33
+ * @param refresh - Whether to bypass the registry cache
34
+ * @param projectRoot - Optional project root override
35
+ * @param cliOrg - Org from the --org CLI flag
36
+ * @param inlineOrg - Org parsed from @org/name syntax
37
+ * @param progress - Callback to report progress messages to the UI
38
+ */
39
+ export declare function computeDiffOutcome(name: string, org: string | undefined, tool: string | undefined, context: number, refresh: boolean, projectRoot: string | undefined, cliOrg: string | undefined, inlineOrg: string | undefined, progress: (message: string) => void): Promise<DiffOutcome>;
40
+ //# sourceMappingURL=diff-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-command.d.ts","sourceRoot":"","sources":["../../src/lib/diff-command.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAa3D,MAAM,MAAM,WAAW,GACnB;IACE,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,EAAE,cAAc,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAE/C,0FAA0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,OAAO,CAAC,WAAW,CAAC,CAqJtB"}
@@ -0,0 +1,145 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { resolveInstalledPaths } from './adapter.js';
5
+ import { getGitHubToken } from './auth.js';
6
+ import { loadConfig } from './config.js';
7
+ import { computeAddedFileDiff, computeRemovedFileDiff, computeUnifiedDiff } from './diff.js';
8
+ import { fetchFileContent, getEffectiveBranch, listAssetDirectoryFiles } from './github.js';
9
+ import { findInstalledAsset, readLockfile } from './lockfile.js';
10
+ import { resolveActiveOrg } from './org.js';
11
+ import { findProjectRoot } from './paths.js';
12
+ import { fetchRegistry, findAsset } from './registry.js';
13
+ import { resolveTool } from './tool-resolver.js';
14
+ /**
15
+ * Core logic for the `atk diff` command. Computes the diff between a locally
16
+ * installed asset and the latest version in the registry.
17
+ *
18
+ * @param name - Asset name (without org prefix)
19
+ * @param org - Org from the --org CLI flag or inline @org/name syntax (already merged)
20
+ * @param tool - Tool override from --tool CLI flag
21
+ * @param context - Number of context lines for unified diff output
22
+ * @param refresh - Whether to bypass the registry cache
23
+ * @param projectRoot - Optional project root override
24
+ * @param cliOrg - Org from the --org CLI flag
25
+ * @param inlineOrg - Org parsed from @org/name syntax
26
+ * @param progress - Callback to report progress messages to the UI
27
+ */
28
+ export async function computeDiffOutcome(name, org, tool, context, refresh, projectRoot, cliOrg, inlineOrg, progress) {
29
+ const projectDir = findProjectRoot(projectRoot);
30
+ progress('Loading configuration...');
31
+ const config = await loadConfig();
32
+ const { adapter } = await resolveTool(tool);
33
+ progress('Reading lockfile...');
34
+ const lockfile = await readLockfile(projectDir);
35
+ const resolvedOrg = resolveActiveOrg(inlineOrg ?? cliOrg, lockfile.org, config.org);
36
+ const installed = findInstalledAsset(lockfile, name);
37
+ if (!installed) {
38
+ return { name, outcome: 'not-installed' };
39
+ }
40
+ progress('Fetching registry...');
41
+ const registry = await fetchRegistry({ force: refresh });
42
+ const foundAsset = findAsset(registry, name, installed.type, undefined, resolvedOrg);
43
+ if (!foundAsset) {
44
+ return { name, outcome: 'not-in-registry' };
45
+ }
46
+ const { asset: registryAsset, version: latestVersion } = foundAsset;
47
+ progress('Fetching latest version...');
48
+ const token = await getGitHubToken();
49
+ const effectiveBranch = getEffectiveBranch(config.registryBranch);
50
+ let remoteFilesList;
51
+ try {
52
+ remoteFilesList = await listAssetDirectoryFiles(token, registryAsset, latestVersion, effectiveBranch);
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Failed to list asset directory files for "${name}". ` +
56
+ `Ensure your GitHub authentication is valid (run \`gh auth login\`). ` +
57
+ `Original error: ${error instanceof Error ? error.message : String(error)}`);
58
+ }
59
+ // Convert remote files array to a Map for O(1) lookups by name
60
+ const remoteFiles = new Map(remoteFilesList.map((f) => [f.name, f]));
61
+ // Resolve installed paths via the adapter
62
+ const resolved = resolveInstalledPaths(installed, adapter, projectDir);
63
+ const installedPathMap = new Map(resolved.files.map((f) => [f.sourcePath, f.installedPath]));
64
+ // Identify which installed files have a remote counterpart and exist locally
65
+ const filesToFetch = [];
66
+ const diffs = [];
67
+ for (const file of installed.files) {
68
+ const installedPath = installedPathMap.get(file.sourcePath);
69
+ const remoteFile = remoteFiles.get(file.sourcePath);
70
+ if (!remoteFile) {
71
+ const absoluteInstalledPath = installedPath ? join(projectDir, installedPath) : undefined;
72
+ if (absoluteInstalledPath && existsSync(absoluteInstalledPath)) {
73
+ const localContent = await readFile(absoluteInstalledPath, 'utf-8');
74
+ diffs.push({
75
+ diffLines: computeRemovedFileDiff(localContent),
76
+ fileName: file.sourcePath,
77
+ status: 'removed',
78
+ });
79
+ }
80
+ else {
81
+ diffs.push({ fileName: file.sourcePath, status: 'removed' });
82
+ }
83
+ continue;
84
+ }
85
+ if (!installedPath) {
86
+ diffs.push({ fileName: file.sourcePath, status: 'missing-local' });
87
+ continue;
88
+ }
89
+ const absoluteInstalledPath = join(projectDir, installedPath);
90
+ if (!existsSync(absoluteInstalledPath)) {
91
+ diffs.push({ fileName: file.sourcePath, status: 'missing-local' });
92
+ continue;
93
+ }
94
+ filesToFetch.push({ file, installedPath, remotePath: remoteFile.path });
95
+ }
96
+ // Fetch all remote file contents in parallel
97
+ const remoteContents = await Promise.all(filesToFetch.map(async ({ remotePath }) => fetchFileContent(token, remotePath, effectiveBranch)));
98
+ // Read all local file contents in parallel
99
+ const localContents = await Promise.all(filesToFetch.map(async ({ installedPath }) => readFile(join(projectDir, installedPath), 'utf-8')));
100
+ // Build diffs from fetched content
101
+ for (let i = 0; i < filesToFetch.length; i++) {
102
+ const { file } = filesToFetch[i];
103
+ const remoteContent = remoteContents[i];
104
+ const localContent = localContents[i];
105
+ if (localContent === remoteContent) {
106
+ diffs.push({
107
+ fileName: file.sourcePath,
108
+ localLines: localContent.split('\n').length,
109
+ remoteLines: remoteContent.split('\n').length,
110
+ status: 'unchanged',
111
+ });
112
+ }
113
+ else {
114
+ // Diff argument order: remote (old) → local (new).
115
+ // This means '+' lines represent local content and '-' lines represent registry content.
116
+ diffs.push({
117
+ diffLines: computeUnifiedDiff(remoteContent, localContent, context),
118
+ fileName: file.sourcePath,
119
+ localLines: localContent.split('\n').length,
120
+ remoteLines: remoteContent.split('\n').length,
121
+ status: 'modified',
122
+ });
123
+ }
124
+ }
125
+ // Collect added files (present in registry but not in installed files), then batch-fetch in parallel
126
+ const installedSourcePaths = new Set(installed.files.map((f) => f.sourcePath));
127
+ const addedRemoteFiles = [...remoteFiles.values()].filter((rf) => !installedSourcePaths.has(rf.name));
128
+ const addedContents = await Promise.all(addedRemoteFiles.map(async (rf) => fetchFileContent(token, rf.path, effectiveBranch)));
129
+ for (let i = 0; i < addedRemoteFiles.length; i++) {
130
+ const remoteFile = addedRemoteFiles[i];
131
+ const remoteContent = addedContents[i];
132
+ diffs.push({ diffLines: computeAddedFileDiff(remoteContent), fileName: remoteFile.name, status: 'added' });
133
+ }
134
+ const sameVersion = installed.version === latestVersion;
135
+ return {
136
+ diffs,
137
+ installed,
138
+ latestVersion,
139
+ name,
140
+ outcome: 'results',
141
+ registryAsset,
142
+ sameVersion,
143
+ };
144
+ }
145
+ //# sourceMappingURL=diff-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-command.js","sourceRoot":"","sources":["../../src/lib/diff-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsBjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,GAAuB,EACvB,IAAwB,EACxB,OAAe,EACf,OAAgB,EAChB,WAA+B,EAC/B,MAA0B,EAC1B,SAA6B,EAC7B,QAAmC;IAEnC,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAEhD,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAE5C,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,IAAI,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAErF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC;IAEpE,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAElE,IAAI,eAAkC,CAAC;IAEvC,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,uBAAuB,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACxG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,KAAK;YACpD,sEAAsE;YACtE,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,MAAM,WAAW,GAAG,IAAI,GAAG,CAA0B,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9F,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAE7F,6EAA6E;IAC7E,MAAM,YAAY,GAAqB,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,qBAAqB,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1F,IAAI,qBAAqB,IAAI,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC/D,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;gBACpE,KAAK,CAAC,IAAI,CAAC;oBACT,SAAS,EAAE,sBAAsB,CAAC,YAAY,CAAC;oBAC/C,QAAQ,EAAE,IAAI,CAAC,UAAU;oBACzB,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE9D,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,6CAA6C;IAC7C,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CACjG,CAAC;IAEF,2CAA2C;IAC3C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAClG,CAAC;IAEF,mCAAmC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;QACzC,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;QAEvC,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,IAAI,CAAC,UAAU;gBACzB,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3C,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC7C,MAAM,EAAE,WAAW;aACpB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,mDAAmD;YACnD,yFAAyF;YACzF,KAAK,CAAC,IAAI,CAAC;gBACT,SAAS,EAAE,kBAAkB,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC;gBACnE,QAAQ,EAAE,IAAI,CAAC,UAAU;gBACzB,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3C,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC7C,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,qGAAqG;IACrG,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/E,MAAM,gBAAgB,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtG,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CACtF,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAE,CAAC;QACxC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,oBAAoB,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC;IACxD,OAAO;QACL,KAAK;QACL,SAAS;QACT,aAAa;QACb,IAAI;QACJ,OAAO,EAAE,SAAS;QAClB,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -31,4 +31,11 @@ export declare function computeRemovedFileDiff(content: string): DiffLine[];
31
31
  * @param contextLines - Number of context lines surrounding each change (default: 3).
32
32
  */
33
33
  export declare function computeUnifiedDiff(oldContent: string, newContent: string, contextLines?: number): DiffLine[];
34
+ /**
35
+ * Split content into lines and strip the trailing empty string
36
+ * that results from a final newline character.
37
+ *
38
+ * @param content - The raw string content to split.
39
+ */
40
+ export declare function splitContentLines(content: string): string[];
34
41
  //# sourceMappingURL=diff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAE/E;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmBhE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmBlE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,QAAQ,EAAE,CA4B/G"}
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAE/E;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAehE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAelE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,QAAQ,EAAE,CA4B/G;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAM3D"}
package/build/lib/diff.js CHANGED
@@ -5,11 +5,7 @@ import { structuredPatch } from 'diff';
5
5
  * @param content - The full content of the added file.
6
6
  */
7
7
  export function computeAddedFileDiff(content) {
8
- const contentLines = content.split('\n');
9
- // Remove trailing empty string from a final newline
10
- if (contentLines.length > 0 && contentLines[contentLines.length - 1] === '') {
11
- contentLines.pop();
12
- }
8
+ const contentLines = splitContentLines(content);
13
9
  const lines = [];
14
10
  lines.push({
15
11
  content: `@@ -0,0 +1,${contentLines.length} @@`,
@@ -26,11 +22,7 @@ export function computeAddedFileDiff(content) {
26
22
  * @param content - The full content of the removed file.
27
23
  */
28
24
  export function computeRemovedFileDiff(content) {
29
- const contentLines = content.split('\n');
30
- // Remove trailing empty string from a final newline
31
- if (contentLines.length > 0 && contentLines[contentLines.length - 1] === '') {
32
- contentLines.pop();
33
- }
25
+ const contentLines = splitContentLines(content);
34
26
  const lines = [];
35
27
  lines.push({
36
28
  content: `@@ -1,${contentLines.length} +0,0 @@`,
@@ -75,4 +67,17 @@ export function computeUnifiedDiff(oldContent, newContent, contextLines = 3) {
75
67
  }
76
68
  return lines;
77
69
  }
70
+ /**
71
+ * Split content into lines and strip the trailing empty string
72
+ * that results from a final newline character.
73
+ *
74
+ * @param content - The raw string content to split.
75
+ */
76
+ export function splitContentLines(content) {
77
+ const lines = content.split('\n');
78
+ if (lines.length > 0 && lines[lines.length - 1] === '') {
79
+ lines.pop();
80
+ }
81
+ return lines;
82
+ }
78
83
  //# sourceMappingURL=diff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/lib/diff.ts"],"names":[],"mappings":"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"}
@@ -133,6 +133,10 @@ export declare function isInstalled(lockfile: Lockfile, name: string, type?: Ass
133
133
  * This is a read-only query that never throws.
134
134
  */
135
135
  export declare function isPinned(lockfile: Lockfile, name: string, type?: AssetType, org?: string): boolean;
136
+ /**
137
+ * Check whether a lockfile exists on disk in the given project directory.
138
+ */
139
+ export declare function lockfileExists(projectDir: string): boolean;
136
140
  /**
137
141
  * Pin an installed asset to a specific version.
138
142
  * Only direct installs can be pinned; pinning a dependency throws an error.
@@ -157,7 +161,7 @@ export declare function removeAssetFromLockfile(lockfile: Lockfile, name: string
157
161
  /**
158
162
  * Thaw a frozen asset, allowing sync and update to overwrite it again.
159
163
  *
160
- * @throws {LockfileError} if the asset is not found
164
+ * @throws {LockfileError} if the asset is not found or is not a direct install
161
165
  */
162
166
  export declare function thawAsset(lockfile: Lockfile, name: string, type?: AssetType, org?: string): Lockfile;
163
167
  /**
@@ -182,6 +186,14 @@ export declare function unpinAssetVersion(lockfile: Lockfile, name: string, type
182
186
  * Used when a user explicitly installs something that was previously auto-installed.
183
187
  */
184
188
  export declare function upgradeToDirectInstall(lockfile: Lockfile, name: string, type?: AssetType, org?: string): Lockfile;
189
+ /**
190
+ * Execute `fn` while holding the advisory lockfile lock, mapping
191
+ * {@link LockfileLockedError} to a user-friendly error message.
192
+ *
193
+ * This is a convenience wrapper around {@link withLockfileLock} that
194
+ * eliminates the need for each command to duplicate the same catch block.
195
+ */
196
+ export declare function withLockfileErrorHandling<T>(projectDir: string, fn: () => Promise<T>): Promise<T>;
185
197
  /**
186
198
  * Execute `fn` while holding the advisory lockfile lock.
187
199
  * The lock is always released in a `finally` block, even if `fn` throws.
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"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"}