@sfship/plugin-ship 1.0.0-beta.2

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 (229) hide show
  1. package/LICENSE.txt +206 -0
  2. package/README.md +164 -0
  3. package/lib/commands/ship/flow/eject.d.ts +15 -0
  4. package/lib/commands/ship/flow/eject.js +55 -0
  5. package/lib/commands/ship/flow/eject.js.map +1 -0
  6. package/lib/commands/ship/flow/info.d.ts +15 -0
  7. package/lib/commands/ship/flow/info.js +86 -0
  8. package/lib/commands/ship/flow/info.js.map +1 -0
  9. package/lib/commands/ship/flow/list.d.ts +12 -0
  10. package/lib/commands/ship/flow/list.js +51 -0
  11. package/lib/commands/ship/flow/list.js.map +1 -0
  12. package/lib/commands/ship/flow/run.d.ts +16 -0
  13. package/lib/commands/ship/flow/run.js +90 -0
  14. package/lib/commands/ship/flow/run.js.map +1 -0
  15. package/lib/commands/ship/project/init.d.ts +13 -0
  16. package/lib/commands/ship/project/init.js +81 -0
  17. package/lib/commands/ship/project/init.js.map +1 -0
  18. package/lib/commands/ship/service/connect/github.d.ts +12 -0
  19. package/lib/commands/ship/service/connect/github.js +47 -0
  20. package/lib/commands/ship/service/connect/github.js.map +1 -0
  21. package/lib/commands/ship/service/delete.d.ts +13 -0
  22. package/lib/commands/ship/service/delete.js +44 -0
  23. package/lib/commands/ship/service/delete.js.map +1 -0
  24. package/lib/commands/ship/service/info.d.ts +13 -0
  25. package/lib/commands/ship/service/info.js +51 -0
  26. package/lib/commands/ship/service/info.js.map +1 -0
  27. package/lib/commands/ship/service/list.d.ts +9 -0
  28. package/lib/commands/ship/service/list.js +55 -0
  29. package/lib/commands/ship/service/list.js.map +1 -0
  30. package/lib/commands/ship/task/info.d.ts +15 -0
  31. package/lib/commands/ship/task/info.js +75 -0
  32. package/lib/commands/ship/task/info.js.map +1 -0
  33. package/lib/commands/ship/task/list.d.ts +12 -0
  34. package/lib/commands/ship/task/list.js +45 -0
  35. package/lib/commands/ship/task/list.js.map +1 -0
  36. package/lib/commands/ship/task/run.d.ts +16 -0
  37. package/lib/commands/ship/task/run.js +72 -0
  38. package/lib/commands/ship/task/run.js.map +1 -0
  39. package/lib/core/config.dependency.schema.d.ts +24 -0
  40. package/lib/core/config.dependency.schema.js +34 -0
  41. package/lib/core/config.dependency.schema.js.map +1 -0
  42. package/lib/core/config.loader.d.ts +23 -0
  43. package/lib/core/config.loader.js +62 -0
  44. package/lib/core/config.loader.js.map +1 -0
  45. package/lib/core/config.ship.schema.d.ts +174 -0
  46. package/lib/core/config.ship.schema.js +67 -0
  47. package/lib/core/config.ship.schema.js.map +1 -0
  48. package/lib/core/error.d.ts +29 -0
  49. package/lib/core/error.js +59 -0
  50. package/lib/core/error.js.map +1 -0
  51. package/lib/core/file.d.ts +34 -0
  52. package/lib/core/file.js +123 -0
  53. package/lib/core/file.js.map +1 -0
  54. package/lib/core/flow.context.d.ts +22 -0
  55. package/lib/core/flow.context.js +4 -0
  56. package/lib/core/flow.context.js.map +1 -0
  57. package/lib/core/flow.definition.schema.d.ts +60 -0
  58. package/lib/core/flow.definition.schema.js +56 -0
  59. package/lib/core/flow.definition.schema.js.map +1 -0
  60. package/lib/core/flow.interpolate.d.ts +21 -0
  61. package/lib/core/flow.interpolate.js +64 -0
  62. package/lib/core/flow.interpolate.js.map +1 -0
  63. package/lib/core/flow.registry.d.ts +32 -0
  64. package/lib/core/flow.registry.js +99 -0
  65. package/lib/core/flow.registry.js.map +1 -0
  66. package/lib/core/flow.renderer.d.ts +51 -0
  67. package/lib/core/flow.renderer.js +137 -0
  68. package/lib/core/flow.renderer.js.map +1 -0
  69. package/lib/core/flow.runner.d.ts +13 -0
  70. package/lib/core/flow.runner.js +133 -0
  71. package/lib/core/flow.runner.js.map +1 -0
  72. package/lib/core/flow.store.d.ts +24 -0
  73. package/lib/core/flow.store.js +57 -0
  74. package/lib/core/flow.store.js.map +1 -0
  75. package/lib/core/flow.view.d.ts +20 -0
  76. package/lib/core/flow.view.js +77 -0
  77. package/lib/core/flow.view.js.map +1 -0
  78. package/lib/core/flows/create/package.yml +18 -0
  79. package/lib/core/flows/dependencies/lock.yml +4 -0
  80. package/lib/core/flows/deploy/beta.yml +38 -0
  81. package/lib/core/flows/deploy/dev.yml +26 -0
  82. package/lib/core/flows/deploy/feature.yml +56 -0
  83. package/lib/core/flows/deploy/qa.yml +51 -0
  84. package/lib/core/flows/deploy/regression.yml +60 -0
  85. package/lib/core/flows/deploy/release.yml +38 -0
  86. package/lib/core/flows/release/beta.yml +25 -0
  87. package/lib/core/flows/release/production.yml +16 -0
  88. package/lib/core/org.registry.d.ts +45 -0
  89. package/lib/core/org.registry.js +76 -0
  90. package/lib/core/org.registry.js.map +1 -0
  91. package/lib/core/org.scratch.schema.d.ts +44 -0
  92. package/lib/core/org.scratch.schema.js +62 -0
  93. package/lib/core/org.scratch.schema.js.map +1 -0
  94. package/lib/core/package.dependencies.d.ts +45 -0
  95. package/lib/core/package.dependencies.js +158 -0
  96. package/lib/core/package.dependencies.js.map +1 -0
  97. package/lib/core/package.installer.d.ts +13 -0
  98. package/lib/core/package.installer.js +60 -0
  99. package/lib/core/package.installer.js.map +1 -0
  100. package/lib/core/package.metadata.d.ts +6 -0
  101. package/lib/core/package.metadata.js +33 -0
  102. package/lib/core/package.metadata.js.map +1 -0
  103. package/lib/core/package.namespace.d.ts +10 -0
  104. package/lib/core/package.namespace.js +40 -0
  105. package/lib/core/package.namespace.js.map +1 -0
  106. package/lib/core/package.version.d.ts +42 -0
  107. package/lib/core/package.version.js +60 -0
  108. package/lib/core/package.version.js.map +1 -0
  109. package/lib/core/project.init.d.ts +11 -0
  110. package/lib/core/project.init.js +121 -0
  111. package/lib/core/project.init.js.map +1 -0
  112. package/lib/core/service.d.ts +45 -0
  113. package/lib/core/service.github.d.ts +98 -0
  114. package/lib/core/service.github.js +270 -0
  115. package/lib/core/service.github.js.map +1 -0
  116. package/lib/core/service.js +91 -0
  117. package/lib/core/service.js.map +1 -0
  118. package/lib/core/sfdx-project.d.ts +25 -0
  119. package/lib/core/sfdx-project.js +39 -0
  120. package/lib/core/sfdx-project.js.map +1 -0
  121. package/lib/core/stdout.d.ts +1 -0
  122. package/lib/core/stdout.js +27 -0
  123. package/lib/core/stdout.js.map +1 -0
  124. package/lib/core/task.definition.schema.d.ts +69 -0
  125. package/lib/core/task.definition.schema.js +33 -0
  126. package/lib/core/task.definition.schema.js.map +1 -0
  127. package/lib/core/task.output.d.ts +29 -0
  128. package/lib/core/task.output.js +39 -0
  129. package/lib/core/task.output.js.map +1 -0
  130. package/lib/core/task.param.d.ts +30 -0
  131. package/lib/core/task.param.js +141 -0
  132. package/lib/core/task.param.js.map +1 -0
  133. package/lib/core/task.param.schema.d.ts +22 -0
  134. package/lib/core/task.param.schema.js +26 -0
  135. package/lib/core/task.param.schema.js.map +1 -0
  136. package/lib/core/task.registry.d.ts +22 -0
  137. package/lib/core/task.registry.js +85 -0
  138. package/lib/core/task.registry.js.map +1 -0
  139. package/lib/core/task.view.d.ts +10 -0
  140. package/lib/core/task.view.js +25 -0
  141. package/lib/core/task.view.js.map +1 -0
  142. package/lib/core/tasks/apex/run/test.d.ts +25 -0
  143. package/lib/core/tasks/apex/run/test.js +85 -0
  144. package/lib/core/tasks/apex/run/test.js.map +1 -0
  145. package/lib/core/tasks/data/import/tree.d.ts +12 -0
  146. package/lib/core/tasks/data/import/tree.js +61 -0
  147. package/lib/core/tasks/data/import/tree.js.map +1 -0
  148. package/lib/core/tasks/git/release/create.d.ts +42 -0
  149. package/lib/core/tasks/git/release/create.js +197 -0
  150. package/lib/core/tasks/git/release/create.js.map +1 -0
  151. package/lib/core/tasks/git/release/fetch.d.ts +24 -0
  152. package/lib/core/tasks/git/release/fetch.js +93 -0
  153. package/lib/core/tasks/git/release/fetch.js.map +1 -0
  154. package/lib/core/tasks/git/repo/info.d.ts +12 -0
  155. package/lib/core/tasks/git/repo/info.js +47 -0
  156. package/lib/core/tasks/git/repo/info.js.map +1 -0
  157. package/lib/core/tasks/metadata/deploy.d.ts +12 -0
  158. package/lib/core/tasks/metadata/deploy.js +39 -0
  159. package/lib/core/tasks/metadata/deploy.js.map +1 -0
  160. package/lib/core/tasks/org/assign/permsets.d.ts +12 -0
  161. package/lib/core/tasks/org/assign/permsets.js +54 -0
  162. package/lib/core/tasks/org/assign/permsets.js.map +1 -0
  163. package/lib/core/tasks/org/create/scratch.d.ts +36 -0
  164. package/lib/core/tasks/org/create/scratch.js +127 -0
  165. package/lib/core/tasks/org/create/scratch.js.map +1 -0
  166. package/lib/core/tasks/org/delete/scratch.d.ts +12 -0
  167. package/lib/core/tasks/org/delete/scratch.js +10 -0
  168. package/lib/core/tasks/org/delete/scratch.js.map +1 -0
  169. package/lib/core/tasks/package/create.d.ts +36 -0
  170. package/lib/core/tasks/package/create.js +93 -0
  171. package/lib/core/tasks/package/create.js.map +1 -0
  172. package/lib/core/tasks/package/dependencies/lock.d.ts +6 -0
  173. package/lib/core/tasks/package/dependencies/lock.js +35 -0
  174. package/lib/core/tasks/package/dependencies/lock.js.map +1 -0
  175. package/lib/core/tasks/package/dependencies/verify.d.ts +6 -0
  176. package/lib/core/tasks/package/dependencies/verify.js +44 -0
  177. package/lib/core/tasks/package/dependencies/verify.js.map +1 -0
  178. package/lib/core/tasks/package/install/dependencies.d.ts +22 -0
  179. package/lib/core/tasks/package/install/dependencies.js +43 -0
  180. package/lib/core/tasks/package/install/dependencies.js.map +1 -0
  181. package/lib/core/tasks/package/install/index.d.ts +25 -0
  182. package/lib/core/tasks/package/install/index.js +37 -0
  183. package/lib/core/tasks/package/install/index.js.map +1 -0
  184. package/lib/core/tasks/package/version/create.d.ts +36 -0
  185. package/lib/core/tasks/package/version/create.js +133 -0
  186. package/lib/core/tasks/package/version/create.js.map +1 -0
  187. package/lib/core/tasks/package/version/promote.d.ts +30 -0
  188. package/lib/core/tasks/package/version/promote.js +79 -0
  189. package/lib/core/tasks/package/version/promote.js.map +1 -0
  190. package/lib/core/tasks/package/version/resolve-latest.d.ts +24 -0
  191. package/lib/core/tasks/package/version/resolve-latest.js +78 -0
  192. package/lib/core/tasks/package/version/resolve-latest.js.map +1 -0
  193. package/lib/core/tasks/package/version/resolve-next.d.ts +24 -0
  194. package/lib/core/tasks/package/version/resolve-next.js +49 -0
  195. package/lib/core/tasks/package/version/resolve-next.js.map +1 -0
  196. package/lib/core/tasks/project/deploy/start.d.ts +22 -0
  197. package/lib/core/tasks/project/deploy/start.js +117 -0
  198. package/lib/core/tasks/project/deploy/start.js.map +1 -0
  199. package/lib/core/tasks/project/reset/tracking.d.ts +25 -0
  200. package/lib/core/tasks/project/reset/tracking.js +32 -0
  201. package/lib/core/tasks/project/reset/tracking.js.map +1 -0
  202. package/lib/core/tasks/util/file/exists.d.ts +24 -0
  203. package/lib/core/tasks/util/file/exists.js +53 -0
  204. package/lib/core/tasks/util/file/exists.js.map +1 -0
  205. package/lib/core/tasks/util/file/find.d.ts +30 -0
  206. package/lib/core/tasks/util/file/find.js +70 -0
  207. package/lib/core/tasks/util/file/find.js.map +1 -0
  208. package/lib/core/tasks/util/log.d.ts +13 -0
  209. package/lib/core/tasks/util/log.js +10 -0
  210. package/lib/core/tasks/util/log.js.map +1 -0
  211. package/lib/core/templates/README.md +35 -0
  212. package/lib/core/tree.d.ts +7 -0
  213. package/lib/core/tree.js +42 -0
  214. package/lib/core/tree.js.map +1 -0
  215. package/messages/service.connect.github.md +16 -0
  216. package/messages/ship.flow.eject.md +21 -0
  217. package/messages/ship.flow.info.md +21 -0
  218. package/messages/ship.flow.list.md +15 -0
  219. package/messages/ship.flow.run.md +23 -0
  220. package/messages/ship.project.init.md +23 -0
  221. package/messages/ship.service.delete.md +19 -0
  222. package/messages/ship.service.info.md +19 -0
  223. package/messages/ship.service.list.md +11 -0
  224. package/messages/ship.task.info.md +25 -0
  225. package/messages/ship.task.list.md +15 -0
  226. package/messages/ship.task.run.md +29 -0
  227. package/oclif.lock +10313 -0
  228. package/oclif.manifest.json +707 -0
  229. package/package.json +254 -0
