@backstage/cli 0.35.4-next.1 → 0.35.4-next.2

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 (25) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/lib/entryPoints.cjs.js +4 -2
  3. package/dist/modules/build/commands/package/build/command.cjs.js +6 -0
  4. package/dist/modules/build/lib/builder/config.cjs.js +2 -1
  5. package/dist/modules/build/lib/builder/packager.cjs.js +2 -1
  6. package/dist/modules/build/lib/builder/plugins.cjs.js +35 -0
  7. package/dist/modules/build/lib/packager/productionPack.cjs.js +4 -1
  8. package/dist/modules/maintenance/commands/repo/fix.cjs.js +27 -15
  9. package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
  10. package/dist/packages/catalog-client/package.json.cjs.js +1 -1
  11. package/dist/packages/cli/package.json.cjs.js +3 -2
  12. package/dist/packages/core-app-api/package.json.cjs.js +1 -1
  13. package/dist/packages/core-components/package.json.cjs.js +1 -1
  14. package/dist/packages/core-plugin-api/package.json.cjs.js +1 -1
  15. package/dist/packages/dev-utils/package.json.cjs.js +1 -1
  16. package/dist/packages/frontend-defaults/package.json.cjs.js +1 -1
  17. package/dist/packages/frontend-plugin-api/package.json.cjs.js +1 -1
  18. package/dist/packages/frontend-test-utils/package.json.cjs.js +1 -1
  19. package/dist/packages/test-utils/package.json.cjs.js +1 -1
  20. package/dist/packages/theme/package.json.cjs.js +1 -1
  21. package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
  22. package/dist/plugins/catalog-node/package.json.cjs.js +1 -1
  23. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
  24. package/package.json +16 -15
  25. package/templates/scaffolder-backend-module/src/module.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @backstage/cli
2
2
 
3
+ ## 0.35.4-next.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 20131c5: Added support for CSS exports in package builds. When a package declares a CSS file in its `exports` field (e.g., `"./styles.css": "./src/styles.css"`), the CLI will automatically bundle it during `backstage-cli package build`, resolving any `@import` statements. The export path is rewritten from `src/` to `dist/` at publish time.
8
+
9
+ Fixed `backstage-cli repo fix` to not add `typesVersions` entries for non-script exports like CSS files.
10
+
11
+ - 6ce4a13: Removed `/alpha` from `scaffolderActionsExtensionPoint` import
12
+ - 73351c2: Updated dependency `webpack` to `~5.104.0`.
13
+ - Updated dependencies
14
+ - @backstage/integration@1.20.0-next.2
15
+ - @backstage/cli-node@0.2.18-next.1
16
+ - @backstage/config-loader@1.10.8-next.0
17
+
3
18
  ## 0.35.4-next.1
4
19
 
5
20
  ### Patch Changes
@@ -8,17 +8,19 @@ const defaultIndex = {
8
8
  name: "index",
9
9
  ext: ".ts"
10
10
  };
11
+ const SCRIPT_EXTS = [".js", ".jsx", ".ts", ".tsx"];
11
12
  function parseEntryPoint(mount, path$1) {
13
+ const ext = path.extname(path$1);
12
14
  let name = mount;
13
15
  if (name === ".") {
14
16
  name = "index";
15
17
  } else if (name.startsWith("./")) {
16
18
  name = name.slice(2);
17
19
  }
18
- if (name.includes("/")) {
20
+ if (name.includes("/") && SCRIPT_EXTS.includes(ext)) {
19
21
  throw new Error(`Mount point '${mount}' may not contain multiple slashes`);
20
22
  }
21
- return { mount, path: path$1, name, ext: path.extname(path$1) };
23
+ return { mount, path: path$1, name, ext };
22
24
  }
23
25
  function readEntryPoints(pkg) {
24
26
  const exp = pkg.exports;
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var fs = require('fs-extra');
3
4
  var packager = require('../../../lib/builder/packager.cjs.js');
4
5
  var types = require('../../../lib/builder/types.cjs.js');
5
6
  var role = require('../../../../../lib/role.cjs.js');
@@ -12,6 +13,7 @@ var chalk = require('chalk');
12
13
 
13
14
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
14
15
 
16
+ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
15
17
  var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
16
18
 
17
19
  async function command(opts) {
@@ -64,8 +66,12 @@ async function command(opts) {
64
66
  if (roleInfo.output.includes("types")) {
65
67
  outputs.add(types.Output.types);
66
68
  }
69
+ const packageJson = await fs__default.default.readJson(
70
+ paths.paths.resolveTarget("package.json")
71
+ );
67
72
  return packager.buildPackage({
68
73
  outputs,
74
+ packageJson,
69
75
  minify: Boolean(opts.minify),
70
76
  workspacePackages: await cliNode.PackageGraph.listTargetPackages()
71
77
  });
@@ -210,7 +210,8 @@ async function makeRollupConfigs(options) {
210
210
  esbuild__default.default({
211
211
  target: "ES2023",
212
212
  minify: options.minify
213
- })
213
+ }),
214
+ plugins.cssEntryPoints({ entryPoints: entryPoints$1, targetDir })
214
215
  ]
215
216
  });
