@backstage/cli 0.28.0 → 0.29.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/config/jest.js +49 -25
- package/config/jestRejectNetworkRequests.js +59 -0
- package/config/nodeTransform.cjs +33 -0
- package/dist/commands/build/buildFrontend.cjs.js +8 -11
- package/dist/commands/buildWorkspace.cjs.js +1 -1
- package/dist/commands/index.cjs.js +9 -3
- package/dist/commands/repo/lint.cjs.js +6 -28
- package/dist/commands/repo/test.cjs.js +5 -27
- package/dist/commands/start/command.cjs.js +1 -0
- package/dist/commands/start/startBackend.cjs.js +23 -92
- package/dist/commands/start/startFrontend.cjs.js +6 -8
- package/dist/commands/versions/bump.cjs.js +9 -3
- package/dist/lib/bundler/config.cjs.js +20 -138
- package/dist/lib/bundler/linkWorkspaces.cjs.js +31 -0
- package/dist/lib/cache/SuccessCache.cjs.js +70 -0
- package/dist/lib/packager/createDistWorkspace.cjs.js +3 -3
- package/dist/lib/{experimental/startBackendExperimental.cjs.js → runner/runBackend.cjs.js} +6 -5
- package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
- package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
- package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
- package/dist/packages/catalog-client/package.json.cjs.js +1 -1
- package/dist/packages/cli/package.json.cjs.js +2 -4
- package/dist/packages/core-components/package.json.cjs.js +1 -1
- package/dist/packages/dev-utils/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-node/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
- package/package.json +28 -30
- package/dist/lib/bundler/LinkedPackageResolvePlugin.cjs.js +0 -47
- package/dist/lib/bundler/backend.cjs.js +0 -36
- /package/dist/lib/{experimental → ipc}/IpcServer.cjs.js +0 -0
- /package/dist/lib/{experimental → ipc}/ServerDataStore.cjs.js +0 -0
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var fs = require('fs-extra');
|
|
4
|
-
require('
|
|
4
|
+
require('yn');
|
|
5
5
|
require('path');
|
|
6
|
+
require('webpack');
|
|
7
|
+
require('react-dev-utils/FileSizeReporter');
|
|
8
|
+
require('react-dev-utils/formatWebpackMessages');
|
|
6
9
|
require('chalk');
|
|
7
10
|
require('eslint-webpack-plugin');
|
|
8
11
|
require('fork-ts-checker-webpack-plugin');
|
|
9
12
|
require('html-webpack-plugin');
|
|
10
13
|
require('@module-federation/enhanced/webpack');
|
|
11
|
-
require('@backstage/cli-common');
|
|
12
14
|
require('react-dev-utils/ModuleScopePlugin');
|
|
13
|
-
require('run-script-webpack-plugin');
|
|
14
15
|
require('@pmmmwh/react-refresh-webpack-plugin');
|
|
15
16
|
var paths = require('../../lib/paths.cjs.js');
|
|
16
|
-
require('@manypkg/get-packages');
|
|
17
|
-
require('webpack-node-externals');
|
|
18
17
|
require('../../lib/bundler/optimization.cjs.js');
|
|
19
18
|
require('lodash/pickBy');
|
|
20
19
|
require('../../lib/run.cjs.js');
|
|
21
20
|
require('mini-css-extract-plugin');
|
|
22
21
|
require('../../lib/version.cjs.js');
|
|
23
|
-
require('
|
|
24
|
-
require('react-dev-utils/FileSizeReporter');
|
|
25
|
-
require('react-dev-utils/formatWebpackMessages');
|
|
22
|
+
require('@manypkg/get-packages');
|
|
26
23
|
require('../../lib/bundler/packageDetection.cjs.js');
|
|
27
24
|
var moduleFederation = require('../../lib/bundler/moduleFederation.cjs.js');
|
|
28
25
|
var server = require('../../lib/bundler/server.cjs.js');
|
|
@@ -35,6 +32,7 @@ async function startFrontend(options) {
|
|
|
35
32
|
configPaths: options.configPaths,
|
|
36
33
|
verifyVersions: options.verifyVersions,
|
|
37
34
|
skipOpenBrowser: options.skipOpenBrowser,
|
|
35
|
+
linkedWorkspace: options.linkedWorkspace,
|
|
38
36
|
moduleFederation: moduleFederation.getModuleFederationOptions(
|
|
39
37
|
name,
|
|
40
38
|
options.isModuleFederationRemote
|
|
@@ -160,7 +160,10 @@ var bump = async (opts) => {
|
|
|
160
160
|
});
|
|
161
161
|
console.log();
|
|
162
162
|
if (pattern === DEFAULT_PATTERN_GLOB) {
|
|
163
|
-
await bumpBackstageJsonVersion(
|
|
163
|
+
await bumpBackstageJsonVersion(
|
|
164
|
+
releaseManifest.releaseVersion,
|
|
165
|
+
hasYarnPlugin
|
|
166
|
+
);
|
|
164
167
|
} else {
|
|
165
168
|
console.log(
|
|
166
169
|
chalk__default.default.yellow(
|
|
@@ -306,7 +309,7 @@ async function getBackstageJson() {
|
|
|
306
309
|
throw e;
|
|
307
310
|
});
|
|
308
311
|
}
|
|
309
|
-
async function bumpBackstageJsonVersion(version) {
|
|
312
|
+
async function bumpBackstageJsonVersion(version, useYarnPlugin) {
|
|
310
313
|
const backstageJson = await getBackstageJson();
|
|
311
314
|
const prevVersion = backstageJson?.version;
|
|
312
315
|
if (prevVersion === version) {
|
|
@@ -316,7 +319,10 @@ async function bumpBackstageJsonVersion(version) {
|
|
|
316
319
|
if (prevVersion) {
|
|
317
320
|
const from = encodeURIComponent(prevVersion);
|
|
318
321
|
const to = encodeURIComponent(version);
|
|
319
|
-
|
|
322
|
+
let link = `https://backstage.github.io/upgrade-helper/?from=${from}&to=${to}`;
|
|
323
|
+
if (useYarnPlugin) {
|
|
324
|
+
link += "&yarnPlugin=1";
|
|
325
|
+
}
|
|
320
326
|
console.log(
|
|
321
327
|
yellow(
|
|
322
328
|
`Upgraded from release ${green(prevVersion)} to ${green(
|
|
@@ -7,23 +7,18 @@ var ESLintPlugin = require('eslint-webpack-plugin');
|
|
|
7
7
|
var ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
|
|
8
8
|
var HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
9
9
|
var webpack = require('@module-federation/enhanced/webpack');
|
|
10
|
-
var LinkedPackageResolvePlugin = require('./LinkedPackageResolvePlugin.cjs.js');
|
|
11
10
|
var ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
|
|
12
|
-
var runScriptWebpackPlugin = require('run-script-webpack-plugin');
|
|
13
11
|
var ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
|
|
14
12
|
var paths = require('../paths.cjs.js');
|
|
15
13
|
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
14
|
var optimization = require('./optimization.cjs.js');
|
|
20
15
|
var pickBy = require('lodash/pickBy');
|
|
21
|
-
var entryPoints = require('../entryPoints.cjs.js');
|
|
22
16
|
var run = require('../run.cjs.js');
|
|
23
17
|
var transforms = require('./transforms.cjs.js');
|
|
24
18
|
var version = require('../version.cjs.js');
|
|
25
19
|
var yn = require('yn');
|
|
26
20
|
var hasReactDomClient = require('./hasReactDomClient.cjs.js');
|
|
21
|
+
var linkWorkspaces = require('./linkWorkspaces.cjs.js');
|
|
27
22
|
|
|
28
23
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
29
24
|
|
|
@@ -35,7 +30,6 @@ var HtmlWebpackPlugin__default = /*#__PURE__*/_interopDefaultCompat(HtmlWebpackP
|
|
|
35
30
|
var ModuleScopePlugin__default = /*#__PURE__*/_interopDefaultCompat(ModuleScopePlugin);
|
|
36
31
|
var ReactRefreshPlugin__default = /*#__PURE__*/_interopDefaultCompat(ReactRefreshPlugin);
|
|
37
32
|
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
38
|
-
var nodeExternals__default = /*#__PURE__*/_interopDefaultCompat(nodeExternals);
|
|
39
33
|
var pickBy__default = /*#__PURE__*/_interopDefaultCompat(pickBy);
|
|
40
34
|
var yn__default = /*#__PURE__*/_interopDefaultCompat(yn);
|
|
41
35
|
|
|
@@ -84,7 +78,7 @@ async function readBuildInfo() {
|
|
|
84
78
|
commit: commit ?? "unknown"
|
|
85
79
|
};
|
|
86
80
|
}
|
|
87
|
-
async function createConfig(paths
|
|
81
|
+
async function createConfig(paths, options) {
|
|
88
82
|
const {
|
|
89
83
|
checksEnabled,
|
|
90
84
|
isDev,
|
|
@@ -94,8 +88,6 @@ async function createConfig(paths$1, options) {
|
|
|
94
88
|
rspack
|
|
95
89
|
} = options;
|
|
96
90
|
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
91
|
const validBaseUrl = resolveBaseUrl(frontendConfig, moduleFederation);
|
|
100
92
|
let publicPath = validBaseUrl.pathname.replace(/\/$/, "");
|
|
101
93
|
if (publicSubPath) {
|
|
@@ -124,10 +116,10 @@ async function createConfig(paths$1, options) {
|
|
|
124
116
|
if (checksEnabled) {
|
|
125
117
|
plugins.push(
|
|
126
118
|
new ForkTsCheckerWebpackPlugin__default.default({
|
|
127
|
-
typescript: { configFile: paths
|
|
119
|
+
typescript: { configFile: paths.targetTsConfig, memoryLimit: 4096 }
|
|
128
120
|
}),
|
|
129
121
|
new ESLintPlugin__default.default({
|
|
130
|
-
context: paths
|
|
122
|
+
context: paths.targetPath,
|
|
131
123
|
files: ["**/*.(ts|tsx|mts|cts|js|jsx|mjs|cjs)"]
|
|
132
124
|
})
|
|
133
125
|
);
|
|
@@ -146,7 +138,7 @@ async function createConfig(paths$1, options) {
|
|
|
146
138
|
meta: {
|
|
147
139
|
"backstage-app-mode": options?.appMode ?? "public"
|
|
148
140
|
},
|
|
149
|
-
template: paths
|
|
141
|
+
template: paths.targetHtml,
|
|
150
142
|
templateParameters: {
|
|
151
143
|
publicPath,
|
|
152
144
|
config: frontendConfig
|
|
@@ -163,7 +155,7 @@ async function createConfig(paths$1, options) {
|
|
|
163
155
|
minify: false,
|
|
164
156
|
publicPath: "<%= publicPath %>",
|
|
165
157
|
filename: "index.html.tmpl",
|
|
166
|
-
template:
|
|
158
|
+
template: `${require.resolve("raw-loader")}!${paths.targetHtml}`
|
|
167
159
|
})
|
|
168
160
|
);
|
|
169
161
|
}
|
|
@@ -175,7 +167,7 @@ async function createConfig(paths$1, options) {
|
|
|
175
167
|
...isRemote && {
|
|
176
168
|
filename: "remoteEntry.js",
|
|
177
169
|
exposes: {
|
|
178
|
-
".": paths
|
|
170
|
+
".": paths.targetEntry
|
|
179
171
|
}
|
|
180
172
|
},
|
|
181
173
|
name: options.moduleFederation.name,
|
|
@@ -245,6 +237,14 @@ async function createConfig(paths$1, options) {
|
|
|
245
237
|
"process.env.HAS_REACT_DOM_CLIENT": JSON.stringify(hasReactDomClient.hasReactDomClient())
|
|
246
238
|
})
|
|
247
239
|
);
|
|
240
|
+
if (options.linkedWorkspace) {
|
|
241
|
+
plugins.push(
|
|
242
|
+
...await linkWorkspaces.createWorkspaceLinkingPlugins(
|
|
243
|
+
bundler,
|
|
244
|
+
options.linkedWorkspace
|
|
245
|
+
)
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
248
|
const reactRefreshFiles = rspack ? [] : [
|
|
249
249
|
require.resolve(
|
|
250
250
|
"@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js"
|
|
@@ -297,11 +297,11 @@ async function createConfig(paths$1, options) {
|
|
|
297
297
|
// we check the gzip size instead
|
|
298
298
|
},
|
|
299
299
|
devtool: isDev ? "eval-cheap-module-source-map" : "source-map",
|
|
300
|
-
context: paths
|
|
300
|
+
context: paths.targetPath,
|
|
301
301
|
entry: [
|
|
302
302
|
require.resolve("@backstage/cli/config/webpack-public-path"),
|
|
303
303
|
...options.additionalEntryPoints ?? [],
|
|
304
|
-
paths
|
|
304
|
+
paths.targetEntry
|
|
305
305
|
],
|
|
306
306
|
resolve: {
|
|
307
307
|
extensions: [".ts", ".tsx", ".mjs", ".js", ".jsx", ".json", ".wasm"],
|
|
@@ -325,10 +325,9 @@ async function createConfig(paths$1, options) {
|
|
|
325
325
|
// FIXME: see also https://github.com/web-infra-dev/rspack/issues/3408
|
|
326
326
|
...!rspack && {
|
|
327
327
|
plugins: [
|
|
328
|
-
new LinkedPackageResolvePlugin.LinkedPackageResolvePlugin(paths$1.rootNodeModules, externalPkgs),
|
|
329
328
|
new ModuleScopePlugin__default.default(
|
|
330
|
-
[paths
|
|
331
|
-
[paths
|
|
329
|
+
[paths.targetSrc, paths.targetDev],
|
|
330
|
+
[paths.targetPackageJson, ...reactRefreshFiles]
|
|
332
331
|
)
|
|
333
332
|
]
|
|
334
333
|
}
|
|
@@ -338,7 +337,7 @@ async function createConfig(paths$1, options) {
|
|
|
338
337
|
},
|
|
339
338
|
output: {
|
|
340
339
|
uniqueName: options.moduleFederation?.name,
|
|
341
|
-
path: paths
|
|
340
|
+
path: paths.targetDist,
|
|
342
341
|
publicPath: options.moduleFederation?.mode === "remote" ? "auto" : `${publicPath}/`,
|
|
343
342
|
filename: isDev ? "[name].js" : "static/[name].[fullhash:8].js",
|
|
344
343
|
chunkFilename: isDev ? "[name].chunk.js" : "static/[name].[chunkhash:8].chunk.js",
|
|
@@ -367,124 +366,7 @@ async function createConfig(paths$1, options) {
|
|
|
367
366
|
}
|
|
368
367
|
};
|
|
369
368
|
}
|
|
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
369
|
|
|
487
|
-
exports.createBackendConfig = createBackendConfig;
|
|
488
370
|
exports.createConfig = createConfig;
|
|
489
371
|
exports.resolveBaseUrl = resolveBaseUrl;
|
|
490
372
|
exports.resolveEndpoint = resolveEndpoint;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var getPackages = require('@manypkg/get-packages');
|
|
5
|
+
var paths = require('../paths.cjs.js');
|
|
6
|
+
|
|
7
|
+
async function createWorkspaceLinkingPlugins(bundler, workspace) {
|
|
8
|
+
const { packages: linkedPackages, root: linkedRoot } = await getPackages.getPackages(
|
|
9
|
+
workspace
|
|
10
|
+
);
|
|
11
|
+
const replacementRegex = new RegExp(
|
|
12
|
+
`^(?:${linkedPackages.map((pkg) => pkg.packageJson.name).join("|")})(?:/.*)?$`
|
|
13
|
+
);
|
|
14
|
+
return [
|
|
15
|
+
// Any imports of a package that is present in the linked workspace will
|
|
16
|
+
// be redirected to be resolved within the context of the linked workspace
|
|
17
|
+
new bundler.NormalModuleReplacementPlugin(replacementRegex, (resource) => {
|
|
18
|
+
resource.context = linkedRoot.dir;
|
|
19
|
+
}),
|
|
20
|
+
// react and react-dom are always resolved from the target directory
|
|
21
|
+
// Note: this often requires that the linked and target workspace use the same versions of React
|
|
22
|
+
new bundler.NormalModuleReplacementPlugin(/^react(?:-dom)?$/, (resource) => {
|
|
23
|
+
if (!path.relative(linkedRoot.dir, resource.context).startsWith("..")) {
|
|
24
|
+
resource.context = paths.paths.targetDir;
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
exports.createWorkspaceLinkingPlugins = createWorkspaceLinkingPlugins;
|
|
31
|
+
//# sourceMappingURL=linkWorkspaces.cjs.js.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('fs-extra');
|
|
4
|
+
var node_path = require('node:path');
|
|
5
|
+
|
|
6
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
9
|
+
|
|
10
|
+
const DEFAULT_CACHE_BASE_PATH = "node_modules/.cache/backstage-cli";
|
|
11
|
+
const CACHE_MAX_AGE_MS = 7 * 24 * 36e5;
|
|
12
|
+
class SuccessCache {
|
|
13
|
+
#path;
|
|
14
|
+
constructor(name, basePath) {
|
|
15
|
+
this.#path = node_path.resolve(basePath ?? DEFAULT_CACHE_BASE_PATH, name);
|
|
16
|
+
}
|
|
17
|
+
async read() {
|
|
18
|
+
try {
|
|
19
|
+
const stat = await fs__default.default.stat(this.#path);
|
|
20
|
+
if (!stat.isDirectory()) {
|
|
21
|
+
await fs__default.default.rm(this.#path);
|
|
22
|
+
return /* @__PURE__ */ new Set();
|
|
23
|
+
}
|
|
24
|
+
} catch (error) {
|
|
25
|
+
if (error.code === "ENOENT") {
|
|
26
|
+
return /* @__PURE__ */ new Set();
|
|
27
|
+
}
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
const items = await fs__default.default.readdir(this.#path);
|
|
31
|
+
const returned = /* @__PURE__ */ new Set();
|
|
32
|
+
const removed = /* @__PURE__ */ new Set();
|
|
33
|
+
const now = Date.now();
|
|
34
|
+
for (const item of items) {
|
|
35
|
+
const split = item.split("_");
|
|
36
|
+
if (split.length !== 2) {
|
|
37
|
+
removed.add(item);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const createdAt = parseInt(split[0], 10);
|
|
41
|
+
if (Number.isNaN(createdAt) || now - createdAt > CACHE_MAX_AGE_MS) {
|
|
42
|
+
removed.add(item);
|
|
43
|
+
} else {
|
|
44
|
+
returned.add(split[1]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const item of removed) {
|
|
48
|
+
await fs__default.default.unlink(node_path.resolve(this.#path, item));
|
|
49
|
+
}
|
|
50
|
+
return returned;
|
|
51
|
+
}
|
|
52
|
+
async write(newEntries) {
|
|
53
|
+
const now = Date.now();
|
|
54
|
+
await fs__default.default.ensureDir(this.#path);
|
|
55
|
+
const existingItems = await fs__default.default.readdir(this.#path);
|
|
56
|
+
const empty = Buffer.alloc(0);
|
|
57
|
+
for (const key of newEntries) {
|
|
58
|
+
const trimmedItems = existingItems.filter(
|
|
59
|
+
(item) => item.endsWith(`_${key}`)
|
|
60
|
+
);
|
|
61
|
+
for (const trimmedItem of trimmedItems) {
|
|
62
|
+
await fs__default.default.unlink(node_path.resolve(this.#path, trimmedItem));
|
|
63
|
+
}
|
|
64
|
+
await fs__default.default.writeFile(node_path.resolve(this.#path, `${now}_${key}`), empty);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
exports.SuccessCache = SuccessCache;
|
|
70
|
+
//# sourceMappingURL=SuccessCache.cjs.js.map
|
|
@@ -118,7 +118,7 @@ async function createDistWorkspace(packageNames, options = {}) {
|
|
|
118
118
|
await moveToDistWorkspace(
|
|
119
119
|
targetDir,
|
|
120
120
|
targets,
|
|
121
|
-
Boolean(options.
|
|
121
|
+
Boolean(options.alwaysPack),
|
|
122
122
|
Boolean(options.enableFeatureDetection)
|
|
123
123
|
);
|
|
124
124
|
const files = options.files ?? ["yarn.lock", "package.json"];
|
|
@@ -150,10 +150,10 @@ const FAST_PACK_SCRIPTS = [
|
|
|
150
150
|
"backstage-cli prepack",
|
|
151
151
|
"backstage-cli package prepack"
|
|
152
152
|
];
|
|
153
|
-
async function moveToDistWorkspace(workspaceDir, localPackages,
|
|
153
|
+
async function moveToDistWorkspace(workspaceDir, localPackages, alwaysPack, enableFeatureDetection) {
|
|
154
154
|
const [fastPackPackages, slowPackPackages] = partition__default.default(
|
|
155
155
|
localPackages,
|
|
156
|
-
(pkg) => !
|
|
156
|
+
(pkg) => !alwaysPack && FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack)
|
|
157
157
|
);
|
|
158
158
|
const featureDetectionProject = fastPackPackages.length > 0 && enableFeatureDetection ? await typeDistProject.createTypeDistProject() : void 0;
|
|
159
159
|
await Promise.all(
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var chokidar = require('chokidar');
|
|
4
4
|
var ctrlcWindows = require('ctrlc-windows');
|
|
5
|
-
var IpcServer = require('
|
|
6
|
-
var ServerDataStore = require('
|
|
5
|
+
var IpcServer = require('../ipc/IpcServer.cjs.js');
|
|
6
|
+
var ServerDataStore = require('../ipc/ServerDataStore.cjs.js');
|
|
7
7
|
var debounce = require('lodash/debounce');
|
|
8
8
|
var url = require('url');
|
|
9
9
|
var path = require('path');
|
|
@@ -21,7 +21,7 @@ const loaderArgs = [
|
|
|
21
21
|
require.resolve("@backstage/cli/config/nodeTransform.cjs")
|
|
22
22
|
// TODO: Support modules, although there's currently no way to load them since import() is transpiled tp require()
|
|
23
23
|
];
|
|
24
|
-
async function
|
|
24
|
+
async function runBackend(options) {
|
|
25
25
|
const envEnv = process.env;
|
|
26
26
|
if (!envEnv.NODE_ENV) {
|
|
27
27
|
envEnv.NODE_ENV = "development";
|
|
@@ -77,6 +77,7 @@ async function startBackendExperimental(options) {
|
|
|
77
77
|
stdio: ["ignore", "inherit", "inherit", "ipc"],
|
|
78
78
|
env: {
|
|
79
79
|
...process.env,
|
|
80
|
+
BACKSTAGE_CLI_LINKED_WORKSPACE: options.linkedWorkspace,
|
|
80
81
|
BACKSTAGE_CLI_CHANNEL: "1",
|
|
81
82
|
ESBK_TSCONFIG_PATH: paths.paths.resolveTargetRoot("tsconfig.json")
|
|
82
83
|
},
|
|
@@ -124,5 +125,5 @@ async function startBackendExperimental(options) {
|
|
|
124
125
|
return () => exitPromise;
|
|
125
126
|
}
|
|
126
127
|
|
|
127
|
-
exports.
|
|
128
|
-
//# sourceMappingURL=
|
|
128
|
+
exports.runBackend = runBackend;
|
|
129
|
+
//# sourceMappingURL=runBackend.cjs.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var version = "0.
|
|
3
|
+
var version = "0.29.0-next.0";
|
|
4
4
|
var dependencies = {
|
|
5
5
|
"@backstage/catalog-model": "workspace:^",
|
|
6
6
|
"@backstage/cli-common": "workspace:^",
|
|
@@ -101,7 +101,6 @@ var dependencies = {
|
|
|
101
101
|
"rollup-plugin-esbuild": "^6.1.1",
|
|
102
102
|
"rollup-plugin-postcss": "^4.0.0",
|
|
103
103
|
"rollup-pluginutils": "^2.8.2",
|
|
104
|
-
"run-script-webpack-plugin": "^0.2.0",
|
|
105
104
|
semver: "^7.5.3",
|
|
106
105
|
"style-loader": "^3.3.1",
|
|
107
106
|
sucrase: "^3.20.2",
|
|
@@ -110,9 +109,8 @@ var dependencies = {
|
|
|
110
109
|
"terser-webpack-plugin": "^5.1.3",
|
|
111
110
|
"ts-morph": "^23.0.0",
|
|
112
111
|
util: "^0.12.3",
|
|
113
|
-
webpack: "^5.
|
|
112
|
+
webpack: "^5.94.0",
|
|
114
113
|
"webpack-dev-server": "^5.0.0",
|
|
115
|
-
"webpack-node-externals": "^3.0.0",
|
|
116
114
|
yaml: "^2.0.0",
|
|
117
115
|
yargs: "^16.2.0",
|
|
118
116
|
"yml-loader": "^2.1.0",
|