@detergent-software/atk 9.1.0 → 9.2.0-dev.10

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 (305) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/README.md +37 -17
  3. package/build/command-manifest.json +89 -7
  4. package/build/commands/_app.d.ts +2 -1
  5. package/build/commands/_app.d.ts.map +1 -1
  6. package/build/commands/audit.d.ts +1 -1
  7. package/build/commands/audit.d.ts.map +1 -1
  8. package/build/commands/browse.d.ts +1 -1
  9. package/build/commands/browse.d.ts.map +1 -1
  10. package/build/commands/browse.js +119 -16
  11. package/build/commands/browse.js.map +1 -1
  12. package/build/commands/cache.d.ts +1 -1
  13. package/build/commands/cache.d.ts.map +1 -1
  14. package/build/commands/checkout.d.ts +1 -1
  15. package/build/commands/checkout.d.ts.map +1 -1
  16. package/build/commands/config.d.ts +1 -1
  17. package/build/commands/config.d.ts.map +1 -1
  18. package/build/commands/deprecate.d.ts +1 -1
  19. package/build/commands/deprecate.d.ts.map +1 -1
  20. package/build/commands/diff.d.ts +4 -2
  21. package/build/commands/diff.d.ts.map +1 -1
  22. package/build/commands/diff.js +86 -13
  23. package/build/commands/diff.js.map +1 -1
  24. package/build/commands/doctor.d.ts +1 -1
  25. package/build/commands/doctor.d.ts.map +1 -1
  26. package/build/commands/drift.d.ts +2 -1
  27. package/build/commands/drift.d.ts.map +1 -1
  28. package/build/commands/drift.js +8 -3
  29. package/build/commands/drift.js.map +1 -1
  30. package/build/commands/freeze.d.ts +2 -2
  31. package/build/commands/freeze.d.ts.map +1 -1
  32. package/build/commands/freeze.js +45 -22
  33. package/build/commands/freeze.js.map +1 -1
  34. package/build/commands/index.d.ts +1 -1
  35. package/build/commands/index.d.ts.map +1 -1
  36. package/build/commands/info.d.ts +1 -1
  37. package/build/commands/info.d.ts.map +1 -1
  38. package/build/commands/info.js +24 -4
  39. package/build/commands/info.js.map +1 -1
  40. package/build/commands/init.d.ts +1 -1
  41. package/build/commands/init.d.ts.map +1 -1
  42. package/build/commands/install.d.ts +2 -2
  43. package/build/commands/install.d.ts.map +1 -1
  44. package/build/commands/install.js +284 -66
  45. package/build/commands/install.js.map +1 -1
  46. package/build/commands/list.d.ts +2 -1
  47. package/build/commands/list.d.ts.map +1 -1
  48. package/build/commands/list.js +64 -6
  49. package/build/commands/list.js.map +1 -1
  50. package/build/commands/login.d.ts +1 -1
  51. package/build/commands/login.d.ts.map +1 -1
  52. package/build/commands/logout.d.ts +1 -1
  53. package/build/commands/logout.d.ts.map +1 -1
  54. package/build/commands/move.d.ts +1 -1
  55. package/build/commands/move.d.ts.map +1 -1
  56. package/build/commands/outdated.d.ts +2 -1
  57. package/build/commands/outdated.d.ts.map +1 -1
  58. package/build/commands/outdated.js +11 -1
  59. package/build/commands/outdated.js.map +1 -1
  60. package/build/commands/pin.d.ts +2 -2
  61. package/build/commands/pin.d.ts.map +1 -1
  62. package/build/commands/pin.js +77 -46
  63. package/build/commands/pin.js.map +1 -1
  64. package/build/commands/promote.d.ts +1 -1
  65. package/build/commands/promote.d.ts.map +1 -1
  66. package/build/commands/prune.d.ts +1 -1
  67. package/build/commands/prune.d.ts.map +1 -1
  68. package/build/commands/publish.d.ts +1 -1
  69. package/build/commands/publish.d.ts.map +1 -1
  70. package/build/commands/register.d.ts +1 -1
  71. package/build/commands/register.d.ts.map +1 -1
  72. package/build/commands/release-notes.d.ts +1 -1
  73. package/build/commands/release-notes.d.ts.map +1 -1
  74. package/build/commands/reviewer.d.ts +1 -1
  75. package/build/commands/reviewer.d.ts.map +1 -1
  76. package/build/commands/schema.d.ts +2 -2
  77. package/build/commands/schema.d.ts.map +1 -1
  78. package/build/commands/search.d.ts +2 -1
  79. package/build/commands/search.d.ts.map +1 -1
  80. package/build/commands/search.js +4 -2
  81. package/build/commands/search.js.map +1 -1
  82. package/build/commands/setup.d.ts +1 -1
  83. package/build/commands/setup.d.ts.map +1 -1
  84. package/build/commands/sync.d.ts +14 -2
  85. package/build/commands/sync.d.ts.map +1 -1
  86. package/build/commands/sync.js +86 -17
  87. package/build/commands/sync.js.map +1 -1
  88. package/build/commands/thaw.d.ts +2 -2
  89. package/build/commands/thaw.d.ts.map +1 -1
  90. package/build/commands/thaw.js +44 -21
  91. package/build/commands/thaw.js.map +1 -1
  92. package/build/commands/uninstall.d.ts +2 -2
  93. package/build/commands/uninstall.d.ts.map +1 -1
  94. package/build/commands/uninstall.js +35 -11
  95. package/build/commands/uninstall.js.map +1 -1
  96. package/build/commands/unpin.d.ts +2 -2
  97. package/build/commands/unpin.d.ts.map +1 -1
  98. package/build/commands/unpin.js +54 -25
  99. package/build/commands/unpin.js.map +1 -1
  100. package/build/commands/unpublish.d.ts +1 -1
  101. package/build/commands/unpublish.d.ts.map +1 -1
  102. package/build/commands/update.d.ts +3 -2
  103. package/build/commands/update.d.ts.map +1 -1
  104. package/build/commands/update.js +270 -74
  105. package/build/commands/update.js.map +1 -1
  106. package/build/commands/validate.d.ts +1 -1
  107. package/build/commands/validate.d.ts.map +1 -1
  108. package/build/commands/whoami.d.ts +1 -1
  109. package/build/commands/whoami.d.ts.map +1 -1
  110. package/build/commands/why.d.ts +1 -1
  111. package/build/commands/why.d.ts.map +1 -1
  112. package/build/components/AssetDetail.d.ts +6 -1
  113. package/build/components/AssetDetail.d.ts.map +1 -1
  114. package/build/components/AssetDetail.js +9 -2
  115. package/build/components/AssetDetail.js.map +1 -1
  116. package/build/components/AssetTable.d.ts +1 -1
  117. package/build/components/AssetTable.d.ts.map +1 -1
  118. package/build/components/AssetVersionLine.d.ts +1 -1
  119. package/build/components/AssetVersionLine.d.ts.map +1 -1
  120. package/build/components/BrowseExpandedBundle.d.ts +1 -1
  121. package/build/components/BrowseExpandedBundle.d.ts.map +1 -1
  122. package/build/components/BrowseExpandedRow.d.ts +1 -1
  123. package/build/components/BrowseExpandedRow.d.ts.map +1 -1
  124. package/build/components/BrowseList.d.ts +3 -1
  125. package/build/components/BrowseList.d.ts.map +1 -1
  126. package/build/components/BrowseList.js +12 -6
  127. package/build/components/BrowseList.js.map +1 -1
  128. package/build/components/BundleDetail.d.ts +3 -1
  129. package/build/components/BundleDetail.d.ts.map +1 -1
  130. package/build/components/BundleDetail.js +4 -2
  131. package/build/components/BundleDetail.js.map +1 -1
  132. package/build/components/CrossScopeWarning.d.ts +1 -1
  133. package/build/components/CrossScopeWarning.d.ts.map +1 -1
  134. package/build/components/DependencyTree.d.ts +1 -1
  135. package/build/components/DependencyTree.d.ts.map +1 -1
  136. package/build/components/DeprecationSummary.d.ts +2 -2
  137. package/build/components/DeprecationSummary.d.ts.map +1 -1
  138. package/build/components/DiagnosticList.d.ts +1 -1
  139. package/build/components/DiagnosticList.d.ts.map +1 -1
  140. package/build/components/DiffView.d.ts +34 -5
  141. package/build/components/DiffView.d.ts.map +1 -1
  142. package/build/components/DiffView.js +47 -8
  143. package/build/components/DiffView.js.map +1 -1
  144. package/build/components/DryRunBanner.d.ts +1 -1
  145. package/build/components/DryRunBanner.d.ts.map +1 -1
  146. package/build/components/ErrorView.d.ts +2 -2
  147. package/build/components/ErrorView.d.ts.map +1 -1
  148. package/build/components/ExcludedSkippedHint.d.ts +1 -1
  149. package/build/components/ExcludedSkippedHint.d.ts.map +1 -1
  150. package/build/components/Field.d.ts +1 -1
  151. package/build/components/Field.d.ts.map +1 -1
  152. package/build/components/Field.js +1 -1
  153. package/build/components/Field.js.map +1 -1
  154. package/build/components/FilterBar.d.ts +1 -1
  155. package/build/components/FilterBar.d.ts.map +1 -1
  156. package/build/components/FrozenSkippedHint.d.ts +1 -1
  157. package/build/components/FrozenSkippedHint.d.ts.map +1 -1
  158. package/build/components/Header.d.ts +1 -1
  159. package/build/components/Header.d.ts.map +1 -1
  160. package/build/components/HelpBar.d.ts +5 -1
  161. package/build/components/HelpBar.d.ts.map +1 -1
  162. package/build/components/HelpBar.js +18 -4
  163. package/build/components/HelpBar.js.map +1 -1
  164. package/build/components/InitSuccess.d.ts +1 -1
  165. package/build/components/InitSuccess.d.ts.map +1 -1
  166. package/build/components/InstallConfirmBar.d.ts +5 -3
  167. package/build/components/InstallConfirmBar.d.ts.map +1 -1
  168. package/build/components/InstallConfirmBar.js +15 -2
  169. package/build/components/InstallConfirmBar.js.map +1 -1
  170. package/build/components/InstallSummary.d.ts +1 -1
  171. package/build/components/InstallSummary.d.ts.map +1 -1
  172. package/build/components/InstalledTree.d.ts +17 -0
  173. package/build/components/InstalledTree.d.ts.map +1 -0
  174. package/build/components/InstalledTree.js +31 -0
  175. package/build/components/InstalledTree.js.map +1 -0
  176. package/build/components/Link.d.ts +1 -1
  177. package/build/components/Link.d.ts.map +1 -1
  178. package/build/components/ListActionBar.d.ts +1 -1
  179. package/build/components/ListActionBar.d.ts.map +1 -1
  180. package/build/components/ListBrowseList.d.ts +1 -1
  181. package/build/components/ListBrowseList.d.ts.map +1 -1
  182. package/build/components/ListExpandedRow.d.ts +1 -1
  183. package/build/components/ListExpandedRow.d.ts.map +1 -1
  184. package/build/components/ListHelpBar.d.ts +1 -1
  185. package/build/components/ListHelpBar.d.ts.map +1 -1
  186. package/build/components/LocalEditsHint.d.ts +1 -1
  187. package/build/components/LocalEditsHint.d.ts.map +1 -1
  188. package/build/components/MultiSelectList.d.ts +1 -1
  189. package/build/components/MultiSelectList.d.ts.map +1 -1
  190. package/build/components/NoticeBanner.d.ts +1 -1
  191. package/build/components/NoticeBanner.d.ts.map +1 -1
  192. package/build/components/OrphanListItem.d.ts +1 -1
  193. package/build/components/OrphanListItem.d.ts.map +1 -1
  194. package/build/components/PromptField.d.ts +1 -1
  195. package/build/components/PromptField.d.ts.map +1 -1
  196. package/build/components/ReadmeSection.d.ts +1 -1
  197. package/build/components/ReadmeSection.d.ts.map +1 -1
  198. package/build/components/RegistryChangeSummary.d.ts +2 -2
  199. package/build/components/RegistryChangeSummary.d.ts.map +1 -1
  200. package/build/components/RunStoppedHint.d.ts +1 -1
  201. package/build/components/RunStoppedHint.d.ts.map +1 -1
  202. package/build/components/SchemaTable.d.ts +1 -1
  203. package/build/components/SchemaTable.d.ts.map +1 -1
  204. package/build/components/SectionDivider.d.ts +1 -1
  205. package/build/components/SectionDivider.d.ts.map +1 -1
  206. package/build/components/SkippedAssetSection.d.ts +1 -1
  207. package/build/components/SkippedAssetSection.d.ts.map +1 -1
  208. package/build/components/Spinner.d.ts +1 -1
  209. package/build/components/Spinner.d.ts.map +1 -1
  210. package/build/components/StatusBadge.d.ts +2 -2
  211. package/build/components/StatusBadge.d.ts.map +1 -1
  212. package/build/components/SyncAllInSync.d.ts +1 -1
  213. package/build/components/SyncAllInSync.d.ts.map +1 -1
  214. package/build/components/SyncDriftedList.d.ts +1 -1
  215. package/build/components/SyncDriftedList.d.ts.map +1 -1
  216. package/build/components/SyncNoAssets.d.ts +1 -1
  217. package/build/components/SyncNoAssets.d.ts.map +1 -1
  218. package/build/components/UndeclaredRemovedHint.d.ts +1 -1
  219. package/build/components/UndeclaredRemovedHint.d.ts.map +1 -1
  220. package/build/components/UpdateBanner.d.ts +1 -1
  221. package/build/components/UpdateBanner.d.ts.map +1 -1
  222. package/build/components/index.d.ts +2 -1
  223. package/build/components/index.d.ts.map +1 -1
  224. package/build/components/index.js +2 -1
  225. package/build/components/index.js.map +1 -1
  226. package/build/hooks/useBrowseState.d.ts +31 -1
  227. package/build/hooks/useBrowseState.d.ts.map +1 -1
  228. package/build/hooks/useBrowseState.js +99 -15
  229. package/build/hooks/useBrowseState.js.map +1 -1
  230. package/build/hooks/useUninstallState.d.ts +22 -2
  231. package/build/hooks/useUninstallState.d.ts.map +1 -1
  232. package/build/hooks/useUninstallState.js +161 -16
  233. package/build/hooks/useUninstallState.js.map +1 -1
  234. package/build/lib/atk-api/generated/types.gen.d.ts +8 -8
  235. package/build/lib/atk-schemas/claude-plugin.d.ts +56 -0
  236. package/build/lib/atk-schemas/claude-plugin.d.ts.map +1 -0
  237. package/build/lib/atk-schemas/claude-plugin.js +199 -0
  238. package/build/lib/atk-schemas/claude-plugin.js.map +1 -0
  239. package/build/lib/atk-schemas/index.d.ts +3 -0
  240. package/build/lib/atk-schemas/index.d.ts.map +1 -1
  241. package/build/lib/atk-schemas/index.js +3 -0
  242. package/build/lib/atk-schemas/index.js.map +1 -1
  243. package/build/lib/atk-schemas/manifest.d.ts +2 -2
  244. package/build/lib/atk-schemas/manifest.d.ts.map +1 -1
  245. package/build/lib/atk-schemas/null-optionals.d.ts +1 -1
  246. package/build/lib/atk-schemas/null-optionals.d.ts.map +1 -1
  247. package/build/lib/atk-schemas/registry.d.ts +6 -0
  248. package/build/lib/atk-schemas/registry.d.ts.map +1 -1
  249. package/build/lib/atk-schemas/registry.js +2 -0
  250. package/build/lib/atk-schemas/registry.js.map +1 -1
  251. package/build/lib/config.d.ts +18 -0
  252. package/build/lib/config.d.ts.map +1 -1
  253. package/build/lib/config.js +32 -9
  254. package/build/lib/config.js.map +1 -1
  255. package/build/lib/diff-command.d.ts +43 -3
  256. package/build/lib/diff-command.d.ts.map +1 -1
  257. package/build/lib/diff-command.js +93 -15
  258. package/build/lib/diff-command.js.map +1 -1
  259. package/build/lib/format.d.ts +5 -0
  260. package/build/lib/format.d.ts.map +1 -1
  261. package/build/lib/format.js +7 -0
  262. package/build/lib/format.js.map +1 -1
  263. package/build/lib/install-targets.d.ts +90 -0
  264. package/build/lib/install-targets.d.ts.map +1 -0
  265. package/build/lib/install-targets.js +146 -0
  266. package/build/lib/install-targets.js.map +1 -0
  267. package/build/lib/installed-tree.d.ts +47 -0
  268. package/build/lib/installed-tree.d.ts.map +1 -0
  269. package/build/lib/installed-tree.js +72 -0
  270. package/build/lib/installed-tree.js.map +1 -0
  271. package/build/lib/installer.js +3 -2
  272. package/build/lib/installer.js.map +1 -1
  273. package/build/lib/named-entry.d.ts +24 -0
  274. package/build/lib/named-entry.d.ts.map +1 -0
  275. package/build/lib/named-entry.js +33 -0
  276. package/build/lib/named-entry.js.map +1 -0
  277. package/build/lib/pastel/_app.d.ts +1 -1
  278. package/build/lib/pastel/_app.d.ts.map +1 -1
  279. package/build/lib/registry.d.ts +43 -0
  280. package/build/lib/registry.d.ts.map +1 -1
  281. package/build/lib/registry.js +73 -0
  282. package/build/lib/registry.js.map +1 -1
  283. package/build/lib/resolver.d.ts +35 -0
  284. package/build/lib/resolver.d.ts.map +1 -1
  285. package/build/lib/resolver.js +65 -21
  286. package/build/lib/resolver.js.map +1 -1
  287. package/build/lib/schemas/config.d.ts +2 -2
  288. package/build/lib/schemas/config.d.ts.map +1 -1
  289. package/build/lib/search.d.ts +9 -2
  290. package/build/lib/search.d.ts.map +1 -1
  291. package/build/lib/search.js +18 -1
  292. package/build/lib/search.js.map +1 -1
  293. package/build/lib/sync.d.ts +9 -0
  294. package/build/lib/sync.d.ts.map +1 -1
  295. package/build/lib/sync.js +13 -8
  296. package/build/lib/sync.js.map +1 -1
  297. package/build/lib/uninstaller.d.ts +51 -3
  298. package/build/lib/uninstaller.d.ts.map +1 -1
  299. package/build/lib/uninstaller.js +134 -39
  300. package/build/lib/uninstaller.js.map +1 -1
  301. package/build/lib/updater.d.ts +6 -7
  302. package/build/lib/updater.d.ts.map +1 -1
  303. package/build/lib/updater.js +23 -33
  304. package/build/lib/updater.js.map +1 -1
  305. package/package.json +21 -21
