@backstage/cli 0.28.0-next.1 → 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 +25 -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 +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-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 +193 -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 +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-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} +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-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 +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 +13 -11
- 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-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,219 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chalk = require('chalk');
|
|
4
|
+
var fs = require('fs-extra');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
var pLimit = require('p-limit');
|
|
7
|
+
var os = require('os');
|
|
8
|
+
var tar = require('tar');
|
|
9
|
+
var partition = require('lodash/partition');
|
|
10
|
+
var paths = require('../paths.cjs.js');
|
|
11
|
+
var run = require('../run.cjs.js');
|
|
12
|
+
var _package = require('../../packages/cli/package.json.cjs.js');
|
|
13
|
+
var packager = require('../builder/packager.cjs.js');
|
|
14
|
+
var types = require('../builder/types.cjs.js');
|
|
15
|
+
var productionPack = require('./productionPack.cjs.js');
|
|
16
|
+
var cliNode = require('@backstage/cli-node');
|
|
17
|
+
var parallel = require('../parallel.cjs.js');
|
|
18
|
+
var typeDistProject = require('../typeDistProject.cjs.js');
|
|
19
|
+
|
|
20
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
21
|
+
|
|
22
|
+
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
23
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
24
|
+
var pLimit__default = /*#__PURE__*/_interopDefaultCompat(pLimit);
|
|
25
|
+
var tar__default = /*#__PURE__*/_interopDefaultCompat(tar);
|
|
26
|
+
var partition__default = /*#__PURE__*/_interopDefaultCompat(partition);
|
|
27
|
+
|
|
28
|
+
const UNSAFE_PACKAGES = [
|
|
29
|
+
...Object.keys(_package.dependencies),
|
|
30
|
+
...Object.keys(_package.devDependencies)
|
|
31
|
+
];
|
|
32
|
+
function prefixLogFunc(prefix, out) {
|
|
33
|
+
return (data) => {
|
|
34
|
+
for (const line of data.toString("utf8").split(/\r?\n/)) {
|
|
35
|
+
process[out].write(`${prefix} ${line}
|
|
36
|
+
`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async function createDistWorkspace(packageNames, options = {}) {
|
|
41
|
+
const targetDir = options.targetDir ?? await fs__default.default.mkdtemp(path.resolve(os.tmpdir(), "dist-workspace"));
|
|
42
|
+
const packages = await cliNode.PackageGraph.listTargetPackages();
|
|
43
|
+
const packageGraph = cliNode.PackageGraph.fromPackages(packages);
|
|
44
|
+
const targetNames = packageGraph.collectPackageNames(packageNames, (node) => {
|
|
45
|
+
if (node.packageJson.bundled) {
|
|
46
|
+
return void 0;
|
|
47
|
+
}
|
|
48
|
+
return node.publishedLocalDependencies.keys();
|
|
49
|
+
});
|
|
50
|
+
const targets = Array.from(targetNames).map((name) => packageGraph.get(name));
|
|
51
|
+
if (options.buildDependencies) {
|
|
52
|
+
const exclude = options.buildExcludes ?? [];
|
|
53
|
+
const configPaths = options.configPaths ?? [];
|
|
54
|
+
const toBuild = new Set(
|
|
55
|
+
targets.map((_) => _.name).filter((name) => !exclude.includes(name))
|
|
56
|
+
);
|
|
57
|
+
const standardBuilds = new Array();
|
|
58
|
+
const customBuild = new Array();
|
|
59
|
+
for (const pkg of packages) {
|
|
60
|
+
if (!toBuild.has(pkg.packageJson.name)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const role = pkg.packageJson.backstage?.role;
|
|
64
|
+
if (!role) {
|
|
65
|
+
console.warn(
|
|
66
|
+
`Building ${pkg.packageJson.name} separately because it has no role`
|
|
67
|
+
);
|
|
68
|
+
customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const buildScript = pkg.packageJson.scripts?.build;
|
|
72
|
+
if (!buildScript) {
|
|
73
|
+
customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name });
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (!buildScript.startsWith("backstage-cli package build")) {
|
|
77
|
+
console.warn(
|
|
78
|
+
`Building ${pkg.packageJson.name} separately because it has a custom build script, '${buildScript}'`
|
|
79
|
+
);
|
|
80
|
+
customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name });
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (cliNode.PackageRoles.getRoleInfo(role).output.includes("bundle")) {
|
|
84
|
+
console.warn(
|
|
85
|
+
`Building ${pkg.packageJson.name} separately because it is a bundled package`
|
|
86
|
+
);
|
|
87
|
+
const args = buildScript.includes("--config") ? [] : configPaths.map((p) => ["--config", p]).flat();
|
|
88
|
+
customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name, args });
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const outputs = packager.getOutputsForRole(role);
|
|
92
|
+
outputs.delete(types.Output.types);
|
|
93
|
+
if (outputs.size > 0) {
|
|
94
|
+
standardBuilds.push({
|
|
95
|
+
targetDir: pkg.dir,
|
|
96
|
+
packageJson: pkg.packageJson,
|
|
97
|
+
outputs,
|
|
98
|
+
logPrefix: `${chalk__default.default.cyan(path.relative(paths.paths.targetRoot, pkg.dir))}: `,
|
|
99
|
+
minify: options.minify,
|
|
100
|
+
workspacePackages: packages
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
await packager.buildPackages(standardBuilds);
|
|
105
|
+
if (customBuild.length > 0) {
|
|
106
|
+
await parallel.runParallelWorkers({
|
|
107
|
+
items: customBuild,
|
|
108
|
+
worker: async ({ name, dir, args }) => {
|
|
109
|
+
await run.run("yarn", ["run", "build", ...args || []], {
|
|
110
|
+
cwd: dir,
|
|
111
|
+
stdoutLogFunc: prefixLogFunc(`${name}: `, "stdout"),
|
|
112
|
+
stderrLogFunc: prefixLogFunc(`${name}: `, "stderr")
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
await moveToDistWorkspace(
|
|
119
|
+
targetDir,
|
|
120
|
+
targets,
|
|
121
|
+
Boolean(options.alwaysYarnPack),
|
|
122
|
+
Boolean(options.enableFeatureDetection)
|
|
123
|
+
);
|
|
124
|
+
const files = options.files ?? ["yarn.lock", "package.json"];
|
|
125
|
+
for (const file of files) {
|
|
126
|
+
const src = typeof file === "string" ? file : file.src;
|
|
127
|
+
const dest = typeof file === "string" ? file : file.dest;
|
|
128
|
+
await fs__default.default.copy(paths.paths.resolveTargetRoot(src), path.resolve(targetDir, dest));
|
|
129
|
+
}
|
|
130
|
+
if (options.skeleton) {
|
|
131
|
+
const skeletonFiles = targets.map((target) => {
|
|
132
|
+
const dir = path.relative(paths.paths.targetRoot, target.dir);
|
|
133
|
+
return path.join(dir, "package.json");
|
|
134
|
+
}).sort();
|
|
135
|
+
await tar__default.default.create(
|
|
136
|
+
{
|
|
137
|
+
file: path.resolve(targetDir, options.skeleton),
|
|
138
|
+
cwd: targetDir,
|
|
139
|
+
portable: true,
|
|
140
|
+
noMtime: true,
|
|
141
|
+
gzip: options.skeleton.endsWith(".gz")
|
|
142
|
+
},
|
|
143
|
+
skeletonFiles
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
return targetDir;
|
|
147
|
+
}
|
|
148
|
+
const FAST_PACK_SCRIPTS = [
|
|
149
|
+
void 0,
|
|
150
|
+
"backstage-cli prepack",
|
|
151
|
+
"backstage-cli package prepack"
|
|
152
|
+
];
|
|
153
|
+
async function moveToDistWorkspace(workspaceDir, localPackages, alwaysYarnPack, enableFeatureDetection) {
|
|
154
|
+
const [fastPackPackages, slowPackPackages] = partition__default.default(
|
|
155
|
+
localPackages,
|
|
156
|
+
(pkg) => !alwaysYarnPack && FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack)
|
|
157
|
+
);
|
|
158
|
+
const featureDetectionProject = fastPackPackages.length > 0 && enableFeatureDetection ? await typeDistProject.createTypeDistProject() : void 0;
|
|
159
|
+
await Promise.all(
|
|
160
|
+
fastPackPackages.map(async (target) => {
|
|
161
|
+
console.log(`Moving ${target.name} into dist workspace`);
|
|
162
|
+
const outputDir = path.relative(paths.paths.targetRoot, target.dir);
|
|
163
|
+
const absoluteOutputPath = path.resolve(workspaceDir, outputDir);
|
|
164
|
+
await productionPack.productionPack({
|
|
165
|
+
packageDir: target.dir,
|
|
166
|
+
targetDir: absoluteOutputPath,
|
|
167
|
+
featureDetectionProject
|
|
168
|
+
});
|
|
169
|
+
})
|
|
170
|
+
);
|
|
171
|
+
async function pack(target, archive) {
|
|
172
|
+
console.log(`Repacking ${target.name} into dist workspace`);
|
|
173
|
+
const archivePath = path.resolve(workspaceDir, archive);
|
|
174
|
+
await run.run("yarn", ["pack", "--filename", archivePath], {
|
|
175
|
+
cwd: target.dir
|
|
176
|
+
});
|
|
177
|
+
const outputDir = path.relative(paths.paths.targetRoot, target.dir);
|
|
178
|
+
const absoluteOutputPath = path.resolve(workspaceDir, outputDir);
|
|
179
|
+
await fs__default.default.ensureDir(absoluteOutputPath);
|
|
180
|
+
await tar__default.default.extract({
|
|
181
|
+
file: archivePath,
|
|
182
|
+
cwd: absoluteOutputPath,
|
|
183
|
+
strip: 1
|
|
184
|
+
});
|
|
185
|
+
await fs__default.default.remove(archivePath);
|
|
186
|
+
if (target.packageJson.bundled) {
|
|
187
|
+
const pkgJson = await fs__default.default.readJson(
|
|
188
|
+
path.resolve(absoluteOutputPath, "package.json")
|
|
189
|
+
);
|
|
190
|
+
delete pkgJson.dependencies;
|
|
191
|
+
delete pkgJson.devDependencies;
|
|
192
|
+
delete pkgJson.peerDependencies;
|
|
193
|
+
delete pkgJson.optionalDependencies;
|
|
194
|
+
await fs__default.default.writeJson(
|
|
195
|
+
path.resolve(absoluteOutputPath, "package.json"),
|
|
196
|
+
pkgJson,
|
|
197
|
+
{
|
|
198
|
+
spaces: 2
|
|
199
|
+
}
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const [unsafePackages, safePackages] = partition__default.default(
|
|
204
|
+
slowPackPackages,
|
|
205
|
+
(p) => UNSAFE_PACKAGES.includes(p.name)
|
|
206
|
+
);
|
|
207
|
+
for (const target of unsafePackages) {
|
|
208
|
+
await pack(target, `temp-package.tgz`);
|
|
209
|
+
}
|
|
210
|
+
const limit = pLimit__default.default(10);
|
|
211
|
+
await Promise.all(
|
|
212
|
+
safePackages.map(
|
|
213
|
+
(target, index) => limit(() => pack(target, `temp-package-${index}.tgz`))
|
|
214
|
+
)
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
exports.createDistWorkspace = createDistWorkspace;
|
|
219
|
+
//# sourceMappingURL=createDistWorkspace.cjs.js.map
|
|
@@ -3,100 +3,14 @@
|
|
|
3
3
|
var fs = require('fs-extra');
|
|
4
4
|
var npmPackList = require('npm-packlist');
|
|
5
5
|
var path = require('path');
|
|
6
|
-
var entryPoints = require('
|
|
7
|
-
var
|
|
8
|
-
var index = require('./index-b1ouG3q6.cjs.js');
|
|
6
|
+
var entryPoints = require('../entryPoints.cjs.js');
|
|
7
|
+
var typeDistProject = require('../typeDistProject.cjs.js');
|
|
9
8
|
|
|
10
9
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
11
10
|
|
|
12
11
|
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
13
12
|
var npmPackList__default = /*#__PURE__*/_interopDefaultCompat(npmPackList);
|
|
14
13
|
|
|
15
|
-
const createTypeDistProject = async () => {
|
|
16
|
-
return new tsMorph.Project({
|
|
17
|
-
tsConfigFilePath: index.paths.resolveTargetRoot("tsconfig.json"),
|
|
18
|
-
skipAddingFilesFromTsConfig: true
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
const targetPackageRoles = [
|
|
22
|
-
"backend-plugin",
|
|
23
|
-
"backend-plugin-module",
|
|
24
|
-
"frontend-plugin",
|
|
25
|
-
"frontend-plugin-module",
|
|
26
|
-
"web-library",
|
|
27
|
-
"node-library"
|
|
28
|
-
];
|
|
29
|
-
const targetFeatureTypes = [
|
|
30
|
-
"@backstage/BackendFeature",
|
|
31
|
-
"@backstage/BackstagePlugin",
|
|
32
|
-
"@backstage/FrontendPlugin",
|
|
33
|
-
"@backstage/FrontendModule"
|
|
34
|
-
];
|
|
35
|
-
const getEntryPointDefaultFeatureType = (role, packageDir, project, entryPoint) => {
|
|
36
|
-
if (isTargetPackageRole(role)) {
|
|
37
|
-
const distPath = path.resolve(packageDir, entryPoint);
|
|
38
|
-
try {
|
|
39
|
-
const defaultFeatureType = getSourceFileDefaultFeatureType(
|
|
40
|
-
project.addSourceFileAtPath(distPath)
|
|
41
|
-
);
|
|
42
|
-
if (defaultFeatureType) {
|
|
43
|
-
return defaultFeatureType;
|
|
44
|
-
}
|
|
45
|
-
} catch (error) {
|
|
46
|
-
console.error(
|
|
47
|
-
`Failed to extract default feature type from ${distPath}, ${error}. Your package will publish fine but it may be missing metadata about its default feature.`
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return null;
|
|
52
|
-
};
|
|
53
|
-
function getSourceFileDefaultFeatureType(sourceFile) {
|
|
54
|
-
for (const exportSymbol of sourceFile.getExportSymbols()) {
|
|
55
|
-
const declaration = exportSymbol.getDeclarations()[0];
|
|
56
|
-
const exportName = declaration.getSymbol()?.getName();
|
|
57
|
-
if (exportName !== "default") {
|
|
58
|
-
continue;
|
|
59
|
-
}
|
|
60
|
-
let exportType;
|
|
61
|
-
if (declaration) {
|
|
62
|
-
if (declaration.isKind(tsMorph.SyntaxKind.ExportAssignment)) {
|
|
63
|
-
exportType = declaration.getExpression().getType();
|
|
64
|
-
} else if (declaration.isKind(tsMorph.SyntaxKind.ExportSpecifier)) {
|
|
65
|
-
if (!declaration.isTypeOnly()) {
|
|
66
|
-
exportType = declaration.getType();
|
|
67
|
-
}
|
|
68
|
-
} else if (declaration.isKind(tsMorph.SyntaxKind.VariableDeclaration)) {
|
|
69
|
-
exportType = declaration.getType();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (exportName && exportType) {
|
|
73
|
-
const $$type = getBackstagePackageFeature$$TypeFromType(exportType);
|
|
74
|
-
if ($$type) {
|
|
75
|
-
return $$type;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
function getBackstagePackageFeature$$TypeFromType(type) {
|
|
82
|
-
const exportType = type.getTargetType() ?? type;
|
|
83
|
-
for (const property of exportType.getProperties()) {
|
|
84
|
-
if (property.getName() === "$$type") {
|
|
85
|
-
const $$type = property.getValueDeclaration()?.getText().match(/(\$\$type: '(?<type>.+)')/)?.groups?.type;
|
|
86
|
-
if ($$type && isTargetFeatureType($$type)) {
|
|
87
|
-
return $$type;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
function isTargetPackageRole(role) {
|
|
94
|
-
return !!role && targetPackageRoles.includes(role);
|
|
95
|
-
}
|
|
96
|
-
function isTargetFeatureType(type) {
|
|
97
|
-
return !!type && targetFeatureTypes.includes(type);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
14
|
const PKG_PATH = "package.json";
|
|
101
15
|
const PKG_BACKUP_PATH = "package.json-prepack";
|
|
102
16
|
const SKIPPED_KEYS = ["access", "registry", "tag"];
|
|
@@ -112,7 +26,7 @@ async function productionPack(options) {
|
|
|
112
26
|
const writeCompatibilityEntryPoints = await prepareExportsEntryPoints(
|
|
113
27
|
pkg,
|
|
114
28
|
packageDir,
|
|
115
|
-
options.
|
|
29
|
+
options.featureDetectionProject
|
|
116
30
|
);
|
|
117
31
|
const publishConfig = pkg.publishConfig ?? {};
|
|
118
32
|
for (const key of Object.keys(publishConfig)) {
|
|
@@ -173,7 +87,7 @@ const EXPORT_MAP = {
|
|
|
173
87
|
require: ".cjs.js",
|
|
174
88
|
types: ".d.ts"
|
|
175
89
|
};
|
|
176
|
-
async function prepareExportsEntryPoints(pkg, packageDir,
|
|
90
|
+
async function prepareExportsEntryPoints(pkg, packageDir, featureDetectionProject) {
|
|
177
91
|
const distPath = path.resolve(packageDir, "dist");
|
|
178
92
|
if (!await fs__default.default.pathExists(distPath)) {
|
|
179
93
|
return void 0;
|
|
@@ -182,7 +96,6 @@ async function prepareExportsEntryPoints(pkg, packageDir, commonProject) {
|
|
|
182
96
|
const outputExports = {};
|
|
183
97
|
const compatibilityWriters = new Array();
|
|
184
98
|
const entryPoints$1 = entryPoints.readEntryPoints(pkg);
|
|
185
|
-
const project = commonProject || await createTypeDistProject();
|
|
186
99
|
for (const entryPoint of entryPoints$1) {
|
|
187
100
|
if (!SCRIPT_EXTS.includes(entryPoint.ext)) {
|
|
188
101
|
outputExports[entryPoint.mount] = entryPoint.path;
|
|
@@ -196,11 +109,11 @@ async function prepareExportsEntryPoints(pkg, packageDir, commonProject) {
|
|
|
196
109
|
}
|
|
197
110
|
}
|
|
198
111
|
exp.default = exp.require ?? exp.import;
|
|
199
|
-
if (exp.types) {
|
|
200
|
-
const defaultFeatureType = pkg.backstage?.role && getEntryPointDefaultFeatureType(
|
|
112
|
+
if (exp.types && featureDetectionProject) {
|
|
113
|
+
const defaultFeatureType = pkg.backstage?.role && typeDistProject.getEntryPointDefaultFeatureType(
|
|
201
114
|
pkg.backstage?.role,
|
|
202
115
|
packageDir,
|
|
203
|
-
|
|
116
|
+
featureDetectionProject,
|
|
204
117
|
exp.types
|
|
205
118
|
);
|
|
206
119
|
if (defaultFeatureType) {
|
|
@@ -255,7 +168,6 @@ async function prepareExportsEntryPoints(pkg, packageDir, commonProject) {
|
|
|
255
168
|
return void 0;
|
|
256
169
|
}
|
|
257
170
|
|
|
258
|
-
exports.createTypeDistProject = createTypeDistProject;
|
|
259
171
|
exports.productionPack = productionPack;
|
|
260
172
|
exports.revertProductionPack = revertProductionPack;
|
|
261
|
-
//# sourceMappingURL=productionPack
|
|
173
|
+
//# sourceMappingURL=productionPack.cjs.js.map
|
|
@@ -135,6 +135,7 @@ function workerQueueThread(workerFuncFactory) {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
exports.getEnvironmentParallelism = getEnvironmentParallelism;
|
|
138
|
+
exports.parseParallelismOption = parseParallelismOption;
|
|
138
139
|
exports.runParallelWorkers = runParallelWorkers;
|
|
139
140
|
exports.runWorkerQueueThreads = runWorkerQueueThreads;
|
|
140
|
-
//# sourceMappingURL=parallel
|
|
141
|
+
//# sourceMappingURL=parallel.cjs.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var fs = require('fs-extra');
|
|
4
|
-
var
|
|
4
|
+
var paths = require('./paths.cjs.js');
|
|
5
5
|
var cliNode = require('@backstage/cli-node');
|
|
6
6
|
|
|
7
7
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -12,7 +12,7 @@ async function findRoleFromCommand(opts) {
|
|
|
12
12
|
if (opts.role) {
|
|
13
13
|
return cliNode.PackageRoles.getRoleInfo(opts.role)?.role;
|
|
14
14
|
}
|
|
15
|
-
const pkg = await fs__default.default.readJson(
|
|
15
|
+
const pkg = await fs__default.default.readJson(paths.paths.resolveTarget("package.json"));
|
|
16
16
|
const info = cliNode.PackageRoles.getRoleFromPackage(pkg);
|
|
17
17
|
if (!info) {
|
|
18
18
|
throw new Error(`Target package must have 'backstage.role' set`);
|
|
@@ -21,4 +21,4 @@ async function findRoleFromCommand(opts) {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
exports.findRoleFromCommand = findRoleFromCommand;
|
|
24
|
-
//# sourceMappingURL=role
|
|
24
|
+
//# sourceMappingURL=role.cjs.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var child_process = require('child_process');
|
|
4
|
-
var
|
|
4
|
+
var errors$1 = require('./errors.cjs.js');
|
|
5
5
|
var util = require('util');
|
|
6
6
|
var errors = require('@backstage/errors');
|
|
7
7
|
|
|
@@ -42,7 +42,7 @@ async function runPlain(cmd, ...args) {
|
|
|
42
42
|
process.stderr.write(error.stderr);
|
|
43
43
|
}
|
|
44
44
|
if (typeof error.code === "number") {
|
|
45
|
-
throw new
|
|
45
|
+
throw new errors$1.ExitCodeError(error.code, [cmd, ...args].join(" "));
|
|
46
46
|
}
|
|
47
47
|
throw new errors.ForwardedError("Unknown execution error", error);
|
|
48
48
|
}
|
|
@@ -58,7 +58,7 @@ async function runCheck(cmd, ...args) {
|
|
|
58
58
|
async function waitForExit(child, name) {
|
|
59
59
|
if (typeof child.exitCode === "number") {
|
|
60
60
|
if (child.exitCode) {
|
|
61
|
-
throw new
|
|
61
|
+
throw new errors$1.ExitCodeError(child.exitCode, name);
|
|
62
62
|
}
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
@@ -66,7 +66,7 @@ async function waitForExit(child, name) {
|
|
|
66
66
|
child.once("error", (error) => reject(error));
|
|
67
67
|
child.once("exit", (code) => {
|
|
68
68
|
if (code) {
|
|
69
|
-
reject(new
|
|
69
|
+
reject(new errors$1.ExitCodeError(code, name));
|
|
70
70
|
} else {
|
|
71
71
|
resolve();
|
|
72
72
|
}
|
|
@@ -78,4 +78,5 @@ exports.execFile = execFile;
|
|
|
78
78
|
exports.run = run;
|
|
79
79
|
exports.runCheck = runCheck;
|
|
80
80
|
exports.runPlain = runPlain;
|
|
81
|
-
|
|
81
|
+
exports.waitForExit = waitForExit;
|
|
82
|
+
//# sourceMappingURL=run.cjs.js.map
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chalk = require('chalk');
|
|
4
|
+
var fs = require('fs-extra');
|
|
5
|
+
var handlebars = require('handlebars');
|
|
6
|
+
var ora = require('ora');
|
|
7
|
+
var util = require('util');
|
|
8
|
+
var path = require('path');
|
|
9
|
+
var recursive = require('recursive-readdir');
|
|
10
|
+
var child_process = require('child_process');
|
|
11
|
+
var errors = require('@backstage/errors');
|
|
12
|
+
var paths = require('./paths.cjs.js');
|
|
13
|
+
|
|
14
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
15
|
+
|
|
16
|
+
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
|
|
17
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
18
|
+
var handlebars__default = /*#__PURE__*/_interopDefaultCompat(handlebars);
|
|
19
|
+
var ora__default = /*#__PURE__*/_interopDefaultCompat(ora);
|
|
20
|
+
var recursive__default = /*#__PURE__*/_interopDefaultCompat(recursive);
|
|
21
|
+
|
|
22
|
+
const exec = util.promisify(child_process.exec);
|
|
23
|
+
const TASK_NAME_MAX_LENGTH = 14;
|
|
24
|
+
class Task {
|
|
25
|
+
static log(name = "") {
|
|
26
|
+
process.stderr.write(`${chalk__default.default.green(name)}
|
|
27
|
+
`);
|
|
28
|
+
}
|
|
29
|
+
static error(message = "") {
|
|
30
|
+
process.stderr.write(`
|
|
31
|
+
${chalk__default.default.red(message)}
|
|
32
|
+
|
|
33
|
+
`);
|
|
34
|
+
}
|
|
35
|
+
static section(name) {
|
|
36
|
+
const title = chalk__default.default.green(`${name}:`);
|
|
37
|
+
process.stderr.write(`
|
|
38
|
+
${title}
|
|
39
|
+
`);
|
|
40
|
+
}
|
|
41
|
+
static exit(code = 0) {
|
|
42
|
+
process.exit(code);
|
|
43
|
+
}
|
|
44
|
+
static async forItem(task, item, taskFunc) {
|
|
45
|
+
const paddedTask = chalk__default.default.green(task.padEnd(TASK_NAME_MAX_LENGTH));
|
|
46
|
+
const spinner = ora__default.default({
|
|
47
|
+
prefixText: chalk__default.default.green(` ${paddedTask}${chalk__default.default.cyan(item)}`),
|
|
48
|
+
spinner: "arc",
|
|
49
|
+
color: "green"
|
|
50
|
+
}).start();
|
|
51
|
+
try {
|
|
52
|
+
const result = await taskFunc();
|
|
53
|
+
spinner.succeed();
|
|
54
|
+
return result;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
spinner.fail();
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
static async forCommand(command, options) {
|
|
61
|
+
try {
|
|
62
|
+
await Task.forItem("executing", command, async () => {
|
|
63
|
+
await exec(command, { cwd: options?.cwd });
|
|
64
|
+
});
|
|
65
|
+
} catch (error) {
|
|
66
|
+
errors.assertError(error);
|
|
67
|
+
if (error.stderr) {
|
|
68
|
+
process.stderr.write(error.stderr);
|
|
69
|
+
}
|
|
70
|
+
if (error.stdout) {
|
|
71
|
+
process.stdout.write(error.stdout);
|
|
72
|
+
}
|
|
73
|
+
if (options?.optional) {
|
|
74
|
+
Task.error(`Warning: Failed to execute command ${chalk__default.default.cyan(command)}`);
|
|
75
|
+
} else {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`Failed to execute command '${chalk__default.default.cyan(command)}', ${error}`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function templatingTask(templateDir, destinationDir, context, versionProvider, isMonoRepo) {
|
|
84
|
+
const files = await recursive__default.default(templateDir).catch((error) => {
|
|
85
|
+
throw new Error(`Failed to read template directory: ${error.message}`);
|
|
86
|
+
});
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
const destinationFile = file.replace(templateDir, destinationDir);
|
|
89
|
+
await fs__default.default.ensureDir(path.dirname(destinationFile));
|
|
90
|
+
if (file.endsWith(".hbs")) {
|
|
91
|
+
await Task.forItem("templating", path.basename(file), async () => {
|
|
92
|
+
const destination = destinationFile.replace(/\.hbs$/, "");
|
|
93
|
+
const template = await fs__default.default.readFile(file);
|
|
94
|
+
const compiled = handlebars__default.default.compile(template.toString(), {
|
|
95
|
+
strict: true
|
|
96
|
+
});
|
|
97
|
+
const contents = compiled(
|
|
98
|
+
{ name: path.basename(destination), ...context },
|
|
99
|
+
{
|
|
100
|
+
helpers: {
|
|
101
|
+
versionQuery(name, versionHint) {
|
|
102
|
+
return versionProvider(
|
|
103
|
+
name,
|
|
104
|
+
typeof versionHint === "string" ? versionHint : void 0
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
await fs__default.default.writeFile(destination, contents).catch((error) => {
|
|
111
|
+
throw new Error(
|
|
112
|
+
`Failed to create file: ${destination}: ${error.message}`
|
|
113
|
+
);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
if (isMonoRepo && file.match("tsconfig.json")) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
await Task.forItem("copying", path.basename(file), async () => {
|
|
121
|
+
await fs__default.default.copyFile(file, destinationFile).catch((error) => {
|
|
122
|
+
const destination = destinationFile;
|
|
123
|
+
throw new Error(
|
|
124
|
+
`Failed to copy file to ${destination} : ${error.message}`
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function addPackageDependency(path, options) {
|
|
132
|
+
try {
|
|
133
|
+
const pkgJson = await fs__default.default.readJson(path);
|
|
134
|
+
const normalize = (obj) => {
|
|
135
|
+
if (Object.keys(obj).length === 0) {
|
|
136
|
+
return void 0;
|
|
137
|
+
}
|
|
138
|
+
return Object.fromEntries(
|
|
139
|
+
Object.keys(obj).sort().map((key) => [key, obj[key]])
|
|
140
|
+
);
|
|
141
|
+
};
|
|
142
|
+
pkgJson.dependencies = normalize({
|
|
143
|
+
...pkgJson.dependencies,
|
|
144
|
+
...options.dependencies
|
|
145
|
+
});
|
|
146
|
+
pkgJson.devDependencies = normalize({
|
|
147
|
+
...pkgJson.devDependencies,
|
|
148
|
+
...options.devDependencies
|
|
149
|
+
});
|
|
150
|
+
pkgJson.peerDependencies = normalize({
|
|
151
|
+
...pkgJson.peerDependencies,
|
|
152
|
+
...options.peerDependencies
|
|
153
|
+
});
|
|
154
|
+
await fs__default.default.writeJson(path, pkgJson, { spaces: 2 });
|
|
155
|
+
} catch (error) {
|
|
156
|
+
throw new Error(`Failed to add package dependencies, ${error}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function addToBackend(name, options) {
|
|
160
|
+
if (await fs__default.default.pathExists(paths.paths.resolveTargetRoot("packages/backend"))) {
|
|
161
|
+
await Task.forItem("backend", `adding ${options.type}`, async () => {
|
|
162
|
+
const backendFilePath = paths.paths.resolveTargetRoot(
|
|
163
|
+
"packages/backend/src/index.ts"
|
|
164
|
+
);
|
|
165
|
+
if (!await fs__default.default.pathExists(backendFilePath)) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const content = await fs__default.default.readFile(backendFilePath, "utf8");
|
|
169
|
+
const lines = content.split("\n");
|
|
170
|
+
const backendAddLine = `backend.add(import('${name}'));`;
|
|
171
|
+
const backendStartIndex = lines.findIndex(
|
|
172
|
+
(line) => line.match(/backend.start/)
|
|
173
|
+
);
|
|
174
|
+
if (backendStartIndex !== -1) {
|
|
175
|
+
const [indentation] = lines[backendStartIndex].match(/^\s*/);
|
|
176
|
+
lines.splice(backendStartIndex, 0, `${indentation}${backendAddLine}`);
|
|
177
|
+
const newContent = lines.join("\n");
|
|
178
|
+
await fs__default.default.writeFile(backendFilePath, newContent, "utf8");
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
exports.Task = Task;
|
|
185
|
+
exports.addPackageDependency = addPackageDependency;
|
|
186
|
+
exports.addToBackend = addToBackend;
|
|
187
|
+
exports.templatingTask = templatingTask;
|
|
188
|
+
//# sourceMappingURL=tasks.cjs.js.map
|