@backstage/cli 0.28.0-next.1 → 0.28.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 (157) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/config/jest.js +9 -1
  3. package/config/jestCacheResultProcessor.cjs +23 -0
  4. package/config/jestSwcTransform.js +4 -1
  5. package/dist/commands/build/buildBackend.cjs.js +65 -0
  6. package/dist/commands/build/buildFrontend.cjs.js +57 -0
  7. package/dist/commands/build/command.cjs.js +75 -0
  8. package/dist/commands/build/index.cjs.js +8 -0
  9. package/dist/commands/buildWorkspace.cjs.js +24 -0
  10. package/dist/commands/clean/clean.cjs.js +19 -0
  11. package/dist/{cjs/docs-BGyA6jwW.cjs.js → commands/config/docs.cjs.js} +4 -12
  12. package/dist/{cjs/print-Dd6aChXU.cjs.js → commands/config/print.cjs.js} +4 -12
  13. package/dist/{cjs/schema-D93FRhBL.cjs.js → commands/config/schema.cjs.js} +4 -12
  14. package/dist/commands/config/validate.cjs.js +19 -0
  15. package/dist/{cjs/index-j193pV_Y.cjs.js → commands/create-github-app/GithubCreateAppServer.cjs.js} +2 -110
  16. package/dist/commands/create-github-app/index.cjs.js +117 -0
  17. package/dist/commands/index.cjs.js +231 -0
  18. package/dist/{cjs/info-DuAv1Tsx.cjs.js → commands/info.cjs.js} +13 -17
  19. package/dist/{cjs/lint-BwiDJkjE.cjs.js → commands/lint.cjs.js} +10 -10
  20. package/dist/commands/migrate/packageExports.cjs.js +17 -0
  21. package/dist/{cjs/packageLintConfigs-DeUGBP17.cjs.js → commands/migrate/packageLintConfigs.cjs.js} +2 -10
  22. package/dist/{cjs/packageRole-Iuv9NRii.cjs.js → commands/migrate/packageRole.cjs.js} +5 -8
  23. package/dist/{cjs/packageScripts-DX6dilK6.cjs.js → commands/migrate/packageScripts.cjs.js} +1 -1
  24. package/dist/{cjs/reactRouterDeps-CR-hjviw.cjs.js → commands/migrate/reactRouterDeps.cjs.js} +1 -1
  25. package/dist/commands/new/new.cjs.js +101 -0
  26. package/dist/commands/pack.cjs.js +29 -0
  27. package/dist/commands/repo/build.cjs.js +113 -0
  28. package/dist/{cjs/clean-a6Q4k9Vm.cjs.js → commands/repo/clean.cjs.js} +5 -10
  29. package/dist/{cjs/fix-COitqgqm.cjs.js → commands/repo/fix.cjs.js} +8 -13
  30. package/dist/commands/repo/lint.cjs.js +205 -0
  31. package/dist/{cjs/list-deprecations-CtUaQgaP.cjs.js → commands/repo/list-deprecations.cjs.js} +7 -12
  32. package/dist/commands/repo/optionsParser.cjs.js +37 -0
  33. package/dist/commands/repo/test.cjs.js +277 -0
  34. package/dist/commands/start/command.cjs.js +48 -0
  35. package/dist/commands/start/index.cjs.js +8 -0
  36. package/dist/commands/start/startBackend.cjs.js +112 -0
  37. package/dist/commands/start/startFrontend.cjs.js +47 -0
  38. package/dist/{cjs/test-COxIko8N.cjs.js → commands/test.cjs.js} +6 -12
  39. package/dist/{cjs/bump-BHEh5ytx.cjs.js → commands/versions/bump.cjs.js} +21 -190
  40. package/dist/commands/versions/migrate.cjs.js +112 -0
  41. package/dist/index.cjs.js +29 -7
  42. package/dist/lib/builder/config.cjs.js +199 -0
  43. package/dist/lib/builder/packager.cjs.js +131 -0
  44. package/dist/lib/builder/plugins.cjs.js +71 -0
  45. package/dist/lib/builder/types.cjs.js +11 -0
  46. package/dist/lib/bundler/LinkedPackageResolvePlugin.cjs.js +47 -0
  47. package/dist/lib/bundler/backend.cjs.js +36 -0
  48. package/dist/{cjs/buildBackend-CkhZWCz1.cjs.js → lib/bundler/bundle.cjs.js} +31 -117
  49. package/dist/lib/bundler/config.cjs.js +491 -0
  50. package/dist/lib/bundler/hasReactDomClient.cjs.js +17 -0
  51. package/dist/lib/bundler/moduleFederation.cjs.js +28 -0
  52. package/dist/lib/bundler/optimization.cjs.js +67 -0
  53. package/dist/lib/bundler/packageDetection.cjs.js +117 -0
  54. package/dist/lib/bundler/paths.cjs.js +60 -0
  55. package/dist/lib/bundler/server.cjs.js +286 -0
  56. package/dist/lib/bundler/transforms.cjs.js +172 -0
  57. package/dist/lib/codeowners/codeowners.cjs.js +92 -0
  58. package/dist/{cjs/config-DBpmZirN.cjs.js → lib/config.cjs.js} +6 -6
  59. package/dist/{cjs/entryPoints-coip0t-x.cjs.js → lib/entryPoints.cjs.js} +1 -1
  60. package/dist/lib/errors.cjs.js +45 -0
  61. package/dist/lib/experimental/IpcServer.cjs.js +60 -0
  62. package/dist/lib/experimental/ServerDataStore.cjs.js +36 -0
  63. package/dist/lib/experimental/startBackendExperimental.cjs.js +128 -0
  64. package/dist/lib/new/FactoryRegistry.cjs.js +96 -0
  65. package/dist/lib/new/factories/backendModule.cjs.js +82 -0
  66. package/dist/lib/new/factories/backendPlugin.cjs.js +78 -0
  67. package/dist/lib/new/factories/common/prompts.cjs.js +57 -0
  68. package/dist/lib/new/factories/common/tasks.cjs.js +66 -0
  69. package/dist/lib/new/factories/common/util.cjs.js +16 -0
  70. package/dist/lib/new/factories/frontendPlugin.cjs.js +107 -0
  71. package/dist/lib/new/factories/index.cjs.js +24 -0
  72. package/dist/lib/new/factories/nodeLibraryPackage.cjs.js +57 -0
  73. package/dist/lib/new/factories/pluginCommon.cjs.js +58 -0
  74. package/dist/lib/new/factories/pluginNode.cjs.js +58 -0
  75. package/dist/lib/new/factories/pluginWeb.cjs.js +58 -0
  76. package/dist/lib/new/factories/scaffolderModule.cjs.js +90 -0
  77. package/dist/lib/new/factories/webLibraryPackage.cjs.js +57 -0
  78. package/dist/lib/new/types.cjs.js +8 -0
  79. package/dist/lib/packager/createDistWorkspace.cjs.js +219 -0
  80. package/dist/{cjs/productionPack-BxoMbBkH.cjs.js → lib/packager/productionPack.cjs.js} +8 -96
  81. package/dist/{cjs/parallel-BszNaKyc.cjs.js → lib/parallel.cjs.js} +2 -1
  82. package/dist/lib/paths.cjs.js +8 -0
  83. package/dist/{cjs/publishing-DQtsKTbc.cjs.js → lib/publishing.cjs.js} +1 -1
  84. package/dist/{cjs/role-BjiBExhi.cjs.js → lib/role.cjs.js} +3 -3
  85. package/dist/{cjs/run-CpZGNJQr.cjs.js → lib/run.cjs.js} +6 -5
  86. package/dist/{cjs/svgrTemplate-BTjBQ3by.cjs.js → lib/svgrTemplate.cjs.js} +1 -1
  87. package/dist/lib/tasks.cjs.js +188 -0
  88. package/dist/lib/typeDistProject.cjs.js +94 -0
  89. package/dist/lib/urls.cjs.js +13 -0
  90. package/dist/lib/version.cjs.js +94 -0
  91. package/dist/{cjs/yarn-6FNAgNBK.cjs.js → lib/versioning/Lockfile.cjs.js} +1 -31
  92. package/dist/lib/versioning/packages.cjs.js +75 -0
  93. package/dist/lib/yarn.cjs.js +34 -0
  94. package/dist/packages/backend-defaults/package.json.cjs.js +6 -0
  95. package/dist/packages/backend-plugin-api/package.json.cjs.js +6 -0
  96. package/dist/packages/backend-test-utils/package.json.cjs.js +6 -0
  97. package/dist/packages/catalog-client/package.json.cjs.js +6 -0
  98. package/dist/packages/cli/package.json.cjs.js +171 -0
  99. package/dist/packages/config/package.json.cjs.js +6 -0
  100. package/dist/packages/core-app-api/package.json.cjs.js +6 -0
  101. package/dist/packages/core-components/package.json.cjs.js +6 -0
  102. package/dist/packages/core-plugin-api/package.json.cjs.js +6 -0
  103. package/dist/packages/dev-utils/package.json.cjs.js +6 -0
  104. package/dist/packages/errors/package.json.cjs.js +6 -0
  105. package/dist/packages/test-utils/package.json.cjs.js +6 -0
  106. package/dist/packages/theme/package.json.cjs.js +6 -0
  107. package/dist/plugins/auth-backend/package.json.cjs.js +6 -0
  108. package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +6 -0
  109. package/dist/plugins/catalog-node/package.json.cjs.js +6 -0
  110. package/dist/plugins/scaffolder-node/package.json.cjs.js +6 -0
  111. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +6 -0
  112. package/package.json +55 -25
  113. package/templates/default-backend-plugin/README.md.hbs +22 -8
  114. package/templates/default-backend-plugin/dev/index.ts.hbs +60 -0
  115. package/templates/default-backend-plugin/package.json.hbs +5 -5
  116. package/templates/default-backend-plugin/src/index.ts.hbs +0 -1
  117. package/templates/default-backend-plugin/src/plugin.test.ts.hbs +85 -0
  118. package/templates/default-backend-plugin/src/plugin.ts.hbs +16 -14
  119. package/templates/default-backend-plugin/src/router.test.ts +67 -0
  120. package/templates/default-backend-plugin/src/router.ts +51 -0
  121. package/templates/default-backend-plugin/src/services/TodoListService/createTodoListService.ts +100 -0
  122. package/templates/default-backend-plugin/src/services/TodoListService/index.ts +1 -0
  123. package/templates/default-backend-plugin/src/services/TodoListService/types.ts +27 -0
  124. package/templates/scaffolder-module/package.json.hbs +3 -1
  125. package/templates/scaffolder-module/src/actions/example.test.ts +24 -0
  126. package/templates/scaffolder-module/src/actions/{example/example.ts → example.ts} +7 -3
  127. package/templates/scaffolder-module/src/index.ts.hbs +1 -1
  128. package/templates/scaffolder-module/src/{actions/example/module.ts → module.ts} +3 -3
  129. package/dist/cjs/build-CQdcGuBr.cjs.js +0 -194
  130. package/dist/cjs/buildWorkspace-CZPp9oRm.cjs.js +0 -53
  131. package/dist/cjs/clean-W6nxsHeK.cjs.js +0 -22
  132. package/dist/cjs/createDistWorkspace-DdHPGSMS.cjs.js +0 -576
  133. package/dist/cjs/index-BXv4Xa2e.cjs.js +0 -625
  134. package/dist/cjs/index-CGuAP7nv.cjs.js +0 -131
  135. package/dist/cjs/index-b1ouG3q6.cjs.js +0 -518
  136. package/dist/cjs/lint-Dsiocf9K.cjs.js +0 -91
  137. package/dist/cjs/moduleFederation-DmStnvEg.cjs.js +0 -910
  138. package/dist/cjs/new-CEnFhTT-.cjs.js +0 -1043
  139. package/dist/cjs/pack-XLRcGJqH.cjs.js +0 -34
  140. package/dist/cjs/packageExports-BJBwdvUH.cjs.js +0 -27
  141. package/dist/cjs/test-JcLI2pPM.cjs.js +0 -126
  142. package/dist/cjs/validate-CELljsEX.cjs.js +0 -28
  143. package/templates/default-backend-plugin/dev/index.ts +0 -9
  144. package/templates/default-backend-plugin/src/service/router.test.ts +0 -30
  145. package/templates/default-backend-plugin/src/service/router.ts +0 -28
  146. package/templates/scaffolder-module/src/actions/example/example.test.ts +0 -32
  147. package/templates/scaffolder-module/src/actions/example/index.ts +0 -7
  148. package/templates/scaffolder-module/src/actions/index.ts +0 -1
  149. /package/templates/default-backend-module/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  150. /package/templates/default-backend-plugin/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  151. /package/templates/default-common-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  152. /package/templates/default-node-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  153. /package/templates/default-plugin/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  154. /package/templates/default-react-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  155. /package/templates/node-library-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  156. /package/templates/scaffolder-module/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
  157. /package/templates/web-library-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