216
217
  }
@@ -90,7 +90,8 @@ const buildPackage = async (options) => {
90
90
  } catch {
91
91
  }
92
92
  const rollupConfigs = await config.makeRollupConfigs(options);
93
- await fs__default.default.remove(path.resolve(options.targetDir ?? paths.paths.targetDir, "dist"));
93
+ const targetDir = options.targetDir ?? paths.paths.targetDir;
94
+ await fs__default.default.remove(path.resolve(targetDir, "dist"));
94
95
  const buildTasks = rollupConfigs.map(rollupBuild);
95
96
  await Promise.all(buildTasks);
96
97
  };
@@ -1,12 +1,16 @@
1
1
  'use strict';
2
2
 
3
3
  var fs = require('fs-extra');
4
+ var postcss = require('postcss');
5
+ var postcssImport = require('postcss-import');
4
6
  var path = require('node:path');
5
7
  var rollupPluginutils = require('rollup-pluginutils');
6
8
 
7
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
10
 
9
11
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
12
+ var postcss__default = /*#__PURE__*/_interopDefaultCompat(postcss);
13
+ var postcssImport__default = /*#__PURE__*/_interopDefaultCompat(postcssImport);
10
14
 
11
15
  function forwardFileImports(options) {
12
16
  const filter = rollupPluginutils.createFilter(options.include, options.exclude);
@@ -85,6 +89,37 @@ function forwardFileImports(options) {
85
89
  }
86
90
  };
87
91
  }
