@backstage/cli 0.36.0-next.2 → 0.36.1-next.0

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 (276) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/config/eslint-factory.js +1 -0
  3. package/config/getJestEnvironment.js +7 -29
  4. package/config/jest-environment-jsdom/index.js +9 -43
  5. package/config/jest.js +7 -401
  6. package/config/jestCacheResultProcessor.cjs +10 -6
  7. package/config/jestCachingModuleLoader.js +11 -19
  8. package/config/jestFileTransform.js +11 -28
  9. package/config/jestRejectNetworkRequests.js +10 -53
  10. package/config/jestSucraseTransform.js +10 -70
  11. package/config/jestSwcTransform.js +10 -27
  12. package/config/jestYamlTransform.js +11 -24
  13. package/config/nodeTransform.cjs +10 -70
  14. package/config/nodeTransformHooks.mjs +4 -278
  15. package/config/webpack-public-path.js +10 -14
  16. package/dist/cli-internal/src/InternalCliModule.cjs.js +11 -0
  17. package/dist/cli-internal/src/InternalCommandNode.cjs.js +25 -0
  18. package/dist/cli-internal/src/knownPluginPackages.cjs.js +40 -0
  19. package/dist/index.cjs.js +21 -11
  20. package/dist/wiring/CliInitializer.cjs.js +61 -30
  21. package/dist/wiring/CommandGraph.cjs.js +81 -23
  22. package/dist/wiring/discoverCliModules.cjs.js +44 -0
  23. package/package.json +23 -156
  24. package/dist/modules/auth/commands/list.cjs.js +0 -23
  25. package/dist/modules/auth/commands/login.cjs.js +0 -316
  26. package/dist/modules/auth/commands/logout.cjs.js +0 -55
  27. package/dist/modules/auth/commands/printToken.cjs.js +0 -41
  28. package/dist/modules/auth/commands/select.cjs.js +0 -32
  29. package/dist/modules/auth/commands/show.cjs.js +0 -59
  30. package/dist/modules/auth/index.cjs.js +0 -44
  31. package/dist/modules/auth/lib/auth.cjs.js +0 -60
  32. package/dist/modules/auth/lib/http.cjs.js +0 -26
  33. package/dist/modules/auth/lib/localServer.cjs.js +0 -80
  34. package/dist/modules/auth/lib/pkce.cjs.js +0 -23
  35. package/dist/modules/auth/lib/prompt.cjs.js +0 -44
  36. package/dist/modules/auth/lib/secretStore.cjs.js +0 -81
  37. package/dist/modules/auth/lib/storage.cjs.js +0 -152
  38. package/dist/modules/build/commands/buildWorkspace.cjs.js +0 -53
  39. package/dist/modules/build/commands/package/build/command.cjs.js +0 -136
  40. package/dist/modules/build/commands/package/build/index.cjs.js +0 -10
  41. package/dist/modules/build/commands/package/clean.cjs.js +0 -21
  42. package/dist/modules/build/commands/package/postpack.cjs.js +0 -15
  43. package/dist/modules/build/commands/package/prepack.cjs.js +0 -29
  44. package/dist/modules/build/commands/package/start/command.cjs.js +0 -80
  45. package/dist/modules/build/commands/package/start/index.cjs.js +0 -10
  46. package/dist/modules/build/commands/package/start/resolveLinkedWorkspace.cjs.js +0 -34
  47. package/dist/modules/build/commands/package/start/startBackend.cjs.js +0 -46
  48. package/dist/modules/build/commands/package/start/startFrontend.cjs.js +0 -50
  49. package/dist/modules/build/commands/package/start/startPackage.cjs.js +0 -53
  50. package/dist/modules/build/commands/repo/build.cjs.js +0 -149
  51. package/dist/modules/build/commands/repo/clean.cjs.js +0 -41
  52. package/dist/modules/build/commands/repo/start.cjs.js +0 -199
  53. package/dist/modules/build/index.cjs.js +0 -68
  54. package/dist/modules/build/lib/buildBackend.cjs.js +0 -81
  55. package/dist/modules/build/lib/buildFrontend.cjs.js +0 -50
  56. package/dist/modules/build/lib/builder/config.cjs.js +0 -257
  57. package/dist/modules/build/lib/builder/packager.cjs.js +0 -131
  58. package/dist/modules/build/lib/builder/plugins.cjs.js +0 -125
  59. package/dist/modules/build/lib/builder/types.cjs.js +0 -10
  60. package/dist/modules/build/lib/bundler/ConfigInjectingHtmlWebpackPlugin.cjs.js +0 -43
  61. package/dist/modules/build/lib/bundler/bundle.cjs.js +0 -189
  62. package/dist/modules/build/lib/bundler/config.cjs.js +0 -308
  63. package/dist/modules/build/lib/bundler/hasReactDomClient.cjs.js +0 -17
  64. package/dist/modules/build/lib/bundler/linkWorkspaces.cjs.js +0 -34
  65. package/dist/modules/build/lib/bundler/moduleFederation.cjs.js +0 -135
  66. package/dist/modules/build/lib/bundler/optimization.cjs.js +0 -68
  67. package/dist/modules/build/lib/bundler/packageDetection.cjs.js +0 -124
  68. package/dist/modules/build/lib/bundler/paths.cjs.js +0 -62
  69. package/dist/modules/build/lib/bundler/server.cjs.js +0 -231
  70. package/dist/modules/build/lib/bundler/transforms.cjs.js +0 -145
  71. package/dist/modules/build/lib/config.cjs.js +0 -94
  72. package/dist/modules/build/lib/entryPoints.cjs.js +0 -49
  73. package/dist/modules/build/lib/ipc/IpcServer.cjs.js +0 -60
  74. package/dist/modules/build/lib/ipc/ServerDataStore.cjs.js +0 -36
  75. package/dist/modules/build/lib/optionsParser.cjs.js +0 -22
  76. package/dist/modules/build/lib/packager/createDistWorkspace.cjs.js +0 -235
  77. package/dist/modules/build/lib/packager/productionPack.cjs.js +0 -160
  78. package/dist/modules/build/lib/publishing.cjs.js +0 -40
  79. package/dist/modules/build/lib/role.cjs.js +0 -24
  80. package/dist/modules/build/lib/runner/runBackend.cjs.js +0 -136
  81. package/dist/modules/build/lib/typeDistProject.cjs.js +0 -89
  82. package/dist/modules/build/lib/urls.cjs.js +0 -13
  83. package/dist/modules/config/commands/docs.cjs.js +0 -63
  84. package/dist/modules/config/commands/print.cjs.js +0 -81
  85. package/dist/modules/config/commands/schema.cjs.js +0 -56
  86. package/dist/modules/config/commands/validate.cjs.js +0 -50
  87. package/dist/modules/config/index.cjs.js +0 -51
  88. package/dist/modules/config/lib/config.cjs.js +0 -94
  89. package/dist/modules/create-github-app/commands/create-github-app/GithubCreateAppServer.cjs.js +0 -127
  90. package/dist/modules/create-github-app/commands/create-github-app/index.cjs.js +0 -126
  91. package/dist/modules/create-github-app/index.cjs.js +0 -19
  92. package/dist/modules/info/commands/info.cjs.js +0 -182
  93. package/dist/modules/info/index.cjs.js +0 -19
  94. package/dist/modules/lint/commands/package/lint.cjs.js +0 -78
  95. package/dist/modules/lint/commands/repo/lint.cjs.js +0 -282
  96. package/dist/modules/lint/index.cjs.js +0 -24
  97. package/dist/modules/lint/lib/optionsParser.cjs.js +0 -22
  98. package/dist/modules/maintenance/commands/repo/fix.cjs.js +0 -426
  99. package/dist/modules/maintenance/commands/repo/list-deprecations.cjs.js +0 -90
  100. package/dist/modules/maintenance/index.cjs.js +0 -24
  101. package/dist/modules/migrate/commands/packageExports.cjs.js +0 -15
  102. package/dist/modules/migrate/commands/packageLintConfigs.cjs.js +0 -77
  103. package/dist/modules/migrate/commands/packageRole.cjs.js +0 -57
  104. package/dist/modules/migrate/commands/packageScripts.cjs.js +0 -87
  105. package/dist/modules/migrate/commands/reactRouterDeps.cjs.js +0 -51
  106. package/dist/modules/migrate/commands/versions/bump.cjs.js +0 -403
  107. package/dist/modules/migrate/commands/versions/migrate.cjs.js +0 -133
  108. package/dist/modules/migrate/index.cjs.js +0 -59
  109. package/dist/modules/migrate/lib/utils.cjs.js +0 -44
  110. package/dist/modules/migrate/lib/versioning/packages.cjs.js +0 -71
  111. package/dist/modules/migrate/lib/versioning/yarn.cjs.js +0 -28
  112. package/dist/modules/new/commands/new.cjs.js +0 -115
  113. package/dist/modules/new/index.cjs.js +0 -40
  114. package/dist/modules/new/lib/codeowners/codeowners.cjs.js +0 -92
  115. package/dist/modules/new/lib/createNewPackage.cjs.js +0 -32
  116. package/dist/modules/new/lib/defaultTemplates.cjs.js +0 -17
  117. package/dist/modules/new/lib/execution/PortableTemplater.cjs.js +0 -89
  118. package/dist/modules/new/lib/execution/executePortableTemplate.cjs.js +0 -66
  119. package/dist/modules/new/lib/execution/installNewPackage.cjs.js +0 -127
  120. package/dist/modules/new/lib/execution/writeTemplateContents.cjs.js +0 -116
  121. package/dist/modules/new/lib/preparation/collectPortableTemplateInput.cjs.js +0 -157
  122. package/dist/modules/new/lib/preparation/loadPortableTemplate.cjs.js +0 -81
  123. package/dist/modules/new/lib/preparation/loadPortableTemplateConfig.cjs.js +0 -132
  124. package/dist/modules/new/lib/preparation/resolvePackageParams.cjs.js +0 -40
  125. package/dist/modules/new/lib/preparation/selectTemplateInteractively.cjs.js +0 -38
  126. package/dist/modules/new/lib/tasks.cjs.js +0 -51
  127. package/dist/modules/new/lib/types.cjs.js +0 -19
  128. package/dist/modules/new/lib/version.cjs.js +0 -91
  129. package/dist/modules/test/commands/package/test.cjs.js +0 -59
  130. package/dist/modules/test/commands/repo/test.cjs.js +0 -299
  131. package/dist/modules/test/index.cjs.js +0 -24
  132. package/dist/modules/translations/commands/export.cjs.js +0 -128
  133. package/dist/modules/translations/commands/import.cjs.js +0 -165
  134. package/dist/modules/translations/index.cjs.js +0 -24
  135. package/dist/modules/translations/lib/discoverPackages.cjs.js +0 -121
  136. package/dist/modules/translations/lib/extractTranslations.cjs.js +0 -71
  137. package/dist/modules/translations/lib/messageFilePath.cjs.js +0 -43
  138. package/dist/packages/backend-defaults/package.json.cjs.js +0 -6
  139. package/dist/packages/backend-plugin-api/package.json.cjs.js +0 -6
  140. package/dist/packages/backend-test-utils/package.json.cjs.js +0 -6
  141. package/dist/packages/catalog-client/package.json.cjs.js +0 -6
  142. package/dist/packages/cli/package.json.cjs.js +0 -159
  143. package/dist/packages/config/package.json.cjs.js +0 -6
  144. package/dist/packages/core-app-api/package.json.cjs.js +0 -6
  145. package/dist/packages/core-components/package.json.cjs.js +0 -6
  146. package/dist/packages/core-plugin-api/package.json.cjs.js +0 -6
  147. package/dist/packages/dev-utils/package.json.cjs.js +0 -6
  148. package/dist/packages/errors/package.json.cjs.js +0 -6
  149. package/dist/packages/frontend-defaults/package.json.cjs.js +0 -6
  150. package/dist/packages/frontend-plugin-api/package.json.cjs.js +0 -6
  151. package/dist/packages/frontend-plugin-api/src/routing/describeParentCallSite.cjs.js +0 -26
  152. package/dist/packages/frontend-test-utils/package.json.cjs.js +0 -6
  153. package/dist/packages/test-utils/package.json.cjs.js +0 -6
  154. package/dist/packages/theme/package.json.cjs.js +0 -6
  155. package/dist/packages/types/package.json.cjs.js +0 -6
  156. package/dist/plugins/auth-backend/package.json.cjs.js +0 -6
  157. package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +0 -6
  158. package/dist/plugins/catalog-node/package.json.cjs.js +0 -6
  159. package/dist/plugins/scaffolder-node/package.json.cjs.js +0 -6
  160. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +0 -6
  161. package/dist/wiring/CommandRegistry.cjs.js +0 -14
  162. package/dist/wiring/factory.cjs.js +0 -15
  163. package/dist/wiring/types.cjs.js +0 -11
  164. package/templates/backend-plugin/.eslintrc.js.hbs +0 -1
  165. package/templates/backend-plugin/README.md.hbs +0 -28
  166. package/templates/backend-plugin/dev/index.ts.hbs +0 -60
  167. package/templates/backend-plugin/package.json.hbs +0 -44
  168. package/templates/backend-plugin/portable-template.yaml +0 -5
  169. package/templates/backend-plugin/src/index.ts.hbs +0 -1
  170. package/templates/backend-plugin/src/plugin.test.ts.hbs +0 -129
  171. package/templates/backend-plugin/src/plugin.ts.hbs +0 -32
  172. package/templates/backend-plugin/src/router.test.ts +0 -67
  173. package/templates/backend-plugin/src/router.ts +0 -51
  174. package/templates/backend-plugin/src/services/TodoListService.ts +0 -155
  175. package/templates/backend-plugin/src/setupTests.ts +0 -1
  176. package/templates/backend-plugin-module/.eslintrc.js.hbs +0 -1
  177. package/templates/backend-plugin-module/README.md.hbs +0 -5
  178. package/templates/backend-plugin-module/package.json.hbs +0 -34
  179. package/templates/backend-plugin-module/portable-template.yaml +0 -5
  180. package/templates/backend-plugin-module/src/index.ts.hbs +0 -8
  181. package/templates/backend-plugin-module/src/module.ts.hbs +0 -17
  182. package/templates/catalog-provider-module/.eslintrc.js.hbs +0 -1
  183. package/templates/catalog-provider-module/README.md.hbs +0 -5
  184. package/templates/catalog-provider-module/config.d.ts.hbs +0 -34
  185. package/templates/catalog-provider-module/package.json.hbs +0 -36
  186. package/templates/catalog-provider-module/portable-template.yaml +0 -9
  187. package/templates/catalog-provider-module/src/index.ts.hbs +0 -8
  188. package/templates/catalog-provider-module/src/module.ts.hbs +0 -29
  189. package/templates/catalog-provider-module/src/provider/readProviderConfigs.ts.hbs +0 -78
  190. package/templates/catalog-provider-module/src/provider/{{providerClass}}.test.ts.hbs +0 -18
  191. package/templates/catalog-provider-module/src/provider/{{providerClass}}.ts.hbs +0 -109
  192. package/templates/frontend-plugin/.eslintrc.js.hbs +0 -1
  193. package/templates/frontend-plugin/README.md.hbs +0 -13
  194. package/templates/frontend-plugin/dev/index.tsx.hbs +0 -11
  195. package/templates/frontend-plugin/package.json.hbs +0 -54
  196. package/templates/frontend-plugin/portable-template.yaml +0 -6
  197. package/templates/frontend-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx.hbs +0 -28
  198. package/templates/frontend-plugin/src/components/ExampleComponent/ExampleComponent.tsx.hbs +0 -37
  199. package/templates/frontend-plugin/src/components/ExampleComponent/index.ts +0 -1
  200. package/templates/frontend-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx.hbs +0 -19
  201. package/templates/frontend-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx.hbs +0 -308
  202. package/templates/frontend-plugin/src/components/ExampleFetchComponent/index.ts +0 -1
  203. package/templates/frontend-plugin/src/index.ts.hbs +0 -1
  204. package/templates/frontend-plugin/src/plugin.test.ts.hbs +0 -7
  205. package/templates/frontend-plugin/src/plugin.ts.hbs +0 -22
  206. package/templates/frontend-plugin/src/routes.ts.hbs +0 -5
  207. package/templates/frontend-plugin/src/setupTests.ts +0 -1
  208. package/templates/new-frontend-plugin/.eslintrc.js.hbs +0 -1
  209. package/templates/new-frontend-plugin/README.md.hbs +0 -20
  210. package/templates/new-frontend-plugin/dev/index.tsx +0 -10
  211. package/templates/new-frontend-plugin/package.json.hbs +0 -49
  212. package/templates/new-frontend-plugin/portable-template.yaml +0 -5
  213. package/templates/new-frontend-plugin/src/components/ExampleComponent/ExampleComponent.test.tsx.hbs +0 -28
  214. package/templates/new-frontend-plugin/src/components/ExampleComponent/ExampleComponent.tsx.hbs +0 -37
  215. package/templates/new-frontend-plugin/src/components/ExampleComponent/index.ts +0 -1
  216. package/templates/new-frontend-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx.hbs +0 -19
  217. package/templates/new-frontend-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx.hbs +0 -308
  218. package/templates/new-frontend-plugin/src/components/ExampleFetchComponent/index.ts +0 -1
  219. package/templates/new-frontend-plugin/src/index.ts.hbs +0 -1
  220. package/templates/new-frontend-plugin/src/plugin.test.ts.hbs +0 -7
  221. package/templates/new-frontend-plugin/src/plugin.tsx.hbs +0 -25
  222. package/templates/new-frontend-plugin/src/routes.ts +0 -3
  223. package/templates/new-frontend-plugin/src/setupTests.ts +0 -1
  224. package/templates/new-frontend-plugin-module/.eslintrc.js.hbs +0 -1
  225. package/templates/new-frontend-plugin-module/README.md.hbs +0 -5
  226. package/templates/new-frontend-plugin-module/package.json.hbs +0 -35
  227. package/templates/new-frontend-plugin-module/portable-template.yaml +0 -5
  228. package/templates/new-frontend-plugin-module/src/index.ts.hbs +0 -1
  229. package/templates/new-frontend-plugin-module/src/module.tsx.hbs +0 -8
  230. package/templates/new-frontend-plugin-module/src/setupTests.ts +0 -1
  231. package/templates/node-library/.eslintrc.js.hbs +0 -1
  232. package/templates/node-library/README.md.hbs +0 -12
  233. package/templates/node-library/package.json.hbs +0 -29
  234. package/templates/node-library/portable-template.yaml +0 -3
  235. package/templates/node-library/src/index.ts.hbs +0 -1
  236. package/templates/node-library/src/setupTests.ts +0 -1
  237. package/templates/plugin-common-library/.eslintrc.js.hbs +0 -1
  238. package/templates/plugin-common-library/README.md.hbs +0 -5
  239. package/templates/plugin-common-library/package.json.hbs +0 -31
  240. package/templates/plugin-common-library/portable-template.yaml +0 -3
  241. package/templates/plugin-common-library/src/index.ts.hbs +0 -19
  242. package/templates/plugin-common-library/src/setupTests.ts +0 -1
  243. package/templates/plugin-node-library/.eslintrc.js.hbs +0 -1
  244. package/templates/plugin-node-library/README.md.hbs +0 -5
  245. package/templates/plugin-node-library/package.json.hbs +0 -30
  246. package/templates/plugin-node-library/portable-template.yaml +0 -3
  247. package/templates/plugin-node-library/src/index.ts.hbs +0 -18
  248. package/templates/plugin-node-library/src/setupTests.ts +0 -1
  249. package/templates/plugin-web-library/.eslintrc.js.hbs +0 -1
  250. package/templates/plugin-web-library/README.md.hbs +0 -5
  251. package/templates/plugin-web-library/package.json.hbs +0 -42
  252. package/templates/plugin-web-library/portable-template.yaml +0 -3
  253. package/templates/plugin-web-library/src/components/ExampleComponent/ExampleComponent.test.tsx +0 -17
  254. package/templates/plugin-web-library/src/components/ExampleComponent/ExampleComponent.tsx +0 -28
  255. package/templates/plugin-web-library/src/components/ExampleComponent/index.ts +0 -2
  256. package/templates/plugin-web-library/src/components/index.ts +0 -5
  257. package/templates/plugin-web-library/src/hooks/index.ts +0 -5
  258. package/templates/plugin-web-library/src/hooks/useExample/index.ts +0 -1
  259. package/templates/plugin-web-library/src/hooks/useExample/useExample.ts +0 -15
  260. package/templates/plugin-web-library/src/index.ts.hbs +0 -12
  261. package/templates/plugin-web-library/src/setupTests.ts +0 -1
  262. package/templates/scaffolder-backend-module/.eslintrc.js.hbs +0 -1
  263. package/templates/scaffolder-backend-module/README.md.hbs +0 -5
  264. package/templates/scaffolder-backend-module/package.json.hbs +0 -36
  265. package/templates/scaffolder-backend-module/portable-template.yaml +0 -6
  266. package/templates/scaffolder-backend-module/src/actions/example.test.ts +0 -24
  267. package/templates/scaffolder-backend-module/src/actions/example.ts +0 -39
  268. package/templates/scaffolder-backend-module/src/index.ts.hbs +0 -8
  269. package/templates/scaffolder-backend-module/src/module.ts +0 -21
  270. package/templates/web-library/.eslintrc.js.hbs +0 -1
  271. package/templates/web-library/README.md.hbs +0 -12
  272. package/templates/web-library/package.json.hbs +0 -30
  273. package/templates/web-library/portable-template.yaml +0 -3
  274. package/templates/web-library/src/index.ts.hbs +0 -1
  275. package/templates/web-library/src/setupTests.ts +0 -1
  276. /package/dist/{packages/opaque-internal → opaque-internal}/src/OpaqueType.cjs.js +0 -0
