@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.
- package/CHANGELOG.md +78 -0
- package/config/jest.js +9 -1
- package/config/jestCacheResultProcessor.cjs +23 -0
- package/config/jestSwcTransform.js +4 -1
- package/dist/commands/build/buildBackend.cjs.js +65 -0
- package/dist/commands/build/buildFrontend.cjs.js +57 -0
- package/dist/commands/build/command.cjs.js +75 -0
- package/dist/commands/build/index.cjs.js +8 -0
- package/dist/commands/buildWorkspace.cjs.js +24 -0
- package/dist/commands/clean/clean.cjs.js +19 -0
- package/dist/{cjs/docs-BGyA6jwW.cjs.js → commands/config/docs.cjs.js} +4 -12
- package/dist/{cjs/print-Dd6aChXU.cjs.js → commands/config/print.cjs.js} +4 -12
- package/dist/{cjs/schema-D93FRhBL.cjs.js → commands/config/schema.cjs.js} +4 -12
- package/dist/commands/config/validate.cjs.js +19 -0
- package/dist/{cjs/index-j193pV_Y.cjs.js → commands/create-github-app/GithubCreateAppServer.cjs.js} +2 -110
- package/dist/commands/create-github-app/index.cjs.js +117 -0
- package/dist/commands/index.cjs.js +231 -0
- package/dist/{cjs/info-DuAv1Tsx.cjs.js → commands/info.cjs.js} +13 -17
- package/dist/{cjs/lint-BwiDJkjE.cjs.js → commands/lint.cjs.js} +10 -10
- package/dist/commands/migrate/packageExports.cjs.js +17 -0
- package/dist/{cjs/packageLintConfigs-DeUGBP17.cjs.js → commands/migrate/packageLintConfigs.cjs.js} +2 -10
- package/dist/{cjs/packageRole-Iuv9NRii.cjs.js → commands/migrate/packageRole.cjs.js} +5 -8
- package/dist/{cjs/packageScripts-DX6dilK6.cjs.js → commands/migrate/packageScripts.cjs.js} +1 -1
- package/dist/{cjs/reactRouterDeps-CR-hjviw.cjs.js → commands/migrate/reactRouterDeps.cjs.js} +1 -1
- package/dist/commands/new/new.cjs.js +101 -0
- package/dist/commands/pack.cjs.js +29 -0
- package/dist/commands/repo/build.cjs.js +113 -0
- package/dist/{cjs/clean-a6Q4k9Vm.cjs.js → commands/repo/clean.cjs.js} +5 -10
- package/dist/{cjs/fix-COitqgqm.cjs.js → commands/repo/fix.cjs.js} +8 -13
- package/dist/commands/repo/lint.cjs.js +205 -0
- package/dist/{cjs/list-deprecations-CtUaQgaP.cjs.js → commands/repo/list-deprecations.cjs.js} +7 -12
- package/dist/commands/repo/optionsParser.cjs.js +37 -0
- package/dist/commands/repo/test.cjs.js +277 -0
- package/dist/commands/start/command.cjs.js +48 -0
- package/dist/commands/start/index.cjs.js +8 -0
- package/dist/commands/start/startBackend.cjs.js +112 -0
- package/dist/commands/start/startFrontend.cjs.js +47 -0
- package/dist/{cjs/test-COxIko8N.cjs.js → commands/test.cjs.js} +6 -12
- package/dist/{cjs/bump-BHEh5ytx.cjs.js → commands/versions/bump.cjs.js} +21 -190
- package/dist/commands/versions/migrate.cjs.js +112 -0
- package/dist/index.cjs.js +29 -7
- package/dist/lib/builder/config.cjs.js +199 -0
- package/dist/lib/builder/packager.cjs.js +131 -0
- package/dist/lib/builder/plugins.cjs.js +71 -0
- package/dist/lib/builder/types.cjs.js +11 -0
- package/dist/lib/bundler/LinkedPackageResolvePlugin.cjs.js +47 -0
- package/dist/lib/bundler/backend.cjs.js +36 -0
- package/dist/{cjs/buildBackend-CkhZWCz1.cjs.js → lib/bundler/bundle.cjs.js} +31 -117
- package/dist/lib/bundler/config.cjs.js +491 -0
- package/dist/lib/bundler/hasReactDomClient.cjs.js +17 -0
- package/dist/lib/bundler/moduleFederation.cjs.js +28 -0
- package/dist/lib/bundler/optimization.cjs.js +67 -0
- package/dist/lib/bundler/packageDetection.cjs.js +117 -0
- package/dist/lib/bundler/paths.cjs.js +60 -0
- package/dist/lib/bundler/server.cjs.js +286 -0
- package/dist/lib/bundler/transforms.cjs.js +172 -0
- package/dist/lib/codeowners/codeowners.cjs.js +92 -0
- package/dist/{cjs/config-DBpmZirN.cjs.js → lib/config.cjs.js} +6 -6
- package/dist/{cjs/entryPoints-coip0t-x.cjs.js → lib/entryPoints.cjs.js} +1 -1
- package/dist/lib/errors.cjs.js +45 -0
- package/dist/lib/experimental/IpcServer.cjs.js +60 -0
- package/dist/lib/experimental/ServerDataStore.cjs.js +36 -0
- package/dist/lib/experimental/startBackendExperimental.cjs.js +128 -0
- package/dist/lib/new/FactoryRegistry.cjs.js +96 -0
- package/dist/lib/new/factories/backendModule.cjs.js +82 -0
- package/dist/lib/new/factories/backendPlugin.cjs.js +78 -0
- package/dist/lib/new/factories/common/prompts.cjs.js +57 -0
- package/dist/lib/new/factories/common/tasks.cjs.js +66 -0
- package/dist/lib/new/factories/common/util.cjs.js +16 -0
- package/dist/lib/new/factories/frontendPlugin.cjs.js +107 -0
- package/dist/lib/new/factories/index.cjs.js +24 -0
- package/dist/lib/new/factories/nodeLibraryPackage.cjs.js +57 -0
- package/dist/lib/new/factories/pluginCommon.cjs.js +58 -0
- package/dist/lib/new/factories/pluginNode.cjs.js +58 -0
- package/dist/lib/new/factories/pluginWeb.cjs.js +58 -0
- package/dist/lib/new/factories/scaffolderModule.cjs.js +90 -0
- package/dist/lib/new/factories/webLibraryPackage.cjs.js +57 -0
- package/dist/lib/new/types.cjs.js +8 -0
- package/dist/lib/packager/createDistWorkspace.cjs.js +219 -0
- package/dist/{cjs/productionPack-BxoMbBkH.cjs.js → lib/packager/productionPack.cjs.js} +8 -96
- package/dist/{cjs/parallel-BszNaKyc.cjs.js → lib/parallel.cjs.js} +2 -1
- package/dist/lib/paths.cjs.js +8 -0
- package/dist/{cjs/publishing-DQtsKTbc.cjs.js → lib/publishing.cjs.js} +1 -1
- package/dist/{cjs/role-BjiBExhi.cjs.js → lib/role.cjs.js} +3 -3
- package/dist/{cjs/run-CpZGNJQr.cjs.js → lib/run.cjs.js} +6 -5
- package/dist/{cjs/svgrTemplate-BTjBQ3by.cjs.js → lib/svgrTemplate.cjs.js} +1 -1
- package/dist/lib/tasks.cjs.js +188 -0
- package/dist/lib/typeDistProject.cjs.js +94 -0
- package/dist/lib/urls.cjs.js +13 -0
- package/dist/lib/version.cjs.js +94 -0
- package/dist/{cjs/yarn-6FNAgNBK.cjs.js → lib/versioning/Lockfile.cjs.js} +1 -31
- package/dist/lib/versioning/packages.cjs.js +75 -0
- package/dist/lib/yarn.cjs.js +34 -0
- package/dist/packages/backend-defaults/package.json.cjs.js +6 -0
- package/dist/packages/backend-plugin-api/package.json.cjs.js +6 -0
- package/dist/packages/backend-test-utils/package.json.cjs.js +6 -0
- package/dist/packages/catalog-client/package.json.cjs.js +6 -0
- package/dist/packages/cli/package.json.cjs.js +171 -0
- package/dist/packages/config/package.json.cjs.js +6 -0
- package/dist/packages/core-app-api/package.json.cjs.js +6 -0
- package/dist/packages/core-components/package.json.cjs.js +6 -0
- package/dist/packages/core-plugin-api/package.json.cjs.js +6 -0
- package/dist/packages/dev-utils/package.json.cjs.js +6 -0
- package/dist/packages/errors/package.json.cjs.js +6 -0
- package/dist/packages/test-utils/package.json.cjs.js +6 -0
- package/dist/packages/theme/package.json.cjs.js +6 -0
- package/dist/plugins/auth-backend/package.json.cjs.js +6 -0
- package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +6 -0
- package/dist/plugins/catalog-node/package.json.cjs.js +6 -0
- package/dist/plugins/scaffolder-node/package.json.cjs.js +6 -0
- package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +6 -0
- package/package.json +55 -25
- package/templates/default-backend-plugin/README.md.hbs +22 -8
- package/templates/default-backend-plugin/dev/index.ts.hbs +60 -0
- package/templates/default-backend-plugin/package.json.hbs +5 -5
- package/templates/default-backend-plugin/src/index.ts.hbs +0 -1
- package/templates/default-backend-plugin/src/plugin.test.ts.hbs +85 -0
- package/templates/default-backend-plugin/src/plugin.ts.hbs +16 -14
- package/templates/default-backend-plugin/src/router.test.ts +67 -0
- package/templates/default-backend-plugin/src/router.ts +51 -0
- package/templates/default-backend-plugin/src/services/TodoListService/createTodoListService.ts +100 -0
- package/templates/default-backend-plugin/src/services/TodoListService/index.ts +1 -0
- package/templates/default-backend-plugin/src/services/TodoListService/types.ts +27 -0
- package/templates/scaffolder-module/package.json.hbs +3 -1
- package/templates/scaffolder-module/src/actions/example.test.ts +24 -0
- package/templates/scaffolder-module/src/actions/{example/example.ts → example.ts} +7 -3
- package/templates/scaffolder-module/src/index.ts.hbs +1 -1
- package/templates/scaffolder-module/src/{actions/example/module.ts → module.ts} +3 -3
- package/dist/cjs/build-CQdcGuBr.cjs.js +0 -194
- package/dist/cjs/buildWorkspace-CZPp9oRm.cjs.js +0 -53
- package/dist/cjs/clean-W6nxsHeK.cjs.js +0 -22
- package/dist/cjs/createDistWorkspace-DdHPGSMS.cjs.js +0 -576
- package/dist/cjs/index-BXv4Xa2e.cjs.js +0 -625
- package/dist/cjs/index-CGuAP7nv.cjs.js +0 -131
- package/dist/cjs/index-b1ouG3q6.cjs.js +0 -518
- package/dist/cjs/lint-Dsiocf9K.cjs.js +0 -91
- package/dist/cjs/moduleFederation-DmStnvEg.cjs.js +0 -910
- package/dist/cjs/new-CEnFhTT-.cjs.js +0 -1043
- package/dist/cjs/pack-XLRcGJqH.cjs.js +0 -34
- package/dist/cjs/packageExports-BJBwdvUH.cjs.js +0 -27
- package/dist/cjs/test-JcLI2pPM.cjs.js +0 -126
- package/dist/cjs/validate-CELljsEX.cjs.js +0 -28
- package/templates/default-backend-plugin/dev/index.ts +0 -9
- package/templates/default-backend-plugin/src/service/router.test.ts +0 -30
- package/templates/default-backend-plugin/src/service/router.ts +0 -28
- package/templates/scaffolder-module/src/actions/example/example.test.ts +0 -32
- package/templates/scaffolder-module/src/actions/example/index.ts +0 -7
- package/templates/scaffolder-module/src/actions/index.ts +0 -1
- /package/templates/default-backend-module/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-backend-plugin/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-common-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-node-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-plugin/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/default-react-plugin-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/node-library-package/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /package/templates/scaffolder-module/{.eslintrc.js → .eslintrc.js.hbs} +0 -0
- /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
|