@@ -0,0 +1,491 @@
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var chalk = require('chalk');
5
+ var webpack$1 = require('webpack');
6
+ var ESLintPlugin = require('eslint-webpack-plugin');
7
+ var ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
8
+ var HtmlWebpackPlugin = require('html-webpack-plugin');
9
+ var webpack = require('@module-federation/enhanced/webpack');
10
+ var LinkedPackageResolvePlugin = require('./LinkedPackageResolvePlugin.cjs.js');
11
+ var ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
12
+ var runScriptWebpackPlugin = require('run-script-webpack-plugin');
13
+ var ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
14
+ var paths = require('../paths.cjs.js');
15
+ var fs = require('fs-extra');
16
+ var getPackages = require('@manypkg/get-packages');
17
+ var cliCommon = require('@backstage/cli-common');
18
+ var nodeExternals = require('webpack-node-externals');
19
+ var optimization = require('./optimization.cjs.js');
20
+ var pickBy = require('lodash/pickBy');
21
+ var entryPoints = require('../entryPoints.cjs.js');
22
+ var run = require('../run.cjs.js');
23
+ var transforms = require('./transforms.cjs.js');
24
+ var version = require('../version.cjs.js');
25
+ var yn = require('yn');
26
+ var hasReactDomClient = require('./hasReactDomClient.cjs.js');
27
+
28
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
29
+
30
+ var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
31
+ var webpack__default = /*#__PURE__*/_interopDefaultCompat(webpack$1);
32
+ var ESLintPlugin__default = /*#__PURE__*/_interopDefaultCompat(ESLintPlugin);
33
+ var ForkTsCheckerWebpackPlugin__default = /*#__PURE__*/_interopDefaultCompat(ForkTsCheckerWebpackPlugin);
34
+ var HtmlWebpackPlugin__default = /*#__PURE__*/_interopDefaultCompat(HtmlWebpackPlugin);
35
+ var ModuleScopePlugin__default = /*#__PURE__*/_interopDefaultCompat(ModuleScopePlugin);
36
+ var ReactRefreshPlugin__default = /*#__PURE__*/_interopDefaultCompat(ReactRefreshPlugin);
37
+ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
38
+ var nodeExternals__default = /*#__PURE__*/_interopDefaultCompat(nodeExternals);
39
+ var pickBy__default = /*#__PURE__*/_interopDefaultCompat(pickBy);
40
+ var yn__default = /*#__PURE__*/_interopDefaultCompat(yn);
41
+
42
+ const BUILD_CACHE_ENV_VAR = "BACKSTAGE_CLI_EXPERIMENTAL_BUILD_CACHE";
43
+ function resolveBaseUrl(config, moduleFederation) {
44
+ const baseUrl = config.getOptionalString("app.baseUrl");
45
+ const defaultBaseUrl = moduleFederation?.mode === "remote" ? `http://localhost:${process.env.PORT ?? "3000"}` : "http://localhost:3000";
46
+ try {
47
+ return new URL(baseUrl ?? "/", defaultBaseUrl);
48
+ } catch (error) {
49
+ throw new Error(`Invalid app.baseUrl, ${error}`);
50
+ }
51
+ }
52
+ function resolveEndpoint(config, moduleFederation) {
53
+ const url = resolveBaseUrl(config, moduleFederation);
54
+ return {
55
+ host: config.getOptionalString("app.listen.host") ?? url.hostname,
56
+ port: config.getOptionalNumber("app.listen.port") ?? Number(url.port) ?? (url.protocol === "https:" ? 443 : 80)
57
+ };
58
+ }
59
+ async function readBuildInfo() {
60
+ const timestamp = Date.now();
61
+ let commit;
62
+ try {
63
+ commit = await run.runPlain("git", "rev-parse", "HEAD");
64
+ } catch (error) {
65
+ }
66
+ let gitVersion;
67
+ try {
68
+ gitVersion = await run.runPlain("git", "describe", "--always");
69
+ } catch (error) {
70
+ }
71
+ if (commit === void 0 || gitVersion === void 0) {
72
+ console.info(
73
+ "NOTE: Did not compute git version or commit hash, could not execute the git command line utility"
74
+ );
75
+ }
76
+ const { version: packageVersion } = await fs__default.default.readJson(
77
+ paths.paths.resolveTarget("package.json")
78
+ );
79
+ return {
80
+ cliVersion: version.version,
81
+ gitVersion: gitVersion ?? "unknown",
82
+ packageVersion,
83
+ timestamp,
84
+ commit: commit ?? "unknown"
85
+ };
86
+ }
87
+ async function createConfig(paths$1, options) {
88
+ const {
89
+ checksEnabled,
90
+ isDev,
91
+ frontendConfig,
92
+ moduleFederation,
93
+ publicSubPath = "",
94
+ rspack
95
+ } = options;
96
+ const { plugins, loaders } = transforms.transforms(options);
97
+ const { packages } = await getPackages.getPackages(paths.paths.targetDir);
98
+ const externalPkgs = packages.filter((p) => !cliCommon.isChildPath(paths$1.root, p.dir));
99
+ const validBaseUrl = resolveBaseUrl(frontendConfig, moduleFederation);
100
+ let publicPath = validBaseUrl.pathname.replace(/\/$/, "");
101
+ if (publicSubPath) {
102
+ publicPath = `${publicPath}${publicSubPath}`.replace("//", "/");
103
+ }
104
+ if (isDev) {
105
+ const { host, port } = resolveEndpoint(
106
+ options.frontendConfig,
107
+ options.moduleFederation
108
+ );
109
+ if (rspack) {
110
+ const RspackReactRefreshPlugin = require("@rspack/plugin-react-refresh");
111
+ plugins.push(new RspackReactRefreshPlugin());
112
+ } else {
113
+ plugins.push(
114
+ new ReactRefreshPlugin__default.default({
115
+ overlay: {
116
+ sockProtocol: "ws",
117
+ sockHost: host,
118
+ sockPort: port
119
+ }
120
+ })
121
+ );
122
+ }
123
+ }
124
+ if (checksEnabled) {
125
+ plugins.push(
126
+ new ForkTsCheckerWebpackPlugin__default.default({
127
+ typescript: { configFile: paths$1.targetTsConfig, memoryLimit: 4096 }
128
+ }),
129
+ new ESLintPlugin__default.default({
130
+ context: paths$1.targetPath,
131
+ files: ["**/*.(ts|tsx|mts|cts|js|jsx|mjs|cjs)"]
132
+ })
133
+ );
134
+ }
135
+ const bundler = rspack ? rspack : webpack__default.default;
136
+ plugins.push(
137
+ new bundler.ProvidePlugin({
138
+ process: require.resolve("process/browser"),
139
+ Buffer: ["buffer", "Buffer"]
140
+ })
141
+ );
142
+ if (options.moduleFederation?.mode !== "remote") {
143
+ plugins.push(
144
+ // `rspack.HtmlRspackPlugin` does not support object type `templateParameters` value, `frontendConfig` in this case
145
+ new HtmlWebpackPlugin__default.default({
146
+ meta: {
147
+ "backstage-app-mode": options?.appMode ?? "public"
148
+ },
149
+ template: paths$1.targetHtml,
150
+ templateParameters: {
151
+ publicPath,
152
+ config: frontendConfig
153
+ }
154
+ })
155
+ );
156
+ plugins.push(
157
+ new HtmlWebpackPlugin__default.default({
158
+ meta: {
159
+ "backstage-app-mode": options?.appMode ?? "public",
160
+ // This is added to be written in the later step, and finally read by the extra entry point
161
+ "backstage-public-path": "<%= publicPath %>/"
162
+ },
163
+ minify: false,
164
+ publicPath: "<%= publicPath %>",
165
+ filename: "index.html.tmpl",
166
+ template: `raw-loader!${paths$1.targetHtml}`
167
+ })
168
+ );
169
+ }
170
+ if (options.moduleFederation) {
171
+ const isRemote = options.moduleFederation?.mode === "remote";
172
+ const AdaptedModuleFederationPlugin = rspack ? rspack.container.ModuleFederationPlugin : webpack.ModuleFederationPlugin;
173
+ plugins.push(
174
+ new AdaptedModuleFederationPlugin({
175
+ ...isRemote && {
176
+ filename: "remoteEntry.js",
177
+ exposes: {
178
+ ".": paths$1.targetEntry
179
+ }
180
+ },
181
+ name: options.moduleFederation.name,
182
+ runtime: false,
183
+ shared: {
184
+ // React
185
+ react: {
186
+ singleton: true,
187
+ requiredVersion: "*",
188
+ eager: !isRemote
189
+ },
190
+ "react-dom": {
191
+ singleton: true,
192
+ requiredVersion: "*",
193
+ eager: !isRemote
194
+ },
195
+ // React Router
196
+ "react-router": {
197
+ singleton: true,
198
+ requiredVersion: "*",
199
+ eager: !isRemote
200
+ },
201
+ "react-router-dom": {
202
+ singleton: true,
203
+ requiredVersion: "*",
204
+ eager: !isRemote
205
+ },
206
+ // MUI v4
207
+ "@material-ui/core/styles": {
208
+ singleton: true,
209
+ requiredVersion: "*",
210
+ eager: !isRemote
211
+ },
212
+ "@material-ui/styles": {
213
+ singleton: true,
214
+ requiredVersion: "*",
215
+ eager: !isRemote
216
+ },
217
+ // MUI v5
218
+ "@mui/material/styles/": {
219
+ singleton: true,
220
+ requiredVersion: "*",
221
+ eager: !isRemote
222
+ },
223
+ "@emotion/react": {
224
+ singleton: true,
225
+ requiredVersion: "*",
226
+ eager: !isRemote
227
+ }
228
+ }
229
+ })
230
+ );
231
+ }
232
+ const buildInfo = await readBuildInfo();
233
+ plugins.push(
234
+ new bundler.DefinePlugin({
235
+ "process.env.BUILD_INFO": JSON.stringify(buildInfo),
236
+ "process.env.APP_CONFIG": rspack ? (
237
+ // FIXME: see also https://github.com/web-infra-dev/rspack/issues/5606
238
+ JSON.stringify(options.getFrontendAppConfigs())
239
+ ) : bundler.DefinePlugin.runtimeValue(
240
+ () => JSON.stringify(options.getFrontendAppConfigs()),
241
+ true
242
+ ),
243
+ // This allows for conditional imports of react-dom/client, since there's no way
244
+ // to check for presence of it in source code without module resolution errors.
245
+ "process.env.HAS_REACT_DOM_CLIENT": JSON.stringify(hasReactDomClient.hasReactDomClient())
246
+ })
247
+ );
248
+ const reactRefreshFiles = rspack ? [] : [
249
+ require.resolve(
250
+ "@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js"
251
+ ),
252
+ require.resolve(
253
+ "@pmmmwh/react-refresh-webpack-plugin/overlay/index.js"
254
+ ),
255
+ require.resolve("react-refresh")
256
+ ];
257
+ const mode = isDev ? "development" : "production";
258
+ const optimization$1 = optimization.optimization(options);
259
+ if (mode === "production" && process.env.EXPERIMENTAL_MODULE_FEDERATION && process.env.FORCE_REACT_DEVELOPMENT) {
260
+ console.log(
261
+ chalk__default.default.yellow(
262
+ `\u26A0\uFE0F WARNING: Forcing react and react-dom into development mode. This build should not be used in production.`
263
+ )
264
+ );
265
+ const reactPackageDirs = [
266
+ `${path.dirname(require.resolve("react/package.json"))}/`,
267
+ `${path.dirname(require.resolve("react-dom/package.json"))}/`
268
+ ];
269
+ optimization$1.nodeEnv = false;
270
+ plugins.push(
271
+ new bundler.DefinePlugin({
272
+ "process.env.NODE_ENV": rspack ? (
273
+ // FIXME: see also https://github.com/web-infra-dev/rspack/issues/5606
274
+ JSON.stringify(mode)
275
+ ) : webpack__default.default.DefinePlugin.runtimeValue(({ module }) => {
276
+ if (reactPackageDirs.some((val) => module.resource.startsWith(val))) {
277
+ return '"development"';
278
+ }
279
+ return `"${mode}"`;
280
+ })
281
+ })
282
+ );
283
+ }
284
+ const withCache = yn__default.default(process.env[BUILD_CACHE_ENV_VAR], { default: false });
285
+ return {
286
+ mode,
287
+ profile: false,
288
+ ...isDev ? {
289
+ watchOptions: {
290
+ ignored: /node_modules/
291
+ }
292
+ } : {},
293
+ optimization: optimization$1,
294
+ bail: false,
295
+ performance: {
296
+ hints: false
297
+ // we check the gzip size instead
298
+ },
299
+ devtool: isDev ? "eval-cheap-module-source-map" : "source-map",
300
+ context: paths$1.targetPath,
301
+ entry: [
302
+ require.resolve("@backstage/cli/config/webpack-public-path"),
303
+ ...options.additionalEntryPoints ?? [],
304
+ paths$1.targetEntry
305
+ ],
306
+ resolve: {
307
+ extensions: [".ts", ".tsx", ".mjs", ".js", ".jsx", ".json", ".wasm"],
308
+ mainFields: ["browser", "module", "main"],
309
+ fallback: {
310
+ ...pickBy__default.default(require("node-libs-browser")),
311
+ module: false,
312
+ dgram: false,
313
+ dns: false,
314
+ fs: false,
315
+ http2: false,
316
+ net: false,
317
+ tls: false,
318
+ child_process: false,
319
+ /* new ignores */
320
+ path: false,
321
+ https: false,
322
+ http: false,
323
+ util: require.resolve("util/")
324
+ },
325
+ // FIXME: see also https://github.com/web-infra-dev/rspack/issues/3408
326
+ ...!rspack && {
327
+ plugins: [
328
+ new LinkedPackageResolvePlugin.LinkedPackageResolvePlugin(paths$1.rootNodeModules, externalPkgs),
329
+ new ModuleScopePlugin__default.default(
330
+ [paths$1.targetSrc, paths$1.targetDev],
331
+ [paths$1.targetPackageJson, ...reactRefreshFiles]
332
+ )
333
+ ]
334
+ }
335
+ },
336
+ module: {
337
+ rules: loaders
338
+ },
339
+ output: {
340
+ uniqueName: options.moduleFederation?.name,
341
+ path: paths$1.targetDist,
342
+ publicPath: options.moduleFederation?.mode === "remote" ? "auto" : `${publicPath}/`,
343
+ filename: isDev ? "[name].js" : "static/[name].[fullhash:8].js",
344
+ chunkFilename: isDev ? "[name].chunk.js" : "static/[name].[chunkhash:8].chunk.js",
345
+ ...isDev ? {
346
+ devtoolModuleFilenameTemplate: (info) => `file:///${path.resolve(info.absoluteResourcePath).replace(
347
+ /\\/g,
348
+ "/"
349
+ )}`
350
+ } : {}
351
+ },
352
+ experiments: {
353
+ lazyCompilation: !rspack && yn__default.default(process.env.EXPERIMENTAL_LAZY_COMPILATION),
354
+ ...rspack && {
355
+ // We're still using `style-loader` for custom `insert` option
356
+ css: false
357
+ }
358
+ },
359
+ plugins,
360
+ ...withCache && {
361
+ cache: {
362
+ type: "filesystem",
363
+ buildDependencies: {
364
+ config: [__filename]
365
+ }
366
+ }
367
+ }
368
+ };
369
+ }
370
+ async function createBackendConfig(paths$1, options) {
371
+ const { checksEnabled, isDev } = options;
372
+ const { packages } = await getPackages.getPackages(paths.paths.targetDir);
373
+ const localPackageEntryPoints = packages.flatMap((p) => {
374
+ const entryPoints$1 = entryPoints.readEntryPoints(p.packageJson);
375
+ return entryPoints$1.map((e) => path.posix.join(p.packageJson.name, e.mount));
376
+ });
377
+ const moduleDirs = packages.map((p) => path.resolve(p.dir, "node_modules"));
378
+ const externalPkgs = packages.filter((p) => !cliCommon.isChildPath(paths$1.root, p.dir));
379
+ const { loaders } = transforms.transforms({ ...options, isBackend: true });
380
+ const runScriptNodeArgs = new Array();
381
+ if (options.inspectEnabled) {
382
+ const inspect = typeof options.inspectEnabled === "string" ? `--inspect=${options.inspectEnabled}` : "--inspect";
383
+ runScriptNodeArgs.push(inspect);
384
+ } else if (options.inspectBrkEnabled) {
385
+ const inspect = typeof options.inspectBrkEnabled === "string" ? `--inspect-brk=${options.inspectBrkEnabled}` : "--inspect-brk";
386
+ runScriptNodeArgs.push(inspect);
387
+ }
388
+ if (options.require) {
389
+ runScriptNodeArgs.push(`--require=${options.require}`);
390
+ }
391
+ return {
392
+ mode: isDev ? "development" : "production",
393
+ profile: false,
394
+ ...isDev ? {
395
+ watch: true,
396
+ watchOptions: {
397
+ ignored: /node_modules\/(?!\@backstage)/
398
+ }
399
+ } : {},
400
+ externals: [
401
+ nodeExternalsWithResolve({
402
+ modulesDir: paths$1.rootNodeModules,
403
+ additionalModuleDirs: moduleDirs,
404
+ allowlist: ["webpack/hot/poll?100", ...localPackageEntryPoints]
405
+ })
406
+ ],
407
+ target: "node",
408
+ node: {
409
+ /* eslint-disable-next-line no-restricted-syntax */
410
+ __dirname: true,
411
+ __filename: true,
412
+ global: true
413
+ },
414
+ bail: false,
415
+ performance: {
416
+ hints: false
417
+ // we check the gzip size instead
418
+ },
419
+ devtool: isDev ? "eval-cheap-module-source-map" : "source-map",
420
+ context: paths$1.targetPath,
421
+ entry: [
422
+ "webpack/hot/poll?100",
423
+ paths$1.targetRunFile ? paths$1.targetRunFile : paths$1.targetEntry
424
+ ],
425
+ resolve: {
426
+ extensions: [".ts", ".mjs", ".js", ".json"],
427
+ mainFields: ["main"],
428
+ modules: [paths$1.rootNodeModules, ...moduleDirs],
429
+ plugins: [
430
+ new LinkedPackageResolvePlugin.LinkedPackageResolvePlugin(paths$1.rootNodeModules, externalPkgs),
431
+ new ModuleScopePlugin__default.default(
432
+ [paths$1.targetSrc, paths$1.targetDev],
433
+ [paths$1.targetPackageJson]
434
+ )
435
+ ]
436
+ },
437
+ module: {
438
+ rules: loaders
439
+ },
440
+ output: {
441
+ path: paths$1.targetDist,
442
+ filename: isDev ? "[name].js" : "[name].[hash:8].js",
443
+ chunkFilename: isDev ? "[name].chunk.js" : "[name].[chunkhash:8].chunk.js",
444
+ ...isDev ? {
445
+ devtoolModuleFilenameTemplate: (info) => `file:///${path.resolve(info.absoluteResourcePath).replace(
446
+ /\\/g,
447
+ "/"
448
+ )}`
449
+ } : {}
450
+ },
451
+ plugins: [
452
+ new runScriptWebpackPlugin.RunScriptWebpackPlugin({
453
+ name: "main.js",
454
+ nodeArgs: runScriptNodeArgs.length > 0 ? runScriptNodeArgs : void 0,
455
+ args: process.argv.slice(3)
456
+ // drop `node backstage-cli backend:dev`
457
+ }),
458
+ new webpack__default.default.HotModuleReplacementPlugin(),
459
+ ...checksEnabled ? [
460
+ new ForkTsCheckerWebpackPlugin__default.default({
461
+ typescript: { configFile: paths$1.targetTsConfig }
462
+ }),
463
+ new ESLintPlugin__default.default({
464
+ files: ["**/*.(ts|tsx|mts|cts|js|jsx|mjs|cjs)"]
465
+ })
466
+ ] : []
467
+ ]
468
+ };
469
+ }
470
+ function nodeExternalsWithResolve(options) {
471
+ let currentContext;
472
+ const externals = nodeExternals__default.default({
473
+ ...options,
474
+ importType(request) {
475
+ const resolved = require.resolve(request, {
476
+ paths: [currentContext]
477
+ });
478
+ return `commonjs ${resolved}`;
479
+ }
480
+ });
481
+ return ({ context, request }, callback) => {
482
+ currentContext = context;
483
+ return externals(context, request, callback);
484
+ };
485
+ }
486
+
487
+ exports.createBackendConfig = createBackendConfig;
488
+ exports.createConfig = createConfig;
489
+ exports.resolveBaseUrl = resolveBaseUrl;
490
+ exports.resolveEndpoint = resolveEndpoint;
491
+ //# sourceMappingURL=config.cjs.js.map
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var paths = require('../paths.cjs.js');
4
+
5
+ function hasReactDomClient() {
6
+ try {
7
+ require.resolve("react-dom/client", {
8
+ paths: [paths.paths.targetDir]
9
+ });
10
+ return true;
11
+ } catch {
12
+ return false;
13
+ }
14
+ }
15
+
16
+ exports.hasReactDomClient = hasReactDomClient;
17
+ //# sourceMappingURL=hasReactDomClient.cjs.js.map
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var chalk = require('chalk');
4
+
5
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
6
+
7
+ var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
8
+
9
+ function getModuleFederationOptions(name, isModuleFederationRemote) {
10
+ if (!isModuleFederationRemote && !process.env.EXPERIMENTAL_MODULE_FEDERATION) {
11
+ return void 0;
12
+ }
13
+ console.log(
14
+ chalk__default.default.yellow(
15
+ `\u26A0\uFE0F WARNING: Module federation is experimental and will receive immediate breaking changes in the future.`
16
+ )
17
+ );
18
+ return {
19
+ mode: isModuleFederationRemote ? "remote" : "host",
20
+ // The default output mode requires the name to be a usable as a code
21
+ // symbol, there might be better options here but for now we need to
22
+ // sanitize the name.
23
+ name: name.replaceAll("@", "").replaceAll("/", "__").replaceAll("-", "_")
24
+ };
25
+ }
26
+
27
+ exports.getModuleFederationOptions = getModuleFederationOptions;
28
+ //# sourceMappingURL=moduleFederation.cjs.js.map
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ const { EsbuildPlugin } = require("esbuild-loader");
4
+ const optimization = (options) => {
5
+ const { isDev, rspack } = options;
6
+ const MinifyPlugin = rspack ? rspack.SwcJsMinimizerRspackPlugin : EsbuildPlugin;
7
+ return {
8
+ minimize: !isDev,
9
+ minimizer: [
10
+ new MinifyPlugin({
11
+ target: "ES2022",
12
+ format: "iife",
13
+ exclude: "remoteEntry.js"
14
+ }),
15
+ // Avoid iife wrapping of module federation remote entry as it breaks the variable assignment
16
+ new MinifyPlugin({
17
+ target: "ES2022",
18
+ format: void 0,
19
+ include: "remoteEntry.js"
20
+ }),
21
+ rspack && new rspack.LightningCssMinimizerRspackPlugin()
22
+ ],
23
+ runtimeChunk: "single",
24
+ splitChunks: {
25
+ automaticNameDelimiter: "-",
26
+ cacheGroups: {
27
+ default: false,
28
+ // Put all vendor code needed for initial page load in individual files if they're big
29
+ // enough, if they're smaller they end up in the main
30
+ packages: {
31
+ chunks: "initial",
32
+ test(module) {
33
+ return Boolean(
34
+ module?.resource?.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)
35
+ );
36
+ },
37
+ name(module) {
38
+ const packageName = module.resource.match(
39
+ /[\\/]node_modules[\\/](.*?)([\\/]|$)/
40
+ )[1];
41
+ return packageName.replace("@", "");
42
+ },
43
+ filename: isDev ? "module-[name].js" : "static/module-[name].[chunkhash:8].js",
44
+ priority: 10,
45
+ minSize: 1e5,
46
+ minChunks: 1,
47
+ ...!rspack && {
48
+ maxAsyncRequests: Infinity,
49
+ maxInitialRequests: Infinity
50
+ }
51
+ },
52
+ // filename is not included in type, but we need it
53
+ // Group together the smallest modules
54
+ vendor: {
55
+ chunks: "initial",
56
+ test: /[\\/]node_modules[\\/]/,
57
+ name: "vendor",
58
+ priority: 5,
59
+ enforce: true
60
+ }
61
+ }
62
+ }
63
+ };
64
+ };
65
+
66
+ exports.optimization = optimization;
67
+ //# sourceMappingURL=optimization.cjs.js.map