@backstage/cli-module-build 0.1.4-next.0 → 0.1.5-next.0

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/bin/backstage-cli-module-build +2 -2
  3. package/dist/commands/buildWorkspace.cjs.js +1 -1
  4. package/dist/commands/buildWorkspace.cjs.js.map +1 -1
  5. package/dist/commands/package/build/command.cjs.js +1 -1
  6. package/dist/commands/package/build/command.cjs.js.map +1 -1
  7. package/dist/commands/package/bundle/command.cjs.js +1 -1
  8. package/dist/commands/package/bundle/command.cjs.js.map +1 -1
  9. package/dist/commands/package/clean.cjs.js +1 -1
  10. package/dist/commands/package/clean.cjs.js.map +1 -1
  11. package/dist/commands/package/postpack.cjs.js +1 -1
  12. package/dist/commands/package/postpack.cjs.js.map +1 -1
  13. package/dist/commands/package/prepack.cjs.js +1 -1
  14. package/dist/commands/package/prepack.cjs.js.map +1 -1
  15. package/dist/commands/package/start/command.cjs.js +1 -1
  16. package/dist/commands/package/start/command.cjs.js.map +1 -1
  17. package/dist/commands/repo/build.cjs.js +1 -1
  18. package/dist/commands/repo/build.cjs.js.map +1 -1
  19. package/dist/commands/repo/clean.cjs.js +1 -1
  20. package/dist/commands/repo/clean.cjs.js.map +1 -1
  21. package/dist/commands/repo/start.cjs.js +1 -1
  22. package/dist/commands/repo/start.cjs.js.map +1 -1
  23. package/dist/lib/packager/createDistWorkspace.cjs.js +2 -0
  24. package/dist/lib/packager/createDistWorkspace.cjs.js.map +1 -1
  25. package/dist/lib/packager/productionPack.cjs.js +73 -0
  26. package/dist/lib/packager/productionPack.cjs.js.map +1 -1
  27. package/dist/lib/runner/startEmbeddedDb.cjs.js +15 -10
  28. package/dist/lib/runner/startEmbeddedDb.cjs.js.map +1 -1
  29. package/dist/package.json.cjs.js +4 -3
  30. package/dist/package.json.cjs.js.map +1 -1
  31. package/package.json +8 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @backstage/cli-module-build
2
2
 
3
+ ## 0.1.5-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 87af6ce: Package preparation now converts TypeScript configuration schemas to separate JSON files. Backend builds compile schemas together before assembling the distribution workspace, while package publishing compiles each schema independently.
8
+ - da820d1: Added support for passing custom flags to the embedded postgres processes via `backend.database.connection.flags.postgres` and `backend.database.connection.flags.initdb` configuration properties.
9
+ - Updated dependencies
10
+ - @backstage/config-loader@1.11.0-next.0
11
+
12
+ ## 0.1.4
13
+
14
+ ### Patch Changes
15
+
16
+ - 696c78c: The `--help` output for commands now shows a generated usage line that lists the available flags and any positional arguments the command accepts.
17
+ - 2e6ffe6: Updated the standalone CLI executable to use the new CLI module runner.
18
+ - a1971ea: Suppress false-positive `@protobufjs/inquire` "Critical dependency" warning in the bundler. Since `protobufjs` 7.5.9, the dynamic require path in inquire is no longer exercised, but webpack/rspack still flags it during static analysis.
19
+ - 8007b58: Updated dependency `embedded-postgres` to `18.3.0-beta.17`.
20
+ - Updated dependencies
21
+ - @backstage/cli-node@0.3.3
22
+ - @backstage/config-loader@1.10.12
23
+
3
24
  ## 0.1.4-next.0
4
25
 
5
26
  ### Patch Changes
@@ -26,7 +26,7 @@ if (isLocal) {
26
26
  require('@backstage/cli-node/config/nodeTransform.cjs');
27
27
  }
28
28
 
29
- const { runCliModule } = require('@backstage/cli-node');
29
+ const { runCli } = require('@backstage/cli-node');
30
30
  const cliModule = require(isLocal ? '../src/index' : '..').default;
31
31
  const pkg = require('../package.json');
