@backstage/repo-tools 0.15.3-next.0 → 0.15.4-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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @backstage/repo-tools
2
2
 
3
+ ## 0.15.4-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility.
8
+ - Updated dependencies
9
+ - @backstage/config-loader@1.10.6-next.0
10
+ - @backstage/cli-node@0.2.15-next.0
11
+ - @backstage/catalog-model@1.7.6-next.0
12
+ - @backstage/backend-plugin-api@1.4.5-next.0
13
+ - @backstage/cli-common@0.1.15
14
+ - @backstage/errors@1.2.7
15
+
16
+ ## 0.15.3
17
+
18
+ ### Patch Changes
19
+
20
+ - 1359279: Fixed an issue with the OpenAPI generated client and server where import/export statements were duplicated.
21
+ - Updated dependencies
22
+ - @backstage/config-loader@1.10.5
23
+ - @backstage/backend-plugin-api@1.4.4
24
+
3
25
  ## 0.15.3-next.0
4
26
 
5
27
  ### Patch Changes
@@ -8,6 +8,7 @@ var fs = require('fs-extra');
8
8
  var exec = require('../../../../../lib/exec.cjs.js');
9
9
  var backendPluginApi = require('@backstage/backend-plugin-api');
10
10
  var helpers = require('../../../../../lib/openapi/helpers.cjs.js');
11
+ var dedupeImports = require('../../../../../lib/openapi/dedupe-imports.cjs.js');
11
12
 
12
13
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
13
14
 
@@ -72,6 +73,12 @@ async function generate(outputDirectory, clientAdditionalProperties, abortSignal
72
73
  signal: abortSignal?.signal
73
74
  });
74
75
  }
76
+ const generatedFiles = await fs__default.default.readdir(resolvedOutputDirectory);
77
+ for (const file of generatedFiles) {
78
+ if (file.endsWith(".ts")) {
79
+ dedupeImports.deduplicateImports(path.resolve(resolvedOutputDirectory, file));
80
+ }
81
+ }
75
82
  fs__default.default.removeSync(path.resolve(resolvedOutputDirectory, ".openapi-generator-ignore"));