@@ -0,0 +1,51 @@
1
+ description: Set up a QA environment using the latest beta managed package.
2
+ steps:
3
+ create-org:
4
+ task: org/create/scratch
5
+ params:
6
+ scratch-def: qa
7
+ duration: 7
8
+ no-namespace: true
9
+ package-data:
10
+ task: git/release/fetch
11
+ params:
12
+ prerelease: true
13
+ update-dependencies:
14
+ task: package/install/dependencies
15
+ params:
16
+ target-org: ${{ steps.create-org.target-org }}
17
+ check-pre:
18
+ task: util/file/exists
19
+ params:
20
+ path: unpackaged/pre
21
+ deploy-pre:
22
+ if:
23
+ value: ${{ steps.check-pre.exists }}
24
+ task: project/deploy/start
25
+ params:
26
+ target-org: ${{ steps.create-org.target-org }}
27
+ source-dir: unpackaged/pre
28
+ install:
29
+ task: package/install
30
+ params:
31
+ target-org: ${{ steps.create-org.target-org }}
32
+ version-id: ${{ steps.package-data.version-id }}
33
+ check-post:
34
+ task: util/file/exists
35
+ params:
36
+ path: unpackaged/post
37
+ deploy-post:
38
+ if:
39
+ value: ${{ steps.check-post.exists }}
40
+ task: project/deploy/start
41
+ params:
42
+ target-org: ${{ steps.create-org.target-org }}
43
+ source-dir: unpackaged/post
44
+ assign-permsets:
45
+ task: org/assign/permsets
46
+ params:
47
+ target-org: ${{ steps.create-org.target-org }}
48
+ load-data:
49
+ task: data/import/tree
50
+ params:
51
+ target-org: ${{ steps.create-org.target-org }}
@@ -0,0 +1,60 @@
1
+ description: Simulate an upgrade from the latest production release to the latest beta, with full dependency and unpackaged metadata setup.
2
+ steps:
3
+ create-org:
4
+ task: org/create/scratch
5
+ params:
6
+ scratch-def: regression
7
+ duration: 1
8
+ no-namespace: true
9
+ find-release:
10
+ task: git/release/fetch
11
+ params:
12
+ prerelease: false
13
+ find-beta:
14
+ task: git/release/fetch
15
+ params:
16
+ prerelease: true
17
+ update-dependencies:
18
+ task: package/install/dependencies
19
+ params:
20
+ target-org: ${{ steps.create-org.target-org }}
21
+ check-pre:
22
+ task: util/file/exists
23
+ params:
24
+ path: unpackaged/pre
25
+ deploy-pre:
26
+ if:
27
+ value: ${{ steps.check-pre.exists }}
28
+ task: project/deploy/start
29
+ params:
30
+ target-org: ${{ steps.create-org.target-org }}
31
+ source-dir: unpackaged/pre
32
+ install-release:
33
+ task: package/install
34
+ params:
35
+ target-org: ${{ steps.create-org.target-org }}
36
+ version-id: ${{ steps.find-release.version-id }}
37
+ install-beta:
38
+ task: package/install
39
+ params:
40
+ target-org: ${{ steps.create-org.target-org }}
41
+ version-id: ${{ steps.find-beta.version-id }}
42
+ assign-permsets:
43
+ task: org/assign/permsets
44
+ params:
45
+ target-org: ${{ steps.create-org.target-org }}
46
+ check-post:
47
+ task: util/file/exists
48
+ params:
49
+ path: unpackaged/post
50
+ deploy-post:
51
+ if:
52
+ value: ${{ steps.check-post.exists }}
53
+ task: project/deploy/start
54
+ params:
55
+ target-org: ${{ steps.create-org.target-org }}
56
+ source-dir: unpackaged/post
57
+ load-data:
58
+ task: data/import/tree
59
+ params:
60
+ target-org: ${{ steps.create-org.target-org }}
@@ -0,0 +1,38 @@
1
+ description: Install the latest production release into a fresh scratch org and run Apex tests.
2
+ steps:
3
+ create-org:
4
+ task: org/create/scratch
5
+ params:
6
+ scratch-def: release
7
+ duration: 1
8
+ no-namespace: true
9
+ find-release:
10
+ task: git/release/fetch
11
+ params:
12
+ prerelease: false
13
+ update-dependencies:
14
+ task: package/install/dependencies
15
+ params:
16
+ target-org: ${{ steps.create-org.target-org }}
17
+ install:
18
+ task: package/install
19
+ params:
20
+ target-org: ${{ steps.create-org.target-org }}
21
+ version-id: ${{ steps.find-release.version-id }}
22
+ assign-permsets:
23
+ task: org/assign/permsets
24
+ params:
25
+ target-org: ${{ steps.create-org.target-org }}
26
+ find-test-classes:
27
+ task: util/file/find
28
+ params:
29
+ path: force-app/main/default/classes
30
+ pattern: ${{ config.project.package.testPattern }}
31
+ run-tests:
32
+ if:
33
+ value: ${{ steps.find-test-classes.count }}
34
+ task: apex/run/test
35
+ params:
36
+ target-org: ${{ steps.create-org.target-org }}
37
+ class-names: ${{ steps.find-test-classes.files }}
38
+ namespace: ${{ config.project.package.namespace }}
@@ -0,0 +1,25 @@
1
+ description: Build a beta managed package version and release it on GitHub.
2
+ params:
3
+ - name: version-type
4
+ type: string
5
+ required: false
6
+ default: minor
7
+ description: Which part of the version to bump relative to the latest released version. One of build, patch, minor, major.
8
+ steps:
9
+ verify-dependencies:
10
+ task: package/dependencies/verify
11
+ resolve-next:
12
+ task: package/version/resolve-next
13
+ params:
14
+ version-type: ${{ params.version-type }}
15
+ create-version:
16
+ task: package/version/create
17
+ params:
18
+ code-coverage: true
19
+ version-number: ${{ steps.resolve-next.version-number }}
20
+ github-release:
21
+ task: git/release/create
22
+ params:
23
+ tag: v${{ steps.create-version.version-number }}
24
+ version-id: ${{ steps.create-version.version-id }}
25
+ prerelease: true
@@ -0,0 +1,16 @@
1
+ description: Promote the latest beta to released and create a production GitHub release.
2
+ steps:
3
+ find-beta:
4
+ task: git/release/fetch
5
+ params:
6
+ prerelease: true
7
+ promote:
8
+ task: package/version/promote
9
+ params:
10
+ version-id: ${{ steps.find-beta.version-id }}
11
+ github-release:
12
+ task: git/release/create
13
+ params:
14
+ tag: v${{ steps.find-beta.version-base }}
15
+ version-id: ${{ steps.promote.version-id }}
16
+ prerelease: false
@@ -0,0 +1,45 @@
1
+ import { Org } from '@salesforce/core';
2
+ import { ScratchOrgDef } from './org.scratch.schema.js';
3
+ /**
4
+ * Manages lazy-loaded Salesforce `Org` instances and scratch org definitions
5
+ * for a flow run. Caches both to avoid redundant filesystem reads and
6
+ * `Org.create()` calls across tasks.
7
+ */
8
+ export declare class OrgRegistry {
9
+ private readonly orgsDir;
10
+ private readonly projectName?;
11
+ private orgs;
12
+ private defs;
13
+ /**
14
+ * @param orgsDir - Path to the directory containing scratch org definition JSON files.
15
+ * @param projectName - Optional project name used to qualify org aliases (e.g. `"myproject:dev"`).
16
+ */
17
+ constructor(orgsDir: string, projectName?: string | undefined);
18
+ /**
19
+ * Resolves an org identifier to a qualified alias or username for use with `Org.create()`.
20
+ *
21
+ * Resolution order:
22
+ * 1. If a def file exists in the orgs directory, qualifies as `<projectName>:<alias>`.
23
+ * 2. If the input contains `@`, treats it as a Salesforce username and returns as-is.
24
+ * 3. Otherwise assumes it is an SF CLI alias and returns as-is.
25
+ *
26
+ * @param alias - A project alias, Salesforce username, or SF CLI alias.
27
+ */
28
+ resolveAlias(alias: string): string;
29
+ resolveAlias(alias: string | undefined): string | undefined;
30
+ /**
31
+ * Returns an Org instance for the given alias,
32
+ * creating and caching it if it hasn't been instantiated yet.
33
+ * Automatically qualifies the alias using the project naming convention.
34
+ *
35
+ * @param alias - The raw org alias, e.g. "dev".
36
+ */
37
+ getOrg(alias: string): Promise<Org>;
38
+ /**
39
+ * Returns the scratch org definition for the given alias,
40
+ * reading and caching the JSON file if it hasn't been loaded yet.
41
+ *
42
+ * @param alias - The scratch org alias, e.g. "dev".
43
+ */
44
+ getDef(alias: string): ScratchOrgDef;
45
+ }
@@ -0,0 +1,76 @@
1
+ /*
2
+ * Licensed under the Apache License, Version 2.0 (the "License");
3
+ * you may not use this file except in compliance with the License.
4
+ * You may obtain a copy of the License at
5
+ *
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Unless required by applicable law or agreed to in writing, software
9
+ * distributed under the License is distributed on an "AS IS" BASIS,
10
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ * See the License for the specific language governing permissions and
12
+ * limitations under the License.
13
+ */
14
+ import { resolve } from 'node:path';
15
+ import { Org } from '@salesforce/core';
16
+ import { ScratchOrgDefSchema } from './org.scratch.schema.js';
17
+ import { fileExists, readText } from './file.js';
18
+ import { ExpectedError } from './error.js';
19
+ /**
20
+ * Manages lazy-loaded Salesforce `Org` instances and scratch org definitions
21
+ * for a flow run. Caches both to avoid redundant filesystem reads and
22
+ * `Org.create()` calls across tasks.
23
+ */
24
+ export class OrgRegistry {
25
+ orgsDir;
26
+ projectName;
27
+ orgs = new Map();
28
+ defs = new Map();
29
+ /**
30
+ * @param orgsDir - Path to the directory containing scratch org definition JSON files.
31
+ * @param projectName - Optional project name used to qualify org aliases (e.g. `"myproject:dev"`).
32
+ */
33
+ constructor(orgsDir, projectName) {
34
+ this.orgsDir = orgsDir;
35
+ this.projectName = projectName;
36
+ }
37
+ resolveAlias(alias) {
38
+ if (alias === undefined)
39
+ return undefined;
40
+ const defPath = resolve(this.orgsDir, `${alias}.json`);
41
+ if (fileExists(defPath))
42
+ return this.projectName ? `${this.projectName}:${alias}` : alias;
43
+ return alias;
44
+ }
45
+ /**
46
+ * Returns an Org instance for the given alias,
47
+ * creating and caching it if it hasn't been instantiated yet.
48
+ * Automatically qualifies the alias using the project naming convention.
49
+ *
50
+ * @param alias - The raw org alias, e.g. "dev".
51
+ */
52
+ async getOrg(alias) {
53
+ const qualified = this.resolveAlias(alias);
54
+ if (!this.orgs.has(qualified)) {
55
+ this.orgs.set(qualified, await Org.create({ aliasOrUsername: qualified }));
56
+ }
57
+ return this.orgs.get(qualified);
58
+ }
59
+ /**
60
+ * Returns the scratch org definition for the given alias,
61
+ * reading and caching the JSON file if it hasn't been loaded yet.
62
+ *
63
+ * @param alias - The scratch org alias, e.g. "dev".
64
+ */
65
+ getDef(alias) {
66
+ if (!this.defs.has(alias)) {
67
+ const defPath = resolve(this.orgsDir, `${alias}.json`);
68
+ if (!fileExists(defPath)) {
69
+ throw new ExpectedError(`No scratch org definition found for alias "${alias}" at ${defPath}`);
70
+ }
71
+ this.defs.set(alias, ScratchOrgDefSchema.parse(JSON.parse(readText(defPath))));
72
+ }
73
+ return this.defs.get(alias);
74
+ }
75
+ }
76
+ //# sourceMappingURL=org.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org.registry.js","sourceRoot":"","sources":["../../src/core/org.registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAiB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAQc;IAAkC;IAP9D,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IAC9B,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEhD;;;OAGG;IACH,YAAoC,OAAe,EAAmB,WAAoB;QAAtD,YAAO,GAAP,OAAO,CAAQ;QAAmB,gBAAW,GAAX,WAAW,CAAS;IAAG,CAAC;IAcvF,YAAY,CAAC,KAAyB;QAC3C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1F,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CAAC,KAAa;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAa;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,aAAa,CAAC,8CAA8C,KAAK,QAAQ,OAAO,EAAE,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for a Salesforce scratch org definition file.
4
+ * Mirrors the shape of a `project-scratch-def.json`, with strict validation
5
+ * on known fields and `catchall` to allow unknown Salesforce-specific extensions.
6
+ */
7
+ export declare const ScratchOrgDefSchema: z.ZodObject<{
8
+ edition: z.ZodEnum<{
9
+ Developer: "Developer";
10
+ Enterprise: "Enterprise";
11
+ Group: "Group";
12
+ Professional: "Professional";
13
+ }>;
14
+ orgName: z.ZodOptional<z.ZodString>;
15
+ country: z.ZodOptional<z.ZodString>;
16
+ username: z.ZodOptional<z.ZodString>;
17
+ adminEmail: z.ZodOptional<z.ZodEmail>;
18
+ description: z.ZodOptional<z.ZodString>;
19
+ hasSampleData: z.ZodOptional<z.ZodBoolean>;
20
+ language: z.ZodOptional<z.ZodString>;
21
+ features: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ release: z.ZodOptional<z.ZodEnum<{
23
+ preview: "preview";
24
+ previous: "previous";
25
+ }>>;
26
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
27
+ objectSettings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
28
+ sharingModel: z.ZodOptional<z.ZodEnum<{
29
+ private: "private";
30
+ read: "read";
31
+ readWrite: "readWrite";
32
+ readWriteTransfer: "readWriteTransfer";
33
+ fullAccess: "fullAccess";
34
+ controlledByParent: "controlledByParent";
35
+ controlledByCampaign: "controlledByCampaign";
36
+ controlledByLeadOrContent: "controlledByLeadOrContent";
37
+ }>>;
38
+ defaultRecordType: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>>>;
40
+ snapshot: z.ZodOptional<z.ZodString>;
41
+ sourceOrg: z.ZodOptional<z.ZodString>;
42
+ }, z.core.$catchall<z.ZodUnknown>>;
43
+ /** A validated scratch org definition, inferred from {@link ScratchOrgDefSchema}. */
44
+ export type ScratchOrgDef = z.infer<typeof ScratchOrgDefSchema>;
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Licensed under the Apache License, Version 2.0 (the "License");
3
+ * you may not use this file except in compliance with the License.
4
+ * You may obtain a copy of the License at
5
+ *
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Unless required by applicable law or agreed to in writing, software
9
+ * distributed under the License is distributed on an "AS IS" BASIS,
10
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ * See the License for the specific language governing permissions and
12
+ * limitations under the License.
13
+ */
14
+ import { z } from 'zod';
15
+ /** Valid sharing models for a Salesforce scratch org object. */
16
+ const ScratchOrgSharingModelSchema = z.enum([
17
+ 'private',
18
+ 'read',
19
+ 'readWrite',
20
+ 'readWriteTransfer',
21
+ 'fullAccess',
22
+ 'controlledByParent',
23
+ 'controlledByCampaign',
24
+ 'controlledByLeadOrContent',
25
+ ]);
26
+ /** Per-object settings that can be applied to a scratch org definition. */
27
+ const ScratchOrgObjectSettingSchema = z.object({
28
+ sharingModel: ScratchOrgSharingModelSchema.optional(),
29
+ defaultRecordType: z.string().optional(),
30
+ });
31
+ /**
32
+ * Zod schema for a Salesforce scratch org definition file.
33
+ * Mirrors the shape of a `project-scratch-def.json`, with strict validation
34
+ * on known fields and `catchall` to allow unknown Salesforce-specific extensions.
35
+ */
36
+ export const ScratchOrgDefSchema = z
37
+ .object({
38
+ /** The Salesforce edition for the scratch org. */
39
+ edition: z.enum(['Developer', 'Enterprise', 'Group', 'Professional']),
40
+ orgName: z.string().optional(),
41
+ country: z.string().optional(),
42
+ username: z.string().optional(),
43
+ adminEmail: z.email().optional(),
44
+ /** Max 2000 characters. */
45
+ description: z.string().max(2000).optional(),
46
+ hasSampleData: z.boolean().optional(),
47
+ language: z.string().optional(),
48
+ /** List of Salesforce features to enable (e.g. `'Communities'`, `'LightningSalesConsole'`). */
49
+ features: z.array(z.string()).optional(),
50
+ release: z.enum(['preview', 'previous']).optional(),
51
+ /** Org-wide settings, keyed by settings API name. */
52
+ settings: z.record(z.string(), z.unknown()).optional(),
53
+ /** Per-object sharing and record type settings. */
54
+ objectSettings: z.record(z.string(), ScratchOrgObjectSettingSchema).optional(),
55
+ /** Name of an org snapshot to create the scratch org from. */
56
+ snapshot: z.string().optional(),
57
+ /** 15-character org ID of a source org to copy settings from. */
58
+ sourceOrg: z.string().length(15).optional(),
59
+ })
60
+ .catchall(z.unknown());
61
+ /* c8 ignore stop */
62
+ //# sourceMappingURL=org.scratch.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org.scratch.schema.js","sourceRoot":"","sources":["../../src/core/org.scratch.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,MAAM,4BAA4B,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1C,SAAS;IACT,MAAM;IACN,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,oBAAoB;IACpB,sBAAsB;IACtB,2BAA2B;CAC5B,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,YAAY,EAAE,4BAA4B,CAAC,QAAQ,EAAE;IACrD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,kDAAkD;IAClD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IAChC,2BAA2B;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAC5C,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,+FAA+F;IAC/F,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnD,qDAAqD;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,mDAAmD;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,6BAA6B,CAAC,CAAC,QAAQ,EAAE;IAC9E,8DAA8D;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,iEAAiE;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAIzB,oBAAoB"}
@@ -0,0 +1,45 @@
1
+ import type { ShipDependency } from './config.dependency.schema.js';
2
+ import { type SfdxProject } from './sfdx-project.js';
3
+ /** Install a specific package version by its 04t ID. */
4
+ export type PackageIdStep = {
5
+ kind: 'package-id';
6
+ versionId: string;
7
+ name?: string;
8
+ };
9
+ /** Deploy a subdirectory from a GitHub repository as metadata, with namespace tokens injected. */
10
+ export type MetadataStep = {
11
+ kind: 'metadata';
12
+ repoUrl: string;
13
+ subfolder: string;
14
+ namespace: string;
15
+ tag: string;
16
+ /** 04t package version ID of the release this bundle ships with — lets the installer skip it when already present. */
17
+ versionId: string;
18
+ };
19
+ /** A single resolved install or deploy step produced by the dependency resolver. */
20
+ export type DependencyStep = PackageIdStep | MetadataStep;
21
+ /**
22
+ * Resolves a `ship.yml` dependency list into a flat, ordered list of install and deploy steps.
23
+ *
24
+ * GitHub dependencies are resolved by reading the annotated tag message on the repo's latest
25
+ * (or pinned) release. The tag carries the package's own version_id and a pre-flattened
26
+ * transitive dependency list, so no recursive remote config fetching is needed. The format
27
+ * is inherited from CumulusCI so ship- and CCI-released packages resolve uniformly.
28
+ *
29
+ * Duplicate packages are deduplicated — the first occurrence wins. Circular GitHub repository
30
+ * references throw.
31
+ *
32
+ * @param deps - The top-level dependency list from `ship.yml`.
33
+ * @returns Ordered list of {@link DependencyStep} ready for execution.
34
+ */
35
+ export declare function resolveDependencies(deps: ShipDependency[]): Promise<DependencyStep[]>;
36
+ export type DriftResult = {
37
+ /** Version IDs present in ship.yml but missing from sfdx-project.json. */
38
+ missing: string[];
39
+ /** Version IDs present in sfdx-project.json but no longer in ship.yml. */
40
+ stale: string[];
41
+ /** versionId → human-readable name, gathered from both sides for use in error output. */
42
+ names: Map<string, string>;
43
+ };
44
+ /** Compares resolved ship.yml package-id steps against the dependencies committed in sfdx-project.json. */
45
+ export declare function computeDrift(steps: PackageIdStep[], project: SfdxProject): DriftResult;
@@ -0,0 +1,158 @@
1
+ import { ExpectedError } from './error.js';
2
+ import { normalizeRepo, fetchRelease, fetchGitTag, fetchCciNamespace, fetchSubdirs } from './service.github.js';
3
+ import { defaultPackageDirectory } from './sfdx-project.js';
4
+ /**
5
+ * Parses a release's annotated tag message into its version ID and dependency list.
6
+ * Returns `null` if the message does not contain the expected structured block.
7
+ *
8
+ * The format originated with CumulusCI and is inherited unchanged so ship- and
9
+ * CCI-released packages resolve through the same path:
10
+ * ```
11
+ * version_id: 04tXXX
12
+ * package_type: 2GP
13
+ * dependencies: [{"version_id": "04tYYY", "package_name": "..."}]
14
+ * ```
15
+ */
16
+ function parseTagMessage(message) {
17
+ const versionIdMatch = message.match(/^version_id:\s*(04t[A-Za-z0-9]{12,15})/m);
18
+ if (!versionIdMatch)
19
+ return null;
20
+ let dependencies = [];
21
+ const depsPrefixIndex = message.indexOf('dependencies:');
22
+ if (depsPrefixIndex !== -1) {
23
+ const afterDeps = message.slice(depsPrefixIndex + 'dependencies:'.length).trim();
24
+ if (afterDeps.startsWith('[')) {
25
+ try {
26
+ dependencies = JSON.parse(afterDeps);
27
+ }
28
+ catch {
29
+ // leave as empty array
30
+ }
31
+ }
32
+ }
33
+ return { versionId: versionIdMatch[1], dependencies };
34
+ }
35
+ /**
36
+ * Resolves a GitHub repository dependency into an ordered list of steps.
37
+ *
38
+ * Reads the annotated tag message on the latest (or pinned) release for the package
39
+ * version ID and its pre-flattened transitive dependency list, and discovers any
40
+ * `unpackaged/pre` / `unpackaged/post` subdirectories to deploy before and after the
41
+ * package install.
42
+ */
43
+ async function resolveGitHubRepo(dep, visited) {
44
+ const { github, tag, name } = dep;
45
+ const repo = normalizeRepo(github);
46
+ // Circular dependency detection — added synchronously before the first await
47
+ // so it is safe to call from Promise.all.
48
+ if (visited.has(repo))
49
+ throw new ExpectedError(`Circular dependency detected: ${repo}`);
50
+ visited.add(repo);
51
+ const release = await fetchRelease(repo, tag);
52
+ if (!release)
53
+ throw new ExpectedError(`No GitHub release found for ${repo}${tag ? `@${tag}` : ''}`);
54
+ const [gitTag, namespace, preSubdirs, postSubdirs] = await Promise.all([
55
+ fetchGitTag(repo, release.tagName),
56
+ fetchCciNamespace(repo, release.tagName),
57
+ fetchSubdirs(repo, release.tagName, 'unpackaged/pre'),
58
+ fetchSubdirs(repo, release.tagName, 'unpackaged/post'),
59
+ ]);
60
+ const metadata = gitTag ? parseTagMessage(gitTag.message) : null;
61
+ if (!metadata)
62
+ throw new ExpectedError(`No release metadata found in tag ${release.tagName} for ${repo}`);
63
+ const steps = [];
64
+ const repoUrl = `https://github.com/${repo}`;
65
+ for (const subfolder of preSubdirs) {
66
+ const key = `${repo}:${subfolder}`;
67
+ if (!visited.has(key)) {
68
+ visited.add(key);
69
+ steps.push({
70
+ kind: 'metadata',
71
+ repoUrl,
72
+ subfolder,
73
+ namespace,
74
+ tag: release.tagName,
75
+ versionId: metadata.versionId,
76
+ });
77
+ }
78
+ }
79
+ for (const transitive of metadata.dependencies) {
80
+ if (!visited.has(transitive.version_id)) {
81
+ visited.add(transitive.version_id);
82
+ steps.push({ kind: 'package-id', versionId: transitive.version_id, name: transitive.package_name });
83
+ }
84
+ }
85
+ if (!visited.has(metadata.versionId)) {
86
+ visited.add(metadata.versionId);
87
+ steps.push({ kind: 'package-id', versionId: metadata.versionId, name });
88
+ }
89
+ for (const subfolder of postSubdirs) {
90
+ const key = `${repo}:${subfolder}`;
91
+ if (!visited.has(key)) {
92
+ visited.add(key);
93
+ steps.push({
94
+ kind: 'metadata',
95
+ repoUrl,
96
+ subfolder,
97
+ namespace,
98
+ tag: release.tagName,
99
+ versionId: metadata.versionId,
100
+ });
101
+ }
102
+ }
103
+ return steps;
104
+ }
105
+ /** Resolves a list of plugin-ship dependencies into an ordered list of steps. */
106
+ async function resolveShipDeps(deps, visited) {
107
+ return (await Promise.all(deps.map((dep) => {
108
+ // Resolve GitHub dependency
109
+ if ('github' in dep) {
110
+ return resolveGitHubRepo(dep, visited);
111
+ }
112
+ // Resolve 04t dependency
113
+ if (visited.has(dep.versionId))
114
+ return [];
115
+ visited.add(dep.versionId);
116
+ return [{ kind: 'package-id', versionId: dep.versionId, name: dep.name }];
117
+ }))).flat();
118
+ }
119
+ /**
120
+ * Resolves a `ship.yml` dependency list into a flat, ordered list of install and deploy steps.
121
+ *
122
+ * GitHub dependencies are resolved by reading the annotated tag message on the repo's latest
123
+ * (or pinned) release. The tag carries the package's own version_id and a pre-flattened
124
+ * transitive dependency list, so no recursive remote config fetching is needed. The format
125
+ * is inherited from CumulusCI so ship- and CCI-released packages resolve uniformly.
126
+ *
127
+ * Duplicate packages are deduplicated — the first occurrence wins. Circular GitHub repository
128
+ * references throw.
129
+ *
130
+ * @param deps - The top-level dependency list from `ship.yml`.
131
+ * @returns Ordered list of {@link DependencyStep} ready for execution.
132
+ */
133
+ export async function resolveDependencies(deps) {
134
+ return resolveShipDeps(deps, new Set());
135
+ }
136
+ /** Compares resolved ship.yml package-id steps against the dependencies committed in sfdx-project.json. */
137
+ export function computeDrift(steps, project) {
138
+ const expected = new Set(steps.map((s) => s.versionId));
139
+ const names = new Map();
140
+ for (const step of steps) {
141
+ if (step.name)
142
+ names.set(step.versionId, step.name);
143
+ }
144
+ const aliases = project.packageAliases ?? {};
145
+ const committed = new Set();
146
+ for (const dep of defaultPackageDirectory(project)?.dependencies ?? []) {
147
+ const versionId = aliases[dep.package] ?? dep.package;
148
+ committed.add(versionId);
149
+ if (dep.package !== versionId && !names.has(versionId))
150
+ names.set(versionId, dep.package);
151
+ }
152
+ return {
153
+ missing: [...expected].filter((id) => !committed.has(id)),
154
+ stale: [...committed].filter((id) => !expected.has(id)),
155
+ names,
156
+ };
157
+ }
158
+ //# sourceMappingURL=package.dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.dependencies.js","sourceRoot":"","sources":["../../src/core/package.dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ShipDependency } from './config.dependency.schema.js';
2
+ import { type DependencyStep } from './package.dependencies.js';
3
+ export declare function describeStep(step: DependencyStep): string;
4
+ export type InstallDependenciesOptions = {
5
+ alias: string | undefined;
6
+ wait: number;
7
+ dryRun: boolean;
8
+ force: boolean;
9
+ shipDir: string;
10
+ log: (msg: string) => void;
11
+ runCommand: (id: string, argv: string[]) => Promise<unknown>;
12
+ };
13
+ export declare function installDependencies(deps: ShipDependency[], options: InstallDependenciesOptions): Promise<void>;