@backstage/cli-module-build 0.0.0-nightly-20260317031259
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 +18 -0
- package/README.md +23 -0
- package/bin/backstage-cli-module-build +32 -0
- package/config/webpack-public-path.js +31 -0
- package/dist/commands/buildWorkspace.cjs.js +53 -0
- package/dist/commands/buildWorkspace.cjs.js.map +1 -0
- package/dist/commands/package/build/command.cjs.js +136 -0
- package/dist/commands/package/build/command.cjs.js.map +1 -0
- package/dist/commands/package/build/index.cjs.js +10 -0
- package/dist/commands/package/build/index.cjs.js.map +1 -0
- package/dist/commands/package/bundle/command.cjs.js +691 -0
- package/dist/commands/package/bundle/command.cjs.js.map +1 -0
- package/dist/commands/package/bundle/index.cjs.js +10 -0
- package/dist/commands/package/bundle/index.cjs.js.map +1 -0
- package/dist/commands/package/clean.cjs.js +21 -0
- package/dist/commands/package/clean.cjs.js.map +1 -0
- package/dist/commands/package/postpack.cjs.js +15 -0
- package/dist/commands/package/postpack.cjs.js.map +1 -0
- package/dist/commands/package/prepack.cjs.js +29 -0
- package/dist/commands/package/prepack.cjs.js.map +1 -0
- package/dist/commands/package/start/command.cjs.js +80 -0
- package/dist/commands/package/start/command.cjs.js.map +1 -0
- package/dist/commands/package/start/index.cjs.js +10 -0
- package/dist/commands/package/start/index.cjs.js.map +1 -0
- package/dist/commands/package/start/resolveLinkedWorkspace.cjs.js +34 -0
- package/dist/commands/package/start/resolveLinkedWorkspace.cjs.js.map +1 -0
- package/dist/commands/package/start/startBackend.cjs.js +46 -0
- package/dist/commands/package/start/startBackend.cjs.js.map +1 -0
- package/dist/commands/package/start/startFrontend.cjs.js +49 -0
- package/dist/commands/package/start/startFrontend.cjs.js.map +1 -0
- package/dist/commands/package/start/startPackage.cjs.js +53 -0
- package/dist/commands/package/start/startPackage.cjs.js.map +1 -0
- package/dist/commands/repo/build.cjs.js +149 -0
- package/dist/commands/repo/build.cjs.js.map +1 -0
- package/dist/commands/repo/clean.cjs.js +41 -0
- package/dist/commands/repo/clean.cjs.js.map +1 -0
- package/dist/commands/repo/start.cjs.js +199 -0
- package/dist/commands/repo/start.cjs.js.map +1 -0
- package/dist/index.cjs.js +74 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/lib/buildBackend.cjs.js +81 -0
- package/dist/lib/buildBackend.cjs.js.map +1 -0
- package/dist/lib/buildFrontend.cjs.js +49 -0
- package/dist/lib/buildFrontend.cjs.js.map +1 -0
- package/dist/lib/builder/config.cjs.js +257 -0
- package/dist/lib/builder/config.cjs.js.map +1 -0
- package/dist/lib/builder/packager.cjs.js +131 -0
- package/dist/lib/builder/packager.cjs.js.map +1 -0
- package/dist/lib/builder/plugins.cjs.js +125 -0
- package/dist/lib/builder/plugins.cjs.js.map +1 -0
- package/dist/lib/builder/types.cjs.js +10 -0
- package/dist/lib/builder/types.cjs.js.map +1 -0
- package/dist/lib/bundler/ConfigInjectingHtmlWebpackPlugin.cjs.js +43 -0
- package/dist/lib/bundler/ConfigInjectingHtmlWebpackPlugin.cjs.js.map +1 -0
- package/dist/lib/bundler/bundle.cjs.js +189 -0
- package/dist/lib/bundler/bundle.cjs.js.map +1 -0
- package/dist/lib/bundler/config.cjs.js +309 -0
- package/dist/lib/bundler/config.cjs.js.map +1 -0
- package/dist/lib/bundler/hasReactDomClient.cjs.js +17 -0
- package/dist/lib/bundler/hasReactDomClient.cjs.js.map +1 -0
- package/dist/lib/bundler/linkWorkspaces.cjs.js +34 -0
- package/dist/lib/bundler/linkWorkspaces.cjs.js.map +1 -0
- package/dist/lib/bundler/moduleFederation.cjs.js +135 -0
- package/dist/lib/bundler/moduleFederation.cjs.js.map +1 -0
- package/dist/lib/bundler/optimization.cjs.js +68 -0
- package/dist/lib/bundler/optimization.cjs.js.map +1 -0
- package/dist/lib/bundler/packageDetection.cjs.js +124 -0
- package/dist/lib/bundler/packageDetection.cjs.js.map +1 -0
- package/dist/lib/bundler/paths.cjs.js +62 -0
- package/dist/lib/bundler/paths.cjs.js.map +1 -0
- package/dist/lib/bundler/server.cjs.js +231 -0
- package/dist/lib/bundler/server.cjs.js.map +1 -0
- package/dist/lib/bundler/transforms.cjs.js +145 -0
- package/dist/lib/bundler/transforms.cjs.js.map +1 -0
- package/dist/lib/config.cjs.js +94 -0
- package/dist/lib/config.cjs.js.map +1 -0
- package/dist/lib/entryPoints.cjs.js +49 -0
- package/dist/lib/entryPoints.cjs.js.map +1 -0
- package/dist/lib/ipc/IpcServer.cjs.js +60 -0
- package/dist/lib/ipc/IpcServer.cjs.js.map +1 -0
- package/dist/lib/ipc/ServerDataStore.cjs.js +36 -0
- package/dist/lib/ipc/ServerDataStore.cjs.js.map +1 -0
- package/dist/lib/optionsParser.cjs.js +22 -0
- package/dist/lib/optionsParser.cjs.js.map +1 -0
- package/dist/lib/packager/createDistWorkspace.cjs.js +252 -0
- package/dist/lib/packager/createDistWorkspace.cjs.js.map +1 -0
- package/dist/lib/packager/productionPack.cjs.js +160 -0
- package/dist/lib/packager/productionPack.cjs.js.map +1 -0
- package/dist/lib/publishing.cjs.js +40 -0
- package/dist/lib/publishing.cjs.js.map +1 -0
- package/dist/lib/role.cjs.js +24 -0
- package/dist/lib/role.cjs.js.map +1 -0
- package/dist/lib/runner/runBackend.cjs.js +136 -0
- package/dist/lib/runner/runBackend.cjs.js.map +1 -0
- package/dist/lib/typeDistProject.cjs.js +89 -0
- package/dist/lib/typeDistProject.cjs.js.map +1 -0
- package/dist/lib/urls.cjs.js +13 -0
- package/dist/lib/urls.cjs.js.map +1 -0
- package/dist/package.json.cjs.js +143 -0
- package/dist/package.json.cjs.js.map +1 -0
- package/package.json +113 -0
- package/templates/serve_index.html +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.cjs.js","sources":["../../../../src/commands/package/bundle/command.ts"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BackstagePackageJson, PackageGraph } from '@backstage/cli-node';\nimport { run, runOutput } from '@backstage/cli-common';\nimport chalk from 'chalk';\nimport { cli } from 'cleye';\nimport fs from 'fs-extra';\nimport { createRequire } from 'node:module';\nimport { tmpdir } from 'node:os';\nimport {\n join as joinPath,\n resolve as resolvePath,\n relative as relativePath,\n} from 'node:path';\n\nimport { loadConfigSchema } from '@backstage/config-loader';\nimport { targetPaths } from '@backstage/cli-common';\nimport { buildFrontend } from '../../../lib/buildFrontend';\nimport {\n createDistWorkspace,\n packToDirectory,\n resolveLocalDependencies,\n} from '../../../lib/packager';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\ninterface BundleOptions {\n build: boolean;\n install: boolean;\n clean: boolean;\n verbose: boolean;\n outputDestination?: string;\n outputName?: string;\n prePackedDir?: string;\n}\n\n/**\n * Bundle a plugin for dynamic loading.\n *\n * This creates a self-contained plugin bundle that can be deployed independently\n * and loaded dynamically by a Backstage application. Supports both backend and\n * frontend plugins.\n *\n * For backend plugins, `createDistWorkspace` handles building (CJS) and packing\n * all local dependencies. The output is restructured so that the main plugin\n * sits at the bundle root and its local dependencies live under `embedded/`.\n * A lockfile is seeded, pruned, and used to install a private `node_modules`.\n *\n * For frontend plugins, a module federation remote build produces the final\n * assets. Only the main plugin is packed into the bundle root (no `embedded/`,\n * no lockfile, no `node_modules`).\n *\n * When `--pre-packed-dir` is provided, local dependencies are copied from a\n * pre-built dist workspace instead of calling `createDistWorkspace`:\n * - For backend plugins this is a performance optimization when many plugins from the same monorepo are being bundled.\n * - For frontend plugins it additionally enables lockfile generation (seed + prune) for dependency tracking purposes such as SBOM generation.\n * - The pre-built dist workspace is produced by\n * `backstage-cli build-workspace <output-dir> [packages...] --alwaysPack`\n * and `<output-dir>` is then passed as `--pre-packed-dir`.\n * - The `--alwaysPack` flag is required so that `workspace:^` and `backstage:^`\n * dependency specs are resolved to concrete versions in the packed output.\n */\nexport async function bundleCommand(opts: BundleOptions): Promise<void> {\n const pkgJsonPath = targetPaths.resolve('package.json');\n const pkg = (await fs.readJson(pkgJsonPath)) as BackstagePackageJson;\n\n const outputDestination = opts.outputDestination\n ? resolvePath(opts.outputDestination)\n : targetPaths.dir;\n const mangledName = pkg.name.replace(/^@/, '').replace(/\\//, '-');\n let bundleName = 'bundle';\n if (opts.outputName) {\n bundleName = opts.outputName;\n } else if (opts.outputDestination) {\n bundleName = mangledName;\n }\n const target = joinPath(outputDestination, bundleName);\n\n const role = pkg.backstage?.role;\n if (!role) {\n throw new Error(\n `Package ${chalk.cyan(\n pkg.name,\n )} does not have a backstage.role defined in package.json`,\n );\n }\n\n const validRoles = [\n 'backend-plugin',\n 'backend-plugin-module',\n 'frontend-plugin',\n 'frontend-plugin-module',\n ];\n if (!validRoles.includes(role)) {\n throw new Error(\n `Package ${chalk.cyan(pkg.name)} has role ${chalk.cyan(\n role,\n )}, but bundle command ` +\n `only supports: ${validRoles.map(r => chalk.cyan(r)).join(', ')}`,\n );\n }\n\n const pluginType: 'frontend' | 'backend' =\n role === 'frontend-plugin' || role === 'frontend-plugin-module'\n ? 'frontend'\n : 'backend';\n\n if (pkg.bundled) {\n throw new Error(\n `Package ${chalk.cyan(pkg.name)} has ${chalk.cyan(\n 'bundled: true',\n )} which is not ` + `compatible with dynamic plugin bundling.`,\n );\n }\n\n console.log(\n chalk.blue(`Bundling ${chalk.cyan(pkg.name)} for dynamic loading...`),\n );\n console.log(`${chalk.dim('Output:')} ${chalk.cyan(target)}`);\n\n if (opts.clean) {\n console.log(chalk.blue(`Cleaning ${chalk.cyan(target)}`));\n await fs.remove(target);\n }\n\n await fs.mkdirs(target);\n\n await fs.writeFile(joinPath(target, '.gitignore'), '*\\n');\n await fs.writeFile(joinPath(target, '.bundle-output'), '');\n\n const rootPkg = await fs.readJson(\n resolvePath(targetPaths.rootDir, 'package.json'),\n );\n\n // Backend plugins always need embedded packages, lockfile, and node_modules.\n // Frontend plugins need them only when --pre-packed-dir is provided.\n const needsDependencies = pluginType === 'backend' || !!opts.prePackedDir;\n\n // Establish the bundle directory as its own Yarn project root so that\n // the seeded yarn.lock is the one Yarn reads/writes, even when the\n // output directory is inside another monorepo.\n // Only needed when lockfile/install operations will run.\n if (needsDependencies) {\n const yarnrcLines = ['nodeLinker: node-modules'];\n try {\n // Include yarnPath so the same Yarn version that created the lockfile\n // is used for pruning/installing -- lockfile formats differ across\n // major Yarn versions (e.g. ~builtin vs optional!builtin patches).\n const resolved = await runOutput(['yarn', 'config', 'get', 'yarnPath'], {\n cwd: targetPaths.rootDir,\n });\n const yarnPathSentinels = new Set(['undefined', 'null']);\n if (resolved && !yarnPathSentinels.has(resolved)) {\n yarnrcLines.push(`yarnPath: ${resolved}`);\n }\n } catch {\n // yarnPath not configured — check if corepack manages the version instead\n if (!rootPkg.packageManager) {\n console.warn(\n chalk.yellow(\n 'No yarnPath configured and no packageManager field found. ' +\n 'The Yarn version in PATH will be used for lockfile operations.',\n ),\n );\n }\n }\n\n await fs.writeFile(\n joinPath(target, '.yarnrc.yml'),\n `${yarnrcLines.join('\\n')}\\n`,\n );\n }\n\n // ── Step 0 (frontend only): Module federation build ─────────────────\n if (pluginType === 'frontend' && opts.build) {\n console.log(chalk.blue('Building module federation remote...'));\n await buildFrontend({\n targetDir: targetPaths.dir,\n configPaths: [],\n writeStats: false,\n isModuleFederationRemote: true,\n });\n }\n\n const embeddedResolutions: Record<string, string> = {};\n\n // Detect previous bundle output directories inside the source package so\n // they can be stripped from the yarn-pack result later. npm-packlist's\n // basename matching on the `files` field picks up identically-named entries\n // from prior bundle outputs, creating nested copies.\n const bundleOutputDirs: string[] = [];\n try {\n const entries = await fs.readdir(targetPaths.dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (\n await fs.pathExists(\n joinPath(targetPaths.dir, entry.name, '.bundle-output'),\n )\n ) {\n bundleOutputDirs.push(entry.name);\n }\n }\n }\n } catch {\n /* directory may not exist yet on first run */\n }\n\n if (needsDependencies) {\n // ── Step 1: Populate embedded packages ──────────────────────────────\n const embeddedDir = joinPath(target, 'embedded');\n let targets: { name: string; dir: string }[];\n\n if (opts.prePackedDir) {\n // ── Strategy A: Copy from pre-built dist workspace ───────────────\n // Reuses output from `backstage-cli build-workspace --alwaysPack`.\n // Works for both backend (performance optimization) and frontend\n // (enables lockfile generation for SBOM).\n const prePackedDir = resolvePath(opts.prePackedDir);\n console.log(\n chalk.blue(\n `Using pre-packed workspace at ${chalk.cyan(prePackedDir)}...`,\n ),\n );\n\n const packages = await PackageGraph.listTargetPackages();\n targets = await resolveLocalDependencies([pkg.name], packages);\n await fs.ensureDir(embeddedDir);\n\n for (const dep of targets) {\n const relDir = relativePath(targetPaths.rootDir, dep.dir);\n const srcDir = resolvePath(prePackedDir, relDir);\n const destDir = resolvePath(embeddedDir, relDir);\n if (await fs.pathExists(srcDir)) {\n await fs.copy(srcDir, destDir);\n } else {\n console.warn(\n chalk.yellow(\n ` Package ${chalk.cyan(dep.name)} not found in pre-packed ` +\n `dir (expected at ${chalk.cyan(relDir)})`,\n ),\n );\n }\n }\n } else {\n // ── Strategy B: createDistWorkspace ──────────────────────────────\n // Pack all local dependencies into a temp directory first, then\n // move the result into target/embedded/. We must NOT pack directly\n // into the target tree because yarn pack's basename-matching on the\n // `files` field would pick up identically-named files from\n // already-extracted embedded packages.\n const tempWorkspaceDir = await fs.mkdtemp(\n joinPath(tmpdir(), 'bundle-workspace-'),\n );\n console.log(chalk.blue('Packing local dependencies...'));\n\n const distLog = createStepLogger(\n joinPath(target, 'dist-workspace.log'),\n opts.verbose,\n );\n\n const packingPattern = /^(?:Moving|Repacking) (.+) into dist workspace$/;\n const distLogger = {\n log(msg: string) {\n const match = msg.match(packingPattern);\n if (match) {\n console.log(` ${chalk.dim('Packing')} ${chalk.cyan(match[1])}`);\n }\n distLog.logger.log(msg);\n },\n warn(msg: string) {\n console.warn(` ${chalk.yellow(msg)}`);\n distLog.logger.warn(msg);\n },\n };\n\n try {\n ({ targets } = await createDistWorkspace([pkg.name], {\n targetDir: tempWorkspaceDir,\n files: [],\n alwaysPack: true,\n buildDependencies: opts.build,\n buildExcludes: opts.build ? [] : undefined,\n logger: distLogger,\n }));\n await fs.remove(embeddedDir);\n await fs.move(tempWorkspaceDir, embeddedDir);\n } catch (err) {\n await distLog.close();\n await showLogOnError(distLog.path, opts.verbose);\n throw err;\n } finally {\n if (await fs.pathExists(tempWorkspaceDir)) {\n await fs.remove(tempWorkspaceDir);\n }\n }\n await distLog.close();\n await fs.remove(distLog.path);\n }\n\n // ── Step 2: Assemble embedded packages ──────────────────────────────\n const mainPluginRelDir = relativePath(targetPaths.rootDir, targetPaths.dir);\n const mainPluginEmbeddedDir = resolvePath(embeddedDir, mainPluginRelDir);\n\n console.log(\n chalk.blue(\n `Moving main plugin ${chalk.cyan(pkg.name)} to bundle root...`,\n ),\n );\n\n if (!(await fs.pathExists(mainPluginEmbeddedDir))) {\n throw new Error(\n `Main plugin ${chalk.cyan(pkg.name)} was not found in the ` +\n `embedded workspace at ${chalk.cyan(mainPluginRelDir)}. ` +\n `Ensure the pre-packed workspace includes this plugin.`,\n );\n }\n\n const mainPluginEntries = await fs.readdir(mainPluginEmbeddedDir);\n for (const entry of mainPluginEntries) {\n await fs.move(\n joinPath(mainPluginEmbeddedDir, entry),\n joinPath(target, entry),\n { overwrite: true },\n );\n }\n\n await fs.remove(mainPluginEmbeddedDir);\n\n // For frontend plugins, the pre-packed dist/ contains standard CJS\n // output, not Module Federation artifacts. Overlay the MF build\n // output from the source directory (produced by Step 0).\n if (pluginType === 'frontend') {\n const sourceDist = resolvePath(targetPaths.dir, 'dist');\n if (await fs.pathExists(sourceDist)) {\n await fs.copy(sourceDist, joinPath(target, 'dist'), {\n overwrite: true,\n });\n }\n }\n\n const localDeps = targets.filter(t => t.name !== pkg.name);\n\n for (const dep of localDeps) {\n const depRelDir = relativePath(targetPaths.rootDir, dep.dir);\n const depEmbeddedDir = resolvePath(embeddedDir, depRelDir);\n\n if (!(await fs.pathExists(depEmbeddedDir))) {\n continue;\n }\n\n embeddedResolutions[dep.name] = `file:./embedded/${depRelDir}`;\n }\n\n if (Object.keys(embeddedResolutions).length === 0) {\n await fs.remove(embeddedDir);\n }\n } else {\n // ── Step 1b: Pack main plugin only ──────────────────────────────────\n // Frontend plugins without --pre-packed-dir don't need transitive\n // local deps -- just pack the main plugin directly into the bundle root.\n console.log(chalk.blue(`Packing main plugin ${chalk.cyan(pkg.name)}...`));\n\n const distLog = createStepLogger(\n joinPath(target, 'dist-workspace.log'),\n opts.verbose,\n );\n\n try {\n await packToDirectory({\n packageDir: targetPaths.dir,\n packageName: pkg.name,\n targetDir: target,\n logger: distLog.logger,\n });\n } catch (err) {\n await distLog.close();\n await showLogOnError(distLog.path, opts.verbose);\n throw err;\n }\n await distLog.close();\n await fs.remove(distLog.path);\n }\n\n // Remove any previous bundle output directories that were erroneously\n // included by yarn pack (npm-packlist's basename matching on the `files`\n // field picks up identically-named entries from prior bundle outputs).\n for (const dir of bundleOutputDirs) {\n const nestedPath = joinPath(target, dir);\n if (await fs.pathExists(nestedPath)) {\n await fs.remove(nestedPath);\n }\n }\n\n // Remove src/ directory included by yarn pack because prepack's\n // rewriteEntryPoints cannot rewrite main/types away from src/ paths\n // when the standard dist output files are absent (MF builds).\n // Skip if the package explicitly ships src/ via the \"files\" field.\n if (pluginType === 'frontend') {\n const srcExplicitlyIncluded = (pkg.files ?? []).some(\n f => f === 'src' || f.startsWith('src/'),\n );\n if (!srcExplicitlyIncluded) {\n const srcPath = joinPath(target, 'src');\n if (await fs.pathExists(srcPath)) {\n await fs.remove(srcPath);\n }\n }\n }\n\n // ── Step 3: Config schema ────────────────────────────────────────────\n console.log(chalk.blue('Filtering config schema...'));\n\n const schemaPath = resolvePath(target, 'dist', '.config-schema.json');\n let schemas: Array<{ packageName: string }> = [];\n\n if (pluginType === 'frontend' && (await fs.pathExists(schemaPath))) {\n const existing = await fs.readJson(schemaPath);\n schemas = existing.schemas ?? [];\n } else {\n const configSchema = await loadConfigSchema({\n dependencies: [],\n packagePaths: ['package.json'],\n });\n const serialized = configSchema.serialize() as {\n schemas: typeof schemas;\n };\n schemas = serialized.schemas ?? [];\n }\n\n let schemaWritten = false;\n if (schemas.length > 0) {\n const filtered = filterBundleConfigSchemas(schemas, targetPaths.dir);\n if (filtered.length > 0) {\n await fs.ensureDir(resolvePath(target, 'dist'));\n await fs.writeJson(\n schemaPath,\n { backstageConfigSchemaVersion: 1, schemas: filtered },\n { spaces: 2 },\n );\n schemaWritten = true;\n } else {\n console.log(\n chalk.dim(' No config schemas found for this plugin bundle'),\n );\n }\n } else {\n console.log(chalk.dim(' No config schemas found for this plugin bundle'));\n }\n\n // ── Step 4: Post-process package.json ────────────────────────────────\n console.log(\n chalk.blue(\n `Customizing ${chalk.cyan('package.json')} for dynamic loading...`,\n ),\n );\n\n const targetPkgPath = resolvePath(target, 'package.json');\n const targetPkg = await fs.readJson(targetPkgPath);\n\n postProcessBundlePackageJson(\n targetPkg,\n target,\n pluginType,\n needsDependencies ? rootPkg?.resolutions : undefined,\n embeddedResolutions,\n needsDependencies,\n );\n\n if (schemaWritten) {\n targetPkg.configSchema = 'dist/.config-schema.json';\n }\n\n await fs.writeJson(targetPkgPath, targetPkg, { spaces: 2 });\n\n // ── Step 5: Seed lockfile, prune, & install ──────────────────────────\n // Runs for backend plugins (always) and frontend plugins with\n // --pre-packed-dir (for SBOM lockfile generation).\n if (needsDependencies) {\n await seedBundleLockfile(target, targetPaths.dir, targetPaths.rootDir);\n\n const sourceCacheFolder = await runOutput(\n ['yarn', 'config', 'get', 'cacheFolder'],\n { cwd: targetPaths.rootDir },\n );\n await pruneBundleLockfile(target, opts.verbose, sourceCacheFolder);\n\n if (pluginType === 'backend') {\n if (opts.install) {\n await installBundleDependencies(target, opts.verbose);\n\n // Clean up .yarn directory created during install\n const yarnDir = joinPath(target, '.yarn');\n if (await fs.pathExists(yarnDir)) {\n await fs.remove(yarnDir);\n }\n\n console.log(chalk.blue('Validating plugin entry points...'));\n\n // Temporarily patch module resolution so the plugin can resolve\n // itself by name (needed by resolvePackagePath at module load\n // time, e.g. for database migration paths). At runtime this is\n // handled by CommonJSModuleLoader in backend-dynamic-feature-service.\n const NodeModule =\n require('node:module') as typeof import('node:module') & {\n _resolveFilename: Function;\n };\n const origResolveFilename = NodeModule._resolveFilename;\n NodeModule._resolveFilename = (request: string, ...args: any[]) => {\n if (request === `${targetPkg.name}/package.json`) {\n return resolvePath(target, 'package.json');\n }\n return origResolveFilename(request, ...args);\n };\n\n try {\n const pluginRequire = createRequire(`${target}/package.json`);\n const mainModule = pluginRequire(target);\n const alphaPath = resolvePath(target, 'alpha');\n const alphaModule = (await fs.pathExists(alphaPath))\n ? pluginRequire(alphaPath)\n : undefined;\n\n const isBackendFeature = (v: unknown) =>\n !!v &&\n (typeof v === 'object' || typeof v === 'function') &&\n (v as { $$type?: string }).$$type === '@backstage/BackendFeature';\n\n const hasValidExport = [mainModule, alphaModule]\n .filter(Boolean)\n .some(m => isBackendFeature(m?.default));\n\n if (!hasValidExport) {\n throw new Error(\n `Backend plugin is not valid for dynamic loading: ` +\n `it must export a ${chalk.cyan(\n 'BackendFeature',\n )} as default export`,\n );\n }\n } finally {\n NodeModule._resolveFilename = origResolveFilename;\n }\n } else {\n console.log(\n chalk.yellow(\n 'Skipping dependency installation and validation. ' +\n 'Run without --no-install to validate the bundle.',\n ),\n );\n }\n }\n }\n\n console.log(chalk.green(`Bundle created at ${chalk.cyan(target)}`));\n}\n\n/**\n * Mutates `targetPkg` in place to prepare it for dynamic plugin loading:\n * clears scripts/devDependencies, applies plugin-type-specific adjustments\n * (MF entry points for frontend, bundleDependencies for backend), and merges\n * root + embedded resolutions when a lockfile is involved.\n */\nexport function postProcessBundlePackageJson(\n targetPkg: Record<string, unknown>,\n targetDir: string,\n pluginType: 'frontend' | 'backend',\n rootResolutions: Record<string, string> | undefined,\n embeddedResolutions: Record<string, string>,\n needsDependencies: boolean,\n): void {\n targetPkg.scripts = {};\n targetPkg.devDependencies = {};\n\n if (pluginType === 'frontend') {\n targetPkg.main = './dist/remoteEntry.js';\n\n const mfTypesIndex = resolvePath(\n targetDir,\n 'dist',\n '@mf-types',\n 'index.d.ts',\n );\n if (fs.pathExistsSync(mfTypesIndex)) {\n targetPkg.types = './dist/@mf-types/index.d.ts';\n } else {\n delete targetPkg.types;\n }\n\n delete targetPkg.exports;\n delete targetPkg.module;\n delete targetPkg.typesVersions;\n } else if (pluginType === 'backend') {\n targetPkg.bundleDependencies = true;\n }\n\n if (needsDependencies) {\n const patchVersionPattern = /^patch:.+@npm%3A([^#]+)#/;\n const stripped: Record<string, string> = {};\n if (rootResolutions) {\n for (const [key, value] of Object.entries(rootResolutions)) {\n if (typeof value !== 'string') {\n continue;\n }\n const patchMatch = value.match(patchVersionPattern);\n stripped[key] = patchMatch ? patchMatch[1] : value;\n }\n }\n\n targetPkg.resolutions = {\n ...stripped,\n ...(targetPkg.resolutions as Record<string, string> | undefined),\n ...embeddedResolutions,\n };\n }\n}\n\n/**\n * Seeds the bundle's yarn.lock from the source plugin or monorepo lockfile.\n * Looks first for a local yarn.lock in the plugin directory, then falls back\n * to the monorepo root.\n */\nasync function seedBundleLockfile(\n targetDir: string,\n pluginDir: string,\n monorepoRoot: string,\n): Promise<void> {\n let sourceYarnLock: string | undefined;\n if (await fs.pathExists(joinPath(pluginDir, 'yarn.lock'))) {\n sourceYarnLock = joinPath(pluginDir, 'yarn.lock');\n } else if (await fs.pathExists(joinPath(monorepoRoot, 'yarn.lock'))) {\n sourceYarnLock = joinPath(monorepoRoot, 'yarn.lock');\n }\n\n if (!sourceYarnLock) {\n throw new Error(\n `Could not find a ${chalk.cyan(\n 'yarn.lock',\n )} file in either the plugin directory or the monorepo root (${chalk.cyan(\n monorepoRoot,\n )})`,\n );\n }\n\n const isMonorepoLock = sourceYarnLock === joinPath(monorepoRoot, 'yarn.lock');\n console.log(\n chalk.blue(\n `Seeding bundle ${chalk.cyan('yarn.lock')} from source plugin${\n isMonorepoLock ? ' monorepo' : ''\n } lockfile...`,\n ),\n );\n\n await fs.copyFile(sourceYarnLock, resolvePath(targetDir, 'yarn.lock'));\n}\n\n/**\n * Prunes the bundle's yarn.lock to remove entries not required by the\n * bundle's package.json. Runs offline to avoid network access.\n */\nasync function pruneBundleLockfile(\n targetDir: string,\n verbose: boolean,\n sourceCacheFolder: string,\n): Promise<void> {\n console.log(\n chalk.blue(\n `Pruning bundle ${chalk.cyan(\n 'yarn.lock',\n )} to remove unused dependencies...`,\n ),\n );\n\n const pruneLog = createStepLogger(\n joinPath(targetDir, 'lockfile-prune.log'),\n verbose,\n '[lockfile-prune] ',\n );\n try {\n await run(\n ['yarn', 'install', '--no-immutable', '--mode', 'update-lockfile'],\n {\n cwd: targetDir,\n env: {\n YARN_ENABLE_GLOBAL_CACHE: 'false',\n YARN_ENABLE_NETWORK: '0',\n YARN_ENABLE_MIRROR: 'false',\n YARN_CACHE_FOLDER: sourceCacheFolder,\n },\n onStdout: pruneLog.logRunOutput('out'),\n onStderr: pruneLog.logRunOutput('err'),\n },\n ).waitForExit();\n } catch (err) {\n await pruneLog.close();\n await showLogOnError(pruneLog.path, verbose);\n throw err;\n }\n await pruneLog.close();\n await fs.remove(pruneLog.path);\n}\n\n/**\n * Installs the bundle's dependencies using an immutable lockfile.\n * This creates the node_modules directory needed for backend plugin runtime.\n */\nasync function installBundleDependencies(\n targetDir: string,\n verbose: boolean,\n): Promise<void> {\n console.log(chalk.blue('Installing private dependencies...'));\n\n const installLog = createStepLogger(\n joinPath(targetDir, 'yarn-install.log'),\n verbose,\n '[yarn-install] ',\n );\n try {\n await run(['yarn', 'install', '--immutable'], {\n cwd: targetDir,\n onStdout: installLog.logRunOutput('out'),\n onStderr: installLog.logRunOutput('err'),\n }).waitForExit();\n } catch (err) {\n await installLog.close();\n await showLogOnError(installLog.path, verbose);\n throw err;\n }\n await installLog.close();\n await fs.remove(installLog.path);\n}\n\n/**\n * Filters config schemas to keep only those belonging to the plugin's own\n * family: the plugin itself, same-pluginId libraries, third-party packages,\n * and recursively any directly-depended plugin/module (wrapper scenario).\n */\nexport function filterBundleConfigSchemas(\n schemas: { packageName: string }[],\n pluginDir: string,\n): { packageName: string }[] {\n const PLUGIN_OR_MODULE_ROLES = new Set([\n 'backend-plugin',\n 'backend-plugin-module',\n 'frontend-plugin',\n 'frontend-plugin-module',\n ]);\n const LIBRARY_ROLES = new Set([\n 'node-library',\n 'common-library',\n 'web-library',\n ]);\n\n const allowed = new Set<string>();\n const visited = new Set<string>();\n const localRequire = createRequire(resolvePath(pluginDir, 'package.json'));\n\n function walk(pkg: BackstagePackageJson) {\n if (visited.has(pkg.name)) {\n return;\n }\n visited.add(pkg.name);\n allowed.add(pkg.name);\n\n const pluginId = pkg.backstage?.pluginId;\n\n for (const depName of Object.keys(pkg.dependencies ?? {})) {\n let depPkgPath: string;\n try {\n depPkgPath = localRequire.resolve(`${depName}/package.json`);\n } catch {\n continue;\n }\n\n let depPkg: BackstagePackageJson;\n try {\n depPkg = fs.readJsonSync(depPkgPath);\n } catch {\n continue;\n }\n\n const depRole = depPkg.backstage?.role;\n\n if (!depPkg.backstage) {\n allowed.add(depName);\n continue;\n }\n\n if (depRole && PLUGIN_OR_MODULE_ROLES.has(depRole)) {\n walk(depPkg);\n continue;\n }\n\n if (\n depRole &&\n LIBRARY_ROLES.has(depRole) &&\n pluginId &&\n depPkg.backstage?.pluginId === pluginId\n ) {\n allowed.add(depName);\n continue;\n }\n }\n }\n\n let rootPkg: BackstagePackageJson;\n try {\n rootPkg = fs.readJsonSync(resolvePath(pluginDir, 'package.json'));\n } catch {\n return [];\n }\n walk(rootPkg);\n\n return schemas.filter(s => allowed.has(s.packageName));\n}\n\nconst ansiPattern =\n // eslint-disable-next-line no-control-regex\n /[\\x1b\\x9b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><~]|\\x1b]8;;[^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)/g;\nfunction stripAnsi(str: string): string {\n return str.replace(ansiPattern, '');\n}\n\nfunction createStepLogger(\n logFilePath: string,\n verbose: boolean,\n prefix?: string,\n) {\n const logStream = fs.createWriteStream(logFilePath);\n\n const writeLine = (line: string, stream: 'out' | 'err') => {\n const prefixed = prefix ? `${prefix}${line}` : line;\n logStream.write(\n `${stream === 'err' ? '[WARN] ' : ''}${stripAnsi(prefixed)}\\n`,\n );\n if (verbose) {\n const writer = stream === 'err' ? console.warn : console.log;\n writer(chalk.dim(prefixed));\n }\n };\n\n const logger = {\n log(msg: string) {\n writeLine(msg, 'out');\n },\n warn(msg: string) {\n writeLine(msg, 'err');\n },\n };\n\n const logRunOutput = (stream: 'out' | 'err') => (data: Buffer) => {\n if (prefix) {\n for (const line of data.toString('utf8').split(/\\r?\\n/)) {\n if (line) writeLine(line, stream);\n }\n } else {\n logStream.write(\n `${stream === 'err' ? '[WARN] ' : ''}${stripAnsi(\n data.toString('utf8'),\n )}`,\n );\n if (verbose) {\n const writer = stream === 'err' ? console.warn : console.log;\n writer(chalk.dim(data.toString('utf8')));\n }\n }\n };\n\n const close = () => new Promise<void>(r => logStream.end(r));\n\n return { logger, logRunOutput, close, path: logFilePath };\n}\n\nasync function showLogOnError(\n logFilePath: string,\n verbose: boolean,\n): Promise<void> {\n console.error(\n chalk.red(`\\nFull log available at: ${chalk.cyan(logFilePath)}`),\n );\n if (!verbose) {\n try {\n const content = await fs.readFile(logFilePath, 'utf8');\n const tail = content.split('\\n').slice(-20).join('\\n');\n if (tail) {\n console.error(chalk.dim('\\n--- last 20 lines ---'));\n console.error(tail);\n }\n } catch {\n /* log file may not exist yet */\n }\n }\n}\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: {\n outputDestination,\n outputName,\n clean,\n noBuild,\n noInstall,\n verbose,\n prePackedDir,\n },\n } = cli(\n {\n help: info,\n flags: {\n outputDestination: {\n type: String,\n description:\n 'Directory in which the bundle subdirectory is created. ' +\n 'Defaults to the current package directory.',\n },\n outputName: {\n type: String,\n description:\n 'Name of the bundle subdirectory. ' +\n 'Defaults to \"bundle\" when output stays in the package directory, ' +\n 'or to the mangled package name (e.g. myorg-plugin-foo) when ' +\n '--output-destination is specified.',\n },\n clean: {\n type: Boolean,\n description: 'Clean the output directory before bundling',\n },\n noBuild: {\n type: Boolean,\n description:\n 'Skip building packages (assumes they are already built)',\n },\n noInstall: {\n type: Boolean,\n description:\n 'Skip dependency installation and entrypoint validation.',\n },\n verbose: {\n type: Boolean,\n description:\n 'Stream detailed output from internal steps (build, pack, install) to the console. ' +\n 'Without this flag, output is captured to per-step log files and only shown on error.',\n },\n prePackedDir: {\n type: String,\n description:\n 'Path to a pre-built dist workspace (from build-workspace --alwaysPack). ' +\n 'Skips local dependency packing and uses pre-packed packages directly. ' +\n 'For frontend plugins, this also enables yarn.lock generation for SBOM.',\n },\n },\n },\n undefined,\n args,\n );\n\n return bundleCommand({\n build: !noBuild,\n install: !noInstall,\n clean: Boolean(clean),\n verbose: Boolean(verbose),\n outputDestination: outputDestination ?? undefined,\n outputName: outputName ?? undefined,\n prePackedDir: prePackedDir ?? undefined,\n });\n};\n"],"names":["targetPaths","fs","resolvePath","joinPath","chalk","runOutput","buildFrontend","PackageGraph","resolveLocalDependencies","relativePath","tmpdir","createDistWorkspace","packToDirectory","loadConfigSchema","createRequire","run","cli"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2EA,eAAsB,cAAc,IAAA,EAAoC;AACtE,EAAA,MAAM,WAAA,GAAcA,qBAAA,CAAY,OAAA,CAAQ,cAAc,CAAA;AACtD,EAAA,MAAM,GAAA,GAAO,MAAMC,mBAAA,CAAG,QAAA,CAAS,WAAW,CAAA;AAE1C,EAAA,MAAM,oBAAoB,IAAA,CAAK,iBAAA,GAC3BC,kBAAY,IAAA,CAAK,iBAAiB,IAClCF,qBAAA,CAAY,GAAA;AAChB,EAAA,MAAM,WAAA,GAAc,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAChE,EAAA,IAAI,UAAA,GAAa,QAAA;AACjB,EAAA,IAAI,KAAK,UAAA,EAAY;AACnB,IAAA,UAAA,GAAa,IAAA,CAAK,UAAA;AAAA,EACpB,CAAA,MAAA,IAAW,KAAK,iBAAA,EAAmB;AACjC,IAAA,UAAA,GAAa,WAAA;AAAA,EACf;AACA,EAAA,MAAM,MAAA,GAASG,cAAA,CAAS,iBAAA,EAAmB,UAAU,CAAA;AAErD,EAAA,MAAM,IAAA,GAAO,IAAI,SAAA,EAAW,IAAA;AAC5B,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,WAAWC,sBAAA,CAAM,IAAA;AAAA,QACf,GAAA,CAAI;AAAA,OACL,CAAA,uDAAA;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,gBAAA;AAAA,IACA,uBAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,WAAWA,sBAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAC,aAAaA,sBAAA,CAAM,IAAA;AAAA,QAChD;AAAA,OACD,CAAA,oCAAA,EACmB,UAAA,CAAW,GAAA,CAAI,CAAA,CAAA,KAAKA,sBAAA,CAAM,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACnE;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAA,KAAS,iBAAA,IAAqB,IAAA,KAAS,2BACnC,UAAA,GACA,SAAA;AAEN,EAAA,IAAI,IAAI,OAAA,EAAS;AACf,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,WAAWA,sBAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAC,QAAQA,sBAAA,CAAM,IAAA;AAAA,QAC3C;AAAA,OACD,CAAA,sDAAA;AAAA,KACH;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,sBAAA,CAAM,KAAK,CAAA,SAAA,EAAYA,sBAAA,CAAM,KAAK,GAAA,CAAI,IAAI,CAAC,CAAA,uBAAA,CAAyB;AAAA,GACtE;AACA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAGA,sBAAA,CAAM,GAAA,CAAI,SAAS,CAAC,CAAA,CAAA,EAAIA,sBAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAA;AAE3D,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAM,IAAA,CAAK,CAAA,SAAA,EAAYA,uBAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA;AACxD,IAAA,MAAMH,mBAAA,CAAG,OAAO,MAAM,CAAA;AAAA,EACxB;AAEA,EAAA,MAAMA,mBAAA,CAAG,OAAO,MAAM,CAAA;AAEtB,EAAA,MAAMA,oBAAG,SAAA,CAAUE,cAAA,CAAS,MAAA,EAAQ,YAAY,GAAG,KAAK,CAAA;AACxD,EAAA,MAAMF,oBAAG,SAAA,CAAUE,cAAA,CAAS,MAAA,EAAQ,gBAAgB,GAAG,EAAE,CAAA;AAEzD,EAAA,MAAM,OAAA,GAAU,MAAMF,mBAAA,CAAG,QAAA;AAAA,IACvBC,iBAAA,CAAYF,qBAAA,CAAY,OAAA,EAAS,cAAc;AAAA,GACjD;AAIA,EAAA,MAAM,iBAAA,GAAoB,UAAA,KAAe,SAAA,IAAa,CAAC,CAAC,IAAA,CAAK,YAAA;AAM7D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,WAAA,GAAc,CAAC,0BAA0B,CAAA;AAC/C,IAAA,IAAI;AAIF,MAAA,MAAM,QAAA,GAAW,MAAMK,mBAAA,CAAU,CAAC,QAAQ,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA,EAAG;AAAA,QACtE,KAAKL,qBAAA,CAAY;AAAA,OAClB,CAAA;AACD,MAAA,MAAM,oCAAoB,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,MAAM,CAAC,CAAA;AACvD,MAAA,IAAI,QAAA,IAAY,CAAC,iBAAA,CAAkB,GAAA,CAAI,QAAQ,CAAA,EAAG;AAChD,QAAA,WAAA,CAAY,IAAA,CAAK,CAAA,UAAA,EAAa,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC1C;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAI,CAAC,QAAQ,cAAA,EAAgB;AAC3B,QAAA,OAAA,CAAQ,IAAA;AAAA,UACNI,sBAAA,CAAM,MAAA;AAAA,YACJ;AAAA;AAEF,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAMH,mBAAA,CAAG,SAAA;AAAA,MACPE,cAAA,CAAS,QAAQ,aAAa,CAAA;AAAA,MAC9B,CAAA,EAAG,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,KAC3B;AAAA,EACF;AAGA,EAAA,IAAI,UAAA,KAAe,UAAA,IAAc,IAAA,CAAK,KAAA,EAAO;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAIC,sBAAA,CAAM,IAAA,CAAK,sCAAsC,CAAC,CAAA;AAC9D,IAAA,MAAME,2BAAA,CAAc;AAAA,MAClB,WAAWN,qBAAA,CAAY,GAAA;AAAA,MACvB,aAAa,EAAC;AAAA,MACd,UAAA,EAAY,KAAA;AAAA,MACZ,wBAAA,EAA0B;AAAA,KAC3B,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,sBAA8C,EAAC;AAMrD,EAAA,MAAM,mBAA6B,EAAC;AACpC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMC,mBAAA,CAAG,OAAA,CAAQD,sBAAY,GAAA,EAAK,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AACzE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,IACE,MAAMC,mBAAA,CAAG,UAAA;AAAA,UACPE,cAAA,CAASH,qBAAA,CAAY,GAAA,EAAK,KAAA,CAAM,MAAM,gBAAgB;AAAA,SACxD,EACA;AACA,UAAA,gBAAA,CAAiB,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,IAAI,iBAAA,EAAmB;AAErB,IAAA,MAAM,WAAA,GAAcG,cAAA,CAAS,MAAA,EAAQ,UAAU,CAAA;AAC/C,IAAA,IAAI,OAAA;AAEJ,IAAA,IAAI,KAAK,YAAA,EAAc;AAKrB,MAAA,MAAM,YAAA,GAAeD,iBAAA,CAAY,IAAA,CAAK,YAAY,CAAA;AAClD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNE,sBAAA,CAAM,IAAA;AAAA,UACJ,CAAA,8BAAA,EAAiCA,sBAAA,CAAM,IAAA,CAAK,YAAY,CAAC,CAAA,GAAA;AAAA;AAC3D,OACF;AAEA,MAAA,MAAM,QAAA,GAAW,MAAMG,oBAAA,CAAa,kBAAA,EAAmB;AACvD,MAAA,OAAA,GAAU,MAAMC,4CAAA,CAAyB,CAAC,GAAA,CAAI,IAAI,GAAG,QAAQ,CAAA;AAC7D,MAAA,MAAMP,mBAAA,CAAG,UAAU,WAAW,CAAA;AAE9B,MAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,QAAA,MAAM,MAAA,GAASQ,kBAAA,CAAaT,qBAAA,CAAY,OAAA,EAAS,IAAI,GAAG,CAAA;AACxD,QAAA,MAAM,MAAA,GAASE,iBAAA,CAAY,YAAA,EAAc,MAAM,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAUA,iBAAA,CAAY,WAAA,EAAa,MAAM,CAAA;AAC/C,QAAA,IAAI,MAAMD,mBAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AAC/B,UAAA,MAAMA,mBAAA,CAAG,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AAAA,QAC/B,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAA;AAAA,YACNG,sBAAA,CAAM,MAAA;AAAA,cACJ,CAAA,UAAA,EAAaA,sBAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAA,0CAAA,EACXA,sBAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA;AAC1C,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAOL,MAAA,MAAM,gBAAA,GAAmB,MAAMH,mBAAA,CAAG,OAAA;AAAA,QAChCE,cAAA,CAASO,SAAA,EAAO,EAAG,mBAAmB;AAAA,OACxC;AACA,MAAA,OAAA,CAAQ,GAAA,CAAIN,sBAAA,CAAM,IAAA,CAAK,+BAA+B,CAAC,CAAA;AAEvD,MAAA,MAAM,OAAA,GAAU,gBAAA;AAAA,QACdD,cAAA,CAAS,QAAQ,oBAAoB,CAAA;AAAA,QACrC,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,MAAM,cAAA,GAAiB,iDAAA;AACvB,MAAA,MAAM,UAAA,GAAa;AAAA,QACjB,IAAI,GAAA,EAAa;AACf,UAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,cAAc,CAAA;AACtC,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKC,sBAAA,CAAM,GAAA,CAAI,SAAS,CAAC,CAAA,CAAA,EAAIA,sBAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,UACjE;AACA,UAAA,OAAA,CAAQ,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,QACxB,CAAA;AAAA,QACA,KAAK,GAAA,EAAa;AAChB,UAAA,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAKA,sBAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AACrC,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,QACzB;AAAA,OACF;AAEA,MAAA,IAAI;AACF,QAAA,CAAC,EAAE,SAAQ,GAAI,MAAMO,wCAAoB,CAAC,GAAA,CAAI,IAAI,CAAA,EAAG;AAAA,UACnD,SAAA,EAAW,gBAAA;AAAA,UACX,OAAO,EAAC;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,mBAAmB,IAAA,CAAK,KAAA;AAAA,UACxB,aAAA,EAAe,IAAA,CAAK,KAAA,GAAQ,EAAC,GAAI,KAAA,CAAA;AAAA,UACjC,MAAA,EAAQ;AAAA,SACT,CAAA;AACD,QAAA,MAAMV,mBAAA,CAAG,OAAO,WAAW,CAAA;AAC3B,QAAA,MAAMA,mBAAA,CAAG,IAAA,CAAK,gBAAA,EAAkB,WAAW,CAAA;AAAA,MAC7C,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,QAAA,MAAM,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AAC/C,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,IAAI,MAAMA,mBAAA,CAAG,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACzC,UAAA,MAAMA,mBAAA,CAAG,OAAO,gBAAgB,CAAA;AAAA,QAClC;AAAA,MACF;AACA,MAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,MAAA,MAAMA,mBAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAAA,IAC9B;AAGA,IAAA,MAAM,gBAAA,GAAmBQ,kBAAA,CAAaT,qBAAA,CAAY,OAAA,EAASA,sBAAY,GAAG,CAAA;AAC1E,IAAA,MAAM,qBAAA,GAAwBE,iBAAA,CAAY,WAAA,EAAa,gBAAgB,CAAA;AAEvE,IAAA,OAAA,CAAQ,GAAA;AAAA,MACNE,sBAAA,CAAM,IAAA;AAAA,QACJ,CAAA,mBAAA,EAAsBA,sBAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAA,kBAAA;AAAA;AAC5C,KACF;AAEA,IAAA,IAAI,CAAE,MAAMH,mBAAA,CAAG,UAAA,CAAW,qBAAqB,CAAA,EAAI;AACjD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,YAAA,EAAeG,sBAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAI,CAAC,CAAA,4CAAA,EACRA,sBAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA,uDAAA;AAAA,OAEzD;AAAA,IACF;AAEA,IAAA,MAAM,iBAAA,GAAoB,MAAMH,mBAAA,CAAG,OAAA,CAAQ,qBAAqB,CAAA;AAChE,IAAA,KAAA,MAAW,SAAS,iBAAA,EAAmB;AACrC,MAAA,MAAMA,mBAAA,CAAG,IAAA;AAAA,QACPE,cAAA,CAAS,uBAAuB,KAAK,CAAA;AAAA,QACrCA,cAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,QACtB,EAAE,WAAW,IAAA;AAAK,OACpB;AAAA,IACF;AAEA,IAAA,MAAMF,mBAAA,CAAG,OAAO,qBAAqB,CAAA;AAKrC,IAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,MAAA,MAAM,UAAA,GAAaC,iBAAA,CAAYF,qBAAA,CAAY,GAAA,EAAK,MAAM,CAAA;AACtD,MAAA,IAAI,MAAMC,mBAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AACnC,QAAA,MAAMA,oBAAG,IAAA,CAAK,UAAA,EAAYE,cAAA,CAAS,MAAA,EAAQ,MAAM,CAAA,EAAG;AAAA,UAClD,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,IAAA,KAAS,IAAI,IAAI,CAAA;AAEzD,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,MAAM,SAAA,GAAYM,kBAAA,CAAaT,qBAAA,CAAY,OAAA,EAAS,IAAI,GAAG,CAAA;AAC3D,MAAA,MAAM,cAAA,GAAiBE,iBAAA,CAAY,WAAA,EAAa,SAAS,CAAA;AAEzD,MAAA,IAAI,CAAE,MAAMD,mBAAA,CAAG,UAAA,CAAW,cAAc,CAAA,EAAI;AAC1C,QAAA;AAAA,MACF;AAEA,MAAA,mBAAA,CAAoB,GAAA,CAAI,IAAI,CAAA,GAAI,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,mBAAmB,CAAA,CAAE,WAAW,CAAA,EAAG;AACjD,MAAA,MAAMA,mBAAA,CAAG,OAAO,WAAW,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,MAAO;AAIL,IAAA,OAAA,CAAQ,GAAA,CAAIG,sBAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuBA,sBAAA,CAAM,KAAK,GAAA,CAAI,IAAI,CAAC,CAAA,GAAA,CAAK,CAAC,CAAA;AAExE,IAAA,MAAM,OAAA,GAAU,gBAAA;AAAA,MACdD,cAAA,CAAS,QAAQ,oBAAoB,CAAA;AAAA,MACrC,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,IAAI;AACF,MAAA,MAAMS,mCAAA,CAAgB;AAAA,QACpB,YAAYZ,qBAAA,CAAY,GAAA;AAAA,QACxB,aAAa,GAAA,CAAI,IAAA;AAAA,QACjB,SAAA,EAAW,MAAA;AAAA,QACX,QAAQ,OAAA,CAAQ;AAAA,OACjB,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,MAAA,MAAM,cAAA,CAAe,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA;AAC/C,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,IAAA,MAAMC,mBAAA,CAAG,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC9B;AAKA,EAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,IAAA,MAAM,UAAA,GAAaE,cAAA,CAAS,MAAA,EAAQ,GAAG,CAAA;AACvC,IAAA,IAAI,MAAMF,mBAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AACnC,MAAA,MAAMA,mBAAA,CAAG,OAAO,UAAU,CAAA;AAAA,IAC5B;AAAA,EACF;AAMA,EAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,IAAA,MAAM,qBAAA,GAAA,CAAyB,GAAA,CAAI,KAAA,IAAS,EAAC,EAAG,IAAA;AAAA,MAC9C,CAAA,CAAA,KAAK,CAAA,KAAM,KAAA,IAAS,CAAA,CAAE,WAAW,MAAM;AAAA,KACzC;AACA,IAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,MAAA,MAAM,OAAA,GAAUE,cAAA,CAAS,MAAA,EAAQ,KAAK,CAAA;AACtC,MAAA,IAAI,MAAMF,mBAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAChC,QAAA,MAAMA,mBAAA,CAAG,OAAO,OAAO,CAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,GAAA,CAAIG,sBAAA,CAAM,IAAA,CAAK,4BAA4B,CAAC,CAAA;AAEpD,EAAA,MAAM,UAAA,GAAaF,iBAAA,CAAY,MAAA,EAAQ,MAAA,EAAQ,qBAAqB,CAAA;AACpE,EAAA,IAAI,UAA0C,EAAC;AAE/C,EAAA,IAAI,eAAe,UAAA,IAAe,MAAMD,mBAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAI;AAClE,IAAA,MAAM,QAAA,GAAW,MAAMA,mBAAA,CAAG,QAAA,CAAS,UAAU,CAAA;AAC7C,IAAA,OAAA,GAAU,QAAA,CAAS,WAAW,EAAC;AAAA,EACjC,CAAA,MAAO;AACL,IAAA,MAAM,YAAA,GAAe,MAAMY,6BAAA,CAAiB;AAAA,MAC1C,cAAc,EAAC;AAAA,MACf,YAAA,EAAc,CAAC,cAAc;AAAA,KAC9B,CAAA;AACD,IAAA,MAAM,UAAA,GAAa,aAAa,SAAA,EAAU;AAG1C,IAAA,OAAA,GAAU,UAAA,CAAW,WAAW,EAAC;AAAA,EACnC;AAEA,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,QAAA,GAAW,yBAAA,CAA0B,OAAA,EAASb,qBAAA,CAAY,GAAG,CAAA;AACnE,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,MAAMC,mBAAA,CAAG,SAAA,CAAUC,iBAAA,CAAY,MAAA,EAAQ,MAAM,CAAC,CAAA;AAC9C,MAAA,MAAMD,mBAAA,CAAG,SAAA;AAAA,QACP,UAAA;AAAA,QACA,EAAE,4BAAA,EAA8B,CAAA,EAAG,OAAA,EAAS,QAAA,EAAS;AAAA,QACrD,EAAE,QAAQ,CAAA;AAAE,OACd;AACA,MAAA,aAAA,GAAgB,IAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNG,sBAAA,CAAM,IAAI,kDAAkD;AAAA,OAC9D;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,GAAA,CAAIA,sBAAA,CAAM,GAAA,CAAI,kDAAkD,CAAC,CAAA;AAAA,EAC3E;AAGA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,sBAAA,CAAM,IAAA;AAAA,MACJ,CAAA,YAAA,EAAeA,sBAAA,CAAM,IAAA,CAAK,cAAc,CAAC,CAAA,uBAAA;AAAA;AAC3C,GACF;AAEA,EAAA,MAAM,aAAA,GAAgBF,iBAAA,CAAY,MAAA,EAAQ,cAAc,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,MAAMD,mBAAA,CAAG,QAAA,CAAS,aAAa,CAAA;AAEjD,EAAA,4BAAA;AAAA,IACE,SAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA,GAAoB,SAAS,WAAA,GAAc,MAAA;AAAA,IAC3C,mBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,SAAA,CAAU,YAAA,GAAe,0BAAA;AAAA,EAC3B;AAEA,EAAA,MAAMA,oBAAG,SAAA,CAAU,aAAA,EAAe,WAAW,EAAE,MAAA,EAAQ,GAAG,CAAA;AAK1D,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,kBAAA,CAAmB,MAAA,EAAQD,qBAAA,CAAY,GAAA,EAAKA,sBAAY,OAAO,CAAA;AAErE,IAAA,MAAM,oBAAoB,MAAMK,mBAAA;AAAA,MAC9B,CAAC,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,aAAa,CAAA;AAAA,MACvC,EAAE,GAAA,EAAKL,qBAAA,CAAY,OAAA;AAAQ,KAC7B;AACA,IAAA,MAAM,mBAAA,CAAoB,MAAA,EAAQ,IAAA,CAAK,OAAA,EAAS,iBAAiB,CAAA;AAEjE,IAAA,IAAI,eAAe,SAAA,EAAW;AAC5B,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,MAAM,yBAAA,CAA0B,MAAA,EAAQ,IAAA,CAAK,OAAO,CAAA;AAGpD,QAAA,MAAM,OAAA,GAAUG,cAAA,CAAS,MAAA,EAAQ,OAAO,CAAA;AACxC,QAAA,IAAI,MAAMF,mBAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAChC,UAAA,MAAMA,mBAAA,CAAG,OAAO,OAAO,CAAA;AAAA,QACzB;AAEA,QAAA,OAAA,CAAQ,GAAA,CAAIG,sBAAA,CAAM,IAAA,CAAK,mCAAmC,CAAC,CAAA;AAM3D,QAAA,MAAM,UAAA,GACJ,QAAQ,aAAa,CAAA;AAGvB,QAAA,MAAM,sBAAsB,UAAA,CAAW,gBAAA;AACvC,QAAA,UAAA,CAAW,gBAAA,GAAmB,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AACjE,UAAA,IAAI,OAAA,KAAY,CAAA,EAAG,SAAA,CAAU,IAAI,CAAA,aAAA,CAAA,EAAiB;AAChD,YAAA,OAAOF,iBAAA,CAAY,QAAQ,cAAc,CAAA;AAAA,UAC3C;AACA,UAAA,OAAO,mBAAA,CAAoB,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,QAC7C,CAAA;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,aAAA,GAAgBY,yBAAA,CAAc,CAAA,EAAG,MAAM,CAAA,aAAA,CAAe,CAAA;AAC5D,UAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,UAAA,MAAM,SAAA,GAAYZ,iBAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AAC7C,UAAA,MAAM,WAAA,GAAe,MAAMD,mBAAA,CAAG,UAAA,CAAW,SAAS,CAAA,GAC9C,aAAA,CAAc,SAAS,CAAA,GACvB,KAAA,CAAA;AAEJ,UAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KACxB,CAAC,CAAC,CAAA,KACD,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,UAAA,CAAA,IACtC,EAA0B,MAAA,KAAW,2BAAA;AAExC,UAAA,MAAM,cAAA,GAAiB,CAAC,UAAA,EAAY,WAAW,CAAA,CAC5C,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,CAAA,CAAA,KAAK,gBAAA,CAAiB,CAAA,EAAG,OAAO,CAAC,CAAA;AAEzC,UAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,qEACsBG,sBAAA,CAAM,IAAA;AAAA,gBACxB;AAAA,eACD,CAAA,kBAAA;AAAA,aACL;AAAA,UACF;AAAA,QACF,CAAA,SAAE;AACA,UAAA,UAAA,CAAW,gBAAA,GAAmB,mBAAA;AAAA,QAChC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA;AAAA,UACNA,sBAAA,CAAM,MAAA;AAAA,YACJ;AAAA;AAEF,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAM,KAAA,CAAM,CAAA,kBAAA,EAAqBA,uBAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA;AACpE;AAQO,SAAS,6BACd,SAAA,EACA,SAAA,EACA,UAAA,EACA,eAAA,EACA,qBACA,iBAAA,EACM;AACN,EAAA,SAAA,CAAU,UAAU,EAAC;AACrB,EAAA,SAAA,CAAU,kBAAkB,EAAC;AAE7B,EAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,IAAA,SAAA,CAAU,IAAA,GAAO,uBAAA;AAEjB,IAAA,MAAM,YAAA,GAAeF,iBAAA;AAAA,MACnB,SAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAID,mBAAA,CAAG,cAAA,CAAe,YAAY,CAAA,EAAG;AACnC,MAAA,SAAA,CAAU,KAAA,GAAQ,6BAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,OAAO,SAAA,CAAU,KAAA;AAAA,IACnB;AAEA,IAAA,OAAO,SAAA,CAAU,OAAA;AACjB,IAAA,OAAO,SAAA,CAAU,MAAA;AACjB,IAAA,OAAO,SAAA,CAAU,aAAA;AAAA,EACnB,CAAA,MAAA,IAAW,eAAe,SAAA,EAAW;AACnC,IAAA,SAAA,CAAU,kBAAA,GAAqB,IAAA;AAAA,EACjC;AAEA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,mBAAA,GAAsB,0BAAA;AAC5B,IAAA,MAAM,WAAmC,EAAC;AAC1C,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,EAAG;AAC1D,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,UAAA;AAAA,QACF;AACA,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,mBAAmB,CAAA;AAClD,QAAA,QAAA,CAAS,GAAG,CAAA,GAAI,UAAA,GAAa,UAAA,CAAW,CAAC,CAAA,GAAI,KAAA;AAAA,MAC/C;AAAA,IACF;AAEA,IAAA,SAAA,CAAU,WAAA,GAAc;AAAA,MACtB,GAAG,QAAA;AAAA,MACH,GAAI,SAAA,CAAU,WAAA;AAAA,MACd,GAAG;AAAA,KACL;AAAA,EACF;AACF;AAOA,eAAe,kBAAA,CACb,SAAA,EACA,SAAA,EACA,YAAA,EACe;AACf,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI,MAAMA,mBAAA,CAAG,UAAA,CAAWE,eAAS,SAAA,EAAW,WAAW,CAAC,CAAA,EAAG;AACzD,IAAA,cAAA,GAAiBA,cAAA,CAAS,WAAW,WAAW,CAAA;AAAA,EAClD,CAAA,MAAA,IAAW,MAAMF,mBAAA,CAAG,UAAA,CAAWE,eAAS,YAAA,EAAc,WAAW,CAAC,CAAA,EAAG;AACnE,IAAA,cAAA,GAAiBA,cAAA,CAAS,cAAc,WAAW,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,oBAAoBC,sBAAA,CAAM,IAAA;AAAA,QACxB;AAAA,OACD,8DAA8DA,sBAAA,CAAM,IAAA;AAAA,QACnE;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,cAAA,KAAmBD,cAAA,CAAS,YAAA,EAAc,WAAW,CAAA;AAC5E,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNC,sBAAA,CAAM,IAAA;AAAA,MACJ,CAAA,eAAA,EAAkBA,uBAAM,IAAA,CAAK,WAAW,CAAC,CAAA,mBAAA,EACvC,cAAA,GAAiB,cAAc,EACjC,CAAA,YAAA;AAAA;AACF,GACF;AAEA,EAAA,MAAMH,oBAAG,QAAA,CAAS,cAAA,EAAgBC,iBAAA,CAAY,SAAA,EAAW,WAAW,CAAC,CAAA;AACvE;AAMA,eAAe,mBAAA,CACb,SAAA,EACA,OAAA,EACA,iBAAA,EACe;AACf,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNE,sBAAA,CAAM,IAAA;AAAA,MACJ,kBAAkBA,sBAAA,CAAM,IAAA;AAAA,QACtB;AAAA,OACD,CAAA,iCAAA;AAAA;AACH,GACF;AAEA,EAAA,MAAM,QAAA,GAAW,gBAAA;AAAA,IACfD,cAAA,CAAS,WAAW,oBAAoB,CAAA;AAAA,IACxC,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI;AACF,IAAA,MAAMY,aAAA;AAAA,MACJ,CAAC,MAAA,EAAQ,SAAA,EAAW,gBAAA,EAAkB,UAAU,iBAAiB,CAAA;AAAA,MACjE;AAAA,QACE,GAAA,EAAK,SAAA;AAAA,QACL,GAAA,EAAK;AAAA,UACH,wBAAA,EAA0B,OAAA;AAAA,UAC1B,mBAAA,EAAqB,GAAA;AAAA,UACrB,kBAAA,EAAoB,OAAA;AAAA,UACpB,iBAAA,EAAmB;AAAA,SACrB;AAAA,QACA,QAAA,EAAU,QAAA,CAAS,YAAA,CAAa,KAAK,CAAA;AAAA,QACrC,QAAA,EAAU,QAAA,CAAS,YAAA,CAAa,KAAK;AAAA;AACvC,MACA,WAAA,EAAY;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,KAAA,EAAM;AACrB,IAAA,MAAM,cAAA,CAAe,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAC3C,IAAA,MAAM,GAAA;AAAA,EACR;AACA,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAMd,mBAAA,CAAG,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AAC/B;AAMA,eAAe,yBAAA,CACb,WACA,OAAA,EACe;AACf,EAAA,OAAA,CAAQ,GAAA,CAAIG,sBAAA,CAAM,IAAA,CAAK,oCAAoC,CAAC,CAAA;AAE5D,EAAA,MAAM,UAAA,GAAa,gBAAA;AAAA,IACjBD,cAAA,CAAS,WAAW,kBAAkB,CAAA;AAAA,IACtC,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI;AACF,IAAA,MAAMY,aAAA,CAAI,CAAC,MAAA,EAAQ,SAAA,EAAW,aAAa,CAAA,EAAG;AAAA,MAC5C,GAAA,EAAK,SAAA;AAAA,MACL,QAAA,EAAU,UAAA,CAAW,YAAA,CAAa,KAAK,CAAA;AAAA,MACvC,QAAA,EAAU,UAAA,CAAW,YAAA,CAAa,KAAK;AAAA,KACxC,EAAE,WAAA,EAAY;AAAA,EACjB,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,WAAW,KAAA,EAAM;AACvB,IAAA,MAAM,cAAA,CAAe,UAAA,CAAW,IAAA,EAAM,OAAO,CAAA;AAC7C,IAAA,MAAM,GAAA;AAAA,EACR;AACA,EAAA,MAAM,WAAW,KAAA,EAAM;AACvB,EAAA,MAAMd,mBAAA,CAAG,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AACjC;AAOO,SAAS,yBAAA,CACd,SACA,SAAA,EAC2B;AAC3B,EAAA,MAAM,sBAAA,uBAA6B,GAAA,CAAI;AAAA,IACrC,gBAAA;AAAA,IACA,uBAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA,IAC5B,cAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,YAAA,GAAea,yBAAA,CAAcZ,iBAAA,CAAY,SAAA,EAAW,cAAc,CAAC,CAAA;AAEzE,EAAA,SAAS,KAAK,GAAA,EAA2B;AACvC,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,IAAI,CAAA;AACpB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,IAAI,CAAA;AAEpB,IAAA,MAAM,QAAA,GAAW,IAAI,SAAA,EAAW,QAAA;AAEhC,IAAA,KAAA,MAAW,WAAW,MAAA,CAAO,IAAA,CAAK,IAAI,YAAA,IAAgB,EAAE,CAAA,EAAG;AACzD,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI;AACF,QAAA,UAAA,GAAa,YAAA,CAAa,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAA,aAAA,CAAe,CAAA;AAAA,MAC7D,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAASD,mBAAA,CAAG,aAAa,UAAU,CAAA;AAAA,MACrC,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,SAAA,EAAW,IAAA;AAElC,MAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,IAAW,sBAAA,CAAuB,GAAA,CAAI,OAAO,CAAA,EAAG;AAClD,QAAA,IAAA,CAAK,MAAM,CAAA;AACX,QAAA;AAAA,MACF;AAEA,MAAA,IACE,OAAA,IACA,cAAc,GAAA,CAAI,OAAO,KACzB,QAAA,IACA,MAAA,CAAO,SAAA,EAAW,QAAA,KAAa,QAAA,EAC/B;AACA,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AACnB,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAUA,mBAAA,CAAG,YAAA,CAAaC,iBAAA,CAAY,SAAA,EAAW,cAAc,CAAC,CAAA;AAAA,EAClE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAA,CAAK,OAAO,CAAA;AAEZ,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,QAAQ,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AACvD;AAEA,MAAM,WAAA;AAAA;AAAA,EAEJ;AAAA,CAAA;AACF,SAAS,UAAU,GAAA,EAAqB;AACtC,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AACpC;AAEA,SAAS,gBAAA,CACP,WAAA,EACA,OAAA,EACA,MAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAYD,mBAAA,CAAG,iBAAA,CAAkB,WAAW,CAAA;AAElD,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,EAAc,MAAA,KAA0B;AACzD,IAAA,MAAM,WAAW,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA,GAAK,IAAA;AAC/C,IAAA,SAAA,CAAU,KAAA;AAAA,MACR,CAAA,EAAG,WAAW,KAAA,GAAQ,SAAA,GAAY,EAAE,CAAA,EAAG,SAAA,CAAU,QAAQ,CAAC;AAAA;AAAA,KAC5D;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,MAAA,GAAS,MAAA,KAAW,KAAA,GAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,GAAA;AACzD,MAAA,MAAA,CAAOG,sBAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAI,GAAA,EAAa;AACf,MAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,KAAK,GAAA,EAAa;AAChB,MAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,IACtB;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAA0B,CAAC,IAAA,KAAiB;AAChE,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,MAAW,QAAQ,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,EAAG;AACvD,QAAA,IAAI,IAAA,EAAM,SAAA,CAAU,IAAA,EAAM,MAAM,CAAA;AAAA,MAClC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,KAAA;AAAA,QACR,CAAA,EAAG,MAAA,KAAW,KAAA,GAAQ,SAAA,GAAY,EAAE,CAAA,EAAG,SAAA;AAAA,UACrC,IAAA,CAAK,SAAS,MAAM;AAAA,SACrB,CAAA;AAAA,OACH;AACA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,MAAA,GAAS,MAAA,KAAW,KAAA,GAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,GAAA;AACzD,QAAA,MAAA,CAAOA,uBAAM,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,MAAM,CAAC,CAAC,CAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAI,OAAA,CAAc,OAAK,SAAA,CAAU,GAAA,CAAI,CAAC,CAAC,CAAA;AAE3D,EAAA,OAAO,EAAE,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,MAAM,WAAA,EAAY;AAC1D;AAEA,eAAe,cAAA,CACb,aACA,OAAA,EACe;AACf,EAAA,OAAA,CAAQ,KAAA;AAAA,IACNA,uBAAM,GAAA,CAAI;AAAA,uBAAA,EAA4BA,sBAAA,CAAM,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE;AAAA,GACjE;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAMH,mBAAA,CAAG,QAAA,CAAS,aAAa,MAAM,CAAA;AACrD,MAAA,MAAM,IAAA,GAAO,QAAQ,KAAA,CAAM,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACrD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,OAAA,CAAQ,KAAA,CAAMG,sBAAA,CAAM,GAAA,CAAI,yBAAyB,CAAC,CAAA;AAClD,QAAA,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,MACpB;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,cAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAC1D,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,iBAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF,GAAIY,SAAA;AAAA,IACF;AAAA,MACE,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,iBAAA,EAAmB;AAAA,UACjB,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EACE;AAAA,SAEJ;AAAA,QACA,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EACE;AAAA,SAIJ;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EACE;AAAA,SACJ;AAAA,QACA,SAAA,EAAW;AAAA,UACT,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EACE;AAAA,SACJ;AAAA,QACA,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EACE;AAAA,SAEJ;AAAA,QACA,YAAA,EAAc;AAAA,UACZ,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EACE;AAAA;AAGJ;AACF,KACF;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,aAAA,CAAc;AAAA,IACnB,OAAO,CAAC,OAAA;AAAA,IACR,SAAS,CAAC,SAAA;AAAA,IACV,KAAA,EAAO,QAAQ,KAAK,CAAA;AAAA,IACpB,OAAA,EAAS,QAAQ,OAAO,CAAA;AAAA,IACxB,mBAAmB,iBAAA,IAAqB,MAAA;AAAA,IACxC,YAAY,UAAA,IAAc,MAAA;AAAA,IAC1B,cAAc,YAAA,IAAgB;AAAA,GAC/B,CAAA;AACH,CAAA;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var cleye = require('cleye');
|
|
6
|
+
var fs = require('fs-extra');
|
|
7
|
+
var cliCommon = require('@backstage/cli-common');
|
|
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
|
+
var clean = async ({ args, info }) => {
|
|
14
|
+
cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
|
|
15
|
+
await fs__default.default.remove(cliCommon.targetPaths.resolve("dist"));
|
|
16
|
+
await fs__default.default.remove(cliCommon.targetPaths.resolve("dist-types"));
|
|
17
|
+
await fs__default.default.remove(cliCommon.targetPaths.resolve("coverage"));
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
exports.default = clean;
|
|
21
|
+
//# sourceMappingURL=clean.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.cjs.js","sources":["../../../src/commands/package/clean.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { cli } from 'cleye';\nimport fs from 'fs-extra';\nimport { targetPaths } from '@backstage/cli-common';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n cli({ help: info, booleanFlagNegation: true }, undefined, args);\n await fs.remove(targetPaths.resolve('dist'));\n await fs.remove(targetPaths.resolve('dist-types'));\n await fs.remove(targetPaths.resolve('coverage'));\n};\n"],"names":["cli","fs","targetPaths"],"mappings":";;;;;;;;;;;;AAqBA,YAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAC1D,EAAAA,SAAA,CAAI,EAAE,IAAA,EAAM,IAAA,EAAM,qBAAqB,IAAA,EAAK,EAAG,QAAW,IAAI,CAAA;AAC9D,EAAA,MAAMC,mBAAA,CAAG,MAAA,CAAOC,qBAAA,CAAY,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC3C,EAAA,MAAMD,mBAAA,CAAG,MAAA,CAAOC,qBAAA,CAAY,OAAA,CAAQ,YAAY,CAAC,CAAA;AACjD,EAAA,MAAMD,mBAAA,CAAG,MAAA,CAAOC,qBAAA,CAAY,OAAA,CAAQ,UAAU,CAAC,CAAA;AACjD,CAAA;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var cleye = require('cleye');
|
|
6
|
+
var cliCommon = require('@backstage/cli-common');
|
|
7
|
+
var productionPack = require('../../lib/packager/productionPack.cjs.js');
|
|
8
|
+
|
|
9
|
+
var postpack = async ({ args, info }) => {
|
|
10
|
+
cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
|
|
11
|
+
await productionPack.revertProductionPack(cliCommon.targetPaths.dir);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.default = postpack;
|
|
15
|
+
//# sourceMappingURL=postpack.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postpack.cjs.js","sources":["../../../src/commands/package/postpack.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { cli } from 'cleye';\nimport { targetPaths } from '@backstage/cli-common';\nimport { revertProductionPack } from '../../lib/packager/productionPack';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n cli({ help: info, booleanFlagNegation: true }, undefined, args);\n await revertProductionPack(targetPaths.dir);\n};\n"],"names":["cli","revertProductionPack","targetPaths"],"mappings":";;;;;;;;AAqBA,eAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAC1D,EAAAA,SAAA,CAAI,EAAE,IAAA,EAAM,IAAA,EAAM,qBAAqB,IAAA,EAAK,EAAG,QAAW,IAAI,CAAA;AAC9D,EAAA,MAAMC,mCAAA,CAAqBC,sBAAY,GAAG,CAAA;AAC5C,CAAA;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var cleye = require('cleye');
|
|
6
|
+
var fs = require('fs-extra');
|
|
7
|
+
var cliCommon = require('@backstage/cli-common');
|
|
8
|
+
var productionPack = require('../../lib/packager/productionPack.cjs.js');
|
|
9
|
+
var publishing = require('../../lib/publishing.cjs.js');
|
|
10
|
+
var typeDistProject = require('../../lib/typeDistProject.cjs.js');
|
|
11
|
+
|
|
12
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
15
|
+
|
|
16
|
+
var prepack = async ({ args, info }) => {
|
|
17
|
+
cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
|
|
18
|
+
publishing.publishPreflightCheck({
|
|
19
|
+
dir: cliCommon.targetPaths.dir,
|
|
20
|
+
packageJson: await fs__default.default.readJson(cliCommon.targetPaths.resolve("package.json"))
|
|
21
|
+
});
|
|
22
|
+
await productionPack.productionPack({
|
|
23
|
+
packageDir: cliCommon.targetPaths.dir,
|
|
24
|
+
featureDetectionProject: await typeDistProject.createTypeDistProject()
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.default = prepack;
|
|
29
|
+
//# sourceMappingURL=prepack.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepack.cjs.js","sources":["../../../src/commands/package/prepack.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { cli } from 'cleye';\nimport fs from 'fs-extra';\nimport { targetPaths } from '@backstage/cli-common';\nimport { productionPack } from '../../lib/packager/productionPack';\nimport { publishPreflightCheck } from '../../lib/publishing';\nimport { createTypeDistProject } from '../../lib/typeDistProject';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n cli({ help: info, booleanFlagNegation: true }, undefined, args);\n\n publishPreflightCheck({\n dir: targetPaths.dir,\n packageJson: await fs.readJson(targetPaths.resolve('package.json')),\n });\n\n await productionPack({\n packageDir: targetPaths.dir,\n featureDetectionProject: await createTypeDistProject(),\n });\n};\n"],"names":["cli","publishPreflightCheck","targetPaths","fs","productionPack","createTypeDistProject"],"mappings":";;;;;;;;;;;;;;;AAwBA,cAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAC1D,EAAAA,SAAA,CAAI,EAAE,IAAA,EAAM,IAAA,EAAM,qBAAqB,IAAA,EAAK,EAAG,QAAW,IAAI,CAAA;AAE9D,EAAAC,gCAAA,CAAsB;AAAA,IACpB,KAAKC,qBAAA,CAAY,GAAA;AAAA,IACjB,aAAa,MAAMC,mBAAA,CAAG,SAASD,qBAAA,CAAY,OAAA,CAAQ,cAAc,CAAC;AAAA,GACnE,CAAA;AAED,EAAA,MAAME,6BAAA,CAAe;AAAA,IACnB,YAAYF,qBAAA,CAAY,GAAA;AAAA,IACxB,uBAAA,EAAyB,MAAMG,qCAAA;AAAsB,GACtD,CAAA;AACH,CAAA;;;;"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var cleye = require('cleye');
|
|
6
|
+
var startPackage = require('./startPackage.cjs.js');
|
|
7
|
+
var resolveLinkedWorkspace = require('./resolveLinkedWorkspace.cjs.js');
|
|
8
|
+
var role = require('../../../lib/role.cjs.js');
|
|
9
|
+
var cliCommon = require('@backstage/cli-common');
|
|
10
|
+
|
|
11
|
+
var command = async ({ args, info }) => {
|
|
12
|
+
const {
|
|
13
|
+
flags: {
|
|
14
|
+
config,
|
|
15
|
+
role: role$1,
|
|
16
|
+
check,
|
|
17
|
+
require: requirePath,
|
|
18
|
+
link,
|
|
19
|
+
entrypoint,
|
|
20
|
+
inspect,
|
|
21
|
+
inspectBrk
|
|
22
|
+
}
|
|
23
|
+
} = cleye.cli(
|
|
24
|
+
{
|
|
25
|
+
help: info,
|
|
26
|
+
booleanFlagNegation: true,
|
|
27
|
+
flags: {
|
|
28
|
+
config: {
|
|
29
|
+
type: [String],
|
|
30
|
+
description: "Config files to load instead of app-config.yaml",
|
|
31
|
+
default: []
|
|
32
|
+
},
|
|
33
|
+
role: {
|
|
34
|
+
type: String,
|
|
35
|
+
description: "Run the command with an explicit package role"
|
|
36
|
+
},
|
|
37
|
+
check: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
description: "Enable type checking and linting if available"
|
|
40
|
+
},
|
|
41
|
+
require: {
|
|
42
|
+
type: String,
|
|
43
|
+
description: "Add a --require argument to the node process"
|
|
44
|
+
},
|
|
45
|
+
link: {
|
|
46
|
+
type: String,
|
|
47
|
+
description: "Link an external workspace for module resolution"
|
|
48
|
+
},
|
|
49
|
+
entrypoint: {
|
|
50
|
+
type: String,
|
|
51
|
+
description: 'The entrypoint to start from, relative to the package root. Can point to either a file (without extension) or a directory (in which case the index file in that directory is used). Defaults to "dev"'
|
|
52
|
+
},
|
|
53
|
+
inspect: {
|
|
54
|
+
type: String,
|
|
55
|
+
description: "Enable the Node.js inspector, optionally at a specific host:port"
|
|
56
|
+
},
|
|
57
|
+
inspectBrk: {
|
|
58
|
+
type: String,
|
|
59
|
+
description: "Enable the Node.js inspector and break before user code starts"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
void 0,
|
|
64
|
+
args
|
|
65
|
+
);
|
|
66
|
+
await startPackage.startPackage({
|
|
67
|
+
role: await role.findRoleFromCommand({ role: role$1 }),
|
|
68
|
+
entrypoint,
|
|
69
|
+
targetDir: cliCommon.targetPaths.dir,
|
|
70
|
+
configPaths: config,
|
|
71
|
+
checksEnabled: Boolean(check),
|
|
72
|
+
linkedWorkspace: await resolveLinkedWorkspace.resolveLinkedWorkspace(link),
|
|
73
|
+
inspectEnabled: inspect || (inspect === "" ? true : void 0),
|
|
74
|
+
inspectBrkEnabled: inspectBrk || (inspectBrk === "" ? true : void 0),
|
|
75
|
+
require: requirePath
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
exports.default = command;
|
|
80
|
+
//# sourceMappingURL=command.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.cjs.js","sources":["../../../../src/commands/package/start/command.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { cli } from 'cleye';\nimport { startPackage } from './startPackage';\nimport { resolveLinkedWorkspace } from './resolveLinkedWorkspace';\nimport { findRoleFromCommand } from '../../../lib/role';\nimport { targetPaths } from '@backstage/cli-common';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: {\n config,\n role,\n check,\n require: requirePath,\n link,\n entrypoint,\n inspect,\n inspectBrk,\n },\n } = cli(\n {\n help: info,\n booleanFlagNegation: true,\n flags: {\n config: {\n type: [String],\n description: 'Config files to load instead of app-config.yaml',\n default: [],\n },\n role: {\n type: String,\n description: 'Run the command with an explicit package role',\n },\n check: {\n type: Boolean,\n description: 'Enable type checking and linting if available',\n },\n require: {\n type: String,\n description: 'Add a --require argument to the node process',\n },\n link: {\n type: String,\n description: 'Link an external workspace for module resolution',\n },\n entrypoint: {\n type: String,\n description:\n 'The entrypoint to start from, relative to the package root. Can point to either a file (without extension) or a directory (in which case the index file in that directory is used). Defaults to \"dev\"',\n },\n inspect: {\n type: String,\n description:\n 'Enable the Node.js inspector, optionally at a specific host:port',\n },\n inspectBrk: {\n type: String,\n description:\n 'Enable the Node.js inspector and break before user code starts',\n },\n },\n },\n undefined,\n args,\n );\n\n await startPackage({\n role: await findRoleFromCommand({ role }),\n entrypoint,\n targetDir: targetPaths.dir,\n configPaths: config,\n checksEnabled: Boolean(check),\n linkedWorkspace: await resolveLinkedWorkspace(link),\n inspectEnabled: inspect || (inspect === '' ? true : undefined),\n inspectBrkEnabled: inspectBrk || (inspectBrk === '' ? true : undefined),\n require: requirePath,\n });\n};\n"],"names":["role","cli","startPackage","findRoleFromCommand","targetPaths","resolveLinkedWorkspace"],"mappings":";;;;;;;;;;AAuBA,cAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAC1D,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,MAAA;AAAA,YACAA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,IAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF,GAAIC,SAAA;AAAA,IACF;AAAA,MACE,IAAA,EAAM,IAAA;AAAA,MACN,mBAAA,EAAqB,IAAA;AAAA,MACrB,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ;AAAA,UACN,IAAA,EAAM,CAAC,MAAM,CAAA;AAAA,UACb,WAAA,EAAa,iDAAA;AAAA,UACb,SAAS;AAAC,SACZ;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACf;AAAA,QACA,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EACE;AAAA,SACJ;AAAA,QACA,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EACE;AAAA,SACJ;AAAA,QACA,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EACE;AAAA;AACJ;AACF,KACF;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAMC,yBAAA,CAAa;AAAA,IACjB,IAAA,EAAM,MAAMC,wBAAA,CAAoB,QAAEH,QAAM,CAAA;AAAA,IACxC,UAAA;AAAA,IACA,WAAWI,qBAAA,CAAY,GAAA;AAAA,IACvB,WAAA,EAAa,MAAA;AAAA,IACb,aAAA,EAAe,QAAQ,KAAK,CAAA;AAAA,IAC5B,eAAA,EAAiB,MAAMC,6CAAA,CAAuB,IAAI,CAAA;AAAA,IAClD,cAAA,EAAgB,OAAA,KAAY,OAAA,KAAY,EAAA,GAAK,IAAA,GAAO,MAAA,CAAA;AAAA,IACpD,iBAAA,EAAmB,UAAA,KAAe,UAAA,KAAe,EAAA,GAAK,IAAA,GAAO,MAAA,CAAA;AAAA,IAC7D,OAAA,EAAS;AAAA,GACV,CAAA;AACH,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var errors = require('@backstage/errors');
|
|
4
|
+
var fs = require('fs-extra');
|
|
5
|
+
var posix = require('node:path/posix');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
10
|
+
|
|
11
|
+
async function resolveLinkedWorkspace(linkPath) {
|
|
12
|
+
if (!linkPath) {
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
const dir = posix.resolve(linkPath);
|
|
16
|
+
if (!fs__default.default.pathExistsSync(dir)) {
|
|
17
|
+
throw new Error(`Invalid workspace link, directory does not exist: ${dir}`);
|
|
18
|
+
}
|
|
19
|
+
const pkgJson = await fs__default.default.readJson(posix.resolve(dir, "package.json")).catch((error) => {
|
|
20
|
+
throw new errors.ForwardedError(
|
|
21
|
+
"Failed to read package.json in linked workspace",
|
|
22
|
+
error
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
if (!pkgJson.workspaces) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Invalid workspace link, directory is not a workspace: ${dir}`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
return dir;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
exports.resolveLinkedWorkspace = resolveLinkedWorkspace;
|
|
34
|
+
//# sourceMappingURL=resolveLinkedWorkspace.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveLinkedWorkspace.cjs.js","sources":["../../../../src/commands/package/start/resolveLinkedWorkspace.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ForwardedError } from '@backstage/errors';\nimport fs from 'fs-extra';\nimport { resolve as resolvePath } from 'node:path/posix';\n\nexport async function resolveLinkedWorkspace(\n linkPath: string | undefined,\n): Promise<string | undefined> {\n if (!linkPath) {\n return undefined;\n }\n const dir = resolvePath(linkPath);\n if (!fs.pathExistsSync(dir)) {\n throw new Error(`Invalid workspace link, directory does not exist: ${dir}`);\n }\n const pkgJson = await fs\n .readJson(resolvePath(dir, 'package.json'))\n .catch(error => {\n throw new ForwardedError(\n 'Failed to read package.json in linked workspace',\n error,\n );\n });\n\n if (!pkgJson.workspaces) {\n throw new Error(\n `Invalid workspace link, directory is not a workspace: ${dir}`,\n );\n }\n\n return dir;\n}\n"],"names":["resolvePath","fs","ForwardedError"],"mappings":";;;;;;;;;;AAoBA,eAAsB,uBACpB,QAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAMA,cAAY,QAAQ,CAAA;AAChC,EAAA,IAAI,CAACC,mBAAA,CAAG,cAAA,CAAe,GAAG,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kDAAA,EAAqD,GAAG,CAAA,CAAE,CAAA;AAAA,EAC5E;AACA,EAAA,MAAM,OAAA,GAAU,MAAMA,mBAAA,CACnB,QAAA,CAASD,aAAA,CAAY,KAAK,cAAc,CAAC,CAAA,CACzC,KAAA,CAAM,CAAA,KAAA,KAAS;AACd,IAAA,MAAM,IAAIE,qBAAA;AAAA,MACR,iDAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,yDAAyD,GAAG,CAAA;AAAA,KAC9D;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('fs-extra');
|
|
4
|
+
var node_path = require('node:path');
|
|
5
|
+
var cliCommon = require('@backstage/cli-common');
|
|
6
|
+
var runBackend = require('../../../lib/runner/runBackend.cjs.js');
|
|
7
|
+
|
|
8
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
11
|
+
|
|
12
|
+
async function startBackend(options) {
|
|
13
|
+
const waitForExit = await runBackend.runBackend({
|
|
14
|
+
targetDir: options.targetDir,
|
|
15
|
+
entry: "src/index",
|
|
16
|
+
inspectEnabled: options.inspectEnabled,
|
|
17
|
+
inspectBrkEnabled: options.inspectBrkEnabled,
|
|
18
|
+
linkedWorkspace: options.linkedWorkspace,
|
|
19
|
+
require: options.require
|
|
20
|
+
});
|
|
21
|
+
await waitForExit();
|
|
22
|
+
}
|
|
23
|
+
async function startBackendPlugin(options) {
|
|
24
|
+
const hasDevIndexEntry = await fs__default.default.pathExists(
|
|
25
|
+
node_path.resolve(options.targetDir ?? cliCommon.targetPaths.dir, "dev/index.ts")
|
|
26
|
+
);
|
|
27
|
+
if (!hasDevIndexEntry) {
|
|
28
|
+
console.warn(
|
|
29
|
+
`The 'dev' directory is missing. Please create a proper dev/index.ts in order to start the plugin.`
|
|
30
|
+
);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const waitForExit = await runBackend.runBackend({
|
|
34
|
+
targetDir: options.targetDir,
|
|
35
|
+
entry: "dev/index",
|
|
36
|
+
inspectEnabled: options.inspectEnabled,
|
|
37
|
+
inspectBrkEnabled: options.inspectBrkEnabled,
|
|
38
|
+
require: options.require,
|
|
39
|
+
linkedWorkspace: options.linkedWorkspace
|
|
40
|
+
});
|
|
41
|
+
await waitForExit();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
exports.startBackend = startBackend;
|
|
45
|
+
exports.startBackendPlugin = startBackendPlugin;
|
|
46
|
+
//# sourceMappingURL=startBackend.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startBackend.cjs.js","sources":["../../../../src/commands/package/start/startBackend.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from 'fs-extra';\nimport { resolve as resolvePath } from 'node:path';\nimport { targetPaths } from '@backstage/cli-common';\n\nimport { runBackend } from '../../../lib/runner';\n\ninterface StartBackendOptions {\n targetDir: string;\n checksEnabled: boolean;\n inspectEnabled?: boolean | string;\n inspectBrkEnabled?: boolean | string;\n linkedWorkspace?: string;\n require?: string;\n}\n\nexport async function startBackend(options: StartBackendOptions) {\n const waitForExit = await runBackend({\n targetDir: options.targetDir,\n entry: 'src/index',\n inspectEnabled: options.inspectEnabled,\n inspectBrkEnabled: options.inspectBrkEnabled,\n linkedWorkspace: options.linkedWorkspace,\n require: options.require,\n });\n\n await waitForExit();\n}\n\nexport async function startBackendPlugin(options: StartBackendOptions) {\n const hasDevIndexEntry = await fs.pathExists(\n resolvePath(options.targetDir ?? targetPaths.dir, 'dev/index.ts'),\n );\n if (!hasDevIndexEntry) {\n console.warn(\n `The 'dev' directory is missing. Please create a proper dev/index.ts in order to start the plugin.`,\n );\n return;\n }\n\n const waitForExit = await runBackend({\n targetDir: options.targetDir,\n entry: 'dev/index',\n inspectEnabled: options.inspectEnabled,\n inspectBrkEnabled: options.inspectBrkEnabled,\n require: options.require,\n linkedWorkspace: options.linkedWorkspace,\n });\n\n await waitForExit();\n}\n"],"names":["runBackend","fs","resolvePath","targetPaths"],"mappings":";;;;;;;;;;;AA+BA,eAAsB,aAAa,OAAA,EAA8B;AAC/D,EAAA,MAAM,WAAA,GAAc,MAAMA,qBAAA,CAAW;AAAA,IACnC,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,KAAA,EAAO,WAAA;AAAA,IACP,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,IAC3B,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,SAAS,OAAA,CAAQ;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,WAAA,EAAY;AACpB;AAEA,eAAsB,mBAAmB,OAAA,EAA8B;AACrE,EAAA,MAAM,gBAAA,GAAmB,MAAMC,mBAAA,CAAG,UAAA;AAAA,IAChCC,iBAAA,CAAY,OAAA,CAAQ,SAAA,IAAaC,qBAAA,CAAY,KAAK,cAAc;AAAA,GAClE;AACA,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,iGAAA;AAAA,KACF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,MAAMH,qBAAA,CAAW;AAAA,IACnC,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,KAAA,EAAO,WAAA;AAAA,IACP,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,IAC3B,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,iBAAiB,OAAA,CAAQ;AAAA,GAC1B,CAAA;AAED,EAAA,MAAM,WAAA,EAAY;AACpB;;;;;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('fs-extra');
|
|
4
|
+
var node_path = require('node:path');
|
|
5
|
+
require('yn');
|
|
6
|
+
require('@rspack/core');
|
|
7
|
+
require('react-dev-utils/FileSizeReporter');
|
|
8
|
+
require('react-dev-utils/formatWebpackMessages');
|
|
9
|
+
require('eslint-rspack-plugin');
|
|
10
|
+
require('ts-checker-rspack-plugin');
|
|
11
|
+
require('html-webpack-plugin');
|
|
12
|
+
require('react-dev-utils/ModuleScopePlugin');
|
|
13
|
+
require('@module-federation/enhanced/rspack');
|
|
14
|
+
require('lodash/pickBy');
|
|
15
|
+
var cliCommon = require('@backstage/cli-common');
|
|
16
|
+
var hasReactDomClient = require('../../../lib/bundler/hasReactDomClient.cjs.js');
|
|
17
|
+
require('@manypkg/get-packages');
|
|
18
|
+
require('chalk');
|
|
19
|
+
require('../../../lib/bundler/packageDetection.cjs.js');
|
|
20
|
+
var moduleFederation = require('../../../lib/bundler/moduleFederation.cjs.js');
|
|
21
|
+
var server = require('../../../lib/bundler/server.cjs.js');
|
|
22
|
+
|
|
23
|
+
async function startFrontend(options) {
|
|
24
|
+
const packageJson = await fs.readJson(
|
|
25
|
+
node_path.resolve(options.targetDir ?? cliCommon.targetPaths.dir, "package.json")
|
|
26
|
+
);
|
|
27
|
+
if (!hasReactDomClient.hasReactDomClient()) {
|
|
28
|
+
console.warn(
|
|
29
|
+
"React 17 is now deprecated! Please follow the Backstage migration guide to update to React 18: https://backstage.io/docs/tutorials/react18-migration/"
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
const waitForExit = await server.serveBundle({
|
|
33
|
+
entry: options.entry,
|
|
34
|
+
targetDir: options.targetDir,
|
|
35
|
+
checksEnabled: options.checksEnabled,
|
|
36
|
+
configPaths: options.configPaths,
|
|
37
|
+
verifyVersions: options.verifyVersions,
|
|
38
|
+
skipOpenBrowser: options.skipOpenBrowser,
|
|
39
|
+
linkedWorkspace: options.linkedWorkspace,
|
|
40
|
+
moduleFederationRemote: options.isModuleFederationRemote ? await moduleFederation.getModuleFederationRemoteOptions(
|
|
41
|
+
packageJson,
|
|
42
|
+
node_path.resolve(cliCommon.targetPaths.dir)
|
|
43
|
+
) : void 0
|
|
44
|
+
});
|
|
45
|
+
await waitForExit();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
exports.startFrontend = startFrontend;
|
|
49
|
+
//# sourceMappingURL=startFrontend.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startFrontend.cjs.js","sources":["../../../../src/commands/package/start/startFrontend.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { readJson } from 'fs-extra';\nimport { resolve as resolvePath } from 'node:path';\nimport {\n getModuleFederationRemoteOptions,\n serveBundle,\n} from '../../../lib/bundler';\nimport { targetPaths } from '@backstage/cli-common';\n\nimport { BackstagePackageJson } from '@backstage/cli-node';\nimport { hasReactDomClient } from '../../../lib/bundler/hasReactDomClient';\n\ninterface StartAppOptions {\n verifyVersions?: boolean;\n entry: string;\n targetDir?: string;\n\n checksEnabled: boolean;\n configPaths: string[];\n skipOpenBrowser?: boolean;\n isModuleFederationRemote?: boolean;\n linkedWorkspace?: string;\n}\n\nexport async function startFrontend(options: StartAppOptions) {\n const packageJson = (await readJson(\n resolvePath(options.targetDir ?? targetPaths.dir, 'package.json'),\n )) as BackstagePackageJson;\n\n if (!hasReactDomClient()) {\n console.warn(\n 'React 17 is now deprecated! Please follow the Backstage migration guide to update to React 18: https://backstage.io/docs/tutorials/react18-migration/',\n );\n }\n\n const waitForExit = await serveBundle({\n entry: options.entry,\n targetDir: options.targetDir,\n checksEnabled: options.checksEnabled,\n configPaths: options.configPaths,\n verifyVersions: options.verifyVersions,\n skipOpenBrowser: options.skipOpenBrowser,\n linkedWorkspace: options.linkedWorkspace,\n moduleFederationRemote: options.isModuleFederationRemote\n ? await getModuleFederationRemoteOptions(\n packageJson,\n resolvePath(targetPaths.dir),\n )\n : undefined,\n });\n\n await waitForExit();\n}\n"],"names":["readJson","resolvePath","targetPaths","hasReactDomClient","serveBundle","getModuleFederationRemoteOptions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuCA,eAAsB,cAAc,OAAA,EAA0B;AAC5D,EAAA,MAAM,cAAe,MAAMA,WAAA;AAAA,IACzBC,iBAAA,CAAY,OAAA,CAAQ,SAAA,IAAaC,qBAAA,CAAY,KAAK,cAAc;AAAA,GAClE;AAEA,EAAA,IAAI,CAACC,qCAAkB,EAAG;AACxB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,MAAMC,kBAAA,CAAY;AAAA,IACpC,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,sBAAA,EAAwB,OAAA,CAAQ,wBAAA,GAC5B,MAAMC,iDAAA;AAAA,MACJ,WAAA;AAAA,MACAJ,iBAAA,CAAYC,sBAAY,GAAG;AAAA,KAC7B,GACA;AAAA,GACL,CAAA;AAED,EAAA,MAAM,WAAA,EAAY;AACpB;;;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var startBackend = require('./startBackend.cjs.js');
|
|
4
|
+
var startFrontend = require('./startFrontend.cjs.js');
|
|
5
|
+
var node_path = require('node:path');
|
|
6
|
+
var glob = require('glob');
|
|
7
|
+
|
|
8
|
+
function resolveEntryPath(entrypoint = "dev", targetDir) {
|
|
9
|
+
const { dir: entryDir, name: entryName } = node_path.parse(entrypoint);
|
|
10
|
+
const [entryFile] = glob.glob.sync(`${node_path.resolve(targetDir, entryDir, entryName)}.*`);
|
|
11
|
+
if (entryFile) {
|
|
12
|
+
return node_path.join(entryDir, entryName);
|
|
13
|
+
}
|
|
14
|
+
return node_path.join(entryDir, entryName, "index");
|
|
15
|
+
}
|
|
16
|
+
async function startPackage(options) {
|
|
17
|
+
switch (options.role) {
|
|
18
|
+
case "backend":
|
|
19
|
+
return startBackend.startBackend(options);
|
|
20
|
+
case "backend-plugin":
|
|
21
|
+
case "backend-plugin-module":
|
|
22
|
+
case "node-library":
|
|
23
|
+
return startBackend.startBackendPlugin(options);
|
|
24
|
+
case "frontend":
|
|
25
|
+
return startFrontend.startFrontend({
|
|
26
|
+
...options,
|
|
27
|
+
entry: "src/index",
|
|
28
|
+
verifyVersions: true
|
|
29
|
+
});
|
|
30
|
+
case "web-library":
|
|
31
|
+
case "frontend-plugin":
|
|
32
|
+
case "frontend-plugin-module":
|
|
33
|
+
return startFrontend.startFrontend({
|
|
34
|
+
...options,
|
|
35
|
+
entry: resolveEntryPath(options.entrypoint, options.targetDir)
|
|
36
|
+
});
|
|
37
|
+
case "frontend-dynamic-container":
|
|
38
|
+
return startFrontend.startFrontend({
|
|
39
|
+
entry: "src/index",
|
|
40
|
+
...options,
|
|
41
|
+
skipOpenBrowser: true,
|
|
42
|
+
isModuleFederationRemote: true
|
|
43
|
+
});
|
|
44
|
+
default:
|
|
45
|
+
throw new Error(
|
|
46
|
+
`Start command is not supported for package role '${options.role}'`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
exports.resolveEntryPath = resolveEntryPath;
|
|
52
|
+
exports.startPackage = startPackage;
|
|
53
|
+
//# sourceMappingURL=startPackage.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startPackage.cjs.js","sources":["../../../../src/commands/package/start/startPackage.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PackageRole } from '@backstage/cli-node';\nimport { startBackend, startBackendPlugin } from './startBackend';\nimport { startFrontend } from './startFrontend';\nimport { parse, resolve, join } from 'node:path';\nimport { glob } from 'glob';\n\nexport function resolveEntryPath(\n entrypoint: string = 'dev',\n targetDir: string,\n): string {\n const { dir: entryDir, name: entryName } = parse(entrypoint);\n const [entryFile] = glob.sync(`${resolve(targetDir, entryDir, entryName)}.*`);\n if (entryFile) {\n return join(entryDir, entryName);\n }\n return join(entryDir, entryName, 'index');\n}\n\nexport async function startPackage(options: {\n role: PackageRole;\n entrypoint?: string;\n targetDir: string;\n configPaths: string[];\n checksEnabled: boolean;\n inspectEnabled?: boolean | string;\n inspectBrkEnabled?: boolean | string;\n linkedWorkspace?: string;\n require?: string;\n}): Promise<void> {\n switch (options.role) {\n case 'backend':\n return startBackend(options);\n case 'backend-plugin':\n case 'backend-plugin-module':\n case 'node-library':\n return startBackendPlugin(options);\n case 'frontend':\n return startFrontend({\n ...options,\n entry: 'src/index',\n verifyVersions: true,\n });\n case 'web-library':\n case 'frontend-plugin':\n case 'frontend-plugin-module':\n return startFrontend({\n ...options,\n entry: resolveEntryPath(options.entrypoint, options.targetDir),\n });\n case 'frontend-dynamic-container' as PackageRole: // experimental\n return startFrontend({\n entry: 'src/index',\n ...options,\n skipOpenBrowser: true,\n isModuleFederationRemote: true,\n });\n default:\n throw new Error(\n `Start command is not supported for package role '${options.role}'`,\n );\n }\n}\n"],"names":["parse","glob","resolve","join","startBackend","startBackendPlugin","startFrontend"],"mappings":";;;;;;;AAsBO,SAAS,gBAAA,CACd,UAAA,GAAqB,KAAA,EACrB,SAAA,EACQ;AACR,EAAA,MAAM,EAAE,GAAA,EAAK,QAAA,EAAU,MAAM,SAAA,EAAU,GAAIA,gBAAM,UAAU,CAAA;AAC3D,EAAA,MAAM,CAAC,SAAS,CAAA,GAAIC,SAAA,CAAK,IAAA,CAAK,CAAA,EAAGC,iBAAA,CAAQ,SAAA,EAAW,QAAA,EAAU,SAAS,CAAC,CAAA,EAAA,CAAI,CAAA;AAC5E,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAOC,cAAA,CAAK,UAAU,SAAS,CAAA;AAAA,EACjC;AACA,EAAA,OAAOA,cAAA,CAAK,QAAA,EAAU,SAAA,EAAW,OAAO,CAAA;AAC1C;AAEA,eAAsB,aAAa,OAAA,EAUjB;AAChB,EAAA,QAAQ,QAAQ,IAAA;AAAM,IACpB,KAAK,SAAA;AACH,MAAA,OAAOC,0BAAa,OAAO,CAAA;AAAA,IAC7B,KAAK,gBAAA;AAAA,IACL,KAAK,uBAAA;AAAA,IACL,KAAK,cAAA;AACH,MAAA,OAAOC,gCAAmB,OAAO,CAAA;AAAA,IACnC,KAAK,UAAA;AACH,MAAA,OAAOC,2BAAA,CAAc;AAAA,QACnB,GAAG,OAAA;AAAA,QACH,KAAA,EAAO,WAAA;AAAA,QACP,cAAA,EAAgB;AAAA,OACjB,CAAA;AAAA,IACH,KAAK,aAAA;AAAA,IACL,KAAK,iBAAA;AAAA,IACL,KAAK,wBAAA;AACH,MAAA,OAAOA,2BAAA,CAAc;AAAA,QACnB,GAAG,OAAA;AAAA,QACH,KAAA,EAAO,gBAAA,CAAiB,OAAA,CAAQ,UAAA,EAAY,QAAQ,SAAS;AAAA,OAC9D,CAAA;AAAA,IACH,KAAK,4BAAA;AACH,MAAA,OAAOA,2BAAA,CAAc;AAAA,QACnB,KAAA,EAAO,WAAA;AAAA,QACP,GAAG,OAAA;AAAA,QACH,eAAA,EAAiB,IAAA;AAAA,QACjB,wBAAA,EAA0B;AAAA,OAC3B,CAAA;AAAA,IACH;AACE,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,iDAAA,EAAoD,QAAQ,IAAI,CAAA,CAAA;AAAA,OAClE;AAAA;AAEN;;;;;"}
|