@backstage/cli 0.18.0 → 0.18.1
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 +23 -0
- package/config/eslint-factory.js +1 -1
- package/dist/cjs/{Lockfile-48dc675e.cjs.js → Lockfile-72b7072e.cjs.js} +25 -9
- package/dist/cjs/{PackageGraph-1d7b086a.cjs.js → PackageGraph-7ea22294.cjs.js} +17 -9
- package/dist/cjs/{build-52ba70a2.cjs.js → build-688edcd3.cjs.js} +26 -15
- package/dist/cjs/{buildBackend-55985c84.cjs.js → buildBackend-ac6c633b.cjs.js} +61 -36
- package/dist/cjs/{buildWorkspace-d663903d.cjs.js → buildWorkspace-76f958f0.cjs.js} +7 -7
- package/dist/cjs/{bump-1a3769e9.cjs.js → bump-db89c0f3.cjs.js} +88 -33
- package/dist/cjs/{clean-9a8c294a.cjs.js → clean-68c34bfd.cjs.js} +2 -2
- package/dist/cjs/{config-de1bf46a.cjs.js → config-9d64a562.cjs.js} +15 -11
- package/dist/cjs/{create-b0ca2add.cjs.js → create-94a20b19.cjs.js} +80 -32
- package/dist/cjs/{createDistWorkspace-fc94c796.cjs.js → createDistWorkspace-0412df70.cjs.js} +137 -65
- package/dist/cjs/{createPlugin-4d7e1b01.cjs.js → createPlugin-02079f81.cjs.js} +69 -30
- package/dist/cjs/{diff-a561bee3.cjs.js → diff-f68eaf29.cjs.js} +68 -16
- package/dist/cjs/{docs-bd70b38e.cjs.js → docs-1527b730.cjs.js} +9 -5
- package/dist/cjs/{fix-47eb8dc4.cjs.js → fix-56a6d092.cjs.js} +17 -7
- package/dist/cjs/{index-27d57881.cjs.js → index-025feb83.cjs.js} +10 -10
- package/dist/cjs/{index-bb24147b.cjs.js → index-16fe1d27.cjs.js} +39 -12
- package/dist/cjs/{index-4f4a8498.cjs.js → index-4f8f2562.cjs.js} +58 -38
- package/dist/cjs/{index-7e13cc9d.cjs.js → index-b7ce30d9.cjs.js} +151 -50
- package/dist/cjs/{info-29f0ee36.cjs.js → info-88431720.cjs.js} +20 -6
- package/dist/cjs/{install-fea0e3f5.cjs.js → install-4d423030.cjs.js} +44 -17
- package/dist/cjs/{lint-0db8937c.cjs.js → lint-2fd53d5f.cjs.js} +4 -4
- package/dist/cjs/{lint-81a75364.cjs.js → lint-bd7b9e13.cjs.js} +37 -11
- package/dist/cjs/{lint-1711bbbb.cjs.js → lint-da011116.cjs.js} +5 -3
- package/dist/cjs/{list-deprecations-cea8fad3.cjs.js → list-deprecations-268e1d6b.cjs.js} +3 -3
- package/dist/cjs/{pack-8ab429c0.cjs.js → pack-ce12d4b7.cjs.js} +17 -11
- package/dist/cjs/packageLintConfigs-9f3b0766.cjs.js +83 -0
- package/dist/cjs/packageRole-582e0558.cjs.js +59 -0
- package/dist/cjs/{packageRoles-a310f84c.cjs.js → packageRoles-fec3121b.cjs.js} +5 -3
- package/dist/cjs/packageScripts-04ac9bc2.cjs.js +98 -0
- package/dist/cjs/{packages-ea5c38ec.cjs.js → packages-24759dcb.cjs.js} +17 -12
- package/dist/cjs/parallel-a8f6219c.cjs.js +187 -0
- package/dist/cjs/{paths-d98c9d0c.cjs.js → paths-13d8625f.cjs.js} +102 -57
- package/dist/cjs/{print-4cbe70e7.cjs.js → print-58fe18ba.cjs.js} +4 -4
- package/dist/cjs/{run-5e05ba2c.cjs.js → run-f4586ef6.cjs.js} +2 -2
- package/dist/cjs/{schema-2c842cbe.cjs.js → schema-65c31be1.cjs.js} +9 -5
- package/dist/cjs/{tasks-b054c9ce.cjs.js → tasks-16da761b.cjs.js} +29 -12
- package/dist/cjs/{test-b5969f53.cjs.js → test-464a46fe.cjs.js} +3 -3
- package/dist/cjs/{validate-8a03d402.cjs.js → validate-3231ba7d.cjs.js} +4 -4
- package/dist/index.cjs.js +1 -1
- package/package.json +12 -12
- package/dist/cjs/packageLintConfigs-77b71b79.cjs.js +0 -74
- package/dist/cjs/packageRole-d1e7c7d6.cjs.js +0 -53
- package/dist/cjs/packageScripts-6731503e.cjs.js +0 -96
- package/dist/cjs/parallel-8286d3fa.cjs.js +0 -171
package/dist/cjs/{createDistWorkspace-fc94c796.cjs.js → createDistWorkspace-0412df70.cjs.js}
RENAMED
|
@@ -6,9 +6,9 @@ var path = require('path');
|
|
|
6
6
|
var os = require('os');
|
|
7
7
|
var tar = require('tar');
|
|
8
8
|
var partition = require('lodash/partition');
|
|
9
|
-
var index = require('./index-
|
|
10
|
-
var run = require('./run-
|
|
11
|
-
var PackageGraph = require('./PackageGraph-
|
|
9
|
+
var index = require('./index-b7ce30d9.cjs.js');
|
|
10
|
+
var run = require('./run-f4586ef6.cjs.js');
|
|
11
|
+
var PackageGraph = require('./PackageGraph-7ea22294.cjs.js');
|
|
12
12
|
var rollup = require('rollup');
|
|
13
13
|
var commonjs = require('@rollup/plugin-commonjs');
|
|
14
14
|
var resolve = require('@rollup/plugin-node-resolve');
|
|
@@ -20,8 +20,8 @@ var json = require('@rollup/plugin-json');
|
|
|
20
20
|
var yaml = require('@rollup/plugin-yaml');
|
|
21
21
|
var rollupPluginutils = require('rollup-pluginutils');
|
|
22
22
|
var svgrTemplate = require('./svgrTemplate-550efce6.cjs.js');
|
|
23
|
-
var parallel = require('./parallel-
|
|
24
|
-
var packageRoles = require('./packageRoles-
|
|
23
|
+
var parallel = require('./parallel-a8f6219c.cjs.js');
|
|
24
|
+
var packageRoles = require('./packageRoles-fec3121b.cjs.js');
|
|
25
25
|
var npmPackList = require('npm-packlist');
|
|
26
26
|
|
|
27
27
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -64,12 +64,14 @@ function forwardFileImports(options) {
|
|
|
64
64
|
}
|
|
65
65
|
generatedFor.add(dir);
|
|
66
66
|
const srcRoot = path.dirname(chunk.facadeModuleId);
|
|
67
|
-
await Promise.all(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
await Promise.all(
|
|
68
|
+
Array.from(exportedFiles).map(async (exportedFile) => {
|
|
69
|
+
const outputPath = path.relative(srcRoot, exportedFile);
|
|
70
|
+
const targetFile = path.resolve(dir, outputPath);
|
|
71
|
+
await fs__default["default"].ensureDir(path.dirname(targetFile));
|
|
72
|
+
await fs__default["default"].copyFile(exportedFile, targetFile);
|
|
73
|
+
})
|
|
74
|
+
);
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
77
|
},
|
|
@@ -194,11 +196,19 @@ async function makeRollupConfigs(options) {
|
|
|
194
196
|
});
|
|
195
197
|
}
|
|
196
198
|
if (options.outputs.has(Output.types) && !options.useApiExtractor) {
|
|
197
|
-
const typesInput = index.paths.resolveTargetRoot(
|
|
199
|
+
const typesInput = index.paths.resolveTargetRoot(
|
|
200
|
+
"dist-types",
|
|
201
|
+
path.relative(index.paths.targetRoot, targetDir),
|
|
202
|
+
"src/index.d.ts"
|
|
203
|
+
);
|
|
198
204
|
const declarationsExist = await fs__default["default"].pathExists(typesInput);
|
|
199
205
|
if (!declarationsExist) {
|
|
200
206
|
const path$1 = path.relative(targetDir, typesInput);
|
|
201
|
-
throw new Error(
|
|
207
|
+
throw new Error(
|
|
208
|
+
`No declaration files found at ${path$1}, be sure to run ${chalk__default["default"].bgRed.white(
|
|
209
|
+
"yarn tsc"
|
|
210
|
+
)} to generate .d.ts files before packaging`
|
|
211
|
+
);
|
|
202
212
|
}
|
|
203
213
|
configs.push({
|
|
204
214
|
input: typesInput,
|
|
@@ -227,7 +237,9 @@ async function buildTypeDefinitionsWorker(workerData, sendMessage) {
|
|
|
227
237
|
try {
|
|
228
238
|
require("@microsoft/api-extractor");
|
|
229
239
|
} catch (error) {
|
|
230
|
-
throw new Error(
|
|
240
|
+
throw new Error(
|
|
241
|
+
"Failed to resolve @microsoft/api-extractor, it must best installed as a dependency of your project in order to use experimental type builds"
|
|
242
|
+
);
|
|
231
243
|
}
|
|
232
244
|
const { dirname } = require("path");
|
|
233
245
|
const { entryPoints, workerConfigs, typescriptCompilerFolder } = workerData;
|
|
@@ -263,22 +275,36 @@ async function buildTypeDefinitionsWorker(workerData, sendMessage) {
|
|
|
263
275
|
}
|
|
264
276
|
});
|
|
265
277
|
if (!extractorResult.succeeded) {
|
|
266
|
-
throw new Error(
|
|
278
|
+
throw new Error(
|
|
279
|
+
`Type definition build completed with ${extractorResult.errorCount} errors and ${extractorResult.warningCount} warnings`
|
|
280
|
+
);
|
|
267
281
|
}
|
|
268
282
|
}
|
|
269
283
|
}
|
|
270
284
|
|
|
271
285
|
const ignoredMessages = /* @__PURE__ */ new Set(["tsdoc-undefined-tag", "ae-forgotten-export"]);
|
|
272
286
|
async function buildTypeDefinitions(targetDirs = [index.paths.targetDir]) {
|
|
273
|
-
const packageDirs = targetDirs.map(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
287
|
+
const packageDirs = targetDirs.map(
|
|
288
|
+
(dir) => path.relative(index.paths.targetRoot, dir)
|
|
289
|
+
);
|
|
290
|
+
const entryPoints = await Promise.all(
|
|
291
|
+
packageDirs.map(async (dir) => {
|
|
292
|
+
const entryPoint = index.paths.resolveTargetRoot(
|
|
293
|
+
"dist-types",
|
|
294
|
+
dir,
|
|
295
|
+
"src/index.d.ts"
|
|
296
|
+
);
|
|
297
|
+
const declarationsExist = await fs__default["default"].pathExists(entryPoint);
|
|
298
|
+
if (!declarationsExist) {
|
|
299
|
+
throw new Error(
|
|
300
|
+
`No declaration files found at ${entryPoint}, be sure to run ${chalk__default["default"].bgRed.white(
|
|
301
|
+
"yarn tsc"
|
|
302
|
+
)} to generate .d.ts files before packaging`
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
return entryPoint;
|
|
306
|
+
})
|
|
307
|
+
);
|
|
282
308
|
const workerConfigs = packageDirs.map((packageDir) => {
|
|
283
309
|
const targetDir = index.paths.resolveTargetRoot(packageDir);
|
|
284
310
|
const targetTypesDir = index.paths.resolveTargetRoot("dist-types", packageDir);
|
|
@@ -407,9 +433,15 @@ async function rollupBuild(config) {
|
|
|
407
433
|
}
|
|
408
434
|
const buildPackage = async (options) => {
|
|
409
435
|
try {
|
|
410
|
-
const { resolutions } = await fs__default["default"].readJson(
|
|
436
|
+
const { resolutions } = await fs__default["default"].readJson(
|
|
437
|
+
index.paths.resolveTargetRoot("package.json")
|
|
438
|
+
);
|
|
411
439
|
if (resolutions == null ? void 0 : resolutions.esbuild) {
|
|
412
|
-
console.warn(
|
|
440
|
+
console.warn(
|
|
441
|
+
chalk__default["default"].red(
|
|
442
|
+
'Your root package.json contains a "resolutions" entry for "esbuild". This was included in older @backstage/create-app templates in order to work around build issues that have since been fixed. Please remove the entry and run `yarn install`'
|
|
443
|
+
)
|
|
444
|
+
);
|
|
413
445
|
}
|
|
414
446
|
} catch {
|
|
415
447
|
}
|
|
@@ -426,9 +458,13 @@ const buildPackages = async (options) => {
|
|
|
426
458
|
throw new Error("targetDir must be set for all build options");
|
|
427
459
|
}
|
|
428
460
|
const rollupConfigs = await Promise.all(options.map(makeRollupConfigs));
|
|
429
|
-
await Promise.all(
|
|
461
|
+
await Promise.all(
|
|
462
|
+
options.map(({ targetDir }) => fs__default["default"].remove(path.resolve(targetDir, "dist")))
|
|
463
|
+
);
|
|
430
464
|
const buildTasks = rollupConfigs.flat().map((opts) => () => rollupBuild(opts));
|
|
431
|
-
const typeDefinitionTargetDirs = options.filter(
|
|
465
|
+
const typeDefinitionTargetDirs = options.filter(
|
|
466
|
+
({ outputs, useApiExtractor }) => outputs.has(Output.types) && useApiExtractor
|
|
467
|
+
).map((_) => _.targetDir);
|
|
432
468
|
if (typeDefinitionTargetDirs.length > 0) {
|
|
433
469
|
buildTasks.unshift(() => buildTypeDefinitions(typeDefinitionTargetDirs));
|
|
434
470
|
}
|
|
@@ -460,14 +496,18 @@ function resolveEntrypoint(pkg, name) {
|
|
|
460
496
|
}
|
|
461
497
|
async function writeReleaseStageEntrypoint(pkg, stage, targetDir) {
|
|
462
498
|
await fs__default["default"].ensureDir(path.resolve(targetDir, stage));
|
|
463
|
-
await fs__default["default"].writeJson(
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
499
|
+
await fs__default["default"].writeJson(
|
|
500
|
+
path.resolve(targetDir, stage, "package.json"),
|
|
501
|
+
{
|
|
502
|
+
name: pkg.name,
|
|
503
|
+
version: pkg.version,
|
|
504
|
+
main: resolveEntrypoint(pkg, "main"),
|
|
505
|
+
module: resolveEntrypoint(pkg, "module"),
|
|
506
|
+
browser: resolveEntrypoint(pkg, "browser"),
|
|
507
|
+
types: path.join("..", pkg.publishConfig[`${stage}Types`])
|
|
508
|
+
},
|
|
509
|
+
{ encoding: "utf8", spaces: 2 }
|
|
510
|
+
);
|
|
471
511
|
}
|
|
472
512
|
async function copyPackageDist(packageDir, targetDir) {
|
|
473
513
|
var _a;
|
|
@@ -490,7 +530,10 @@ async function copyPackageDist(packageDir, targetDir) {
|
|
|
490
530
|
const filePaths = await npmPackList__default["default"]({ path: packageDir });
|
|
491
531
|
await fs__default["default"].ensureDir(targetDir);
|
|
492
532
|
for (const filePath of filePaths.sort()) {
|
|
493
|
-
await fs__default["default"].copy(
|
|
533
|
+
await fs__default["default"].copy(
|
|
534
|
+
path.resolve(packageDir, filePath),
|
|
535
|
+
path.resolve(targetDir, filePath)
|
|
536
|
+
);
|
|
494
537
|
}
|
|
495
538
|
if (publishConfig.alphaTypes) {
|
|
496
539
|
await writeReleaseStageEntrypoint(pkg, "alpha", targetDir);
|
|
@@ -519,7 +562,9 @@ async function createDistWorkspace(packageNames, options = {}) {
|
|
|
519
562
|
const targets = Array.from(targetNames).map((name) => packageGraph.get(name));
|
|
520
563
|
if (options.buildDependencies) {
|
|
521
564
|
const exclude = (_b = options.buildExcludes) != null ? _b : [];
|
|
522
|
-
const toBuild = new Set(
|
|
565
|
+
const toBuild = new Set(
|
|
566
|
+
targets.map((_) => _.name).filter((name) => !exclude.includes(name))
|
|
567
|
+
);
|
|
523
568
|
const standardBuilds = new Array();
|
|
524
569
|
const customBuild = new Array();
|
|
525
570
|
for (const pkg of packages) {
|
|
@@ -528,7 +573,9 @@ async function createDistWorkspace(packageNames, options = {}) {
|
|
|
528
573
|
}
|
|
529
574
|
const role = (_c = pkg.packageJson.backstage) == null ? void 0 : _c.role;
|
|
530
575
|
if (!role) {
|
|
531
|
-
console.warn(
|
|
576
|
+
console.warn(
|
|
577
|
+
`Building ${pkg.packageJson.name} separately because it has no role`
|
|
578
|
+
);
|
|
532
579
|
customBuild.push(pkg.packageJson.name);
|
|
533
580
|
continue;
|
|
534
581
|
}
|
|
@@ -538,12 +585,16 @@ async function createDistWorkspace(packageNames, options = {}) {
|
|
|
538
585
|
continue;
|
|
539
586
|
}
|
|
540
587
|
if (!buildScript.startsWith("backstage-cli package build")) {
|
|
541
|
-
console.warn(
|
|
588
|
+
console.warn(
|
|
589
|
+
`Building ${pkg.packageJson.name} separately because it has a custom build script, '${buildScript}'`
|
|
590
|
+
);
|
|
542
591
|
customBuild.push(pkg.packageJson.name);
|
|
543
592
|
continue;
|
|
544
593
|
}
|
|
545
594
|
if (packageRoles.getRoleInfo(role).output.includes("bundle")) {
|
|
546
|
-
console.warn(
|
|
595
|
+
console.warn(
|
|
596
|
+
`Building ${pkg.packageJson.name} separately because it is a bundled package`
|
|
597
|
+
);
|
|
547
598
|
customBuild.push(pkg.packageJson.name);
|
|
548
599
|
continue;
|
|
549
600
|
}
|
|
@@ -580,13 +631,16 @@ async function createDistWorkspace(packageNames, options = {}) {
|
|
|
580
631
|
const dir = path.relative(index.paths.targetRoot, target.dir);
|
|
581
632
|
return path.join(dir, "package.json");
|
|
582
633
|
});
|
|
583
|
-
await tar__default["default"].create(
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
634
|
+
await tar__default["default"].create(
|
|
635
|
+
{
|
|
636
|
+
file: path.resolve(targetDir, options.skeleton),
|
|
637
|
+
cwd: targetDir,
|
|
638
|
+
portable: true,
|
|
639
|
+
noMtime: true,
|
|
640
|
+
gzip: options.skeleton.endsWith(".gz")
|
|
641
|
+
},
|
|
642
|
+
skeletonFiles
|
|
643
|
+
);
|
|
590
644
|
}
|
|
591
645
|
return targetDir;
|
|
592
646
|
}
|
|
@@ -596,16 +650,21 @@ const FAST_PACK_SCRIPTS = [
|
|
|
596
650
|
"backstage-cli package prepack"
|
|
597
651
|
];
|
|
598
652
|
async function moveToDistWorkspace(workspaceDir, localPackages) {
|
|
599
|
-
const [fastPackPackages, slowPackPackages] = partition__default["default"](
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
653
|
+
const [fastPackPackages, slowPackPackages] = partition__default["default"](
|
|
654
|
+
localPackages,
|
|
655
|
+
(pkg) => {
|
|
656
|
+
var _a;
|
|
657
|
+
return FAST_PACK_SCRIPTS.includes((_a = pkg.packageJson.scripts) == null ? void 0 : _a.prepack);
|
|
658
|
+
}
|
|
659
|
+
);
|
|
660
|
+
await Promise.all(
|
|
661
|
+
fastPackPackages.map(async (target) => {
|
|
662
|
+
console.log(`Moving ${target.name} into dist workspace`);
|
|
663
|
+
const outputDir = path.relative(index.paths.targetRoot, target.dir);
|
|
664
|
+
const absoluteOutputPath = path.resolve(workspaceDir, outputDir);
|
|
665
|
+
await copyPackageDist(target.dir, absoluteOutputPath);
|
|
666
|
+
})
|
|
667
|
+
);
|
|
609
668
|
async function pack(target, archive) {
|
|
610
669
|
var _a, _b;
|
|
611
670
|
console.log(`Repacking ${target.name} into dist workspace`);
|
|
@@ -626,21 +685,34 @@ async function moveToDistWorkspace(workspaceDir, localPackages) {
|
|
|
626
685
|
});
|
|
627
686
|
await fs__default["default"].remove(archivePath);
|
|
628
687
|
if (target.packageJson.bundled) {
|
|
629
|
-
const pkgJson = await fs__default["default"].readJson(
|
|
688
|
+
const pkgJson = await fs__default["default"].readJson(
|
|
689
|
+
path.resolve(absoluteOutputPath, "package.json")
|
|
690
|
+
);
|
|
630
691
|
delete pkgJson.dependencies;
|
|
631
692
|
delete pkgJson.devDependencies;
|
|
632
693
|
delete pkgJson.peerDependencies;
|
|
633
694
|
delete pkgJson.optionalDependencies;
|
|
634
|
-
await fs__default["default"].writeJson(
|
|
635
|
-
|
|
636
|
-
|
|
695
|
+
await fs__default["default"].writeJson(
|
|
696
|
+
path.resolve(absoluteOutputPath, "package.json"),
|
|
697
|
+
pkgJson,
|
|
698
|
+
{
|
|
699
|
+
spaces: 2
|
|
700
|
+
}
|
|
701
|
+
);
|
|
637
702
|
}
|
|
638
703
|
}
|
|
639
|
-
const [unsafePackages, safePackages] = partition__default["default"](
|
|
704
|
+
const [unsafePackages, safePackages] = partition__default["default"](
|
|
705
|
+
slowPackPackages,
|
|
706
|
+
(p) => UNSAFE_PACKAGES.includes(p.name)
|
|
707
|
+
);
|
|
640
708
|
for (const target of unsafePackages) {
|
|
641
709
|
await pack(target, `temp-package.tgz`);
|
|
642
710
|
}
|
|
643
|
-
await Promise.all(
|
|
711
|
+
await Promise.all(
|
|
712
|
+
safePackages.map(
|
|
713
|
+
async (target, index) => pack(target, `temp-package-${index}.tgz`)
|
|
714
|
+
)
|
|
715
|
+
);
|
|
644
716
|
}
|
|
645
717
|
|
|
646
718
|
exports.Output = Output;
|
|
@@ -648,4 +720,4 @@ exports.buildPackage = buildPackage;
|
|
|
648
720
|
exports.buildPackages = buildPackages;
|
|
649
721
|
exports.createDistWorkspace = createDistWorkspace;
|
|
650
722
|
exports.getOutputsForRole = getOutputsForRole;
|
|
651
|
-
//# sourceMappingURL=createDistWorkspace-
|
|
723
|
+
//# sourceMappingURL=createDistWorkspace-0412df70.cjs.js.map
|
|
@@ -10,12 +10,12 @@ var camelCase = require('lodash/camelCase');
|
|
|
10
10
|
var upperFirst = require('lodash/upperFirst');
|
|
11
11
|
var os = require('os');
|
|
12
12
|
var errors = require('@backstage/errors');
|
|
13
|
-
var tasks = require('./tasks-
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
var Lockfile = require('./Lockfile-
|
|
13
|
+
var tasks = require('./tasks-16da761b.cjs.js');
|
|
14
|
+
var index = require('./index-b7ce30d9.cjs.js');
|
|
15
|
+
var Lockfile = require('./Lockfile-72b7072e.cjs.js');
|
|
16
16
|
require('minimatch');
|
|
17
17
|
require('@manypkg/get-packages');
|
|
18
|
-
require('./run-
|
|
18
|
+
require('./run-f4586ef6.cjs.js');
|
|
19
19
|
require('handlebars');
|
|
20
20
|
require('ora');
|
|
21
21
|
require('recursive-readdir');
|
|
@@ -38,9 +38,13 @@ const exec = util.promisify(child_process.exec);
|
|
|
38
38
|
async function checkExists(destination) {
|
|
39
39
|
await tasks.Task.forItem("checking", destination, async () => {
|
|
40
40
|
if (await fs__default["default"].pathExists(destination)) {
|
|
41
|
-
const existing = chalk__default["default"].cyan(
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
const existing = chalk__default["default"].cyan(
|
|
42
|
+
destination.replace(`${index.paths.targetRoot}/`, "")
|
|
43
|
+
);
|
|
44
|
+
throw new Error(
|
|
45
|
+
`A plugin with the same name already exists: ${existing}
|
|
46
|
+
Please try again with a different plugin ID`
|
|
47
|
+
);
|
|
44
48
|
}
|
|
45
49
|
});
|
|
46
50
|
}
|
|
@@ -63,14 +67,18 @@ async function addPluginDependencyToApp(rootDir, pluginPackage, versionStr) {
|
|
|
63
67
|
const packageFileJson = JSON.parse(packageFileContent);
|
|
64
68
|
const dependencies = packageFileJson.dependencies;
|
|
65
69
|
if (dependencies[pluginPackage]) {
|
|
66
|
-
throw new Error(
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Plugin ${pluginPackage} already exists in ${packageFile}`
|
|
72
|
+
);
|
|
67
73
|
}
|
|
68
74
|
dependencies[pluginPackage] = `^${versionStr}`;
|
|
69
75
|
packageFileJson.dependencies = sortObjectByKeys(dependencies);
|
|
70
76
|
const newContents = `${JSON.stringify(packageFileJson, null, 2)}
|
|
71
77
|
`;
|
|
72
78
|
await fs__default["default"].writeFile(packageFile, newContents, "utf-8").catch((error) => {
|
|
73
|
-
throw new Error(
|
|
79
|
+
throw new Error(
|
|
80
|
+
`Failed to add plugin as dependency to app: ${packageFile}: ${error.message}`
|
|
81
|
+
);
|
|
74
82
|
});
|
|
75
83
|
});
|
|
76
84
|
}
|
|
@@ -83,12 +91,24 @@ async function addPluginExtensionToApp(pluginId, extensionName, pluginPackage) {
|
|
|
83
91
|
var _a;
|
|
84
92
|
const content = await fs__default["default"].readFile(pluginsFilePath, "utf8");
|
|
85
93
|
const revLines = content.split("\n").reverse();
|
|
86
|
-
const lastImportIndex = revLines.findIndex(
|
|
87
|
-
|
|
94
|
+
const lastImportIndex = revLines.findIndex(
|
|
95
|
+
(line) => line.match(/ from ("|').*("|')/)
|
|
96
|
+
);
|
|
97
|
+
const lastRouteIndex = revLines.findIndex(
|
|
98
|
+
(line) => line.match(/<\/FlatRoutes/)
|
|
99
|
+
);
|
|
88
100
|
if (lastImportIndex !== -1 && lastRouteIndex !== -1) {
|
|
89
|
-
revLines.splice(
|
|
101
|
+
revLines.splice(
|
|
102
|
+
lastImportIndex,
|
|
103
|
+
0,
|
|
104
|
+
`import { ${extensionName} } from '${pluginPackage}';`
|
|
105
|
+
);
|
|
90
106
|
const [indentation] = (_a = revLines[lastRouteIndex + 1].match(/^\s*/)) != null ? _a : [];
|
|
91
|
-
revLines.splice(
|
|
107
|
+
revLines.splice(
|
|
108
|
+
lastRouteIndex + 1,
|
|
109
|
+
0,
|
|
110
|
+
`${indentation}<Route path="/${pluginId}" element={<${extensionName} />}/>`
|
|
111
|
+
);
|
|
92
112
|
const newContent = revLines.reverse().join("\n");
|
|
93
113
|
await fs__default["default"].writeFile(pluginsFilePath, newContent, "utf8");
|
|
94
114
|
}
|
|
@@ -114,7 +134,9 @@ async function buildPlugin(pluginFolder) {
|
|
|
114
134
|
}).catch((error) => {
|
|
115
135
|
process.stdout.write(error.stderr);
|
|
116
136
|
process.stdout.write(error.stdout);
|
|
117
|
-
throw new Error(
|
|
137
|
+
throw new Error(
|
|
138
|
+
`Warning: Could not execute command ${chalk__default["default"].cyan(command)}`
|
|
139
|
+
);
|
|
118
140
|
});
|
|
119
141
|
} catch (error) {
|
|
120
142
|
errors.assertError(error);
|
|
@@ -126,7 +148,9 @@ async function buildPlugin(pluginFolder) {
|
|
|
126
148
|
async function movePlugin(tempDir, destination, id) {
|
|
127
149
|
await tasks.Task.forItem("moving", id, async () => {
|
|
128
150
|
await fs__default["default"].move(tempDir, destination).catch((error) => {
|
|
129
|
-
throw new Error(
|
|
151
|
+
throw new Error(
|
|
152
|
+
`Failed to move plugin from ${tempDir} to ${destination}: ${error.message}`
|
|
153
|
+
);
|
|
130
154
|
});
|
|
131
155
|
});
|
|
132
156
|
}
|
|
@@ -141,7 +165,9 @@ var createPlugin = async (opts) => {
|
|
|
141
165
|
if (!value) {
|
|
142
166
|
return chalk__default["default"].red("Please enter an ID for the plugin");
|
|
143
167
|
} else if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(value)) {
|
|
144
|
-
return chalk__default["default"].red(
|
|
168
|
+
return chalk__default["default"].red(
|
|
169
|
+
"Plugin IDs must be lowercase and contain only letters, digits, and dashes."
|
|
170
|
+
);
|
|
145
171
|
}
|
|
146
172
|
return true;
|
|
147
173
|
}
|
|
@@ -151,14 +177,18 @@ var createPlugin = async (opts) => {
|
|
|
151
177
|
questions.push({
|
|
152
178
|
type: "input",
|
|
153
179
|
name: "owner",
|
|
154
|
-
message: chalk__default["default"].blue(
|
|
180
|
+
message: chalk__default["default"].blue(
|
|
181
|
+
"Enter the owner(s) of the plugin. If specified, this will be added to CODEOWNERS for the plugin path. [optional]"
|
|
182
|
+
),
|
|
155
183
|
validate: (value) => {
|
|
156
184
|
if (!value) {
|
|
157
185
|
return true;
|
|
158
186
|
}
|
|
159
187
|
const ownerIds = tasks.parseOwnerIds(value);
|
|
160
188
|
if (!ownerIds) {
|
|
161
|
-
return chalk__default["default"].red(
|
|
189
|
+
return chalk__default["default"].red(
|
|
190
|
+
"The owner must be a space separated list of team names (e.g. @org/team-name), usernames (e.g. @username), or the email addresses of users (e.g. user@example.com)."
|
|
191
|
+
);
|
|
162
192
|
}
|
|
163
193
|
return true;
|
|
164
194
|
}
|
|
@@ -173,7 +203,9 @@ var createPlugin = async (opts) => {
|
|
|
173
203
|
const privatePackage = opts.private === false ? false : true;
|
|
174
204
|
const isMonoRepo = await fs__default["default"].pathExists(index.paths.resolveTargetRoot("lerna.json"));
|
|
175
205
|
const appPackage = index.paths.resolveTargetRoot("packages/app");
|
|
176
|
-
const templateDir = index.paths.resolveOwn(
|
|
206
|
+
const templateDir = index.paths.resolveOwn(
|
|
207
|
+
opts.backend ? "templates/default-backend-plugin" : "templates/default-plugin"
|
|
208
|
+
);
|
|
177
209
|
const pluginDir = isMonoRepo ? index.paths.resolveTargetRoot("plugins", pluginId) : index.paths.resolveTargetRoot(pluginId);
|
|
178
210
|
const { version: pluginVersion } = isMonoRepo ? await fs__default["default"].readJson(index.paths.resolveTargetRoot("lerna.json")) : { version: "0.1.0" };
|
|
179
211
|
let lockfile;
|
|
@@ -187,18 +219,25 @@ var createPlugin = async (opts) => {
|
|
|
187
219
|
tasks.Task.section("Checking if the plugin ID is available");
|
|
188
220
|
await checkExists(pluginDir);
|
|
189
221
|
tasks.Task.section("Creating a temporary plugin directory");
|
|
190
|
-
const tempDir = await fs__default["default"].mkdtemp(
|
|
222
|
+
const tempDir = await fs__default["default"].mkdtemp(
|
|
223
|
+
path.join(os__default["default"].tmpdir(), `backstage-plugin-${pluginId}`)
|
|
224
|
+
);
|
|
191
225
|
try {
|
|
192
226
|
tasks.Task.section("Preparing files");
|
|
193
|
-
await tasks.templatingTask(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
227
|
+
await tasks.templatingTask(
|
|
228
|
+
templateDir,
|
|
229
|
+
tempDir,
|
|
230
|
+
{
|
|
231
|
+
...answers,
|
|
232
|
+
pluginVar,
|
|
233
|
+
pluginVersion,
|
|
234
|
+
extensionName,
|
|
235
|
+
name,
|
|
236
|
+
privatePackage,
|
|
237
|
+
npmRegistry
|
|
238
|
+
},
|
|
239
|
+
index.createPackageVersionProvider(lockfile)
|
|
240
|
+
);
|
|
202
241
|
tasks.Task.section("Moving to final location");
|
|
203
242
|
await movePlugin(tempDir, pluginDir, pluginId);
|
|
204
243
|
tasks.Task.section("Building the plugin");
|
|
@@ -234,4 +273,4 @@ exports.addPluginExtensionToApp = addPluginExtensionToApp;
|
|
|
234
273
|
exports.capitalize = capitalize;
|
|
235
274
|
exports["default"] = createPlugin;
|
|
236
275
|
exports.movePlugin = movePlugin;
|
|
237
|
-
//# sourceMappingURL=createPlugin-
|
|
276
|
+
//# sourceMappingURL=createPlugin-02079f81.cjs.js.map
|