@@ -1,38 +1,66 @@
1
1
  'use strict';
2
2
 
3
+ var InternalCliModule = require('../cli-internal/src/InternalCliModule.cjs.js');
4
+ var InternalCommandNode = require('../cli-internal/src/InternalCommandNode.cjs.js');
5
+ require('node:fs');
6
+ require('node:os');
7
+ require('node:path');
8
+ require('../cli-internal/src/knownPluginPackages.cjs.js');
9
+
3
10
  class CommandGraph {
4
11
  graph = [];
5
12
  /**
6
13
  * Adds a command to the graph. The graph is sparse, so we use the path to determine the nodes
7
14
  * to traverse. Only leaf nodes should have a command/action.
8
15
  */
9
- add(command) {
16
+ add(command, module) {
10
17
  const path = command.path;
11
18
  let current = this.graph;
12
19
  for (let i = 0; i < path.length - 1; i++) {
13
20
  const name = path[i];
14
- let next = current.find((n) => n.name === name);
21
+ let next = current.find(
22
+ (n) => InternalCommandNode.OpaqueCommandTreeNode.isType(n) && InternalCommandNode.OpaqueCommandTreeNode.toInternal(n).name === name || InternalCommandNode.OpaqueCommandLeafNode.isType(n) && InternalCommandNode.OpaqueCommandLeafNode.toInternal(n).name === name
23
+ );
15
24
  if (!next) {
16
- next = { $$type: "@tree/root", name, children: [] };
25
+ next = InternalCommandNode.OpaqueCommandTreeNode.createInstance("v1", {
26
+ name,
27
+ children: []
28
+ });
17
29
  current.push(next);
18
- } else if (next.$$type === "@tree/leaf") {
30
+ } else if (InternalCommandNode.OpaqueCommandLeafNode.isType(next)) {
19
31
  throw new Error(
20
- `Command already exists at path: "${path.slice(0, i).join(" ")}"`
32
+ formatConflictError(
33
+ path,
34
+ module,
35
+ InternalCommandNode.OpaqueCommandLeafNode.toInternal(next).module
36
+ )
21
37
  );
22
38
  }
23
- current = next.children;
39
+ current = InternalCommandNode.OpaqueCommandTreeNode.toInternal(next).children;
24
40
  }
25
- const last = current.find((n) => n.name === path[path.length - 1]);
26
- if (last && last.$$type === "@tree/leaf") {
41
+ const lastName = path[path.length - 1];
42
+ const last = current.find((n) => {
43
+ if (InternalCommandNode.OpaqueCommandTreeNode.isType(n)) {
44
+ return InternalCommandNode.OpaqueCommandTreeNode.toInternal(n).name === lastName;
45
+ }
46
+ return InternalCommandNode.OpaqueCommandLeafNode.toInternal(n).name === lastName;
47
+ });
48
+ if (last && InternalCommandNode.OpaqueCommandLeafNode.isType(last)) {
27
49
  throw new Error(
28
- `Command already exists at path: "${path.slice(0, -1).join(" ")}"`
50
+ formatConflictError(
51
+ path,
52
+ module,
53
+ InternalCommandNode.OpaqueCommandLeafNode.toInternal(last).module
54
+ )
29
55
  );
30
56
  } else {
31
- current.push({
32
- $$type: "@tree/leaf",
33
- name: path[path.length - 1],
34
- command
35
- });
57
+ current.push(
58
+ InternalCommandNode.OpaqueCommandLeafNode.createInstance("v1", {
59
+ name: lastName,
60
+ command,
61
+ module
62
+ })
63
+ );
36
64
  }
37
65
  }
38
66
  /**
@@ -42,30 +70,60 @@ class CommandGraph {
42
70
  let current = this.graph;
43
71
  for (let i = 0; i < path.length - 1; i++) {
44
72
  const name = path[i];
45
- const next = current.find((n) => n.name === name);
46
- if (!next) {
47
- return void 0;
48
- } else if (next.$$type === "@tree/leaf") {
73
+ const next = current.find((n) => {
74
+ if (InternalCommandNode.OpaqueCommandTreeNode.isType(n)) {
75
+ return InternalCommandNode.OpaqueCommandTreeNode.toInternal(n).name === name;
76
+ }
77
+ return InternalCommandNode.OpaqueCommandLeafNode.toInternal(n).name === name;
78
+ });
79
+ if (!next || InternalCommandNode.OpaqueCommandLeafNode.isType(next)) {
49
80
  return void 0;
50
81
  }
51
- current = next.children;
82
+ current = InternalCommandNode.OpaqueCommandTreeNode.toInternal(next).children;
52
83
  }
53
- const last = current.find((n) => n.name === path[path.length - 1]);
54
- if (!last || last.$$type === "@tree/root") {
84
+ const lastName = path[path.length - 1];
85
+ const last = current.find((n) => {
86
+ if (InternalCommandNode.OpaqueCommandTreeNode.isType(n)) {
87
+ return InternalCommandNode.OpaqueCommandTreeNode.toInternal(n).name === lastName;
88
+ }
89
+ return InternalCommandNode.OpaqueCommandLeafNode.toInternal(n).name === lastName;
90
+ });
91
+ if (!last || InternalCommandNode.OpaqueCommandTreeNode.isType(last)) {
55
92
  return void 0;
56
93
  }
57
- return last?.command;
94
+ return InternalCommandNode.OpaqueCommandLeafNode.toInternal(last).command;
58
95
  }
59
96
  atDepth(depth) {
60
97
  let current = this.graph;
61
98
  for (let i = 0; i < depth; i++) {
62
99
  current = current.flatMap(
63
- (n) => n.$$type === "@tree/root" ? n.children : []
100
+ (n) => InternalCommandNode.OpaqueCommandTreeNode.isType(n) ? InternalCommandNode.OpaqueCommandTreeNode.toInternal(n).children : []
64
101
  );
65
102
  }
66
103
  return current;
67
104
  }
68
105
  }
106
+ function getModuleName(module) {
107
+ if (module && InternalCliModule.OpaqueCliModule.isType(module)) {
108
+ return InternalCliModule.OpaqueCliModule.toInternal(module).packageName;
109
+ }
110
+ return void 0;
111
+ }
112
+ function formatConflictError(path, newModule, existingModule) {
113
+ const cmd = path.join(" ");
114
+ const newPkg = getModuleName(newModule);
115
+ const existingPkg = getModuleName(existingModule);
116
+ if (newPkg && existingPkg) {
117
+ return `Command "${cmd}" from "${newPkg}" conflicts with an existing command from "${existingPkg}"`;
118
+ }
119
+ if (newPkg) {
120
+ return `Command "${cmd}" from "${newPkg}" conflicts with an existing command`;
121
+ }
122
+ if (existingPkg) {
123
+ return `Command "${cmd}" conflicts with an existing command from "${existingPkg}"`;
124
+ }
125
+ return `Command "${cmd}" conflicts with an existing command`;
126
+ }
69
127
 
70
128
  exports.CommandGraph = CommandGraph;
71
129
  //# sourceMappingURL=CommandGraph.cjs.js.map
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ var cliCommon = require('@backstage/cli-common');
4
+ var cliNode = require('@backstage/cli-node');
5
+ var fs = require('node:fs');
6
+ var path = require('node:path');
7
+ var node_url = require('node:url');
8
+
9
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
10
+
11
+ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
12
+
13
+ function discoverCliModules() {
14
+ const rootDir = cliCommon.targetPaths.rootDir;
15
+ const pkgJsonPath = path.resolve(rootDir, "package.json");
16
+ let projectPkg;
17
+ try {
18
+ projectPkg = JSON.parse(fs__default.default.readFileSync(pkgJsonPath, "utf8"));
19
+ } catch {
20
+ return [];
21
+ }
22
+ const allDeps = {
23
+ ...projectPkg.dependencies,
24
+ ...projectPkg.devDependencies
25
+ };
26
+ const modules = [];
27
+ for (const depName of Object.keys(allDeps)) {
28
+ try {
29
+ const depPkgPath = require.resolve(`${depName}/package.json`, {
30
+ paths: [rootDir]
31
+ });
32
+ const depPkg = JSON.parse(fs__default.default.readFileSync(depPkgPath, "utf8"));
33
+ if (cliNode.PackageRoles.getRoleFromPackage(depPkg) === "cli-module") {
34
+ const resolvedPath = require.resolve(depName, { paths: [rootDir] });
35
+ modules.push(node_url.pathToFileURL(resolvedPath).href);
36
+ }
37
+ } catch {
38
+ }
39
+ }
40
+ return modules;
41
+ }
42
+
43
+ exports.discoverCliModules = discoverCliModules;
44
+ //# sourceMappingURL=discoverCliModules.cjs.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli",
3
- "version": "0.36.0-next.2",
3
+ "version": "0.36.1-next.0",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -41,56 +41,28 @@
41
41
  "ext": "ts",
42
42
  "watch": "./src"
43
43
  },
44
- "jest": {
45
- "coveragePathIgnorePatterns": [
46
- "/__fixtures__/"
47
- ]
48
- },
49
44
  "dependencies": {
50
- "@backstage/catalog-model": "1.7.6",
51
- "@backstage/cli-common": "0.2.0-next.2",
52
- "@backstage/cli-node": "0.2.19-next.1",
53
- "@backstage/config": "1.3.6",
54
- "@backstage/config-loader": "1.10.9-next.0",
45
+ "@backstage/cli-common": "0.2.1-next.0",
46
+ "@backstage/cli-defaults": "0.1.1-next.0",
47
+ "@backstage/cli-module-build": "0.1.1-next.0",
48
+ "@backstage/cli-module-test-jest": "0.1.1-next.0",
49
+ "@backstage/cli-node": "0.3.1-next.0",
55
50
  "@backstage/errors": "1.2.7",
56
- "@backstage/eslint-plugin": "0.2.2-next.0",
57
- "@backstage/integration": "2.0.0-next.2",
58
- "@backstage/module-federation-common": "0.1.2-next.0",
59
- "@backstage/release-manifests": "0.0.13",
60
- "@backstage/types": "1.2.2",
51
+ "@backstage/eslint-plugin": "0.2.2",
61
52
  "@manypkg/get-packages": "^1.1.3",
62
- "@module-federation/enhanced": "^0.21.6",
63
- "@octokit/request": "^8.0.0",
64
- "@rollup/plugin-commonjs": "^26.0.0",
65
- "@rollup/plugin-json": "^6.0.0",
66
- "@rollup/plugin-node-resolve": "^15.0.0",
67
- "@rollup/plugin-yaml": "^4.0.0",
68
- "@rspack/core": "^1.4.11",
69
- "@rspack/dev-server": "^1.1.4",
70
- "@rspack/plugin-react-refresh": "^1.4.3",
71
53
  "@spotify/eslint-config-base": "^15.0.0",
72
54
  "@spotify/eslint-config-react": "^15.0.0",
73
55
  "@spotify/eslint-config-typescript": "^15.0.0",
74
56
  "@swc/core": "^1.15.6",
75
- "@swc/helpers": "^0.5.17",
76
57
  "@swc/jest": "^0.2.39",
77
58
  "@types/webpack-env": "^1.15.2",
78
59
  "@typescript-eslint/eslint-plugin": "^8.17.0",
79
60
  "@typescript-eslint/parser": "^8.16.0",
80
- "bfj": "^9.0.2",
81
- "buffer": "^6.0.3",
82
61
  "chalk": "^4.0.0",
83
- "chokidar": "^3.3.1",
84
- "cleye": "^2.3.0",
85
62
  "commander": "^14.0.3",
86
63
  "cross-fetch": "^4.0.0",
87
- "cross-spawn": "^7.0.3",
88
- "css-loader": "^6.5.1",
89
- "ctrlc-windows": "^2.1.0",
90
- "esbuild": "^0.27.0",
91
64
  "eslint": "^8.6.0",
92
65
  "eslint-config-prettier": "^9.0.0",
93
- "eslint-formatter-friendly": "^7.0.0",
94
66
  "eslint-plugin-deprecation": "^3.0.0",
95
67
  "eslint-plugin-import": "^2.31.0",
96
68
  "eslint-plugin-jest": "^28.9.0",
@@ -98,159 +70,54 @@
98
70
  "eslint-plugin-react": "^7.37.2",
99
71
  "eslint-plugin-react-hooks": "^5.0.0",
100
72
  "eslint-plugin-unused-imports": "^4.1.4",
101
- "eslint-rspack-plugin": "^4.2.1",
102
- "express": "^4.22.0",
103
73
  "fs-extra": "^11.2.0",
104
- "git-url-parse": "^15.0.0",
105
74
  "glob": "^7.1.7",
106
- "global-agent": "^3.0.0",
107
- "globby": "^11.1.0",
108
- "handlebars": "^4.7.3",
109
- "html-webpack-plugin": "^5.6.3",
110
- "inquirer": "^8.2.0",
111
75
  "jest-css-modules": "^2.1.0",
112
- "json-schema": "^0.4.0",
113
- "lodash": "^4.17.21",
114
- "minimatch": "^10.2.1",
115
- "node-stdlib-browser": "^1.3.1",
116
- "npm-packlist": "^5.0.0",
117
- "ora": "^5.3.0",
118
- "p-queue": "^6.6.2",
119
76
  "pirates": "^4.0.6",
120
77
  "postcss": "^8.1.0",
121
- "postcss-import": "^16.1.0",
122
- "process": "^0.11.10",
123
- "proper-lockfile": "^4.1.2",
124
- "raw-loader": "^4.0.2",
125
- "react-dev-utils": "^12.0.0-next.60",
126
- "react-refresh": "^0.18.0",
127
- "recursive-readdir": "^2.2.2",
128
- "replace-in-file": "^7.1.0",
129
- "rollup": "^4.27.3",
130
- "rollup-plugin-dts": "^6.1.0",
131
- "rollup-plugin-esbuild": "^6.1.1",
132
- "rollup-plugin-postcss": "^4.0.0",
133
- "rollup-pluginutils": "^2.8.2",
134
- "semver": "^7.5.3",
135
- "shell-quote": "^1.8.1",
136
- "style-loader": "^3.3.1",
137
78
  "sucrase": "^3.20.2",
138
- "swc-loader": "^0.2.3",
139
- "tar": "^7.5.6",
140
- "ts-checker-rspack-plugin": "^1.1.5",
141
- "ts-morph": "^24.0.0",
142
- "undici": "^7.2.3",
143
- "util": "^0.12.3",
144
- "yaml": "^2.0.0",
145
- "yargs": "^16.2.0",
146
- "yml-loader": "^2.1.0",
147
- "yn": "^4.0.0",
148
- "zod": "^3.25.76",
149
- "zod-validation-error": "^4.0.2"
79
+ "yaml": "^2.0.0"
150
80
  },
151
81
  "devDependencies": {
152
- "@backstage/backend-plugin-api": "1.8.0-next.1",
153
- "@backstage/backend-test-utils": "1.11.1-next.2",
154
- "@backstage/catalog-client": "1.14.0-next.2",
82
+ "@backstage/backend-plugin-api": "1.8.1-next.0",
83
+ "@backstage/backend-test-utils": "1.11.2-next.0",
84
+ "@backstage/catalog-client": "1.14.0",
155
85
  "@backstage/config": "1.3.6",
156
- "@backstage/core-app-api": "1.19.6-next.1",
157
- "@backstage/core-components": "0.18.8-next.1",
158
- "@backstage/core-plugin-api": "1.12.4-next.1",
159
- "@backstage/dev-utils": "1.1.21-next.1",
86
+ "@backstage/core-app-api": "1.19.7-next.0",
87
+ "@backstage/core-components": "0.18.9-next.0",
88
+ "@backstage/core-plugin-api": "1.12.5-next.0",
89
+ "@backstage/dev-utils": "1.1.22-next.0",
160
90
  "@backstage/errors": "1.2.7",
161
- "@backstage/plugin-auth-backend": "0.27.1-next.2",
162
- "@backstage/plugin-auth-backend-module-guest-provider": "0.2.17-next.1",
163
- "@backstage/plugin-catalog-node": "2.1.0-next.2",
164
- "@backstage/plugin-scaffolder-node": "0.13.0-next.2",
165
- "@backstage/plugin-scaffolder-node-test-utils": "0.3.9-next.2",
166
- "@backstage/test-utils": "1.7.16-next.0",
91
+ "@backstage/plugin-auth-backend": "0.28.0-next.0",
92
+ "@backstage/plugin-auth-backend-module-guest-provider": "0.2.18-next.0",
93
+ "@backstage/plugin-catalog-node": "2.1.1-next.0",
94
+ "@backstage/plugin-scaffolder-node": "0.13.1-next.0",
95
+ "@backstage/plugin-scaffolder-node-test-utils": "0.3.10-next.0",
96
+ "@backstage/test-utils": "1.7.17-next.0",
167
97
  "@backstage/theme": "0.7.2",
168
98
  "@jest/environment-jsdom-abstract": "^30.0.0",
169
- "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
170
- "@types/cross-spawn": "^6.0.2",
171
- "@types/ejs": "^3.1.3",
172
- "@types/express": "^4.17.6",
173
99
  "@types/fs-extra": "^11.0.0",
174
- "@types/http-proxy": "^1.17.4",
175
- "@types/inquirer": "^8.1.3",
176
100
  "@types/jest": "^30.0.0",
177
101
  "@types/node": "^22.13.14",
178
- "@types/npm-packlist": "^3.0.0",
179
- "@types/proper-lockfile": "^4",
180
- "@types/recursive-readdir": "^2.2.0",
181
- "@types/rollup-plugin-peer-deps-external": "^2.2.0",
182
- "@types/rollup-plugin-postcss": "^3.1.4",
183
- "@types/shell-quote": "^1.7.5",
184
- "@types/svgo": "^2.6.2",
185
- "@types/terser-webpack-plugin": "^5.0.4",
186
- "@types/webpack-sources": "^3.2.3",
187
- "del": "^8.0.0",
188
- "esbuild-loader": "^4.0.0",
189
- "eslint-webpack-plugin": "^4.2.0",
190
- "fork-ts-checker-webpack-plugin": "^9.0.0",
191
102
  "jest": "^30.2.0",
192
103
  "jsdom": "^27.1.0",
193
- "mini-css-extract-plugin": "^2.4.2",
194
- "msw": "^1.0.0",
195
- "nodemon": "^3.0.1",
196
- "terser-webpack-plugin": "^5.1.3",
197
- "webpack": "~5.105.0",
198
- "webpack-dev-server": "^5.0.0"
199
- },
200
- "optionalDependencies": {
201
- "keytar": "^7.9.0"
104
+ "nodemon": "^3.0.1"
202
105
  },
203
106
  "peerDependencies": {
204
107
  "@jest/environment-jsdom-abstract": "^30.0.0",
205
- "@module-federation/enhanced": "^0.21.6",
206
- "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
207
- "esbuild-loader": "^4.0.0",
208
- "eslint-webpack-plugin": "^4.2.0",
209
- "fork-ts-checker-webpack-plugin": "^9.0.0",
210
108
  "jest": "^29.0.0 || ^30.0.0",
211
109
  "jest-environment-jsdom": "*",
212
- "jsdom": "^27.1.0",
213
- "mini-css-extract-plugin": "^2.4.2",
214
- "terser-webpack-plugin": "^5.1.3",
215
- "webpack": "~5.105.0",
216
- "webpack-dev-server": "^5.0.0"
110
+ "jsdom": "^27.1.0"
217
111
  },
218
112
  "peerDependenciesMeta": {
219
113
  "@jest/environment-jsdom-abstract": {
220
114
  "optional": true
221
115
  },
222
- "@module-federation/enhanced": {
223
- "optional": true
224
- },
225
- "@pmmmwh/react-refresh-webpack-plugin": {
226
- "optional": true
227
- },
228
- "esbuild-loader": {
229
- "optional": true
230
- },
231
- "eslint-webpack-plugin": {
232
- "optional": true
233
- },
234
- "fork-ts-checker-webpack-plugin": {
235
- "optional": true
236
- },
237
116
  "jest-environment-jsdom": {
238
117
  "optional": true
239
118
  },
240
119
  "jsdom": {
241
120
  "optional": true
242
- },
243
- "mini-css-extract-plugin": {
244
- "optional": true
245
- },
246
- "terser-webpack-plugin": {
247
- "optional": true
248
- },
249
- "webpack": {
250
- "optional": true
251
- },
252
- "webpack-dev-server": {
253
- "optional": true
254
121
  }
255
122
  },
256
123
  "configSchema": {
@@ -1,23 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var cleye = require('cleye');
6
- var storage = require('../lib/storage.cjs.js');
7
-
8
- var list = async ({ args, info }) => {
9
- cleye.cli({ help: info }, void 0, args);
10
- const { instances, selected } = await storage.getAllInstances();
11
- if (!instances.length) {
12
- process.stderr.write("No instances found\n");
13
- return;
14
- }
15
- for (const inst of instances) {
16
- const mark = inst.name === selected?.name ? "* " : " ";
17
- process.stdout.write(`${mark}${inst.name} - ${inst.baseUrl}
18
- `);
19
- }
20
- };
21
-
22
- exports.default = list;
23
- //# sourceMappingURL=list.cjs.js.map