@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,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var productionPack = require('../lib/packager/productionPack.cjs.js');
|
|
4
|
+
var paths = require('../lib/paths.cjs.js');
|
|
5
|
+
var fs = require('fs-extra');
|
|
6
|
+
var publishing = require('../lib/publishing.cjs.js');
|
|
7
|
+
var typeDistProject = require('../lib/typeDistProject.cjs.js');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
12
|
+
|
|
13
|
+
const pre = async () => {
|
|
14
|
+
publishing.publishPreflightCheck({
|
|
15
|
+
dir: paths.paths.targetDir,
|
|
16
|
+
packageJson: await fs__default.default.readJson(paths.paths.resolveTarget("package.json"))
|
|
17
|
+
});
|
|
18
|
+
await productionPack.productionPack({
|
|
19
|
+
packageDir: paths.paths.targetDir,
|
|
20
|
+
featureDetectionProject: await typeDistProject.createTypeDistProject()
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const post = async () => {
|
|
24
|
+
await productionPack.revertProductionPack(paths.paths.targetDir);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
exports.post = post;
|
|
28
|
+
exports.pre = pre;
|
|
29
|
+
//# sourceMappingURL=pack.cjs.js.map
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chalk = require('chalk');
|
|
4
|
+
var path = require('path');
|
|
5
|
+
var packager = require('../../lib/builder/packager.cjs.js');
|
|
6
|
+
var paths = require('../../lib/paths.cjs.js');
|
|
7
|
+
var cliNode = require('@backstage/cli-node');
|
|
8
|
+
var parallel = require('../../lib/parallel.cjs.js');
|
|
9
|
+
var buildFrontend = require('../build/buildFrontend.cjs.js');
|
|
10
|
+
var buildBackend = require('../build/buildBackend.cjs.js');
|
|
11
|
+
var optionsParser = require('./optionsParser.cjs.js');
|
|
12
|
+
|
|
13
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
16
|
+
|
|
17
|
+
async function command(opts, cmd) {
|
|
18
|
+
let packages = await cliNode.PackageGraph.listTargetPackages();
|
|
19
|
+
if (opts.since) {
|
|
20
|
+
const graph = cliNode.PackageGraph.fromPackages(packages);
|
|
21
|
+
const changedPackages = await graph.listChangedPackages({
|
|
22
|
+
ref: opts.since,
|
|
23
|
+
analyzeLockfile: true
|
|
24
|
+
});
|
|
25
|
+
const withDevDependents = graph.collectPackageNames(
|
|
26
|
+
changedPackages.map((pkg) => pkg.name),
|
|
27
|
+
(pkg) => pkg.localDevDependents.keys()
|
|
28
|
+
);
|
|
29
|
+
packages = Array.from(withDevDependents).map((name) => graph.get(name));
|
|
30
|
+
}
|
|
31
|
+
const apps = new Array();
|
|
32
|
+
const backends = new Array();
|
|
33
|
+
const parseBuildScript = optionsParser.createScriptOptionsParser(cmd, ["package", "build"]);
|
|
34
|
+
const options = packages.flatMap((pkg) => {
|
|
35
|
+
const role = pkg.packageJson.backstage?.role ?? cliNode.PackageRoles.detectRoleFromPackage(pkg.packageJson);
|
|
36
|
+
if (!role) {
|
|
37
|
+
console.warn(`Ignored ${pkg.packageJson.name} because it has no role`);
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
if (role === "frontend") {
|
|
41
|
+
apps.push(pkg);
|
|
42
|
+
return [];
|
|
43
|
+
} else if (role === "backend") {
|
|
44
|
+
backends.push(pkg);
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const outputs = packager.getOutputsForRole(role);
|
|
48
|
+
if (outputs.size === 0) {
|
|
49
|
+
console.warn(`Ignored ${pkg.packageJson.name} because it has no output`);
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);
|
|
53
|
+
if (!buildOptions) {
|
|
54
|
+
console.warn(
|
|
55
|
+
`Ignored ${pkg.packageJson.name} because it does not have a matching build script`
|
|
56
|
+
);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
targetDir: pkg.dir,
|
|
61
|
+
packageJson: pkg.packageJson,
|
|
62
|
+
outputs,
|
|
63
|
+
logPrefix: `${chalk__default.default.cyan(path.relative(paths.paths.targetRoot, pkg.dir))}: `,
|
|
64
|
+
workspacePackages: packages,
|
|
65
|
+
minify: opts.minify ?? buildOptions.minify
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
console.log("Building packages");
|
|
69
|
+
await packager.buildPackages(options);
|
|
70
|
+
if (opts.all) {
|
|
71
|
+
console.log("Building apps");
|
|
72
|
+
await parallel.runParallelWorkers({
|
|
73
|
+
items: apps,
|
|
74
|
+
parallelismFactor: 1 / 2,
|
|
75
|
+
worker: async (pkg) => {
|
|
76
|
+
const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);
|
|
77
|
+
if (!buildOptions) {
|
|
78
|
+
console.warn(
|
|
79
|
+
`Ignored ${pkg.packageJson.name} because it does not have a matching build script`
|
|
80
|
+
);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
await buildFrontend.buildFrontend({
|
|
84
|
+
targetDir: pkg.dir,
|
|
85
|
+
configPaths: buildOptions.config ?? [],
|
|
86
|
+
writeStats: Boolean(buildOptions.stats)
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
console.log("Building backends");
|
|
91
|
+
await parallel.runParallelWorkers({
|
|
92
|
+
items: backends,
|
|
93
|
+
parallelismFactor: 1 / 2,
|
|
94
|
+
worker: async (pkg) => {
|
|
95
|
+
const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);
|
|
96
|
+
if (!buildOptions) {
|
|
97
|
+
console.warn(
|
|
98
|
+
`Ignored ${pkg.packageJson.name} because it does not have a matching build script`
|
|
99
|
+
);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
await buildBackend.buildBackend({
|
|
103
|
+
targetDir: pkg.dir,
|
|
104
|
+
skipBuildDependencies: true,
|
|
105
|
+
minify: opts.minify ?? buildOptions.minify
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
exports.command = command;
|
|
113
|
+
//# sourceMappingURL=build.cjs.js.map
|
|
@@ -5,12 +5,7 @@ var fs = require('fs-extra');
|
|
|
5
5
|
var path = require('path');
|
|
6
6
|
var util = require('util');
|
|
7
7
|
var cliNode = require('@backstage/cli-node');
|
|
8
|
-
var
|
|
9
|
-
require('commander');
|
|
10
|
-
require('chalk');
|
|
11
|
-
require('semver');
|
|
12
|
-
require('@backstage/cli-common');
|
|
13
|
-
require('@backstage/errors');
|
|
8
|
+
var paths = require('../../lib/paths.cjs.js');
|
|
14
9
|
|
|
15
10
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
16
11
|
|
|
@@ -19,9 +14,9 @@ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
|
19
14
|
const execFile = util.promisify(child_process.execFile);
|
|
20
15
|
async function command() {
|
|
21
16
|
const packages = await cliNode.PackageGraph.listTargetPackages();
|
|
22
|
-
await fs__default.default.remove(
|
|
23
|
-
await fs__default.default.remove(
|
|
24
|
-
await fs__default.default.remove(
|
|
17
|
+
await fs__default.default.remove(paths.paths.resolveTargetRoot("dist"));
|
|
18
|
+
await fs__default.default.remove(paths.paths.resolveTargetRoot("dist-types"));
|
|
19
|
+
await fs__default.default.remove(paths.paths.resolveTargetRoot("coverage"));
|
|
25
20
|
await Promise.all(
|
|
26
21
|
Array.from(Array(10), async () => {
|
|
27
22
|
while (packages.length > 0) {
|
|
@@ -45,4 +40,4 @@ async function command() {
|
|
|
45
40
|
}
|
|
46
41
|
|
|
47
42
|
exports.command = command;
|
|
48
|
-
//# sourceMappingURL=clean
|
|
43
|
+
//# sourceMappingURL=clean.cjs.js.map
|
|
@@ -3,13 +3,8 @@
|
|
|
3
3
|
var cliNode = require('@backstage/cli-node');
|
|
4
4
|
var fs = require('fs-extra');
|
|
5
5
|
var path = require('path');
|
|
6
|
-
var
|
|
7
|
-
var publishing = require('
|
|
8
|
-
require('commander');
|
|
9
|
-
require('chalk');
|
|
10
|
-
require('semver');
|
|
11
|
-
require('@backstage/cli-common');
|
|
12
|
-
require('@backstage/errors');
|
|
6
|
+
var paths = require('../../lib/paths.cjs.js');
|
|
7
|
+
var publishing = require('../../lib/publishing.cjs.js');
|
|
13
8
|
|
|
14
9
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
15
10
|
|
|
@@ -22,7 +17,7 @@ async function readFixablePackages() {
|
|
|
22
17
|
function printPackageFixHint(packages) {
|
|
23
18
|
const changed = packages.filter((pkg) => pkg.changed);
|
|
24
19
|
if (changed.length > 0) {
|
|
25
|
-
const rootPkg = require(
|
|
20
|
+
const rootPkg = require(paths.paths.resolveTargetRoot("package.json"));
|
|
26
21
|
const fixCmd = rootPkg.scripts?.fix === "backstage-cli repo fix" ? "fix" : "backstage-cli repo fix";
|
|
27
22
|
console.log(
|
|
28
23
|
`The following packages are out of sync, run 'yarn ${fixCmd}' to fix them:`
|
|
@@ -141,7 +136,7 @@ function fixSideEffects(pkg) {
|
|
|
141
136
|
pkg.changed = true;
|
|
142
137
|
}
|
|
143
138
|
function createRepositoryFieldFixer() {
|
|
144
|
-
const rootPkg = require(
|
|
139
|
+
const rootPkg = require(paths.paths.resolveTargetRoot("package.json"));
|
|
145
140
|
const rootRepoField = rootPkg.repository;
|
|
146
141
|
if (!rootRepoField) {
|
|
147
142
|
return () => {
|
|
@@ -153,7 +148,7 @@ function createRepositoryFieldFixer() {
|
|
|
153
148
|
return (pkg) => {
|
|
154
149
|
const expectedPath = path.posix.join(
|
|
155
150
|
rootDir,
|
|
156
|
-
path.relative(
|
|
151
|
+
path.relative(paths.paths.targetRoot, pkg.dir)
|
|
157
152
|
);
|
|
158
153
|
const repoField = pkg.packageJson.repository;
|
|
159
154
|
if (!repoField || typeof repoField === "string") {
|
|
@@ -227,7 +222,7 @@ function fixPluginId(pkg) {
|
|
|
227
222
|
const guessedPluginId = guessPluginId(role, pkg.packageJson.name);
|
|
228
223
|
if (!guessedPluginId && (role === "frontend-plugin" || role === "frontend-plugin-module" || role === "backend-plugin" || role === "backend-plugin-module")) {
|
|
229
224
|
const path$1 = path.relative(
|
|
230
|
-
|
|
225
|
+
paths.paths.targetRoot,
|
|
231
226
|
path.resolve(pkg.dir, "package.json")
|
|
232
227
|
);
|
|
233
228
|
const msg = `Failed to guess plugin ID for "${pkg.packageJson.name}", please set the 'backstage.pluginId' field manually in "${path$1}"`;
|
|
@@ -298,7 +293,7 @@ function fixPluginPackages(pkg, repoPackages) {
|
|
|
298
293
|
return;
|
|
299
294
|
}
|
|
300
295
|
const path$1 = path.relative(
|
|
301
|
-
|
|
296
|
+
paths.paths.targetRoot,
|
|
302
297
|
path.resolve(pkg.dir, "package.json")
|
|
303
298
|
);
|
|
304
299
|
const suggestedRole = role === "frontend-plugin-module" ? "web-library" : "node-library";
|
|
@@ -359,4 +354,4 @@ exports.fixSideEffects = fixSideEffects;
|
|
|
359
354
|
exports.printPackageFixHint = printPackageFixHint;
|
|
360
355
|
exports.readFixablePackages = readFixablePackages;
|
|
361
356
|
exports.writeFixedPackages = writeFixedPackages;
|
|
362
|
-
//# sourceMappingURL=fix
|
|
357
|
+
//# sourceMappingURL=fix.cjs.js.map
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chalk = require('chalk');
|
|
4
|
+
var fs = require('fs-extra');
|
|
5
|
+
var crypto = require('crypto');
|
|
6
|
+
var path = require('path');
|
|
7
|
+
var cliNode = require('@backstage/cli-node');
|
|
8
|
+
var paths = require('../../lib/paths.cjs.js');
|
|
9
|
+
var parallel = require('../../lib/parallel.cjs.js');
|
|
10
|
+
var optionsParser = require('./optionsParser.cjs.js');
|
|
11
|
+
|
|
12
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
15
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
16
|
+
|
|
17
|
+
function depCount(pkg) {
|
|
18
|
+
const deps = pkg.dependencies ? Object.keys(pkg.dependencies).length : 0;
|
|
19
|
+
const devDeps = pkg.devDependencies ? Object.keys(pkg.devDependencies).length : 0;
|
|
20
|
+
return deps + devDeps;
|
|
21
|
+
}
|
|
22
|
+
const CACHE_FILE_NAME = "lint-cache.json";
|
|
23
|
+
async function readCache(dir) {
|
|
24
|
+
try {
|
|
25
|
+
const data = await fs__default.default.readJson(path.resolve(dir, CACHE_FILE_NAME));
|
|
26
|
+
if (!Array.isArray(data)) {
|
|
27
|
+
return void 0;
|
|
28
|
+
}
|
|
29
|
+
if (data.some((x) => typeof x !== "string")) {
|
|
30
|
+
return void 0;
|
|
31
|
+
}
|
|
32
|
+
return data;
|
|
33
|
+
} catch {
|
|
34
|
+
return void 0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function writeCache(dir, cache) {
|
|
38
|
+
await fs__default.default.mkdirp(dir);
|
|
39
|
+
await fs__default.default.writeJson(path.resolve(dir, CACHE_FILE_NAME), cache, { spaces: 2 });
|
|
40
|
+
}
|
|
41
|
+
async function command(opts, cmd) {
|
|
42
|
+
let packages = await cliNode.PackageGraph.listTargetPackages();
|
|
43
|
+
const cacheDir = path.resolve(
|
|
44
|
+
opts.successCacheDir ?? "node_modules/.cache/backstage-cli"
|
|
45
|
+
);
|
|
46
|
+
const cacheContext = opts.successCache ? {
|
|
47
|
+
cache: await readCache(cacheDir),
|
|
48
|
+
lockfile: await cliNode.Lockfile.load(paths.paths.resolveTargetRoot("yarn.lock"))
|
|
49
|
+
} : void 0;
|
|
50
|
+
if (opts.since) {
|
|
51
|
+
const graph = cliNode.PackageGraph.fromPackages(packages);
|
|
52
|
+
packages = await graph.listChangedPackages({
|
|
53
|
+
ref: opts.since,
|
|
54
|
+
analyzeLockfile: true
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
packages.sort((a, b) => depCount(b.packageJson) - depCount(a.packageJson));
|
|
58
|
+
if (opts.format === "eslint-formatter-friendly") {
|
|
59
|
+
process.chdir(paths.paths.targetRoot);
|
|
60
|
+
}
|
|
61
|
+
if (!process.env.FORCE_COLOR) {
|
|
62
|
+
process.env.FORCE_COLOR = "1";
|
|
63
|
+
}
|
|
64
|
+
const parseLintScript = optionsParser.createScriptOptionsParser(cmd, ["package", "lint"]);
|
|
65
|
+
const items = await Promise.all(
|
|
66
|
+
packages.map(async (pkg) => {
|
|
67
|
+
const lintOptions = parseLintScript(pkg.packageJson.scripts?.lint);
|
|
68
|
+
const base = {
|
|
69
|
+
fullDir: pkg.dir,
|
|
70
|
+
relativeDir: path.relative(paths.paths.targetRoot, pkg.dir),
|
|
71
|
+
lintOptions,
|
|
72
|
+
parentHash: void 0
|
|
73
|
+
};
|
|
74
|
+
if (!cacheContext) {
|
|
75
|
+
return base;
|
|
76
|
+
}
|
|
77
|
+
const hash = crypto.createHash("sha1");
|
|
78
|
+
hash.update(
|
|
79
|
+
cacheContext.lockfile.getDependencyTreeHash(pkg.packageJson.name)
|
|
80
|
+
);
|
|
81
|
+
hash.update("\0");
|
|
82
|
+
hash.update(JSON.stringify(lintOptions ?? {}));
|
|
83
|
+
hash.update("\0");
|
|
84
|
+
hash.update(process.version);
|
|
85
|
+
hash.update("\0");
|
|
86
|
+
hash.update("v1");
|
|
87
|
+
return {
|
|
88
|
+
...base,
|
|
89
|
+
parentHash: hash.digest("hex")
|
|
90
|
+
};
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
const resultsList = await parallel.runWorkerQueueThreads({
|
|
94
|
+
items: items.filter((item) => item.lintOptions),
|
|
95
|
+
// Filter out packages without lint script
|
|
96
|
+
workerData: {
|
|
97
|
+
fix: Boolean(opts.fix),
|
|
98
|
+
format: opts.format,
|
|
99
|
+
shouldCache: Boolean(cacheContext),
|
|
100
|
+
successCache: cacheContext?.cache,
|
|
101
|
+
rootDir: paths.paths.targetRoot
|
|
102
|
+
},
|
|
103
|
+
workerFactory: async ({
|
|
104
|
+
fix,
|
|
105
|
+
format,
|
|
106
|
+
shouldCache,
|
|
107
|
+
successCache,
|
|
108
|
+
rootDir
|
|
109
|
+
}) => {
|
|
110
|
+
const { ESLint } = require("eslint");
|
|
111
|
+
const crypto = require("crypto");
|
|
112
|
+
const globby = require("globby");
|
|
113
|
+
const { readFile } = require("fs/promises");
|
|
114
|
+
const { relative: workerRelativePath } = require("path");
|
|
115
|
+
return async ({
|
|
116
|
+
fullDir,
|
|
117
|
+
relativeDir,
|
|
118
|
+
lintOptions,
|
|
119
|
+
parentHash
|
|
120
|
+
}) => {
|
|
121
|
+
process.cwd = () => fullDir;
|
|
122
|
+
const start = Date.now();
|
|
123
|
+
const eslint = new ESLint({
|
|
124
|
+
cwd: fullDir,
|
|
125
|
+
fix,
|
|
126
|
+
extensions: ["js", "jsx", "ts", "tsx", "mjs", "cjs"]
|
|
127
|
+
});
|
|
128
|
+
let sha = void 0;
|
|
129
|
+
if (shouldCache) {
|
|
130
|
+
const result = await globby(relativeDir, {
|
|
131
|
+
gitignore: true,
|
|
132
|
+
onlyFiles: true,
|
|
133
|
+
cwd: rootDir
|
|
134
|
+
});
|
|
135
|
+
const hash = crypto.createHash("sha1");
|
|
136
|
+
hash.update(parentHash);
|
|
137
|
+
hash.update("\0");
|
|
138
|
+
for (const path of result.sort()) {
|
|
139
|
+
if (await eslint.isPathIgnored(path)) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
hash.update(workerRelativePath(fullDir, path));
|
|
143
|
+
hash.update("\0");
|
|
144
|
+
hash.update(await readFile(path));
|
|
145
|
+
hash.update("\0");
|
|
146
|
+
hash.update(
|
|
147
|
+
JSON.stringify(await eslint.calculateConfigForFile(path))
|
|
148
|
+
);
|
|
149
|
+
hash.update("\0");
|
|
150
|
+
}
|
|
151
|
+
sha = await hash.digest("hex");
|
|
152
|
+
if (successCache?.includes(sha)) {
|
|
153
|
+
console.log(`Skipped ${relativeDir} due to cache hit`);
|
|
154
|
+
return { relativeDir, sha, failed: false };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const formatter = await eslint.loadFormatter(format);
|
|
158
|
+
const results = await eslint.lintFiles(["."]);
|
|
159
|
+
const count = String(results.length).padStart(3);
|
|
160
|
+
const time = ((Date.now() - start) / 1e3).toFixed(2);
|
|
161
|
+
console.log(`Checked ${count} files in ${relativeDir} ${time}s`);
|
|
162
|
+
if (fix) {
|
|
163
|
+
await ESLint.outputFixes(results);
|
|
164
|
+
}
|
|
165
|
+
const maxWarnings = lintOptions?.maxWarnings ?? 0;
|
|
166
|
+
const resultText = formatter.format(results);
|
|
167
|
+
const failed2 = results.some((r) => r.errorCount > 0) || results.reduce((current, next) => current + next.warningCount, 0) > maxWarnings;
|
|
168
|
+
return {
|
|
169
|
+
relativeDir,
|
|
170
|
+
resultText,
|
|
171
|
+
failed: failed2,
|
|
172
|
+
sha
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
const outputSuccessCache = [];
|
|
178
|
+
let failed = false;
|
|
179
|
+
for (const {
|
|
180
|
+
relativeDir,
|
|
181
|
+
resultText,
|
|
182
|
+
failed: runFailed,
|
|
183
|
+
sha
|
|
184
|
+
} of resultsList) {
|
|
185
|
+
if (runFailed) {
|
|
186
|
+
console.log(chalk__default.default.red(`Lint failed in ${relativeDir}`));
|
|
187
|
+
failed = true;
|
|
188
|
+
if (resultText) {
|
|
189
|
+
console.log();
|
|
190
|
+
console.log(resultText.trimStart());
|
|
191
|
+
}
|
|
192
|
+
} else if (sha) {
|
|
193
|
+
outputSuccessCache.push(sha);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (cacheContext) {
|
|
197
|
+
await writeCache(cacheDir, outputSuccessCache);
|
|
198
|
+
}
|
|
199
|
+
if (failed) {
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
exports.command = command;
|
|
205
|
+
//# sourceMappingURL=lint.cjs.js.map
|
package/dist/{cjs/list-deprecations-CtUaQgaP.cjs.js → commands/repo/list-deprecations.cjs.js}
RENAMED
|
@@ -4,12 +4,7 @@ var chalk = require('chalk');
|
|
|
4
4
|
var eslint = require('eslint');
|
|
5
5
|
var path = require('path');
|
|
6
6
|
var cliNode = require('@backstage/cli-node');
|
|
7
|
-
var
|
|
8
|
-
require('commander');
|
|
9
|
-
require('fs-extra');
|
|
10
|
-
require('semver');
|
|
11
|
-
require('@backstage/cli-common');
|
|
12
|
-
require('@backstage/errors');
|
|
7
|
+
var paths = require('../../lib/paths.cjs.js');
|
|
13
8
|
|
|
14
9
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
15
10
|
|
|
@@ -18,14 +13,14 @@ var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
|
18
13
|
async function command(opts) {
|
|
19
14
|
const packages = await cliNode.PackageGraph.listTargetPackages();
|
|
20
15
|
const eslint$1 = new eslint.ESLint({
|
|
21
|
-
cwd:
|
|
16
|
+
cwd: paths.paths.targetDir,
|
|
22
17
|
overrideConfig: {
|
|
23
18
|
plugins: ["deprecation"],
|
|
24
19
|
rules: {
|
|
25
20
|
"deprecation/deprecation": "error"
|
|
26
21
|
},
|
|
27
22
|
parserOptions: {
|
|
28
|
-
project: [
|
|
23
|
+
project: [paths.paths.resolveTargetRoot("tsconfig.json")]
|
|
29
24
|
}
|
|
30
25
|
},
|
|
31
26
|
extensions: ["jsx", "ts", "tsx", "mjs", "cjs"]
|
|
@@ -35,14 +30,14 @@ async function command(opts) {
|
|
|
35
30
|
stderr.write("Initializing TypeScript...");
|
|
36
31
|
}
|
|
37
32
|
const deprecations = [];
|
|
38
|
-
for (const [index
|
|
33
|
+
for (const [index, pkg] of packages.entries()) {
|
|
39
34
|
const results = await eslint$1.lintFiles(pkg.dir);
|
|
40
35
|
for (const result of results) {
|
|
41
36
|
for (const message of result.messages) {
|
|
42
37
|
if (message.ruleId !== "deprecation/deprecation") {
|
|
43
38
|
continue;
|
|
44
39
|
}
|
|
45
|
-
const path$1 = path.relative(
|
|
40
|
+
const path$1 = path.relative(paths.paths.targetRoot, result.filePath);
|
|
46
41
|
deprecations.push({
|
|
47
42
|
path: path$1,
|
|
48
43
|
message: message.message,
|
|
@@ -54,7 +49,7 @@ async function command(opts) {
|
|
|
54
49
|
if (stderr.isTTY) {
|
|
55
50
|
stderr.clearLine(0);
|
|
56
51
|
stderr.cursorTo(0);
|
|
57
|
-
stderr.write(`Scanning packages ${index
|
|
52
|
+
stderr.write(`Scanning packages ${index + 1}/${packages.length}`);
|
|
58
53
|
}
|
|
59
54
|
}
|
|
60
55
|
if (stderr.isTTY) {
|
|
@@ -76,4 +71,4 @@ async function command(opts) {
|
|
|
76
71
|
}
|
|
77
72
|
|
|
78
73
|
exports.command = command;
|
|
79
|
-
//# sourceMappingURL=list-deprecations
|
|
74
|
+
//# sourceMappingURL=list-deprecations.cjs.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function createScriptOptionsParser(anyCmd, commandPath) {
|
|
4
|
+
let rootCmd = anyCmd;
|
|
5
|
+
while (rootCmd.parent) {
|
|
6
|
+
rootCmd = rootCmd.parent;
|
|
7
|
+
}
|
|
8
|
+
let targetCmd = rootCmd;
|
|
9
|
+
for (const name of commandPath) {
|
|
10
|
+
targetCmd = targetCmd?.commands.find((c) => c.name() === name);
|
|
11
|
+
}
|
|
12
|
+
if (!targetCmd) {
|
|
13
|
+
throw new Error(
|
|
14
|
+
`Could not find package command '${commandPath.join(" ")}'`
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
const cmd = targetCmd;
|
|
18
|
+
const expectedScript = `backstage-cli ${commandPath.join(" ")}`;
|
|
19
|
+
return (scriptStr) => {
|
|
20
|
+
if (!scriptStr || !scriptStr.startsWith(expectedScript)) {
|
|
21
|
+
return void 0;
|
|
22
|
+
}
|
|
23
|
+
const argsStr = scriptStr.slice(expectedScript.length).trim();
|
|
24
|
+
const currentOpts = cmd._optionValues;
|
|
25
|
+
const currentStore = cmd._storeOptionsAsProperties;
|
|
26
|
+
const result = {};
|
|
27
|
+
cmd._storeOptionsAsProperties = false;
|
|
28
|
+
cmd._optionValues = result;
|
|
29
|
+
cmd.parseOptions(argsStr.split(" "));
|
|
30
|
+
cmd._storeOptionsAsProperties = currentOpts;
|
|
31
|
+
cmd._optionValues = currentStore;
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.createScriptOptionsParser = createScriptOptionsParser;
|
|
37
|
+
//# sourceMappingURL=optionsParser.cjs.js.map
|