@@ -1,17 +1,38 @@
1
- import type { FileDiffEntry } from '../components/index.js';
1
+ import type { FileDiffEntry, VersionFileDiff } from '../components/index.js';
2
2
  import type { RegistryAsset } from './schemas/index.js';
3
3
  import type { InstalledAsset, InstalledFile } from './schemas/lockfile.js';
4
4
  import { type Scope } from './scope.js';
5
5
  export type DiffOutcome = {
6
+ /** The registry version the installed files were compared with. */
7
+ comparedVersion: string;
6
8
  diffs: FileDiffEntry[];
7
9
  installed: InstalledAsset;
8
10
  latestVersion: string;
9
11
  name: string;
10
12
  outcome: 'results';
11
13
  registryAsset: RegistryAsset;
14
+ /** Whether the installed version is the latest. */
12
15
  sameVersion: boolean;
13
16
  /** The scope the asset is installed in, for the update command. */
14
17
  scope: Scope;
18
+ target: Exclude<DiffTarget['kind'], 'range'>;
19
+ } | {
20
+ availableVersions: string[];
21
+ name: string;
22
+ outcome: 'version-not-found';
23
+ /** The scope the asset is installed in, for the update command. */
24
+ scope: Scope;
25
+ target: DiffTarget['kind'];
26
+ version: string;
27
+ } | {
28
+ diffs: VersionFileDiff[];
29
+ /** The version the `-` lines come from. */
30
+ fromVersion: string;
31
+ name: string;
32
+ outcome: 'results';
33
+ target: 'range';
34
+ /** The version the `+` lines come from. */
35
+ toVersion: string;
15
36
  } | {
16
37
  name: string;
17
38
  outcome: 'not-in-registry';
@@ -19,6 +40,23 @@ export type DiffOutcome = {
19
40
  name: string;
20
41
  outcome: 'not-installed';
21
42
  };
43
+ /**
44
+ * What `atk diff` compares: the installed files with the latest version, a version (exact,
45
+ * range or `latest`, as `atk install` takes it) or the version the lockfile records; or, for
46
+ * `range`, two published versions with each other (`<from>..<to>`, each side as `version` takes it).
47
+ */
48
+ export type DiffTarget = {
49
+ from: string;
50
+ kind: 'range';
51
+ to: string;
52
+ } | {
53
+ kind: 'installed';
54
+ } | {
55
+ kind: 'latest';
56
+ } | {
57
+ kind: 'version';
58
+ version: string;
59
+ };
22
60
  /** Describes a file to fetch for diff comparison, with its installed and remote paths. */
23
61
  export interface FileFetchEntry {
24
62
  file: InstalledFile;
@@ -27,9 +65,11 @@ export interface FileFetchEntry {
27
65
  }
28
66
  /**
29
67
  * Core logic for the `atk diff` command. Computes the diff between a locally
30
- * installed asset and the latest version in the registry.
68
+ * installed asset and a version in the registry, the latest unless `target` names another,
69
+ * or for a `range` target between two registry versions of the installed asset.
31
70
  *
32
71
  * @param name - Asset name (without org prefix)
72
+ * @param target - The registry version to compare with
33
73
  * @param org - Org from the --org CLI flag or inline @org/name syntax (already merged)
34
74
  * @param tool - Tool override from --tool CLI flag
35
75
  * @param context - Number of context lines for unified diff output
@@ -40,5 +80,5 @@ export interface FileFetchEntry {
40
80
  * @param inlineOrg - Org parsed from @org/name syntax
41
81
  * @param progress - Callback to report progress messages to the UI
42
82
  */
43
- export declare function computeDiffOutcome(name: string, org: string | undefined, tool: string | undefined, context: number, refresh: boolean, projectRoot: string | undefined, user: boolean | undefined, cliOrg: string | undefined, inlineOrg: string | undefined, progress: (message: string) => void): Promise<DiffOutcome>;
83
+ export declare function computeDiffOutcome(name: string, target: DiffTarget, org: string | undefined, tool: string | undefined, context: number, refresh: boolean, projectRoot: string | undefined, user: boolean | undefined, cliOrg: string | undefined, inlineOrg: string | undefined, progress: (message: string) => void): Promise<DiffOutcome>;
44
84
  //# sourceMappingURL=diff-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-command.d.ts","sourceRoot":"","sources":["../../src/lib/diff-command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAoB3E,OAAO,EAAgB,KAAK,KAAK,EAAiB,MAAM,YAAY,CAAC;AAGrE,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;IACrB,mEAAmE;IACnE,KAAK,EAAE,KAAK,CAAC;CACd,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;;;;;;;;;;;;;;GAcG;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,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,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,CA4KtB"}
1
+ {"version":3,"file":"diff-command.d.ts","sourceRoot":"","sources":["../../src/lib/diff-command.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAsB3E,OAAO,EAAgB,KAAK,KAAK,EAAiB,MAAM,YAAY,CAAC;AAGrE,MAAM,MAAM,WAAW,GACnB;IACE,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,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,mDAAmD;IACnD,WAAW,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;CAC9C,GACD;IACE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,mEAAmE;IACnE,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB,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;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,0FAA0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,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,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,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,CA8LtB"}
@@ -7,15 +7,17 @@ import { computeAddedFileDiff, computeRemovedFileDiff, computeUnifiedDiff } from
7
7
  import { errorGuidance, errorMessage } from './errors.js';
8
8
  import { findInstalledAssetWithFallback, readLockfile } from './lockfile.js';
9
9
  import { resolveActiveOrg, scopeSwitchGuidance } from './org.js';
10
- import { fetchAssetFileBytes, fetchRegistry, findAsset, listAssetFiles, RegistryError, versionTools, } from './registry.js';
10
+ import { fetchAssetFileBytes, fetchRegistry, findAsset, getSortedVersions, listAssetFiles, RegistryError, resolveAssetVersion, versionTools, } from './registry.js';
11
11
  import { fromRoot } from './root-path.js';
12
12
  import { resolveScope, scopedCommand } from './scope.js';
13
13
  import { resolveTool } from './tool-resolver.js';
14
14
  /**
15
15
  * Core logic for the `atk diff` command. Computes the diff between a locally
16
- * installed asset and the latest version in the registry.
16
+ * installed asset and a version in the registry, the latest unless `target` names another,
17
+ * or for a `range` target between two registry versions of the installed asset.
17
18
  *
18
19
  * @param name - Asset name (without org prefix)
20
+ * @param target - The registry version to compare with
19
21
  * @param org - Org from the --org CLI flag or inline @org/name syntax (already merged)
20
22
  * @param tool - Tool override from --tool CLI flag
21
23
  * @param context - Number of context lines for unified diff output
@@ -26,7 +28,7 @@ import { resolveTool } from './tool-resolver.js';
26
28
  * @param inlineOrg - Org parsed from @org/name syntax
27
29
  * @param progress - Callback to report progress messages to the UI
28
30
  */
29
- export async function computeDiffOutcome(name, org, tool, context, refresh, projectRoot, user, cliOrg, inlineOrg, progress) {
31
+ export async function computeDiffOutcome(name, target, org, tool, context, refresh, projectRoot, user, cliOrg, inlineOrg, progress) {
30
32
  const { root: projectDir, scope } = await resolveScope({ projectRoot, user });
31
33
  progress('Loading configuration...');
32
34
  const config = await loadConfig();
@@ -40,8 +42,9 @@ export async function computeDiffOutcome(name, org, tool, context, refresh, proj
40
42
  if (!installed) {
41
43
  return { name, outcome: 'not-installed' };
42
44
  }
43
- // Uninstalled for this tool (`atk uninstall --tool`): there is no local copy to diff.
44
- const excluded = isExcludedForTool(installed, adapter.tool);
45
+ // Uninstalled for this tool (`atk uninstall --tool`): there is no local copy to diff. A range
46
+ // compares two published versions, so it reads no local copy.
47
+ const excluded = target.kind !== 'range' && isExcludedForTool(installed, adapter.tool);
45
48
  if (excluded && !isUndeclaredForTool(installed, adapter.tool)) {
46
49
  throw Object.assign(new Error(`Asset "${name}" is not installed for ${adapter.tool}.`), {
47
50
  command: scopedCommand(`atk install ${name} --tool ${adapter.tool}`, scope),
@@ -67,17 +70,35 @@ export async function computeDiffOutcome(name, org, tool, context, refresh, proj
67
70
  throw Object.assign(new Error(message), guidance);
68
71
  }
69
72
  const { asset: registryAsset, version: latestVersion } = foundAsset;
70
- progress('Fetching latest version...');
71
73
  const assetRef = { name: registryAsset.name, org: registryAsset.org, type: registryAsset.type };
72
- let remoteFilesList;
73
- try {
74
- remoteFilesList = await listAssetFiles(assetRef, latestVersion);
74
+ if (target.kind === 'range') {
75
+ const from = resolveAssetVersion(registryAsset, target.from);
76
+ const to = from && resolveAssetVersion(registryAsset, target.to);
77
+ if (!from || !to) {
78
+ return versionNotFound(registryAsset, name, scope, target.kind, from ? target.to : target.from);
79
+ }
80
+ progress(`Fetching v${from.version} and v${to.version}...`);
81
+ return {
82
+ diffs: await diffVersions(assetRef, name, from.version, to.version, context),
83
+ fromVersion: from.version,
84
+ name,
85
+ outcome: 'results',
86
+ target: target.kind,
87
+ toVersion: to.version,
88
+ };
75
89
  }
76
- catch (error) {
77
- throw new RegistryError(`Failed to list asset directory files for "${name}": ${errorMessage(error)}`, errorGuidance(error));
90
+ let comparedVersion = latestVersion;
91
+ const requested = requestedVersion(target, installed);
92
+ if (requested !== undefined) {
93
+ // The locked version too: it may have been unpublished since it was installed.
94
+ const resolvedTarget = resolveAssetVersion(registryAsset, requested);
95
+ if (!resolvedTarget) {
96
+ return versionNotFound(registryAsset, name, scope, target.kind, requested);
97
+ }
98
+ comparedVersion = resolvedTarget.version;
78
99
  }
79
- // Convert remote files array to a Map for O(1) lookups by relative path
80
- const remoteFiles = new Map(remoteFilesList.map((f) => [f.relativePath, f]));
100
+ progress(`Fetching v${comparedVersion}...`);
101
+ const remoteFiles = await listRemoteFiles(assetRef, name, comparedVersion);
81
102
  // Resolve installed paths via the adapter, where the copy was placed
82
103
  const resolved = resolveInstalledPaths(installed, adapterAsPlaced(adapter, installed), projectDir);
83
104
  const installedPathMap = new Map(resolved.files.map((f) => [f.sourcePath, f.installedPath]));
@@ -114,7 +135,7 @@ export async function computeDiffOutcome(name, org, tool, context, refresh, proj
114
135
  filesToFetch.push({ file, installedPath, remotePath: remoteFile.relativePath });
115
136
  }
116
137
  // Fetch all remote file contents in parallel
117
- const remoteContents = await Promise.all(filesToFetch.map(async ({ remotePath }) => fetchRemoteText(assetRef, latestVersion, remotePath)));
138
+ const remoteContents = await Promise.all(filesToFetch.map(async ({ remotePath }) => fetchRemoteText(assetRef, comparedVersion, remotePath)));
118
139
  // Read all local file contents in parallel
119
140
  const localContents = await Promise.all(filesToFetch.map(async ({ installedPath }) => readFile(fromRoot(projectDir, installedPath), 'utf-8')));
120
141
  // Build diffs from fetched content
@@ -145,7 +166,7 @@ export async function computeDiffOutcome(name, org, tool, context, refresh, proj
145
166
  // Collect added files (present in registry but not in installed files), then batch-fetch in parallel
146
167
  const installedSourcePaths = new Set(installed.files.map((f) => f.sourcePath));
147
168
  const addedRemoteFiles = [...remoteFiles.values()].filter((rf) => !installedSourcePaths.has(rf.relativePath));
148
- const addedContents = await Promise.all(addedRemoteFiles.map(async (rf) => fetchRemoteText(assetRef, latestVersion, rf.relativePath)));
169
+ const addedContents = await Promise.all(addedRemoteFiles.map(async (rf) => fetchRemoteText(assetRef, comparedVersion, rf.relativePath)));
149
170
  for (let i = 0; i < addedRemoteFiles.length; i++) {
150
171
  const remoteFile = addedRemoteFiles[i];
151
172
  const remoteContent = addedContents[i];
@@ -153,6 +174,7 @@ export async function computeDiffOutcome(name, org, tool, context, refresh, proj
153
174
  }
154
175
  const sameVersion = installed.version === latestVersion;
155
176
  return {
177
+ comparedVersion,
156
178
  diffs,
157
179
  installed,
158
180
  latestVersion,
@@ -161,12 +183,63 @@ export async function computeDiffOutcome(name, org, tool, context, refresh, proj
161
183
  registryAsset,
162
184
  sameVersion,
163
185
  scope,
186
+ target: target.kind,
164
187
  };
165
188
  }
189
+ /**
190
+ * The file diffs from version `from` of an asset to version `to`: `-` lines are `from`'s and `+`
191
+ * lines `to`'s, a file only `from` has is removed, and one only `to` has is added.
192
+ */
193
+ async function diffVersions(ref, name, from, to, context) {
194
+ const [fromFiles, toFiles] = await Promise.all([listRemoteFiles(ref, name, from), listRemoteFiles(ref, name, to)]);
195
+ const fromPaths = [...fromFiles.keys()];
196
+ const addedPaths = [...toFiles.keys()].filter((path) => !fromFiles.has(path));
197
+ const [fromContents, toContents, addedContents] = await Promise.all([
198
+ Promise.all(fromPaths.map(async (path) => fetchRemoteText(ref, from, path))),
199
+ Promise.all(fromPaths.map(async (path) => (toFiles.has(path) ? fetchRemoteText(ref, to, path) : undefined))),
200
+ Promise.all(addedPaths.map(async (path) => fetchRemoteText(ref, to, path))),
201
+ ]);
202
+ const diffs = fromPaths.map((fileName, i) => {
203
+ const fromContent = fromContents[i];
204
+ const toContent = toContents[i];
205
+ if (toContent === undefined) {
206
+ return { diffLines: computeRemovedFileDiff(fromContent), fileName, status: 'removed' };
207
+ }
208
+ const lines = { fromLines: fromContent.split('\n').length, toLines: toContent.split('\n').length };
209
+ if (fromContent === toContent) {
210
+ return { fileName, ...lines, status: 'unchanged' };
211
+ }
212
+ return { diffLines: computeUnifiedDiff(fromContent, toContent, context), fileName, ...lines, status: 'modified' };
213
+ });
214
+ for (const [i, fileName] of addedPaths.entries()) {
215
+ diffs.push({ diffLines: computeAddedFileDiff(addedContents[i]), fileName, status: 'added' });
216
+ }
217
+ return diffs;
218
+ }
166
219
  /** Fetch one remote file and decode it as UTF-8 text for diffing. */
167
220
  async function fetchRemoteText(ref, version, relativePath) {
168
221
  return (await fetchAssetFileBytes(ref, version, relativePath)).toString('utf-8');
169
222
  }
223
+ /** The files of a registry version, by their path relative to the version root. */
224
+ async function listRemoteFiles(ref, name, version) {
225
+ try {
226
+ return new Map((await listAssetFiles(ref, version)).map((f) => [f.relativePath, f]));
227
+ }
228
+ catch (error) {
229
+ throw new RegistryError(`Failed to list asset directory files for "${name}": ${errorMessage(error)}`, errorGuidance(error));
230
+ }
231
+ }
232
+ /** The version `target` asks for, or undefined for the latest. */
233
+ function requestedVersion(target, installed) {
234
+ switch (target.kind) {
235
+ case 'installed':
236
+ return installed.version;
237
+ case 'latest':
238
+ return undefined;
239
+ case 'version':
240
+ return target.version;
241
+ }
242
+ }
170
243
  /**
171
244
  * The error for diffing a hook marked undeclared for `tool` (`undeclaredTools`): the registry no
172
245
  * longer has its locked version, the version doesn't declare the tool, or it now does, and
@@ -190,4 +263,9 @@ function undeclaredError(name, installed, tool, registry, scope) {
190
263
  hint: `Its locked version (v${installed.version}) now declares ${tool}, and \`${sync}\` places it.`,
191
264
  });
192
265
  }
266
+ /** The outcome for a version the registry doesn't have, with the versions it does. */
267
+ function versionNotFound(asset, name, scope, target, version) {
268
+ const { versions: availableVersions } = getSortedVersions(asset);
269
+ return { availableVersions, name, outcome: 'version-not-found', scope, target, version };
270
+ }
193
271
  //# sourceMappingURL=diff-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-command.js","sourceRoot":"","sources":["../../src/lib/diff-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff-command.js","sourceRoot":"","sources":["../../src/lib/diff-command.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,9 @@
3
3
  * Returns the original string if parsing fails.
4
4
  */
5
5
  export declare function formatDate(isoString: string): string;
6
+ /**
7
+ * How many rows past its first a one-line `text` wraps to inside a bordered box `width` columns
8
+ * wide, for views that size a list around the box. Ink wraps at words, so it can take one more.
9
+ */
10
+ export declare function wrappedExtraRows(text: string, width: number): number;
6
11
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWpD"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE"}
@@ -15,4 +15,11 @@ export function formatDate(isoString) {
15
15
  return isoString;
16
16
  }
17
17
  }
18
+ /**
19
+ * How many rows past its first a one-line `text` wraps to inside a bordered box `width` columns
20
+ * wide, for views that size a list around the box. Ink wraps at words, so it can take one more.
21
+ */
22
+ export function wrappedExtraRows(text, width) {
23
+ return Math.max(0, Math.ceil(text.length / Math.max(1, width - 2)) - 1);
24
+ }
18
25
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACtC,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACtC,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAa;IAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,90 @@
1
+ import type { ToolInstallResult } from './multi-tool-install.js';
2
+ import type { InstallPlan } from './resolver.js';
3
+ import type { Adapter, AssetType, InstalledAsset, Registry, RegistryBundle } from './schemas/index.js';
4
+ import type { Lockfile } from './schemas/lockfile.js';
5
+ import { executeInstallPlanForTools } from './multi-tool-install.js';
6
+ /** An asset a run of several targets asks for: one named, or one of a named `@org`'s assets (`fromOrg`). */
7
+ export interface AssetTarget {
8
+ fromOrg?: boolean;
9
+ kind: 'asset';
10
+ name: string;
11
+ org?: string;
12
+ type?: AssetType;
13
+ version?: string;
14
+ }
15
+ export interface BundleMember {
16
+ name: string;
17
+ org?: string;
18
+ type: AssetType;
19
+ }
20
+ /** A bundle a run of several targets asks for, at the version `version` resolved to. */
21
+ export interface BundleTarget {
22
+ bundle: RegistryBundle;
23
+ kind: 'bundle';
24
+ version?: string;
25
+ }
26
+ /** What a run of several targets did with a named asset: the installed ones in plan order, then the rest. */
27
+ export interface NamedAsset {
28
+ name: string;
29
+ org?: string;
30
+ outcome: 'already-installed' | 'installed' | 'upgraded-to-direct';
31
+ type: AssetType;
32
+ version: string;
33
+ }
34
+ /** A run of several targets, split into what is in place and the plan for the rest. */
35
+ export interface PlannedTargets {
36
+ /** The named assets the plan installs, in plan order, then the ones already in place. */
37
+ assets: NamedAsset[];
38
+ /** The bundles every targeted tool has whole, in the order named. */
39
+ bundlesInPlace: BundleTarget[];
40
+ plan: InstallPlan;
41
+ /** The targets the plan installs, in the order named. */
42
+ toInstall: Array<AssetTarget | BundleTarget>;
43
+ /** The assets in place only as dependencies, which become direct once the install succeeds. */
44
+ upgrades: InstalledAsset[];
45
+ }
46
+ /**
47
+ * The members of the bundle that one of `tools` places, as the registry has them. A member none of
48
+ * them places is left out, since this run can't adopt it, and so is a ref the registry can't find,
49
+ * which the install reports.
50
+ */
51
+ export declare function bundleMembers(registry: Registry, bundle: RegistryBundle, tools: Array<{
52
+ adapter: Adapter;
53
+ }>): BundleMember[];
54
+ /**
55
+ * Install what {@link planTargetsInstall} planned: one install across tools when the plan has
56
+ * entries, with its rollback, then the upgrades to direct. They come after the install, so a failed
57
+ * one leaves even the install reasons as they were.
58
+ */
59
+ export declare function installPlannedTargets({ plan, upgrades }: Pick<PlannedTargets, 'plan' | 'upgrades'>, tools: Array<{
60
+ adapter: Adapter;
61
+ tool: string;
62
+ }>, options: Parameters<typeof executeInstallPlanForTools>[2]): Promise<ToolInstallResult[]>;
63
+ /**
64
+ * Whether every member of the bundle is in place for every tool that takes it (with
65
+ * `requiredBundleVersion`, recorded as this bundle at that version). False when no tool takes any
66
+ * member, so the installer says why.
67
+ */
68
+ export declare function isBundleInPlace(registry: Registry, bundle: RegistryBundle, lockfile: Lockfile, { members, projectDir, requiredBundleVersion, tools, }: {
69
+ members: BundleMember[];
70
+ projectDir: string;
71
+ requiredBundleVersion?: string;
72
+ tools: Array<{
73
+ adapter: Adapter;
74
+ }>;
75
+ }): boolean;
76
+ /**
77
+ * The targets resolved together (shared dependencies once, one version per asset) into one plan,
78
+ * as `atk install a b my-bundle` and `atk browse`'s marked rows install them. A target every
79
+ * targeted tool already has in place is left out of the plan, as it is for one name: an asset (at
80
+ * the requested version, when one is), or a bundle checked whole. An asset in place only as a
81
+ * dependency comes back in `upgrades`. Bundle members get the bundle's origin unless they are
82
+ * named themselves ({@link resolveTargetsInstallPlan}).
83
+ */
84
+ export declare function planTargetsInstall(registry: Registry, targets: Array<AssetTarget | BundleTarget>, lockfile: Lockfile, tools: Array<{
85
+ adapter: Adapter;
86
+ }>, { force, projectDir }: {
87
+ force: boolean;
88
+ projectDir: string;
89
+ }): PlannedTargets;
90
+ //# sourceMappingURL=install-targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-targets.d.ts","sourceRoot":"","sources":["../../src/lib/install-targets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import { placesAsset } from './asset-tools.js';
2
+ import { isInstalledForTool } from './installed-for-tool.js';
3
+ import { findInstalledAsset, identityKey, readLockfile, upgradeToDirectInstall, writeLockfile } from './lockfile.js';
4
+ import { executeInstallPlanForTools } from './multi-tool-install.js';
5
+ import { findAsset, findBundleMember, isLatestAlias } from './registry.js';
6
+ import { resolveTargetsInstallPlan } from './resolver.js';
7
+ /**
8
+ * The members of the bundle that one of `tools` places, as the registry has them. A member none of
9
+ * them places is left out, since this run can't adopt it, and so is a ref the registry can't find,
10
+ * which the install reports.
11
+ */
12
+ export function bundleMembers(registry, bundle, tools) {
13
+ return (bundle.assets ?? []).flatMap((ref) => {
14
+ const found = findBundleMember(registry, bundle, ref);
15
+ if (!found || !tools.some((t) => placesAsset(t.adapter, found.asset.type, found.versionData.tools)))
16
+ return [];
17
+ const { name, org, type } = found.asset;
18
+ return [{ name, ...(org ? { org } : {}), type }];
19
+ });
20
+ }
21
+ /**
22
+ * Install what {@link planTargetsInstall} planned: one install across tools when the plan has
23
+ * entries, with its rollback, then the upgrades to direct. They come after the install, so a failed
24
+ * one leaves even the install reasons as they were.
25
+ */
26
+ export async function installPlannedTargets({ plan, upgrades }, tools, options) {
27
+ const toolResults = plan.entries.length > 0 ? await executeInstallPlanForTools(plan, tools, options) : [];
28
+ if (upgrades.length > 0) {
29
+ let lockfile = await readLockfile(options.projectDir);
30
+ for (const { name, org, type } of upgrades)
31
+ lockfile = upgradeToDirectInstall(lockfile, name, type, org);
32
+ await writeLockfile(options.projectDir, lockfile);
33
+ }
34
+ return toolResults;
35
+ }
36
+ /**
37
+ * Whether every member of the bundle is in place for every tool that takes it (with
38
+ * `requiredBundleVersion`, recorded as this bundle at that version). False when no tool takes any
39
+ * member, so the installer says why.
40
+ */
41
+ export function isBundleInPlace(registry, bundle, lockfile, { members, projectDir, requiredBundleVersion, tools, }) {
42
+ const bundleAssets = bundle.assets ?? [];
43
+ return tools.every(({ adapter: toolAdapter }) => members.length > 0 &&
44
+ bundleAssets.every((ref) => {
45
+ const found = findBundleMember(registry, bundle, ref);
46
+ if (!found)
47
+ return false;
48
+ // A tool that doesn't take this member (its type, or a hook for other tools) has
49
+ // nothing to check.
50
+ if (!placesAsset(toolAdapter, found.asset.type, found.versionData.tools))
51
+ return true;
52
+ const installed = findInstalledAsset(lockfile, ref.name, ref.type, found.asset.org);
53
+ if (!installed)
54
+ return false;
55
+ if (requiredBundleVersion && !isFromBundleVersion(installed, bundle, requiredBundleVersion)) {
56
+ return false;
57
+ }
58
+ return isInstalledForTool(installed, toolAdapter, projectDir);
59
+ }));
60
+ }
61
+ /**
62
+ * The targets resolved together (shared dependencies once, one version per asset) into one plan,
63
+ * as `atk install a b my-bundle` and `atk browse`'s marked rows install them. A target every
64
+ * targeted tool already has in place is left out of the plan, as it is for one name: an asset (at
65
+ * the requested version, when one is), or a bundle checked whole. An asset in place only as a
66
+ * dependency comes back in `upgrades`. Bundle members get the bundle's origin unless they are
67
+ * named themselves ({@link resolveTargetsInstallPlan}).
68
+ */
69
+ export function planTargetsInstall(registry, targets, lockfile, tools, { force, projectDir }) {
70
+ const inPlace = [];
71
+ const bundlesInPlace = [];
72
+ const upgrades = [];
73
+ const toInstall = [];
74
+ for (const request of targets) {
75
+ if (request.kind === 'bundle') {
76
+ const { bundle, version } = request;
77
+ const members = bundleMembers(registry, bundle, tools);
78
+ const requiredBundleVersion = version && !isLatestAlias(version) ? bundle.version : undefined;
79
+ if (force ||
80
+ !isBundleInPlace(registry, bundle, lockfile, { members, projectDir, requiredBundleVersion, tools })) {
81
+ toInstall.push(request);
82
+ }
83
+ else {
84
+ bundlesInPlace.push(request);
85
+ }
86
+ continue;
87
+ }
88
+ const match = findAsset(registry, request.name, request.type, request.version, request.org);
89
+ const existing = match ? findInstalledAsset(lockfile, request.name, match.asset.type, match.asset.org) : undefined;
90
+ const supportingTools = existing && match ? tools.filter((t) => placesAsset(t.adapter, existing.type, match.versionData.tools)) : [];
91
+ const isInPlace = !force &&
92
+ existing !== undefined &&
93
+ supportingTools.length > 0 &&
94
+ supportingTools.every((t) => isInstalledForTool(existing, t.adapter, projectDir)) &&
95
+ (!request.version || request.version === existing.version);
96
+ if (!isInPlace) {
97
+ toInstall.push(request);
98
+ continue;
99
+ }
100
+ if (inPlace.some((a) => identityKey(a) === identityKey(existing)))
101
+ continue;
102
+ const dependency = (existing.installReason ?? 'direct') === 'dependency';
103
+ if (dependency)
104
+ upgrades.push(existing);
105
+ inPlace.push({
106
+ name: existing.name,
107
+ ...(existing.org ? { org: existing.org } : {}),
108
+ outcome: dependency ? 'upgraded-to-direct' : 'already-installed',
109
+ type: existing.type,
110
+ version: existing.version,
111
+ });
112
+ }
113
+ const plan = resolveTargetsInstallPlan(registry, toInstall.map((request) => request.kind === 'bundle'
114
+ ? { bundle: request.bundle, kind: 'bundle' }
115
+ : {
116
+ ...(request.fromOrg ? { fromOrg: true } : {}),
117
+ kind: 'asset',
118
+ name: request.name,
119
+ ...(request.org ? { org: request.org } : {}),
120
+ ...(request.type ? { type: request.type } : {}),
121
+ ...(request.version ? { version: request.version } : {}),
122
+ }));
123
+ // The named and the org's assets the plan installs, in plan order.
124
+ const requested = new Set(toInstall.flatMap((request) => {
125
+ if (request.kind === 'bundle')
126
+ return [];
127
+ const match = findAsset(registry, request.name, request.type, request.version, request.org);
128
+ return match ? [identityKey(match.asset)] : [];
129
+ }));
130
+ const installed = plan.entries
131
+ .filter((entry) => entry.reason === 'direct' && requested.has(identityKey(entry.asset)))
132
+ .map((entry) => ({
133
+ name: entry.asset.name,
134
+ ...(entry.asset.org ? { org: entry.asset.org } : {}),
135
+ outcome: 'installed',
136
+ type: entry.asset.type,
137
+ version: entry.version,
138
+ }));
139
+ return { assets: [...installed, ...inPlace], bundlesInPlace, plan, toInstall, upgrades };
140
+ }
141
+ /** Whether a lockfile asset was installed as part of this bundle (name, org) at this version. */
142
+ function isFromBundleVersion(installed, bundle, version) {
143
+ const origin = installed.bundleOrigin;
144
+ return origin?.name === bundle.name && origin.org === bundle.org && origin.version === version;
145
+ }
146
+ //# sourceMappingURL=install-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-targets.js","sourceRoot":"","sources":["../../src/lib/install-targets.ts"],"names":[],"mappings":"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"}