UNPKG

@backstage/cli

Version:

CLI for developing Backstage plugins and apps

210 lines (202 loc) • 7.1 kB
'use strict'; var fs = require('fs-extra'); var path = require('path'); var webpack = require('webpack'); require('fork-ts-checker-webpack-plugin'); require('html-webpack-plugin'); require('react-dev-utils/ModuleScopePlugin'); require('run-script-webpack-plugin'); require('webpack-node-externals'); require('@backstage/cli-common'); require('@manypkg/get-packages'); var paths = require('./paths-a7d52d4f.cjs.js'); require('mini-css-extract-plugin'); require('@pmmmwh/react-refresh-webpack-plugin'); require('./index-d2845aa8.cjs.js'); require('./run-eac5f3ab.cjs.js'); require('eslint-webpack-plugin'); require('lodash/pickBy'); var yn = require('yn'); var FileSizeReporter = require('react-dev-utils/FileSizeReporter'); var formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); var chalk = require('chalk'); require('webpack-dev-server'); require('react-dev-utils/openBrowser'); var parallel = require('./parallel-4af834f6.cjs.js'); var config = require('./config-7ca1db14.cjs.js'); var os = require('os'); var tar = require('tar'); var createDistWorkspace = require('./createDistWorkspace-4f496e3c.cjs.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); var webpack__default = /*#__PURE__*/_interopDefaultLegacy(webpack); var yn__default = /*#__PURE__*/_interopDefaultLegacy(yn); var formatWebpackMessages__default = /*#__PURE__*/_interopDefaultLegacy(formatWebpackMessages); var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk); var os__default = /*#__PURE__*/_interopDefaultLegacy(os); var tar__default = /*#__PURE__*/_interopDefaultLegacy(tar); const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024; const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024; function applyContextToError(error, moduleName) { return `Failed to compile '${moduleName}': ${error}`; } async function buildBundle(options) { const { statsJsonEnabled, schema: configSchema } = options; const paths$1 = paths.resolveBundlingPaths(options); const config = await paths.createConfig(paths$1, { ...options, checksEnabled: false, isDev: false, baseUrl: paths.resolveBaseUrl(options.frontendConfig) }); const isCi = yn__default["default"](process.env.CI, { default: false }); const previousFileSizes = await FileSizeReporter.measureFileSizesBeforeBuild(paths$1.targetDist); await fs__default["default"].emptyDir(paths$1.targetDist); if (paths$1.targetPublic) { await fs__default["default"].copy(paths$1.targetPublic, paths$1.targetDist, { dereference: true, filter: (file) => file !== paths$1.targetHtml }); } if (configSchema) { await fs__default["default"].writeJson( path.resolve(paths$1.targetDist, ".config-schema.json"), configSchema.serialize(), { spaces: 2 } ); } const { stats } = await build(config, isCi); if (!stats) { throw new Error("No stats returned"); } if (statsJsonEnabled) { await require("bfj").write( path.resolve(paths$1.targetDist, "bundle-stats.json"), stats.toJson() ); } FileSizeReporter.printFileSizesAfterBuild( stats, previousFileSizes, paths$1.targetDist, WARN_AFTER_BUNDLE_GZIP_SIZE, WARN_AFTER_CHUNK_GZIP_SIZE ); } async function build(config, isCi) { var _a, _b, _c; const stats = await new Promise( (resolve, reject) => { webpack__default["default"](config, (err, buildStats) => { if (err) { if (err.message) { const { errors: errors2 } = formatWebpackMessages__default["default"]({ errors: [err.message], warnings: new Array(), _showErrors: true, _showWarnings: true }); throw new Error(errors2[0]); } else { reject(err); } } else { resolve(buildStats); } }); } ); if (!stats) { throw new Error("Failed to compile: No stats provided"); } const serializedStats = stats.toJson({ all: false, warnings: true, errors: true }); const { errors, warnings } = formatWebpackMessages__default["default"]({ errors: serializedStats.errors, warnings: serializedStats.warnings }); if (errors.length) { const errorWithContext = applyContextToError( errors[0], (_c = (_b = (_a = serializedStats.errors) == null ? void 0 : _a[0]) == null ? void 0 : _b.moduleName) != null ? _c : "" ); throw new Error(errorWithContext); } if (isCi && warnings.length) { const warningsWithContext = warnings.map((warning, i) => { var _a2, _b2, _c2; return applyContextToError( warning, (_c2 = (_b2 = (_a2 = serializedStats.warnings) == null ? void 0 : _a2[i]) == null ? void 0 : _b2.moduleName) != null ? _c2 : "" ); }); console.log( chalk__default["default"].yellow( "\nTreating warnings as errors because process.env.CI = true.\n" ) ); throw new Error(warningsWithContext.join("\n\n")); } return { stats }; } async function buildFrontend(options) { const { targetDir, writeStats, configPaths } = options; const { name } = await fs__default["default"].readJson(path.resolve(targetDir, "package.json")); await buildBundle({ targetDir, entry: "src/index", parallelism: parallel.getEnvironmentParallelism(), statsJsonEnabled: writeStats, ...await config.loadCliConfig({ args: configPaths, fromPackage: name }) }); } const BUNDLE_FILE = "bundle.tar.gz"; const SKELETON_FILE = "skeleton.tar.gz"; async function buildBackend(options) { const { targetDir, skipBuildDependencies } = options; const pkg = await fs__default["default"].readJson(path.resolve(targetDir, "package.json")); await createDistWorkspace.buildPackage({ targetDir: options.targetDir, packageJson: pkg, outputs: /* @__PURE__ */ new Set([createDistWorkspace.Output.cjs]) }); const tmpDir = await fs__default["default"].mkdtemp(path.resolve(os__default["default"].tmpdir(), "backstage-bundle")); try { await createDistWorkspace.createDistWorkspace([pkg.name], { targetDir: tmpDir, buildDependencies: !skipBuildDependencies, buildExcludes: [pkg.name], parallelism: parallel.getEnvironmentParallelism(), skeleton: SKELETON_FILE }); const distDir = path.resolve(targetDir, "dist"); await fs__default["default"].remove(distDir); await fs__default["default"].mkdir(distDir); await fs__default["default"].move( path.resolve(tmpDir, SKELETON_FILE), path.resolve(distDir, SKELETON_FILE) ); await tar__default["default"].create( { file: path.resolve(distDir, BUNDLE_FILE), cwd: tmpDir, portable: true, noMtime: true, gzip: true }, [""] ); } finally { await fs__default["default"].remove(tmpDir); } } exports.buildBackend = buildBackend; exports.buildFrontend = buildFrontend; //# sourceMappingURL=buildBackend-32a4adb3.cjs.js.map