@backstage/cli 0.28.0-next.0 → 0.28.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/config/jest.js +123 -69
- 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 +56 -0
- package/dist/commands/build/command.cjs.js +72 -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-CDE82fWG.cjs.js → commands/config/docs.cjs.js} +4 -12
- package/dist/{cjs/print-BX8-7Nzg.cjs.js → commands/config/print.cjs.js} +4 -12
- package/dist/{cjs/schema-Cabm6I6c.cjs.js → commands/config/schema.cjs.js} +4 -12
- package/dist/commands/config/validate.cjs.js +19 -0
- package/dist/{cjs/index-DVDDx3pk.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-CB7ln5K_.cjs.js → commands/info.cjs.js} +13 -17
- package/dist/{cjs/lint-6_0f9f26.cjs.js → commands/lint.cjs.js} +10 -10
- package/dist/commands/migrate/packageExports.cjs.js +17 -0
- package/dist/{cjs/packageLintConfigs-BBvQehRd.cjs.js → commands/migrate/packageLintConfigs.cjs.js} +2 -10
- package/dist/{cjs/packageRole-CkpKfhJA.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-bdpRw-oZ.cjs.js → commands/repo/clean.cjs.js} +5 -10
- package/dist/{cjs/fix-BTjof5XT.cjs.js → commands/repo/fix.cjs.js} +8 -13
- package/dist/commands/repo/lint.cjs.js +193 -0
- package/dist/{cjs/list-deprecations-DFgQENam.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 +274 -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-YJMOGqXG.cjs.js → commands/test.cjs.js} +6 -12
- package/dist/{cjs/bump-d9dS56p9.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-DXvz7jvh.cjs.js → lib/bundler/bundle.cjs.js} +26 -113
- package/dist/lib/bundler/config.cjs.js +469 -0
- package/dist/lib/bundler/hasReactDomClient.cjs.js +13 -0
- package/dist/lib/bundler/moduleFederation.cjs.js +28 -0
- package/dist/lib/bundler/optimization.cjs.js +63 -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 +246 -0
- package/dist/lib/bundler/transforms.cjs.js +171 -0
- package/dist/lib/codeowners/codeowners.cjs.js +92 -0
- package/dist/{cjs/config-nCB2LQK-.cjs.js → lib/config.cjs.js} +6 -6
- package/dist/{cjs/entryPoints-CoHH4lBA.cjs.js → lib/entryPoints.cjs.js} +4 -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-Dfl28j3c.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-e0emQj8q.cjs.js → lib/role.cjs.js} +3 -3
- package/dist/{cjs/run-HW3lfDbM.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 +86 -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/cli/package.json.cjs.js +159 -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/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/scaffolder-node/package.json.cjs.js +6 -0
- package/package.json +23 -23
- package/dist/cjs/build-gNEKjjhr.cjs.js +0 -194
- package/dist/cjs/buildWorkspace-DLfI3EjD.cjs.js +0 -53
- package/dist/cjs/clean-Dpgqc3P2.cjs.js +0 -22
- package/dist/cjs/createDistWorkspace-DKzy-L-f.cjs.js +0 -576
- package/dist/cjs/index-7LxfekFu.cjs.js +0 -625
- package/dist/cjs/index-DsP5wbju.cjs.js +0 -131
- package/dist/cjs/index-v57xnvgT.cjs.js +0 -520
- package/dist/cjs/lint-DYO_SeK3.cjs.js +0 -91
- package/dist/cjs/moduleFederation-Dq0n1quT.cjs.js +0 -910
- package/dist/cjs/new-C0D_k25O.cjs.js +0 -1043
- package/dist/cjs/pack-D8AK7Uem.cjs.js +0 -34
- package/dist/cjs/packageExports-bg4mFuFZ.cjs.js +0 -27
- package/dist/cjs/test-5bQM0VRL.cjs.js +0 -126
- package/dist/cjs/validate-DKBlShmI.cjs.js +0 -28
- /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
|
@@ -1,625 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var role = require('./role-e0emQj8q.cjs.js');
|
|
4
|
-
var fs = require('fs-extra');
|
|
5
|
-
var index = require('./index-v57xnvgT.cjs.js');
|
|
6
|
-
var webpack = require('webpack');
|
|
7
|
-
var moduleFederation = require('./moduleFederation-Dq0n1quT.cjs.js');
|
|
8
|
-
require('yn');
|
|
9
|
-
var path = require('path');
|
|
10
|
-
require('react-dev-utils/FileSizeReporter');
|
|
11
|
-
require('react-dev-utils/formatWebpackMessages');
|
|
12
|
-
var chalk = require('chalk');
|
|
13
|
-
require('eslint-webpack-plugin');
|
|
14
|
-
require('fork-ts-checker-webpack-plugin');
|
|
15
|
-
require('html-webpack-plugin');
|
|
16
|
-
require('@module-federation/enhanced/webpack');
|
|
17
|
-
require('@backstage/cli-common');
|
|
18
|
-
require('react-dev-utils/ModuleScopePlugin');
|
|
19
|
-
require('run-script-webpack-plugin');
|
|
20
|
-
require('@pmmmwh/react-refresh-webpack-plugin');
|
|
21
|
-
require('@manypkg/get-packages');
|
|
22
|
-
require('webpack-node-externals');
|
|
23
|
-
require('lodash/pickBy');
|
|
24
|
-
require('./run-HW3lfDbM.cjs.js');
|
|
25
|
-
require('mini-css-extract-plugin');
|
|
26
|
-
var openBrowser = require('react-dev-utils/openBrowser');
|
|
27
|
-
var WebpackDevServer = require('webpack-dev-server');
|
|
28
|
-
require('@backstage/config-loader');
|
|
29
|
-
require('@backstage/config');
|
|
30
|
-
require('@backstage/cli-node');
|
|
31
|
-
var chokidar = require('chokidar');
|
|
32
|
-
var ctrlcWindows = require('ctrlc-windows');
|
|
33
|
-
var errors = require('@backstage/errors');
|
|
34
|
-
var debounce = require('lodash/debounce');
|
|
35
|
-
var url = require('url');
|
|
36
|
-
var spawn = require('cross-spawn');
|
|
37
|
-
var config = require('./config-nCB2LQK-.cjs.js');
|
|
38
|
-
require('commander');
|
|
39
|
-
require('semver');
|
|
40
|
-
require('./entryPoints-CoHH4lBA.cjs.js');
|
|
41
|
-
require('./svgrTemplate-BTjBQ3by.cjs.js');
|
|
42
|
-
require('p-queue');
|
|
43
|
-
require('child_process');
|
|
44
|
-
require('util');
|
|
45
|
-
|
|
46
|
-
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
47
|
-
|
|
48
|
-
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
49
|
-
var webpack__default = /*#__PURE__*/_interopDefaultCompat(webpack);
|
|
50
|
-
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
51
|
-
var openBrowser__default = /*#__PURE__*/_interopDefaultCompat(openBrowser);
|
|
52
|
-
var WebpackDevServer__default = /*#__PURE__*/_interopDefaultCompat(WebpackDevServer);
|
|
53
|
-
var debounce__default = /*#__PURE__*/_interopDefaultCompat(debounce);
|
|
54
|
-
var spawn__default = /*#__PURE__*/_interopDefaultCompat(spawn);
|
|
55
|
-
|
|
56
|
-
async function serveBackend(options) {
|
|
57
|
-
const paths = moduleFederation.resolveBundlingPaths(options);
|
|
58
|
-
const config = await moduleFederation.createBackendConfig(paths, {
|
|
59
|
-
...options,
|
|
60
|
-
isDev: true
|
|
61
|
-
});
|
|
62
|
-
process.env.NODE_ENV = "development";
|
|
63
|
-
const compiler = webpack__default.default(config, (err) => {
|
|
64
|
-
if (err) {
|
|
65
|
-
console.error(err);
|
|
66
|
-
} else console.log("Build succeeded");
|
|
67
|
-
});
|
|
68
|
-
const waitForExit = async () => {
|
|
69
|
-
for (const signal of ["SIGINT", "SIGTERM"]) {
|
|
70
|
-
process.on(signal, () => {
|
|
71
|
-
compiler.close(() => process.exit());
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return new Promise(() => {
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
return waitForExit;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
async function serveBundle(options) {
|
|
81
|
-
const paths = moduleFederation.resolveBundlingPaths(options);
|
|
82
|
-
const targetPkg = await fs__default.default.readJson(paths.targetPackageJson);
|
|
83
|
-
if (options.verifyVersions) {
|
|
84
|
-
if (targetPkg.dependencies?.["react-router"]?.includes("beta") || targetPkg.dependencies?.["react-router-dom"]?.includes("beta")) {
|
|
85
|
-
console.warn(
|
|
86
|
-
chalk__default.default.yellow(`
|
|
87
|
-
DEPRECATION WARNING: React Router Beta is deprecated and support for it will be removed in a future release.
|
|
88
|
-
Please migrate to use React Router v6 stable.
|
|
89
|
-
See https://backstage.io/docs/tutorials/react-router-stable-migration
|
|
90
|
-
`)
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
checkReactVersion();
|
|
95
|
-
const { name } = await fs__default.default.readJson(index.paths.resolveTarget("package.json"));
|
|
96
|
-
let webpackServer = void 0;
|
|
97
|
-
let viteServer = void 0;
|
|
98
|
-
let latestFrontendAppConfigs = [];
|
|
99
|
-
const cliConfig = await config.loadCliConfig({
|
|
100
|
-
args: options.configPaths,
|
|
101
|
-
fromPackage: name,
|
|
102
|
-
withFilteredKeys: true,
|
|
103
|
-
watch(appConfigs) {
|
|
104
|
-
latestFrontendAppConfigs = appConfigs;
|
|
105
|
-
webpackServer?.invalidate();
|
|
106
|
-
viteServer?.restart();
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
latestFrontendAppConfigs = cliConfig.frontendAppConfigs;
|
|
110
|
-
const appBaseUrl = cliConfig.frontendConfig.getOptionalString("app.baseUrl");
|
|
111
|
-
const backendBaseUrl = cliConfig.frontendConfig.getOptionalString("backend.baseUrl");
|
|
112
|
-
if (appBaseUrl && appBaseUrl === backendBaseUrl) {
|
|
113
|
-
console.log(
|
|
114
|
-
chalk__default.default.yellow(
|
|
115
|
-
`\u26A0\uFE0F Conflict between app baseUrl and backend baseUrl:
|
|
116
|
-
|
|
117
|
-
app.baseUrl: ${appBaseUrl}
|
|
118
|
-
backend.baseUrl: ${backendBaseUrl}
|
|
119
|
-
|
|
120
|
-
Must have unique hostname and/or ports.
|
|
121
|
-
|
|
122
|
-
This can be resolved by changing app.baseUrl and backend.baseUrl to point to their respective local development ports.
|
|
123
|
-
`
|
|
124
|
-
)
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
const { frontendConfig, fullConfig } = cliConfig;
|
|
128
|
-
const url = moduleFederation.resolveBaseUrl(frontendConfig, options.moduleFederation);
|
|
129
|
-
const { host, port } = moduleFederation.resolveEndpoint(
|
|
130
|
-
frontendConfig,
|
|
131
|
-
options.moduleFederation
|
|
132
|
-
);
|
|
133
|
-
const detectedModulesEntryPoint = await moduleFederation.createDetectedModulesEntryPoint({
|
|
134
|
-
config: fullConfig,
|
|
135
|
-
targetPath: paths.targetPath,
|
|
136
|
-
watch() {
|
|
137
|
-
webpackServer?.invalidate();
|
|
138
|
-
viteServer?.restart();
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
const commonConfigOptions = {
|
|
142
|
-
...options,
|
|
143
|
-
checksEnabled: options.checksEnabled,
|
|
144
|
-
isDev: true,
|
|
145
|
-
baseUrl: url,
|
|
146
|
-
frontendConfig,
|
|
147
|
-
getFrontendAppConfigs: () => {
|
|
148
|
-
return latestFrontendAppConfigs;
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
const config$1 = await moduleFederation.createConfig(paths, {
|
|
152
|
-
...commonConfigOptions,
|
|
153
|
-
additionalEntryPoints: detectedModulesEntryPoint,
|
|
154
|
-
moduleFederation: options.moduleFederation
|
|
155
|
-
});
|
|
156
|
-
if (process.env.EXPERIMENTAL_VITE) {
|
|
157
|
-
const vite = require("vite");
|
|
158
|
-
const { default: viteReact } = require("@vitejs/plugin-react");
|
|
159
|
-
const {
|
|
160
|
-
nodePolyfills: viteNodePolyfills
|
|
161
|
-
} = require("vite-plugin-node-polyfills");
|
|
162
|
-
const { createHtmlPlugin: viteHtml } = require("vite-plugin-html");
|
|
163
|
-
viteServer = await vite.createServer({
|
|
164
|
-
define: {
|
|
165
|
-
global: "window",
|
|
166
|
-
"process.argv": JSON.stringify(process.argv),
|
|
167
|
-
"process.env.APP_CONFIG": JSON.stringify(cliConfig.frontendAppConfigs),
|
|
168
|
-
// This allows for conditional imports of react-dom/client, since there's no way
|
|
169
|
-
// to check for presence of it in source code without module resolution errors.
|
|
170
|
-
"process.env.HAS_REACT_DOM_CLIENT": JSON.stringify(moduleFederation.hasReactDomClient())
|
|
171
|
-
},
|
|
172
|
-
plugins: [
|
|
173
|
-
viteReact(),
|
|
174
|
-
viteNodePolyfills(),
|
|
175
|
-
viteHtml({
|
|
176
|
-
entry: paths.targetEntry,
|
|
177
|
-
// todo(blam): we should look at contributing to thPe plugin here
|
|
178
|
-
// to support absolute paths, but works in the interim at least.
|
|
179
|
-
template: "public/index.html",
|
|
180
|
-
inject: {
|
|
181
|
-
data: {
|
|
182
|
-
config: frontendConfig,
|
|
183
|
-
publicPath: config$1.output?.publicPath
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
})
|
|
187
|
-
],
|
|
188
|
-
server: {
|
|
189
|
-
host,
|
|
190
|
-
port
|
|
191
|
-
},
|
|
192
|
-
publicDir: paths.targetPublic,
|
|
193
|
-
root: paths.targetPath
|
|
194
|
-
});
|
|
195
|
-
} else {
|
|
196
|
-
const publicPaths = await moduleFederation.resolveOptionalBundlingPaths({
|
|
197
|
-
entry: "src/index-public-experimental",
|
|
198
|
-
dist: "dist/public"
|
|
199
|
-
});
|
|
200
|
-
if (publicPaths) {
|
|
201
|
-
console.log(
|
|
202
|
-
chalk__default.default.yellow(
|
|
203
|
-
`\u26A0\uFE0F WARNING: The app /public entry point is an experimental feature that may receive immediate breaking changes.`
|
|
204
|
-
)
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
const compiler = publicPaths ? webpack__default.default([config$1, await moduleFederation.createConfig(publicPaths, commonConfigOptions)]) : webpack__default.default(config$1);
|
|
208
|
-
webpackServer = new WebpackDevServer__default.default(
|
|
209
|
-
{
|
|
210
|
-
hot: !process.env.CI,
|
|
211
|
-
devMiddleware: {
|
|
212
|
-
publicPath: config$1.output?.publicPath,
|
|
213
|
-
stats: "errors-warnings"
|
|
214
|
-
},
|
|
215
|
-
static: paths.targetPublic ? {
|
|
216
|
-
publicPath: config$1.output?.publicPath,
|
|
217
|
-
directory: paths.targetPublic
|
|
218
|
-
} : void 0,
|
|
219
|
-
historyApiFallback: options.moduleFederation?.mode === "remote" ? false : {
|
|
220
|
-
// Paths with dots should still use the history fallback.
|
|
221
|
-
// See https://github.com/facebookincubator/create-react-app/issues/387.
|
|
222
|
-
disableDotRule: true,
|
|
223
|
-
// The index needs to be rewritten relative to the new public path, including subroutes.
|
|
224
|
-
index: `${config$1.output?.publicPath}index.html`
|
|
225
|
-
},
|
|
226
|
-
server: url.protocol === "https:" ? {
|
|
227
|
-
type: "https",
|
|
228
|
-
options: {
|
|
229
|
-
cert: fullConfig.getString("app.https.certificate.cert"),
|
|
230
|
-
key: fullConfig.getString("app.https.certificate.key")
|
|
231
|
-
}
|
|
232
|
-
} : {},
|
|
233
|
-
host,
|
|
234
|
-
port,
|
|
235
|
-
proxy: targetPkg.proxy,
|
|
236
|
-
// When the dev server is behind a proxy, the host and public hostname differ
|
|
237
|
-
allowedHosts: [url.hostname],
|
|
238
|
-
client: {
|
|
239
|
-
webSocketURL: { hostname: host, port }
|
|
240
|
-
},
|
|
241
|
-
headers: {
|
|
242
|
-
"Access-Control-Allow-Origin": "*",
|
|
243
|
-
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
|
244
|
-
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
compiler
|
|
248
|
-
);
|
|
249
|
-
}
|
|
250
|
-
await viteServer?.listen();
|
|
251
|
-
await new Promise(async (resolve, reject) => {
|
|
252
|
-
if (webpackServer) {
|
|
253
|
-
webpackServer.startCallback((err) => {
|
|
254
|
-
if (err) {
|
|
255
|
-
reject(err);
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
resolve();
|
|
259
|
-
});
|
|
260
|
-
} else {
|
|
261
|
-
resolve();
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
if (!options.skipOpenBrowser) {
|
|
265
|
-
openBrowser__default.default(url.href);
|
|
266
|
-
}
|
|
267
|
-
const waitForExit = async () => {
|
|
268
|
-
for (const signal of ["SIGINT", "SIGTERM"]) {
|
|
269
|
-
process.on(signal, () => {
|
|
270
|
-
webpackServer?.stop();
|
|
271
|
-
viteServer?.close();
|
|
272
|
-
process.exit();
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
return new Promise(() => {
|
|
276
|
-
});
|
|
277
|
-
};
|
|
278
|
-
return waitForExit;
|
|
279
|
-
}
|
|
280
|
-
function checkReactVersion() {
|
|
281
|
-
try {
|
|
282
|
-
const reactPkgPath = require.resolve("react/package.json", {
|
|
283
|
-
paths: [index.paths.targetRoot]
|
|
284
|
-
});
|
|
285
|
-
const reactPkg = require(reactPkgPath);
|
|
286
|
-
if (reactPkg.version.startsWith("16.")) {
|
|
287
|
-
console.log(
|
|
288
|
-
chalk__default.default.yellow(
|
|
289
|
-
`
|
|
290
|
-
\u26A0\uFE0F \u26A0\uFE0F
|
|
291
|
-
\u26A0\uFE0F You are using React version 16, which is deprecated for use in Backstage. \u26A0\uFE0F
|
|
292
|
-
\u26A0\uFE0F Please upgrade to React 17 by updating your packages/app dependencies. \u26A0\uFE0F
|
|
293
|
-
\u26A0\uFE0F \u26A0\uFE0F
|
|
294
|
-
`
|
|
295
|
-
)
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
} catch {
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
const requestType = "@backstage/cli/channel/request";
|
|
303
|
-
const responseType = "@backstage/cli/channel/response";
|
|
304
|
-
class IpcServer {
|
|
305
|
-
#generation = 1;
|
|
306
|
-
#methods = /* @__PURE__ */ new Map();
|
|
307
|
-
addChild(child) {
|
|
308
|
-
const generation = this.#generation++;
|
|
309
|
-
const sendMessage = child.send?.bind(child);
|
|
310
|
-
if (!sendMessage) {
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
const messageListener = (request) => {
|
|
314
|
-
if (request.type !== requestType) {
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
const handler = this.#methods.get(request.method);
|
|
318
|
-
if (!handler) {
|
|
319
|
-
sendMessage({
|
|
320
|
-
type: responseType,
|
|
321
|
-
id: request.id,
|
|
322
|
-
error: {
|
|
323
|
-
name: "NotFoundError",
|
|
324
|
-
message: `No handler registered for method ${request.method}`
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
Promise.resolve().then(() => handler(request.body, { generation })).then(
|
|
330
|
-
(response) => sendMessage({
|
|
331
|
-
type: responseType,
|
|
332
|
-
id: request.id,
|
|
333
|
-
body: response
|
|
334
|
-
})
|
|
335
|
-
).catch(
|
|
336
|
-
(error) => sendMessage({
|
|
337
|
-
type: responseType,
|
|
338
|
-
id: request.id,
|
|
339
|
-
error: errors.serializeError(error)
|
|
340
|
-
})
|
|
341
|
-
);
|
|
342
|
-
};
|
|
343
|
-
child.addListener("message", messageListener);
|
|
344
|
-
child.addListener("exit", () => {
|
|
345
|
-
child.removeListener("message", messageListener);
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
registerMethod(method, handler) {
|
|
349
|
-
if (this.#methods.has(method)) {
|
|
350
|
-
throw new Error(`A handler is already registered for method ${method}`);
|
|
351
|
-
}
|
|
352
|
-
this.#methods.set(method, handler);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
class ServerDataStore {
|
|
357
|
-
static bind(server) {
|
|
358
|
-
const store = /* @__PURE__ */ new Map();
|
|
359
|
-
server.registerMethod(
|
|
360
|
-
"DevDataStore.save",
|
|
361
|
-
async (request, { generation }) => {
|
|
362
|
-
const { key, data } = request;
|
|
363
|
-
if (!key) {
|
|
364
|
-
throw new Error("Key is required in DevDataStore.save");
|
|
365
|
-
}
|
|
366
|
-
const item = store.get(key);
|
|
367
|
-
if (!item) {
|
|
368
|
-
store.set(key, { generation, data });
|
|
369
|
-
return { saved: true };
|
|
370
|
-
}
|
|
371
|
-
if (item.generation > generation) {
|
|
372
|
-
return { saved: false };
|
|
373
|
-
}
|
|
374
|
-
store.set(key, { generation, data });
|
|
375
|
-
return { saved: true };
|
|
376
|
-
}
|
|
377
|
-
);
|
|
378
|
-
server.registerMethod(
|
|
379
|
-
"DevDataStore.load",
|
|
380
|
-
async (request) => {
|
|
381
|
-
const item = store.get(request.key);
|
|
382
|
-
return { loaded: Boolean(item), data: item?.data };
|
|
383
|
-
}
|
|
384
|
-
);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
const loaderArgs = [
|
|
389
|
-
"--enable-source-maps",
|
|
390
|
-
"--require",
|
|
391
|
-
require.resolve("@backstage/cli/config/nodeTransform.cjs")
|
|
392
|
-
// TODO: Support modules, although there's currently no way to load them since import() is transpiled tp require()
|
|
393
|
-
];
|
|
394
|
-
async function startBackendExperimental(options) {
|
|
395
|
-
const envEnv = process.env;
|
|
396
|
-
if (!envEnv.NODE_ENV) {
|
|
397
|
-
envEnv.NODE_ENV = "development";
|
|
398
|
-
}
|
|
399
|
-
const server = new IpcServer();
|
|
400
|
-
ServerDataStore.bind(server);
|
|
401
|
-
let exiting = false;
|
|
402
|
-
let firstStart = true;
|
|
403
|
-
let child;
|
|
404
|
-
let watcher = void 0;
|
|
405
|
-
let shutdownPromise = void 0;
|
|
406
|
-
const watchedPaths = /* @__PURE__ */ new Set();
|
|
407
|
-
const restart = debounce__default.default(async () => {
|
|
408
|
-
if (firstStart) {
|
|
409
|
-
firstStart = false;
|
|
410
|
-
} else {
|
|
411
|
-
console.log();
|
|
412
|
-
console.log("Change detected, restarting the development server...");
|
|
413
|
-
console.log();
|
|
414
|
-
}
|
|
415
|
-
if (shutdownPromise) {
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
if (child && !child.killed && child.exitCode === null) {
|
|
419
|
-
shutdownPromise = new Promise((resolve) => child.once("exit", resolve));
|
|
420
|
-
if (process.platform === "win32" && child.pid) {
|
|
421
|
-
ctrlcWindows.ctrlc(child.pid);
|
|
422
|
-
} else {
|
|
423
|
-
child.kill();
|
|
424
|
-
}
|
|
425
|
-
await shutdownPromise;
|
|
426
|
-
shutdownPromise = void 0;
|
|
427
|
-
}
|
|
428
|
-
if (exiting) {
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
const optionArgs = new Array();
|
|
432
|
-
if (options.inspectEnabled) {
|
|
433
|
-
const inspect = typeof options.inspectEnabled === "string" ? `--inspect=${options.inspectEnabled}` : "--inspect";
|
|
434
|
-
optionArgs.push(inspect);
|
|
435
|
-
} else if (options.inspectBrkEnabled) {
|
|
436
|
-
const inspect = typeof options.inspectBrkEnabled === "string" ? `--inspect-brk=${options.inspectBrkEnabled}` : "--inspect-brk";
|
|
437
|
-
optionArgs.push(inspect);
|
|
438
|
-
}
|
|
439
|
-
if (options.require) {
|
|
440
|
-
optionArgs.push(`--require=${options.require}`);
|
|
441
|
-
}
|
|
442
|
-
const userArgs = process.argv.slice(["node", "backstage-cli", "package", "start"].length).filter((arg) => !optionArgs.includes(arg));
|
|
443
|
-
child = spawn__default.default(
|
|
444
|
-
process.execPath,
|
|
445
|
-
[...loaderArgs, ...optionArgs, options.entry, ...userArgs],
|
|
446
|
-
{
|
|
447
|
-
stdio: ["ignore", "inherit", "inherit", "ipc"],
|
|
448
|
-
env: {
|
|
449
|
-
...process.env,
|
|
450
|
-
BACKSTAGE_CLI_CHANNEL: "1",
|
|
451
|
-
ESBK_TSCONFIG_PATH: index.paths.resolveTargetRoot("tsconfig.json")
|
|
452
|
-
},
|
|
453
|
-
serialization: "advanced"
|
|
454
|
-
}
|
|
455
|
-
);
|
|
456
|
-
server.addChild(child);
|
|
457
|
-
child.on("message", (data) => {
|
|
458
|
-
if (!watcher) {
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
if (typeof data === "object" && data?.type === "watch") {
|
|
462
|
-
let path$1 = data.path;
|
|
463
|
-
if (path$1.startsWith("file:")) {
|
|
464
|
-
path$1 = url.fileURLToPath(path$1);
|
|
465
|
-
}
|
|
466
|
-
if (path.isAbsolute(path$1) && !watchedPaths.has(path$1)) {
|
|
467
|
-
watchedPaths.add(path$1);
|
|
468
|
-
watcher.add(path$1);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
});
|
|
472
|
-
}, 100);
|
|
473
|
-
restart();
|
|
474
|
-
watcher = chokidar.watch(["./package.json"], {
|
|
475
|
-
cwd: process.cwd(),
|
|
476
|
-
ignoreInitial: true,
|
|
477
|
-
ignorePermissionErrors: true
|
|
478
|
-
}).on("all", restart);
|
|
479
|
-
process.stdin.on("data", restart);
|
|
480
|
-
const exitPromise = new Promise((resolveExitPromise) => {
|
|
481
|
-
async function handleSignal(signal) {
|
|
482
|
-
exiting = true;
|
|
483
|
-
if (child && child.exitCode === null) {
|
|
484
|
-
await new Promise((resolve) => {
|
|
485
|
-
child.on("close", resolve);
|
|
486
|
-
child.kill(signal);
|
|
487
|
-
});
|
|
488
|
-
}
|
|
489
|
-
resolveExitPromise();
|
|
490
|
-
}
|
|
491
|
-
process.once("SIGINT", handleSignal);
|
|
492
|
-
process.once("SIGTERM", handleSignal);
|
|
493
|
-
});
|
|
494
|
-
return () => exitPromise;
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
async function startBackend(options) {
|
|
498
|
-
if (!process.env.LEGACY_BACKEND_START) {
|
|
499
|
-
const waitForExit = await startBackendExperimental({
|
|
500
|
-
entry: "src/index",
|
|
501
|
-
checksEnabled: false,
|
|
502
|
-
// not supported
|
|
503
|
-
inspectEnabled: options.inspectEnabled,
|
|
504
|
-
inspectBrkEnabled: options.inspectBrkEnabled,
|
|
505
|
-
require: options.require
|
|
506
|
-
});
|
|
507
|
-
await waitForExit();
|
|
508
|
-
} else {
|
|
509
|
-
console.warn(
|
|
510
|
-
"LEGACY_BACKEND_START is deprecated and will be removed in a future release"
|
|
511
|
-
);
|
|
512
|
-
const waitForExit = await cleanDistAndServeBackend({
|
|
513
|
-
entry: "src/index",
|
|
514
|
-
checksEnabled: options.checksEnabled,
|
|
515
|
-
inspectEnabled: options.inspectEnabled,
|
|
516
|
-
inspectBrkEnabled: options.inspectBrkEnabled,
|
|
517
|
-
require: options.require
|
|
518
|
-
});
|
|
519
|
-
await waitForExit();
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
async function startBackendPlugin(options) {
|
|
523
|
-
if (!process.env.LEGACY_BACKEND_START) {
|
|
524
|
-
const hasDevIndexEntry = await fs__default.default.pathExists(
|
|
525
|
-
index.paths.resolveTarget("dev", "index.ts")
|
|
526
|
-
);
|
|
527
|
-
if (!hasDevIndexEntry) {
|
|
528
|
-
console.warn(
|
|
529
|
-
`The 'dev' directory is missing. Please create a proper dev/index.ts in order to start the plugin.`
|
|
530
|
-
);
|
|
531
|
-
return;
|
|
532
|
-
}
|
|
533
|
-
const waitForExit = await startBackendExperimental({
|
|
534
|
-
entry: "dev/index",
|
|
535
|
-
checksEnabled: false,
|
|
536
|
-
// not supported
|
|
537
|
-
inspectEnabled: options.inspectEnabled,
|
|
538
|
-
inspectBrkEnabled: options.inspectBrkEnabled,
|
|
539
|
-
require: options.require
|
|
540
|
-
});
|
|
541
|
-
await waitForExit();
|
|
542
|
-
} else {
|
|
543
|
-
const hasEntry = await fs__default.default.pathExists(index.paths.resolveTarget("src", "run.ts"));
|
|
544
|
-
if (!hasEntry) {
|
|
545
|
-
console.warn(
|
|
546
|
-
`src/run.ts is missing. Please create the file or run the command without LEGACY_BACKEND_START`
|
|
547
|
-
);
|
|
548
|
-
return;
|
|
549
|
-
}
|
|
550
|
-
console.warn(
|
|
551
|
-
"LEGACY_BACKEND_START is deprecated and will be removed in a future release"
|
|
552
|
-
);
|
|
553
|
-
const waitForExit = await cleanDistAndServeBackend({
|
|
554
|
-
entry: "src/run",
|
|
555
|
-
checksEnabled: options.checksEnabled,
|
|
556
|
-
inspectEnabled: options.inspectEnabled,
|
|
557
|
-
inspectBrkEnabled: options.inspectBrkEnabled,
|
|
558
|
-
require: options.require
|
|
559
|
-
});
|
|
560
|
-
await waitForExit();
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
async function cleanDistAndServeBackend(options) {
|
|
564
|
-
await fs__default.default.remove(index.paths.resolveTarget("dist"));
|
|
565
|
-
return serveBackend(options);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
async function startFrontend(options) {
|
|
569
|
-
const { name } = await fs.readJson(index.paths.resolveTarget("package.json"));
|
|
570
|
-
const waitForExit = await serveBundle({
|
|
571
|
-
entry: options.entry,
|
|
572
|
-
checksEnabled: options.checksEnabled,
|
|
573
|
-
configPaths: options.configPaths,
|
|
574
|
-
verifyVersions: options.verifyVersions,
|
|
575
|
-
skipOpenBrowser: options.skipOpenBrowser,
|
|
576
|
-
moduleFederation: moduleFederation.getModuleFederationOptions(
|
|
577
|
-
name,
|
|
578
|
-
options.isModuleFederationRemote
|
|
579
|
-
)
|
|
580
|
-
});
|
|
581
|
-
await waitForExit();
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
async function command(opts) {
|
|
585
|
-
const role$1 = await role.findRoleFromCommand(opts);
|
|
586
|
-
const options = {
|
|
587
|
-
configPaths: opts.config,
|
|
588
|
-
checksEnabled: Boolean(opts.check),
|
|
589
|
-
inspectEnabled: opts.inspect,
|
|
590
|
-
inspectBrkEnabled: opts.inspectBrk,
|
|
591
|
-
require: opts.require
|
|
592
|
-
};
|
|
593
|
-
switch (role$1) {
|
|
594
|
-
case "backend":
|
|
595
|
-
return startBackend(options);
|
|
596
|
-
case "backend-plugin":
|
|
597
|
-
case "backend-plugin-module":
|
|
598
|
-
case "node-library":
|
|
599
|
-
return startBackendPlugin(options);
|
|
600
|
-
case "frontend":
|
|
601
|
-
return startFrontend({
|
|
602
|
-
...options,
|
|
603
|
-
entry: "src/index",
|
|
604
|
-
verifyVersions: true
|
|
605
|
-
});
|
|
606
|
-
case "web-library":
|
|
607
|
-
case "frontend-plugin":
|
|
608
|
-
case "frontend-plugin-module":
|
|
609
|
-
return startFrontend({ entry: "dev/index", ...options });
|
|
610
|
-
case "frontend-dynamic-container":
|
|
611
|
-
return startFrontend({
|
|
612
|
-
entry: "src/index",
|
|
613
|
-
...options,
|
|
614
|
-
skipOpenBrowser: true,
|
|
615
|
-
isModuleFederationRemote: true
|
|
616
|
-
});
|
|
617
|
-
default:
|
|
618
|
-
throw new Error(
|
|
619
|
-
`Start command is not supported for package role '${role$1}'`
|
|
620
|
-
);
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
exports.command = command;
|
|
625
|
-
//# sourceMappingURL=index-7LxfekFu.cjs.js.map
|