@red-hat-developer-hub/cli
Version:
CLI for developing Backstage plugins and apps
121 lines (115 loc) • 4.39 kB
JavaScript
var getPackages = require('@manypkg/get-packages');
var chalk = require('chalk');
var fs = require('fs-extra');
var path = require('path');
var buildScalprumPlugin = require('../../lib/builder/buildScalprumPlugin.cjs.js');
var productionPack = require('../../lib/packager/productionPack.cjs.js');
var paths = require('../../lib/paths.cjs.js');
var tasks = require('../../lib/tasks.cjs.js');
var backend = require('./backend.cjs.js');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
var path__default = /*#__PURE__*/_interopDefaultCompat(path);
async function frontend(_, opts) {
const {
name,
version,
scalprum: scalprumInline,
files
} = await fs__default.default.readJson(paths.paths.resolveTarget("package.json"));
let scalprum = void 0;
if (opts.scalprumConfig) {
const scalprumConfigFile = paths.paths.resolveTarget(opts.scalprumConfig);
tasks.Task.log(
`Using external scalprum config file: ${chalk__default.default.cyan(scalprumConfigFile)}`
);
scalprum = await fs__default.default.readJson(scalprumConfigFile);
} else if (scalprumInline) {
tasks.Task.log(`Using scalprum config inlined in the 'package.json'`);
scalprum = scalprumInline;
} else {
let scalprumName;
if (name.includes("/")) {
const fragments = name.split("/");
scalprumName = `${fragments[0].replace("@", "")}.${fragments[1]}`;
} else {
scalprumName = name;
}
scalprum = {
name: scalprumName,
exposedModules: {
PluginRoot: "./src/index.ts"
}
};
tasks.Task.log(`No scalprum config. Using default dynamic UI configuration:`);
tasks.Task.log(chalk__default.default.cyan(JSON.stringify(scalprum, null, 2)));
tasks.Task.log(
`If you wish to change the defaults, add "scalprum" configuration to plugin "package.json" file, or use the '--scalprum-config' option to specify an external config.`
);
}
const distDynamicRelativePath = "dist-dynamic";
const target = path__default.default.resolve(paths.paths.targetDir, distDynamicRelativePath);
tasks.Task.log(
`Packing main package to ${chalk__default.default.cyan(
path__default.default.join(distDynamicRelativePath, "package.json")
)}`
);
if (opts.clean) {
await fs__default.default.remove(target);
}
await fs__default.default.mkdirs(target);
await fs__default.default.writeFile(
path__default.default.join(target, ".gitignore"),
`
*
`
);
await productionPack.productionPack({
packageDir: paths.paths.targetDir,
targetDir: target
});
tasks.Task.log(
`Customizing main package in ${chalk__default.default.cyan(
path__default.default.join(distDynamicRelativePath, "package.json")
)} for dynamic loading`
);
if (files && Array.isArray(files) && !files.includes("dist-scalprum")) {
files.push("dist-scalprum");
}
const monoRepoPackages = await getPackages.getPackages(paths.paths.targetDir);
await backend.customizeForDynamicUse({
embedded: [],
isYarnV1: false,
monoRepoPackages,
overridding: {
name: `${name}-dynamic`,
// We remove scripts, because they do not make sense for this derived package.
// They even bring errors, especially the pre-pack and post-pack ones:
// we want to be able to use npm pack on this derived package to distribute it as a dynamic plugin,
// and obviously this should not trigger the backstage pre-pack or post-pack actions
// which are related to the packaging of the original static package.
scripts: {},
files
}
})(path__default.default.resolve(target, "package.json"));
const resolvedScalprumDistPath = path__default.default.join(target, "dist-scalprum");
tasks.Task.log(
`Generating dynamic frontend plugin assets in ${chalk__default.default.cyan(
resolvedScalprumDistPath
)}`
);
await fs__default.default.remove(resolvedScalprumDistPath);
await buildScalprumPlugin.buildScalprumPlugin({
targetDir: paths.paths.targetDir,
pluginMetadata: {
...scalprum,
version
},
resolvedScalprumDistPath
});
return target;
}
exports.frontend = frontend;
//# sourceMappingURL=frontend.cjs.js.map
;