92
+ function cssEntryPoints(options) {
93
+ const cssEntries = options.entryPoints.filter((ep) => ep.ext === ".css");
94
+ const generatedFor = /* @__PURE__ */ new Set();
95
+ return {
96
+ name: "backstage-css-entry-points",
97
+ async generateBundle(outputOptions, _bundle, isWrite) {
98
+ if (!isWrite) {
99
+ return;
100
+ }
101
+ const dir = outputOptions.dir || path.dirname(outputOptions.file);
102
+ if (generatedFor.has(dir)) {
103
+ return;
104
+ }
105
+ generatedFor.add(dir);
106
+ for (const entryPoint of cssEntries) {
107
+ const sourcePath = path.resolve(options.targetDir, entryPoint.path);
108
+ const outputPath = entryPoint.path.replace(/^(\.\/)?src\//, "");
109
+ const source = await fs__default.default.readFile(sourcePath, "utf8");
110
+ const result = await postcss__default.default([postcssImport__default.default()]).process(source, {
111
+ from: sourcePath
112
+ });
113
+ this.emitFile({
114
+ type: "asset",
115
+ fileName: outputPath,
116
+ source: result.css
117
+ });
118
+ }
119
+ }
120
+ };
121
+ }
88
122
 
123
+ exports.cssEntryPoints = cssEntryPoints;
89
124
  exports.forwardFileImports = forwardFileImports;
90
125
  //# sourceMappingURL=plugins.cjs.js.map
@@ -92,7 +92,10 @@ async function rewriteEntryPoints(pkg, packageDir, featureDetectionProject) {
92
92
  }
93
93
  for (const entryPoint of entryPoints$1) {
94
94
  if (!SCRIPT_EXTS.includes(entryPoint.ext)) {
95
- outputExports[entryPoint.mount] = entryPoint.path;
95
+ outputExports[entryPoint.mount] = entryPoint.path.replace(
96
+ /^(\.\/)?src\//,
97
+ "./dist/"
98
+ );
96
99
  continue;
97
100
  }
98
101
  let exp = {};
@@ -10,6 +10,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
10
10
 
11
11
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
12
12
 
13
+ const SCRIPT_EXTS = [".js", ".jsx", ".ts", ".tsx", ".json"];
13
14
  async function readFixablePackages() {
14
15
  const packages = await cliNode.PackageGraph.listTargetPackages();
15
16
  return packages.map((pkg) => ({ ...pkg, changed: false }));
@@ -72,32 +73,43 @@ function fixPackageExports(pkg) {
72
73
  }
73
74
  const existingTypesVersions = JSON.stringify(pkg.packageJson.typesVersions);
74
75
  const typeEntries = {};
75
- for (const [path, value] of Object.entries(exp)) {
76
- if (path === ".") {
76
+ for (const [path$1, value] of Object.entries(exp)) {
77
+ if (path$1 === ".") {
77
78
  continue;
78
79
  }
79
- const newPath = trimRelative(path);
80
+ const newPath = trimRelative(path$1);
80
81
  if (typeof value === "string") {
81
- typeEntries[newPath] = [trimRelative(value)];
82
+ if (SCRIPT_EXTS.includes(path.extname(value))) {
83
+ typeEntries[newPath] = [trimRelative(value)];
84
+ }
82
85
  } else if (value && typeof value === "object" && !Array.isArray(value)) {
83
86
  if (typeof value.types === "string") {
84
87
  typeEntries[newPath] = [trimRelative(value.types)];
85
- } else if (typeof value.default === "string") {
88
+ } else if (typeof value.default === "string" && SCRIPT_EXTS.includes(path.extname(value.default))) {
86
89
  typeEntries[newPath] = [trimRelative(value.default)];
87
90
  }
88
91
  }
89
92
  }
90
- const typesVersions = { "*": typeEntries };
93
+ const hasTypeEntries = Object.keys(typeEntries).length > 0;
94
+ const typesVersions = hasTypeEntries ? { "*": typeEntries } : void 0;
91
95
  if (existingTypesVersions !== JSON.stringify(typesVersions)) {
92
- const newPkgEntries = Object.entries(pkg.packageJson).filter(
93
- ([name]) => name !== "typesVersions"
94
- );
95
- newPkgEntries.splice(
96
- newPkgEntries.findIndex(([name]) => name === "exports") + 1,
97
- 0,
98
- ["typesVersions", typesVersions]
99
- );
100
- pkg.packageJson = Object.fromEntries(newPkgEntries);
96
+ if (pkg.packageJson.typesVersions) {
97
+ if (typesVersions) {
98
+ pkg.packageJson.typesVersions = typesVersions;
99
+ } else {
100
+ delete pkg.packageJson.typesVersions;
101
+ }
102
+ } else if (typesVersions) {
103
+ const newPkgEntries = Object.entries(pkg.packageJson);
104
+ newPkgEntries.splice(
105
+ newPkgEntries.findIndex(([name]) => name === "exports") + 1,
106
+ 0,
107
+ ["typesVersions", typesVersions]
108
+ );
109
+ pkg.packageJson = Object.fromEntries(
110
+ newPkgEntries
111
+ );
112
+ }
101
113
  pkg.changed = true;
102
114
  }
103
115
  const publishConfig = pkg.packageJson.publishConfig;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.10.5-next.0";
3
+ var version = "1.11.0-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.12.1";
3
+ var version = "1.12.2-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.35.4-next.1";
3
+ var version = "0.35.4-next.2";
4
4
  var dependencies = {
5
5
  "@backstage/catalog-model": "workspace:^",
6
6
  "@backstage/cli-common": "workspace:^",
@@ -73,6 +73,7 @@ var dependencies = {
73
73
  "p-queue": "^6.6.2",
74
74
  pirates: "^4.0.6",
75
75
  postcss: "^8.1.0",
76
+ "postcss-import": "^16.1.0",
76
77
  process: "^0.11.10",
77
78
  "raw-loader": "^4.0.2",
78
79
  "react-dev-utils": "^12.0.0-next.60",
@@ -146,7 +147,7 @@ var devDependencies = {
146
147
  msw: "^1.0.0",
147
148
  nodemon: "^3.0.1",
148
149
  "terser-webpack-plugin": "^5.1.3",
149
- webpack: "~5.103.0",
150
+ webpack: "~5.104.0",
150
151
  "webpack-dev-server": "^5.0.0"
151
152
  };
152
153
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.19.5-next.0";
3
+ var version = "1.19.5-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.18.7-next.1";
3
+ var version = "0.18.7-next.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.12.3-next.0";
3
+ var version = "1.12.3-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.1.20-next.1";
3
+ var version = "1.1.20-next.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.4.0-next.1";
3
+ var version = "0.4.0-next.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.14.0-next.1";
3
+ var version = "0.14.0-next.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.4.6-next.1";
3
+ var version = "0.5.0-next.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.7.15-next.1";
3
+ var version = "1.7.15-next.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.7.2-next.0";
3
+ var version = "0.7.2-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.26.1-next.0";
3
+ var version = "0.27.0-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.21.0-next.0";
3
+ var version = "2.0.0-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.3.8-next.0";
3
+ var version = "0.3.8-next.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli",
3
- "version": "0.35.4-next.1",
3
+ "version": "0.35.4-next.2",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -54,7 +54,7 @@
54
54
  "@backstage/config-loader": "1.10.8-next.0",
55
55
  "@backstage/errors": "1.2.7",
56
56
  "@backstage/eslint-plugin": "0.2.1-next.0",
57
- "@backstage/integration": "1.20.0-next.1",
57
+ "@backstage/integration": "1.20.0-next.2",
58
58
  "@backstage/release-manifests": "0.0.13",
59
59
  "@backstage/types": "1.2.2",
60
60
  "@manypkg/get-packages": "^1.1.3",
@@ -118,6 +118,7 @@
118
118
  "p-queue": "^6.6.2",
119
119
  "pirates": "^4.0.6",
120
120
  "postcss": "^8.1.0",
121
+ "postcss-import": "^16.1.0",
121
122
  "process": "^0.11.10",
122
123
  "raw-loader": "^4.0.2",
123
124
  "react-dev-utils": "^12.0.0-next.60",
@@ -147,21 +148,21 @@
147
148
  },
148
149
  "devDependencies": {
149
150
  "@backstage/backend-plugin-api": "1.7.0-next.1",
150
- "@backstage/backend-test-utils": "1.10.5-next.0",
151
- "@backstage/catalog-client": "1.12.1",
151
+ "@backstage/backend-test-utils": "1.11.0-next.1",
152
+ "@backstage/catalog-client": "1.12.2-next.0",
152
153
  "@backstage/config": "1.3.6",
153
- "@backstage/core-app-api": "1.19.5-next.0",
154
- "@backstage/core-components": "0.18.7-next.1",
155
- "@backstage/core-plugin-api": "1.12.3-next.0",
156
- "@backstage/dev-utils": "1.1.20-next.1",
154
+ "@backstage/core-app-api": "1.19.5-next.1",
155
+ "@backstage/core-components": "0.18.7-next.2",
156
+ "@backstage/core-plugin-api": "1.12.3-next.1",
157
+ "@backstage/dev-utils": "1.1.20-next.2",
157
158
  "@backstage/errors": "1.2.7",
158
- "@backstage/plugin-auth-backend": "0.26.1-next.0",
159
+ "@backstage/plugin-auth-backend": "0.27.0-next.1",
159
160
  "@backstage/plugin-auth-backend-module-guest-provider": "0.2.16-next.0",
160
- "@backstage/plugin-catalog-node": "1.21.0-next.0",
161
+ "@backstage/plugin-catalog-node": "2.0.0-next.1",
161
162
  "@backstage/plugin-scaffolder-node": "0.12.5-next.1",
162
- "@backstage/plugin-scaffolder-node-test-utils": "0.3.8-next.0",
163
- "@backstage/test-utils": "1.7.15-next.1",
164
- "@backstage/theme": "0.7.2-next.0",
163
+ "@backstage/plugin-scaffolder-node-test-utils": "0.3.8-next.1",
164
+ "@backstage/test-utils": "1.7.15-next.2",
165
+ "@backstage/theme": "0.7.2-next.1",
165
166
  "@jest/environment-jsdom-abstract": "^30.0.0",
166
167
  "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
167
168
  "@types/cross-spawn": "^6.0.2",
@@ -191,7 +192,7 @@
191
192
  "msw": "^1.0.0",
192
193
  "nodemon": "^3.0.1",
193
194
  "terser-webpack-plugin": "^5.1.3",
194
- "webpack": "~5.103.0",
195
+ "webpack": "~5.104.0",
195
196
  "webpack-dev-server": "^5.0.0"
196
197
  },
197
198
  "peerDependencies": {
@@ -206,7 +207,7 @@
206
207
  "jsdom": "^27.1.0",
207
208
  "mini-css-extract-plugin": "^2.4.2",
208
209
  "terser-webpack-plugin": "^5.1.3",
209
- "webpack": "~5.103.0",
210
+ "webpack": "~5.104.0",
210
211
  "webpack-dev-server": "^5.0.0"
211
212
  },
212
213
  "peerDependenciesMeta": {
@@ -1,5 +1,5 @@
1
1
  import { createBackendModule } from "@backstage/backend-plugin-api";
2
- import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node/alpha';
2
+ import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node';
3
3
  import { createExampleAction } from "./actions/example";
4
4
 
5
5
  /**