32
- runCliModule({ module: cliModule, name: pkg.name, version: pkg.version });
32
+ runCli({ modules: [cliModule], name: pkg.name, version: pkg.version });
@@ -25,7 +25,7 @@ var buildWorkspace = async ({ args, info }) => {
25
25
  _: positionals
26
26
  } = cleye.cli(
27
27
  {
28
- help: { ...info, usage: `${info.usage} <workspace-dir> [packages...]` },
28
+ name: info.usage,
29
29
  booleanFlagNegation: true,
30
30
  parameters: ["<workspace-dir>", "[packages...]"],
31
31
  flags: {
@@ -1 +1 @@
1
- {"version":3,"file":"buildWorkspace.cjs.js","sources":["../../src/commands/buildWorkspace.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 { cli } from 'cleye';\nimport { createDistWorkspace } from '../lib/packager';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n // Normalize legacy --alwaysYarnPack alias (a genuinely different name, not\n // just a casing variant — type-flag handles camelCase/kebab-case natively)\n const normalizedArgs = args.map(a => {\n if (a === '--alwaysYarnPack') {\n return '--always-pack';\n }\n if (a.startsWith('--alwaysYarnPack=')) {\n return `--always-pack${a.substring('--alwaysYarnPack'.length)}`;\n }\n return a;\n });\n\n const {\n flags: { alwaysPack },\n _: positionals,\n } = cli(\n {\n help: { ...info, usage: `${info.usage} <workspace-dir> [packages...]` },\n booleanFlagNegation: true,\n parameters: ['<workspace-dir>', '[packages...]'],\n flags: {\n alwaysPack: {\n type: Boolean,\n description:\n 'Force workspace output to be a result of running `yarn pack` on each package (warning: very slow)',\n },\n },\n },\n undefined,\n normalizedArgs,\n );\n\n const [dir, ...packages] = positionals;\n\n if (!(await fs.pathExists(dir))) {\n throw new Error(`Target workspace directory doesn't exist, '${dir}'`);\n }\n\n await createDistWorkspace(packages, {\n targetDir: dir,\n alwaysPack,\n enableFeatureDetection: true,\n });\n};\n"],"names":["cli","fs","createDistWorkspace"],"mappings":";;;;;;;;;;;;AAqBA,qBAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAG1D,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK;AACnC,IAAA,IAAI,MAAM,kBAAA,EAAoB;AAC5B,MAAA,OAAO,eAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAA,CAAE,UAAA,CAAW,mBAAmB,CAAA,EAAG;AACrC,MAAA,OAAO,CAAA,aAAA,EAAgB,CAAA,CAAE,SAAA,CAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,EAAE,UAAA,EAAW;AAAA,IACpB,CAAA,EAAG;AAAA,GACL,GAAIA,SAAA;AAAA,IACF;AAAA,MACE,IAAA,EAAM,EAAE,GAAG,IAAA,EAAM,OAAO,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,8BAAA,CAAA,EAAiC;AAAA,MACtE,mBAAA,EAAqB,IAAA;AAAA,MACrB,UAAA,EAAY,CAAC,iBAAA,EAAmB,eAAe,CAAA;AAAA,MAC/C,KAAA,EAAO;AAAA,QACL,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EACE;AAAA;AACJ;AACF,KACF;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,QAAQ,CAAA,GAAI,WAAA;AAE3B,EAAA,IAAI,CAAE,MAAMC,mBAAA,CAAG,UAAA,CAAW,GAAG,CAAA,EAAI;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2CAAA,EAA8C,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AAEA,EAAA,MAAMC,wCAAoB,QAAA,EAAU;AAAA,IAClC,SAAA,EAAW,GAAA;AAAA,IACX,UAAA;AAAA,IACA,sBAAA,EAAwB;AAAA,GACzB,CAAA;AACH,CAAA;;;;"}
1
+ {"version":3,"file":"buildWorkspace.cjs.js","sources":["../../src/commands/buildWorkspace.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 { cli } from 'cleye';\nimport { createDistWorkspace } from '../lib/packager';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n // Normalize legacy --alwaysYarnPack alias (a genuinely different name, not\n // just a casing variant — type-flag handles camelCase/kebab-case natively)\n const normalizedArgs = args.map(a => {\n if (a === '--alwaysYarnPack') {\n return '--always-pack';\n }\n if (a.startsWith('--alwaysYarnPack=')) {\n return `--always-pack${a.substring('--alwaysYarnPack'.length)}`;\n }\n return a;\n });\n\n const {\n flags: { alwaysPack },\n _: positionals,\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n parameters: ['<workspace-dir>', '[packages...]'],\n flags: {\n alwaysPack: {\n type: Boolean,\n description:\n 'Force workspace output to be a result of running `yarn pack` on each package (warning: very slow)',\n },\n },\n },\n undefined,\n normalizedArgs,\n );\n\n const [dir, ...packages] = positionals;\n\n if (!(await fs.pathExists(dir))) {\n throw new Error(`Target workspace directory doesn't exist, '${dir}'`);\n }\n\n await createDistWorkspace(packages, {\n targetDir: dir,\n alwaysPack,\n enableFeatureDetection: true,\n });\n};\n"],"names":["cli","fs","createDistWorkspace"],"mappings":";;;;;;;;;;;;AAqBA,qBAAe,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,KAAyB;AAG1D,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK;AACnC,IAAA,IAAI,MAAM,kBAAA,EAAoB;AAC5B,MAAA,OAAO,eAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAA,CAAE,UAAA,CAAW,mBAAmB,CAAA,EAAG;AACrC,MAAA,OAAO,CAAA,aAAA,EAAgB,CAAA,CAAE,SAAA,CAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,EAAE,UAAA,EAAW;AAAA,IACpB,CAAA,EAAG;AAAA,GACL,GAAIA,SAAA;AAAA,IACF;AAAA,MACE,MAAM,IAAA,CAAK,KAAA;AAAA,MACX,mBAAA,EAAqB,IAAA;AAAA,MACrB,UAAA,EAAY,CAAC,iBAAA,EAAmB,eAAe,CAAA;AAAA,MAC/C,KAAA,EAAO;AAAA,QACL,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,OAAA;AAAA,UACN,WAAA,EACE;AAAA;AACJ;AACF,KACF;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,QAAQ,CAAA,GAAI,WAAA;AAE3B,EAAA,IAAI,CAAE,MAAMC,mBAAA,CAAG,UAAA,CAAW,GAAG,CAAA,EAAI;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2CAAA,EAA8C,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AAEA,EAAA,MAAMC,wCAAoB,QAAA,EAAU;AAAA,IAClC,SAAA,EAAW,GAAA;AAAA,IACX,UAAA;AAAA,IACA,sBAAA,EAAwB;AAAA,GACzB,CAAA;AACH,CAAA;;;;"}
@@ -31,7 +31,7 @@ var command = async ({ args, info }) => {
31
31
  }
32
32
  } = cleye.cli(
33
33
  {
34
- help: info,
34
+ name: info.usage,
35
35
  booleanFlagNegation: true,
36
36
  flags: {
37
37
  role: {
@@ -1 +1 @@
1
- {"version":3,"file":"command.cjs.js","sources":["../../../../src/commands/package/build/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 fs from 'fs-extra';\nimport { buildPackage, Output } from '../../../lib/builder';\nimport { findRoleFromCommand } from '../../../lib/role';\nimport {\n BackstagePackageJson,\n PackageGraph,\n PackageRoles,\n} from '@backstage/cli-node';\nimport { targetPaths } from '@backstage/cli-common';\n\nimport { buildFrontend } from '../../../lib/buildFrontend';\nimport { buildBackend } from '../../../lib/buildBackend';\nimport { isValidUrl } from '../../../lib/urls';\nimport chalk from 'chalk';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: {\n role,\n minify,\n skipBuildDependencies,\n stats,\n config,\n moduleFederation,\n },\n } = cli(\n {\n help: info,\n booleanFlagNegation: true,\n flags: {\n role: {\n type: String,\n description: 'Run the command with an explicit package role',\n },\n minify: {\n type: Boolean,\n description:\n 'Minify the generated code. Does not apply to app package (app is minified by default).',\n },\n skipBuildDependencies: {\n type: Boolean,\n description:\n 'Skip the automatic building of local dependencies. Applies to backend packages only.',\n },\n stats: {\n type: Boolean,\n description:\n 'If bundle stats are available, write them to the output directory. Applies to app packages only.',\n },\n config: {\n type: [String],\n description:\n 'Config files to load instead of app-config.yaml. Applies to app packages only.',\n default: [],\n },\n moduleFederation: {\n type: Boolean,\n description:\n 'Build a package as a module federation remote. Applies to frontend plugin packages only.',\n },\n },\n },\n undefined,\n args,\n );\n\n const webpack = process.env.LEGACY_WEBPACK_BUILD\n ? (require('webpack') as typeof import('webpack'))\n : undefined;\n\n const resolvedRole = await findRoleFromCommand({ role });\n\n if (resolvedRole === 'frontend' || resolvedRole === 'backend') {\n const configPaths = config.map(arg => {\n if (isValidUrl(arg)) {\n return arg;\n }\n return targetPaths.resolve(arg);\n });\n\n if (resolvedRole === 'frontend') {\n return buildFrontend({\n targetDir: targetPaths.dir,\n configPaths,\n writeStats: Boolean(stats),\n webpack,\n });\n }\n return buildBackend({\n targetDir: targetPaths.dir,\n configPaths,\n skipBuildDependencies: Boolean(skipBuildDependencies),\n minify: Boolean(minify),\n });\n }\n\n let isModuleFederationRemote: boolean | undefined = undefined;\n if ((resolvedRole as string) === 'frontend-dynamic-container') {\n console.log(\n chalk.yellow(\n `⚠️ WARNING: The 'frontend-dynamic-container' package role is experimental and will receive immediate breaking changes in the future.`,\n ),\n );\n isModuleFederationRemote = true;\n }\n if (moduleFederation) {\n isModuleFederationRemote = true;\n }\n\n if (isModuleFederationRemote) {\n console.log('Building package as a module federation remote');\n return buildFrontend({\n targetDir: targetPaths.dir,\n configPaths: [],\n writeStats: Boolean(stats),\n isModuleFederationRemote,\n webpack,\n });\n }\n\n const roleInfo = PackageRoles.getRoleInfo(resolvedRole);\n\n const outputs = new Set<Output>();\n\n if (roleInfo.output.includes('cjs')) {\n outputs.add(Output.cjs);\n }\n if (roleInfo.output.includes('esm')) {\n outputs.add(Output.esm);\n }\n if (roleInfo.output.includes('types')) {\n outputs.add(Output.types);\n }\n\n const packageJson = (await fs.readJson(\n targetPaths.resolve('package.json'),\n )) as BackstagePackageJson;\n\n return buildPackage({\n outputs,\n packageJson,\n minify: Boolean(minify),\n workspacePackages: await PackageGraph.listTargetPackages(),\n });\n};\n"],"names":["role","cli","findRoleFromCommand","isValidUrl","targetPaths","buildFrontend","buildBackend","chalk","PackageRoles","Output","fs","buildPackage","PackageGraph"],"mappings":"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"}
1
+ {"version":3,"file":"command.cjs.js","sources":["../../../../src/commands/package/build/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 fs from 'fs-extra';\nimport { buildPackage, Output } from '../../../lib/builder';\nimport { findRoleFromCommand } from '../../../lib/role';\nimport {\n BackstagePackageJson,\n PackageGraph,\n PackageRoles,\n} from '@backstage/cli-node';\nimport { targetPaths } from '@backstage/cli-common';\n\nimport { buildFrontend } from '../../../lib/buildFrontend';\nimport { buildBackend } from '../../../lib/buildBackend';\nimport { isValidUrl } from '../../../lib/urls';\nimport chalk from 'chalk';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: {\n role,\n minify,\n skipBuildDependencies,\n stats,\n config,\n moduleFederation,\n },\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n flags: {\n role: {\n type: String,\n description: 'Run the command with an explicit package role',\n },\n minify: {\n type: Boolean,\n description:\n 'Minify the generated code. Does not apply to app package (app is minified by default).',\n },\n skipBuildDependencies: {\n type: Boolean,\n description:\n 'Skip the automatic building of local dependencies. Applies to backend packages only.',\n },\n stats: {\n type: Boolean,\n description:\n 'If bundle stats are available, write them to the output directory. Applies to app packages only.',\n },\n config: {\n type: [String],\n description:\n 'Config files to load instead of app-config.yaml. Applies to app packages only.',\n default: [],\n },\n moduleFederation: {\n type: Boolean,\n description:\n 'Build a package as a module federation remote. Applies to frontend plugin packages only.',\n },\n },\n },\n undefined,\n args,\n );\n\n const webpack = process.env.LEGACY_WEBPACK_BUILD\n ? (require('webpack') as typeof import('webpack'))\n : undefined;\n\n const resolvedRole = await findRoleFromCommand({ role });\n\n if (resolvedRole === 'frontend' || resolvedRole === 'backend') {\n const configPaths = config.map(arg => {\n if (isValidUrl(arg)) {\n return arg;\n }\n return targetPaths.resolve(arg);\n });\n\n if (resolvedRole === 'frontend') {\n return buildFrontend({\n targetDir: targetPaths.dir,\n configPaths,\n writeStats: Boolean(stats),\n webpack,\n });\n }\n return buildBackend({\n targetDir: targetPaths.dir,\n configPaths,\n skipBuildDependencies: Boolean(skipBuildDependencies),\n minify: Boolean(minify),\n });\n }\n\n let isModuleFederationRemote: boolean | undefined = undefined;\n if ((resolvedRole as string) === 'frontend-dynamic-container') {\n console.log(\n chalk.yellow(\n `⚠️ WARNING: The 'frontend-dynamic-container' package role is experimental and will receive immediate breaking changes in the future.`,\n ),\n );\n isModuleFederationRemote = true;\n }\n if (moduleFederation) {\n isModuleFederationRemote = true;\n }\n\n if (isModuleFederationRemote) {\n console.log('Building package as a module federation remote');\n return buildFrontend({\n targetDir: targetPaths.dir,\n configPaths: [],\n writeStats: Boolean(stats),\n isModuleFederationRemote,\n webpack,\n });\n }\n\n const roleInfo = PackageRoles.getRoleInfo(resolvedRole);\n\n const outputs = new Set<Output>();\n\n if (roleInfo.output.includes('cjs')) {\n outputs.add(Output.cjs);\n }\n if (roleInfo.output.includes('esm')) {\n outputs.add(Output.esm);\n }\n if (roleInfo.output.includes('types')) {\n outputs.add(Output.types);\n }\n\n const packageJson = (await fs.readJson(\n targetPaths.resolve('package.json'),\n )) as BackstagePackageJson;\n\n return buildPackage({\n outputs,\n packageJson,\n minify: Boolean(minify),\n workspacePackages: await PackageGraph.listTargetPackages(),\n });\n};\n"],"names":["role","cli","findRoleFromCommand","isValidUrl","targetPaths","buildFrontend","buildBackend","chalk","PackageRoles","Output","fs","buildPackage","PackageGraph"],"mappings":"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"}
@@ -638,7 +638,7 @@ var command = async ({ args, info }) => {
638
638
  }
639
639
  } = cleye.cli(
640
640
  {
641
- help: info,
641
+ name: info.usage,
642
642
  flags: {
643
643
  outputDestination: {
644
644
  type: String,
@@ -1 +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":"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"}
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 name: info.usage,\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":"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"}
@@ -11,7 +11,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
12
12
 
13
13
  var clean = async ({ args, info }) => {
14
- cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
14
+ cleye.cli({ name: info.usage, booleanFlagNegation: true }, void 0, args);
15
15
  await fs__default.default.remove(cliCommon.targetPaths.resolve("dist"));
16
16
  await fs__default.default.remove(cliCommon.targetPaths.resolve("dist-types"));
17
17
  await fs__default.default.remove(cliCommon.targetPaths.resolve("coverage"));
@@ -1 +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;;;;"}
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({ name: info.usage, 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,MAAM,IAAA,CAAK,KAAA,EAAO,qBAAqB,IAAA,EAAK,EAAG,QAAW,IAAI,CAAA;AACpE,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;;;;"}
@@ -7,7 +7,7 @@ var cliCommon = require('@backstage/cli-common');
7
7
  var productionPack = require('../../lib/packager/productionPack.cjs.js');
8
8
 
9
9
  var postpack = async ({ args, info }) => {
10
- cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
10
+ cleye.cli({ name: info.usage, booleanFlagNegation: true }, void 0, args);
11
11
  await productionPack.revertProductionPack(cliCommon.targetPaths.dir);
12
12
  };
13
13
 
@@ -1 +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;;;;"}
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({ name: info.usage, 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,MAAM,IAAA,CAAK,KAAA,EAAO,qBAAqB,IAAA,EAAK,EAAG,QAAW,IAAI,CAAA;AACpE,EAAA,MAAMC,mCAAA,CAAqBC,sBAAY,GAAG,CAAA;AAC5C,CAAA;;;;"}
@@ -14,7 +14,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
14
14
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
15
15
 
16
16
  var prepack = async ({ args, info }) => {
17
- cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
17
+ cleye.cli({ name: info.usage, booleanFlagNegation: true }, void 0, args);
18
18
  publishing.publishPreflightCheck({
19
19
  dir: cliCommon.targetPaths.dir,
20
20
  packageJson: await fs__default.default.readJson(cliCommon.targetPaths.resolve("package.json"))
@@ -1 +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;;;;"}
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({ name: info.usage, 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,MAAM,IAAA,CAAK,KAAA,EAAO,qBAAqB,IAAA,EAAK,EAAG,QAAW,IAAI,CAAA;AAEpE,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;;;;"}
@@ -22,7 +22,7 @@ var command = async ({ args, info }) => {
22
22
  }
23
23
  } = cleye.cli(
24
24
  {
25
- help: info,
25
+ name: info.usage,
26
26
  booleanFlagNegation: true,
27
27
  flags: {
28
28
  config: {
@@ -1 +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;;;;"}
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 name: info.usage,\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,MAAM,IAAA,CAAK,KAAA;AAAA,MACX,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;;;;"}
@@ -21,7 +21,7 @@ var build = async ({ args, info }) => {
21
21
  flags: { all, since, minify }
22
22
  } = cleye.cli(
23
23
  {
24
- help: info,
24
+ name: info.usage,
25
25
  booleanFlagNegation: true,
26
26
  flags: {
27
27
  all: {
@@ -1 +1 @@
1
- {"version":3,"file":"build.cjs.js","sources":["../../../src/commands/repo/build.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 chalk from 'chalk';\nimport { cli } from 'cleye';\nimport { relative as relativePath } from 'node:path';\nimport { buildPackages, getOutputsForRole } from '../../lib/builder';\nimport { targetPaths } from '@backstage/cli-common';\n\nimport {\n BackstagePackage,\n PackageGraph,\n PackageRoles,\n runConcurrentTasks,\n} from '@backstage/cli-node';\nimport { buildFrontend } from '../../lib/buildFrontend';\nimport { buildBackend } from '../../lib/buildBackend';\nimport { createScriptOptionsParser } from '../../lib/optionsParser';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: { all, since, minify },\n } = cli(\n {\n help: info,\n booleanFlagNegation: true,\n flags: {\n all: {\n type: Boolean,\n description:\n 'Build all packages, including bundled app and backend packages.',\n },\n since: {\n type: String,\n description:\n 'Only build packages and their dev dependents that changed since the specified ref',\n },\n minify: {\n type: Boolean,\n description:\n 'Minify the generated code. Does not apply to app package (app is minified by default).',\n },\n },\n },\n undefined,\n args,\n );\n\n let packages = await PackageGraph.listTargetPackages();\n\n const webpack = process.env.LEGACY_WEBPACK_BUILD\n ? (require('webpack') as typeof import('webpack'))\n : undefined;\n\n if (since) {\n const graph = PackageGraph.fromPackages(packages);\n const changedPackages = await graph.listChangedPackages({\n ref: since,\n analyzeLockfile: true,\n });\n const withDevDependents = graph.collectPackageNames(\n changedPackages.map(pkg => pkg.name),\n pkg => pkg.localDevDependents.keys(),\n );\n packages = Array.from(withDevDependents).map(name => graph.get(name)!);\n }\n\n const apps = new Array<BackstagePackage>();\n const backends = new Array<BackstagePackage>();\n\n const parseBuildScript = createScriptOptionsParser(['package', 'build'], {\n role: { type: 'string' },\n minify: { type: 'boolean' },\n 'skip-build-dependencies': { type: 'boolean' },\n stats: { type: 'boolean' },\n config: { type: 'string', multiple: true },\n 'module-federation': { type: 'boolean' },\n });\n\n const options = packages.flatMap(pkg => {\n const role =\n pkg.packageJson.backstage?.role ??\n PackageRoles.detectRoleFromPackage(pkg.packageJson);\n if (!role) {\n console.warn(`Ignored ${pkg.packageJson.name} because it has no role`);\n return [];\n }\n\n if (role === 'frontend') {\n apps.push(pkg);\n return [];\n } else if (role === 'backend') {\n backends.push(pkg);\n return [];\n }\n\n const outputs = getOutputsForRole(role);\n if (outputs.size === 0) {\n console.warn(`Ignored ${pkg.packageJson.name} because it has no output`);\n return [];\n }\n\n const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);\n if (!buildOptions) {\n console.warn(\n `Ignored ${pkg.packageJson.name} because it does not have a matching build script`,\n );\n return [];\n }\n\n return {\n targetDir: pkg.dir,\n packageJson: pkg.packageJson,\n outputs,\n logPrefix: `${chalk.cyan(relativePath(targetPaths.rootDir, pkg.dir))}: `,\n workspacePackages: packages,\n minify: minify ?? Boolean(buildOptions.minify),\n };\n });\n\n console.log('Building packages');\n await buildPackages(options);\n\n if (all) {\n console.log('Building apps');\n await runConcurrentTasks({\n items: apps,\n concurrencyFactor: 1 / 2,\n worker: async pkg => {\n const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);\n if (!buildOptions) {\n console.warn(\n `Ignored ${pkg.packageJson.name} because it does not have a matching build script`,\n );\n return;\n }\n const configPaths = buildOptions.config;\n await buildFrontend({\n targetDir: pkg.dir,\n configPaths: Array.isArray(configPaths)\n ? (configPaths as string[])\n : [],\n writeStats: Boolean(buildOptions.stats),\n webpack,\n });\n },\n });\n\n console.log('Building backends');\n await runConcurrentTasks({\n items: backends,\n concurrencyFactor: 1 / 2,\n worker: async pkg => {\n const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);\n if (!buildOptions) {\n console.warn(\n `Ignored ${pkg.packageJson.name} because it does not have a matching build script`,\n );\n return;\n }\n await buildBackend({\n targetDir: pkg.dir,\n skipBuildDependencies: true,\n minify: minify ?? Boolean(buildOptions.minify),\n });\n },\n });\n }\n};\n"],"names":["cli","PackageGraph","createScriptOptionsParser","PackageRoles","getOutputsForRole","chalk","relativePath","targetPaths","buildPackages","runConcurrentTasks","buildFrontend","buildBackend"],"mappings":"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"}
1
+ {"version":3,"file":"build.cjs.js","sources":["../../../src/commands/repo/build.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 chalk from 'chalk';\nimport { cli } from 'cleye';\nimport { relative as relativePath } from 'node:path';\nimport { buildPackages, getOutputsForRole } from '../../lib/builder';\nimport { targetPaths } from '@backstage/cli-common';\n\nimport {\n BackstagePackage,\n PackageGraph,\n PackageRoles,\n runConcurrentTasks,\n} from '@backstage/cli-node';\nimport { buildFrontend } from '../../lib/buildFrontend';\nimport { buildBackend } from '../../lib/buildBackend';\nimport { createScriptOptionsParser } from '../../lib/optionsParser';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: { all, since, minify },\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n flags: {\n all: {\n type: Boolean,\n description:\n 'Build all packages, including bundled app and backend packages.',\n },\n since: {\n type: String,\n description:\n 'Only build packages and their dev dependents that changed since the specified ref',\n },\n minify: {\n type: Boolean,\n description:\n 'Minify the generated code. Does not apply to app package (app is minified by default).',\n },\n },\n },\n undefined,\n args,\n );\n\n let packages = await PackageGraph.listTargetPackages();\n\n const webpack = process.env.LEGACY_WEBPACK_BUILD\n ? (require('webpack') as typeof import('webpack'))\n : undefined;\n\n if (since) {\n const graph = PackageGraph.fromPackages(packages);\n const changedPackages = await graph.listChangedPackages({\n ref: since,\n analyzeLockfile: true,\n });\n const withDevDependents = graph.collectPackageNames(\n changedPackages.map(pkg => pkg.name),\n pkg => pkg.localDevDependents.keys(),\n );\n packages = Array.from(withDevDependents).map(name => graph.get(name)!);\n }\n\n const apps = new Array<BackstagePackage>();\n const backends = new Array<BackstagePackage>();\n\n const parseBuildScript = createScriptOptionsParser(['package', 'build'], {\n role: { type: 'string' },\n minify: { type: 'boolean' },\n 'skip-build-dependencies': { type: 'boolean' },\n stats: { type: 'boolean' },\n config: { type: 'string', multiple: true },\n 'module-federation': { type: 'boolean' },\n });\n\n const options = packages.flatMap(pkg => {\n const role =\n pkg.packageJson.backstage?.role ??\n PackageRoles.detectRoleFromPackage(pkg.packageJson);\n if (!role) {\n console.warn(`Ignored ${pkg.packageJson.name} because it has no role`);\n return [];\n }\n\n if (role === 'frontend') {\n apps.push(pkg);\n return [];\n } else if (role === 'backend') {\n backends.push(pkg);\n return [];\n }\n\n const outputs = getOutputsForRole(role);\n if (outputs.size === 0) {\n console.warn(`Ignored ${pkg.packageJson.name} because it has no output`);\n return [];\n }\n\n const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);\n if (!buildOptions) {\n console.warn(\n `Ignored ${pkg.packageJson.name} because it does not have a matching build script`,\n );\n return [];\n }\n\n return {\n targetDir: pkg.dir,\n packageJson: pkg.packageJson,\n outputs,\n logPrefix: `${chalk.cyan(relativePath(targetPaths.rootDir, pkg.dir))}: `,\n workspacePackages: packages,\n minify: minify ?? Boolean(buildOptions.minify),\n };\n });\n\n console.log('Building packages');\n await buildPackages(options);\n\n if (all) {\n console.log('Building apps');\n await runConcurrentTasks({\n items: apps,\n concurrencyFactor: 1 / 2,\n worker: async pkg => {\n const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);\n if (!buildOptions) {\n console.warn(\n `Ignored ${pkg.packageJson.name} because it does not have a matching build script`,\n );\n return;\n }\n const configPaths = buildOptions.config;\n await buildFrontend({\n targetDir: pkg.dir,\n configPaths: Array.isArray(configPaths)\n ? (configPaths as string[])\n : [],\n writeStats: Boolean(buildOptions.stats),\n webpack,\n });\n },\n });\n\n console.log('Building backends');\n await runConcurrentTasks({\n items: backends,\n concurrencyFactor: 1 / 2,\n worker: async pkg => {\n const buildOptions = parseBuildScript(pkg.packageJson.scripts?.build);\n if (!buildOptions) {\n console.warn(\n `Ignored ${pkg.packageJson.name} because it does not have a matching build script`,\n );\n return;\n }\n await buildBackend({\n targetDir: pkg.dir,\n skipBuildDependencies: true,\n minify: minify ?? Boolean(buildOptions.minify),\n });\n },\n });\n }\n};\n"],"names":["cli","PackageGraph","createScriptOptionsParser","PackageRoles","getOutputsForRole","chalk","relativePath","targetPaths","buildPackages","runConcurrentTasks","buildFrontend","buildBackend"],"mappings":"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"}
@@ -13,7 +13,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
13
13
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
14
14
 
15
15
  var clean = async ({ args, info }) => {
16
- cleye.cli({ help: info, booleanFlagNegation: true }, void 0, args);
16
+ cleye.cli({ name: info.usage, booleanFlagNegation: true }, void 0, args);
17
17
  const packages = await cliNode.PackageGraph.listTargetPackages();
18
18
  await fs__default.default.remove(cliCommon.targetPaths.resolveRoot("dist"));
19
19
  await fs__default.default.remove(cliCommon.targetPaths.resolveRoot("dist-types"));