76
83
  fs__default.default.rmSync(path.resolve(resolvedOutputDirectory, ".openapi-generator"), {
77
84
  recursive: true,
@@ -1,20 +1,21 @@
1
1
  'use strict';
2
2
 
3
+ var backendPluginApi = require('@backstage/backend-plugin-api');
3
4
  var chalk = require('chalk');
4
- var path = require('path');
5
- var YAML = require('js-yaml');
6
- var constants = require('../../../../../lib/openapi/constants.cjs.js');
7
- var paths = require('../../../../../lib/paths.cjs.js');
8
5
  var fs = require('fs-extra');
6
+ var YAML = require('js-yaml');
7
+ var path = require('path');
9
8
  var exec = require('../../../../../lib/exec.cjs.js');
10
- var backendPluginApi = require('@backstage/backend-plugin-api');
9
+ var constants = require('../../../../../lib/openapi/constants.cjs.js');
10
+ var dedupeImports = require('../../../../../lib/openapi/dedupe-imports.cjs.js');
11
11
  var helpers = require('../../../../../lib/openapi/helpers.cjs.js');
12
+ var paths = require('../../../../../lib/paths.cjs.js');
12
13
 
13
14
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
14
15
 
15
16
  var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
16
- var YAML__default = /*#__PURE__*/_interopDefaultCompat(YAML);
17
17
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
18
+ var YAML__default = /*#__PURE__*/_interopDefaultCompat(YAML);
18
19
 
19
20
  async function generateSpecFile() {
20
21
  const openapiPath = await helpers.getPathToCurrentOpenApiSpec();
@@ -95,6 +96,12 @@ async function generate(serverAdditionalProperties, abortSignal) {
95
96
  signal: abortSignal?.signal
96
97
  }
97
98
  );
99
+ const generatedFiles = await fs__default.default.readdir(resolvedOutputDirectory);
100
+ for (const file of generatedFiles) {
101
+ if (file.endsWith(".ts")) {
102
+ dedupeImports.deduplicateImports(path.resolve(resolvedOutputDirectory, file));
103
+ }
104
+ }
98
105
  await exec.exec(
99
106
  `yarn backstage-cli package lint --fix ${resolvedOutputDirectory}`,
100
107
  [],
@@ -21,14 +21,18 @@ const cacheEntrySchema = zod.z.object({
21
21
  version: zod.z.string()
22
22
  });
23
23
  class PackageDocsCache {
24
+ // A map of package directory to package hash.
25
+ keyCache;
26
+ lockfile;
27
+ // A map of package directory to cache entry.
28
+ cache;
29
+ baseDirectory;
24
30
  constructor(lockfile, cache, baseDirectory) {
25
31
  this.lockfile = lockfile;
26
32
  this.cache = cache;
27
33
  this.baseDirectory = baseDirectory;
28
34
  this.keyCache = /* @__PURE__ */ new Map();
29
35
  }
30
- // A map of package directory to package hash.
31
- keyCache;
32
36
  static async loadAsync(baseDirectory, lockfile) {
33
37
  const cacheDir = path.join(baseDirectory, constants.CACHE_DIR);
34
38
  await fs.mkdirp(cacheDir);
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs');
4
+
5
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
6
+
7
+ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
8
+
9
+ function deduplicateImports(filePath) {
10
+ const content = fs__default.default.readFileSync(filePath, "utf8");
11
+ const lines = content.split("\n");
12
+ const seen = /* @__PURE__ */ new Set();
13
+ const result = [];
14
+ let i = 0;
15
+ while (i < lines.length) {
16
+ const line = lines[i];
17
+ const trimmed = line.trim();
18
+ if (trimmed.startsWith("import ") || trimmed.startsWith("export ")) {
19
+ let fullStatement = line;
20
+ let endIndex = i;
21
+ if (trimmed.includes("{") && !trimmed.includes("}")) {
22
+ while (endIndex < lines.length && !lines[endIndex].includes("}")) {
23
+ endIndex++;
24
+ }
25
+ if (endIndex < lines.length) {
26
+ fullStatement = lines.slice(i, endIndex + 1).join("\n");
27
+ }
28
+ }
29
+ const normalized = fullStatement.replace(/\/\/.*$/gm, "").replace(/\s+/g, " ").trim();
30
+ if (!seen.has(normalized)) {
31
+ seen.add(normalized);
32
+ for (let j = i; j <= endIndex; j++) {
33
+ result.push(lines[j]);
34
+ }
35
+ }
36
+ i = endIndex + 1;
37
+ } else {
38
+ result.push(line);
39
+ i++;
40
+ }
41
+ }
42
+ fs__default.default.writeFileSync(filePath, result.join("\n"));
43
+ }
44
+
45
+ exports.deduplicateImports = deduplicateImports;
46
+ //# sourceMappingURL=dedupe-imports.cjs.js.map
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
+ var Parser = require('@apidevtools/swagger-parser');
3
4
  var fs = require('fs-extra');
4
- var paths = require('../paths.cjs.js');
5
- var constants = require('./constants.cjs.js');
6
- var path = require('path');
7
5
  var YAML = require('js-yaml');
8
6
  var lodash = require('lodash');
9
- var Parser = require('@apidevtools/swagger-parser');
7
+ var path = require('path');
8
+ var paths = require('../paths.cjs.js');
9
+ var constants = require('./constants.cjs.js');
10
10
 
11
11
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
12
12
 
13
+ var Parser__default = /*#__PURE__*/_interopDefaultCompat(Parser);
13
14
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
14
15
  var YAML__default = /*#__PURE__*/_interopDefaultCompat(YAML);
15
- var Parser__default = /*#__PURE__*/_interopDefaultCompat(Parser);
16
16
 
17
17
  const getPathToFile = async (directory, filename) => {
18
18
  return path.resolve(directory, filename);
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.15.3-next.0";
3
+ var version = "0.15.4-next.0";
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/repo-tools",
3
- "version": "0.15.3-next.0",
3
+ "version": "0.15.4-next.0",
4
4
  "description": "CLI for Backstage repo tooling ",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -43,11 +43,11 @@
43
43
  "dependencies": {
44
44
  "@apidevtools/swagger-parser": "^10.1.0",
45
45
  "@apisyouwonthate/style-guide": "^1.4.0",
46
- "@backstage/backend-plugin-api": "1.4.4-next.0",
47
- "@backstage/catalog-model": "1.7.5",
46
+ "@backstage/backend-plugin-api": "1.4.5-next.0",
47
+ "@backstage/catalog-model": "1.7.6-next.0",
48
48
  "@backstage/cli-common": "0.1.15",
49
- "@backstage/cli-node": "0.2.14",
50
- "@backstage/config-loader": "1.10.4-next.0",
49
+ "@backstage/cli-node": "0.2.15-next.0",
50
+ "@backstage/config-loader": "1.10.6-next.0",
51
51
  "@backstage/errors": "1.2.7",
52
52
  "@electric-sql/pglite": "^0.3.0",
53
53
  "@manypkg/get-packages": "^1.1.3",
@@ -86,8 +86,8 @@
86
86
  "zod": "^3.22.4"
87
87
  },
88
88
  "devDependencies": {
89
- "@backstage/backend-test-utils": "1.9.1-next.1",
90
- "@backstage/cli": "0.34.4-next.1",
89
+ "@backstage/backend-test-utils": "1.10.0-next.0",
90
+ "@backstage/cli": "0.34.5-next.0",
91
91
  "@backstage/types": "1.2.2",
92
92
  "@types/is-glob": "^4.0.2",
93
93
  "@types/node": "^20.16.0",