@backstage/cli-module-maintenance 0.1.5-next.0 → 0.1.6-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,21 @@
1
1
  # @backstage/cli-module-maintenance
2
2
 
3
+ ## 0.1.6-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @backstage/cli-node@0.3.5-next.0
9
+ - @backstage/cli-common@0.3.2-next.0
10
+
11
+ ## 0.1.5
12
+
13
+ ### Patch Changes
14
+
15
+ - 89743dc: Replaced the deprecated dependency used by `repo list-deprecations` with the equivalent TypeScript ESLint rule.
16
+ - Updated dependencies
17
+ - @backstage/cli-common@0.3.1
18
+
3
19
  ## 0.1.5-next.0
4
20
 
5
21
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"InternalCliModule.cjs.js","sources":["../../../../cli-internal/src/InternalCliModule.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { CliCommand, CliModule } from '@backstage/cli-node';\nimport { OpaqueType } from '@internal/opaque';\n\nexport const OpaqueCliModule = OpaqueType.create<{\n public: CliModule;\n versions: {\n readonly version: 'v1';\n readonly packageName: string;\n readonly commands: Promise<ReadonlyArray<CliCommand>>;\n };\n}>({\n type: '@backstage/CliModule',\n versions: ['v1'],\n});\n"],"names":["OpaqueType"],"mappings":";;;;AAmB+BA,sBAAW,MAAA,CAOvC;AAAA,EACD,IAAA,EAAM,sBAAA;AAAA,EACN,QAAA,EAAU,CAAC,IAAI;AACjB,CAAC;;"}
1
+ {"version":3,"file":"InternalCliModule.cjs.js","sources":["../../../../cli-internal/src/InternalCliModule.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { CliCommand, CliModule } from '@backstage/cli-node';\nimport { OpaqueType } from '@internal/opaque';\n\nexport const OpaqueCliModule = OpaqueType.create<{\n public: CliModule;\n versions: {\n readonly version: 'v1';\n readonly packageName: string;\n readonly commands: Promise<ReadonlyArray<CliCommand>>;\n };\n}>({\n type: '@backstage/CliModule',\n versions: ['v1'],\n});\n"],"names":["OpaqueType"],"mappings":";;;;AAmB+BA,sBAAW,MAAA,CAOvC;AAAA,EACD,IAAA,EAAM,sBAAA;AAAA,EACN,QAAA,EAAU,CAAC,IAAI;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"InternalCommandNode.cjs.js","sources":["../../../../cli-internal/src/InternalCommandNode.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { CliCommand, CliModule } from '@backstage/cli-node';\nimport { OpaqueType } from '@internal/opaque';\n\n/** @internal */\nexport interface CommandTreeNode {\n readonly $$type: '@backstage/CommandTreeNode';\n}\n\n/** @internal */\nexport interface CommandLeafNode {\n readonly $$type: '@backstage/CommandLeafNode';\n}\n\nexport type CommandNode = CommandTreeNode | CommandLeafNode;\n\nexport const OpaqueCommandTreeNode = OpaqueType.create<{\n public: CommandTreeNode;\n versions: {\n readonly version: 'v1';\n readonly name: string;\n readonly children: CommandNode[];\n };\n}>({\n type: '@backstage/CommandTreeNode',\n versions: ['v1'],\n});\n\nexport const OpaqueCommandLeafNode = OpaqueType.create<{\n public: CommandLeafNode;\n versions: {\n readonly version: 'v1';\n readonly name: string;\n readonly command: CliCommand;\n readonly module?: CliModule;\n };\n}>({\n type: '@backstage/CommandLeafNode',\n versions: ['v1'],\n});\n\n/**\n * Checks whether a command node should be hidden from help output.\n * Leaf nodes are hidden if they are deprecated or experimental.\n * Tree nodes are hidden if all of their children are hidden.\n */\nexport function isCommandNodeHidden(node: CommandNode): boolean {\n if (OpaqueCommandLeafNode.isType(node)) {\n const { command } = OpaqueCommandLeafNode.toInternal(node);\n return !!command.deprecated || !!command.experimental;\n }\n const { children } = OpaqueCommandTreeNode.toInternal(node);\n return children.every(child => isCommandNodeHidden(child));\n}\n"],"names":["OpaqueType"],"mappings":";;;;AA+BqCA,sBAAW,MAAA,CAO7C;AAAA,EACD,IAAA,EAAM,4BAAA;AAAA,EACN,QAAA,EAAU,CAAC,IAAI;AACjB,CAAC;AAEoCA,sBAAW,MAAA,CAQ7C;AAAA,EACD,IAAA,EAAM,4BAAA;AAAA,EACN,QAAA,EAAU,CAAC,IAAI;AACjB,CAAC;;"}
1
+ {"version":3,"file":"InternalCommandNode.cjs.js","sources":["../../../../cli-internal/src/InternalCommandNode.ts"],"sourcesContent":["/*\n * Copyright 2024 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 { CliCommand, CliModule } from '@backstage/cli-node';\nimport { OpaqueType } from '@internal/opaque';\n\n/** @internal */\nexport interface CommandTreeNode {\n readonly $$type: '@backstage/CommandTreeNode';\n}\n\n/** @internal */\nexport interface CommandLeafNode {\n readonly $$type: '@backstage/CommandLeafNode';\n}\n\nexport type CommandNode = CommandTreeNode | CommandLeafNode;\n\nexport const OpaqueCommandTreeNode = OpaqueType.create<{\n public: CommandTreeNode;\n versions: {\n readonly version: 'v1';\n readonly name: string;\n readonly children: CommandNode[];\n };\n}>({\n type: '@backstage/CommandTreeNode',\n versions: ['v1'],\n});\n\nexport const OpaqueCommandLeafNode = OpaqueType.create<{\n public: CommandLeafNode;\n versions: {\n readonly version: 'v1';\n readonly name: string;\n readonly command: CliCommand;\n readonly module?: CliModule;\n };\n}>({\n type: '@backstage/CommandLeafNode',\n versions: ['v1'],\n});\n\n/**\n * Checks whether a command node should be hidden from help output.\n * Leaf nodes are hidden if they are deprecated or experimental.\n * Tree nodes are hidden if all of their children are hidden.\n */\nexport function isCommandNodeHidden(node: CommandNode): boolean {\n if (OpaqueCommandLeafNode.isType(node)) {\n const { command } = OpaqueCommandLeafNode.toInternal(node);\n return !!command.deprecated || !!command.experimental;\n }\n const { children } = OpaqueCommandTreeNode.toInternal(node);\n return children.every(child => isCommandNodeHidden(child));\n}\n"],"names":["OpaqueType"],"mappings":";;;;AA+BqCA,sBAAW,MAAA,CAO7C;AAAA,EACD,IAAA,EAAM,4BAAA;AAAA,EACN,QAAA,EAAU,CAAC,IAAI;AACjB,CAAC;AAEoCA,sBAAW,MAAA,CAQ7C;AAAA,EACD,IAAA,EAAM,4BAAA;AAAA,EACN,QAAA,EAAU,CAAC,IAAI;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"knownPluginPackages.cjs.js","sources":["../../../../cli-internal/src/knownPluginPackages.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst knownBackendPluginIds = [\n 'app',\n 'auth',\n 'catalog',\n 'events',\n 'kubernetes',\n 'notifications',\n 'permission',\n 'proxy',\n 'scaffolder',\n 'search',\n 'signals',\n 'techdocs',\n];\n\n// Only includes plugin IDs that have a corresponding frontend package; some plugins are backend-only and not listed here.\nconst knownFrontendPluginIds = [\n 'app',\n 'auth',\n 'catalog',\n 'kubernetes',\n 'notifications',\n 'scaffolder',\n 'search',\n 'signals',\n 'techdocs',\n];\n\n/**\n * Maps known plugin IDs to their corresponding backend package names.\n */\nexport const knownBackendPluginPackageNameByPluginId: Record<string, string> =\n Object.fromEntries(\n knownBackendPluginIds.map(pluginId => [\n pluginId,\n `@backstage/plugin-${pluginId}-backend`,\n ]),\n );\n\n/**\n * Maps known plugin IDs to their corresponding frontend package names.\n */\nexport const knownFrontendPluginPackageNameByPluginId: Record<string, string> =\n Object.fromEntries(\n knownFrontendPluginIds.map(pluginId => [\n pluginId,\n `@backstage/plugin-${pluginId}`,\n ]),\n );\n"],"names":[],"mappings":";;AAgBA,MAAM,qBAAA,GAAwB;AAAA,EAC5B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAGA,MAAM,sBAAA,GAAyB;AAAA,EAC7B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAKO,MAAM,0CACX,MAAA,CAAO,WAAA;AAAA,EACL,qBAAA,CAAsB,IAAI,CAAA,QAAA,KAAY;AAAA,IACpC,QAAA;AAAA,IACA,qBAAqB,QAAQ,CAAA,QAAA;AAAA,GAC9B;AACH;AAKK,MAAM,2CACX,MAAA,CAAO,WAAA;AAAA,EACL,sBAAA,CAAuB,IAAI,CAAA,QAAA,KAAY;AAAA,IACrC,QAAA;AAAA,IACA,qBAAqB,QAAQ,CAAA;AAAA,GAC9B;AACH;;;;;"}
1
+ {"version":3,"file":"knownPluginPackages.cjs.js","sources":["../../../../cli-internal/src/knownPluginPackages.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst knownBackendPluginIds = [\n 'app',\n 'auth',\n 'catalog',\n 'events',\n 'kubernetes',\n 'notifications',\n 'permission',\n 'proxy',\n 'scaffolder',\n 'search',\n 'signals',\n 'techdocs',\n];\n\n// Only includes plugin IDs that have a corresponding frontend package; some plugins are backend-only and not listed here.\nconst knownFrontendPluginIds = [\n 'app',\n 'auth',\n 'catalog',\n 'kubernetes',\n 'notifications',\n 'scaffolder',\n 'search',\n 'signals',\n 'techdocs',\n];\n\n/**\n * Maps known plugin IDs to their corresponding backend package names.\n */\nexport const knownBackendPluginPackageNameByPluginId: Record<string, string> =\n Object.fromEntries(\n knownBackendPluginIds.map(pluginId => [\n pluginId,\n `@backstage/plugin-${pluginId}-backend`,\n ]),\n );\n\n/**\n * Maps known plugin IDs to their corresponding frontend package names.\n */\nexport const knownFrontendPluginPackageNameByPluginId: Record<string, string> =\n Object.fromEntries(\n knownFrontendPluginIds.map(pluginId => [\n pluginId,\n `@backstage/plugin-${pluginId}`,\n ]),\n );\n"],"names":[],"mappings":";;AAgBA,MAAM,qBAAA,GAAwB;AAAA,EAC5B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAGA,MAAM,sBAAA,GAAyB;AAAA,EAC7B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAKO,MAAM,0CACX,MAAA,CAAO,WAAA;AAAA,EACL,qBAAA,CAAsB,IAAI,CAAA,QAAA,KAAY;AAAA,IACpC,QAAA;AAAA,IACA,qBAAqB,QAAQ,CAAA,QAAA;AAAA,GAC9B;AACH;AAKK,MAAM,2CACX,MAAA,CAAO,WAAA;AAAA,EACL,sBAAA,CAAuB,IAAI,CAAA,QAAA,KAAY;AAAA,IACrC,QAAA;AAAA,IACA,qBAAqB,QAAQ,CAAA;AAAA,GAC9B;AACH;;;"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@backstage/cli-module-maintenance";
6
- var version = "0.1.5-next.0";
6
+ var version = "0.1.6-next.0";
7
7
  var description = "CLI module for Backstage CLI";
8
8
  var backstage = {
9
9
  role: "cli-module"
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"fix.cjs.js","sources":["../../../src/commands/repo/fix.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 {\n BackstagePackage,\n BackstagePackageJson,\n PackageGraph,\n PackageRole,\n PackageRoles,\n} from '@backstage/cli-node';\nimport { cli } from 'cleye';\nimport fs from 'fs-extra';\nimport {\n resolve as resolvePath,\n posix,\n relative as relativePath,\n extname,\n} from 'node:path';\nimport { targetPaths } from '@backstage/cli-common';\nimport {\n knownBackendPluginPackageNameByPluginId,\n knownFrontendPluginPackageNameByPluginId,\n} from '@internal/cli';\n\nconst SCRIPT_EXTS = ['.js', '.jsx', '.ts', '.tsx', '.json'];\n\n/**\n * A mutable object representing a package.json file with potential fixes.\n */\nexport interface FixablePackage extends BackstagePackage {\n changed: boolean;\n}\n\nexport async function readFixablePackages(): Promise<FixablePackage[]> {\n const packages = await PackageGraph.listTargetPackages();\n return packages.map(pkg => ({ ...pkg, changed: false }));\n}\n\nexport function printPackageFixHint(packages: FixablePackage[]) {\n const changed = packages.filter(pkg => pkg.changed);\n if (changed.length > 0) {\n const rootPkg = require(targetPaths.resolveRoot('package.json'));\n const fixCmd =\n rootPkg.scripts?.fix === 'backstage-cli repo fix'\n ? 'fix'\n : 'backstage-cli repo fix';\n console.log(\n `The following packages are out of sync, run 'yarn ${fixCmd}' to fix them:`,\n );\n for (const pkg of changed) {\n console.log(` ${pkg.packageJson.name}`);\n }\n return true;\n }\n return false;\n}\n\nexport async function writeFixedPackages(\n packages: FixablePackage[],\n): Promise<void> {\n await Promise.all(\n packages.map(async pkg => {\n if (!pkg.changed) {\n return;\n }\n\n await fs.writeJson(\n resolvePath(pkg.dir, 'package.json'),\n pkg.packageJson,\n {\n spaces: 2,\n },\n );\n }),\n );\n}\n\nfunction trimRelative(path: string): string {\n if (path.startsWith('./')) {\n return path.slice(2);\n }\n return path;\n}\n\nexport function fixPackageExports(pkg: FixablePackage) {\n let { exports: exp } = pkg.packageJson;\n if (!exp) {\n return;\n }\n if (Array.isArray(exp)) {\n throw new Error('Unexpected array in package.json exports field');\n }\n\n // If exports is a string we rewrite it to an object to add package.json\n if (typeof exp === 'string') {\n pkg.changed = true;\n exp = { '.': exp };\n pkg.packageJson.exports = exp;\n } else if (typeof exp !== 'object') {\n return;\n }\n\n if (!exp['./package.json']) {\n pkg.changed = true;\n exp['./package.json'] = './package.json';\n }\n\n const existingTypesVersions = JSON.stringify(pkg.packageJson.typesVersions);\n\n const typeEntries: Record<string, [string]> = {};\n for (const [path, value] of Object.entries(exp)) {\n // Main entry point does not need to be listed\n if (path === '.') {\n continue;\n }\n const newPath = trimRelative(path);\n\n // Only script files and package.json should be added to typesVersions\n if (typeof value === 'string') {\n if (SCRIPT_EXTS.includes(extname(value))) {\n typeEntries[newPath] = [trimRelative(value)];\n }\n } else if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (typeof value.types === 'string') {\n typeEntries[newPath] = [trimRelative(value.types)];\n } else if (\n typeof value.default === 'string' &&\n SCRIPT_EXTS.includes(extname(value.default))\n ) {\n typeEntries[newPath] = [trimRelative(value.default)];\n }\n }\n }\n\n const hasTypeEntries = Object.keys(typeEntries).length > 0;\n const typesVersions = hasTypeEntries ? { '*': typeEntries } : undefined;\n\n if (existingTypesVersions !== JSON.stringify(typesVersions)) {\n if (pkg.packageJson.typesVersions) {\n // Update in place to preserve field order\n if (typesVersions) {\n pkg.packageJson.typesVersions = typesVersions;\n } else {\n delete pkg.packageJson.typesVersions;\n }\n } else if (typesVersions) {\n // Insert after exports when adding for the first time\n const newPkgEntries = Object.entries(pkg.packageJson);\n newPkgEntries.splice(\n newPkgEntries.findIndex(([name]) => name === 'exports') + 1,\n 0,\n ['typesVersions', typesVersions],\n );\n pkg.packageJson = Object.fromEntries(\n newPkgEntries,\n ) as BackstagePackageJson;\n }\n pkg.changed = true;\n }\n\n // Remove the legacy fields from publishConfig, which are no longer needed\n const publishConfig = pkg.packageJson.publishConfig as\n | Record<string, string>\n | undefined;\n if (publishConfig) {\n for (const field of ['main', 'module', 'browser', 'types']) {\n if (publishConfig[field]) {\n delete publishConfig[field];\n pkg.changed = true;\n }\n }\n }\n}\n\nexport function fixSideEffects(pkg: FixablePackage) {\n const role = PackageRoles.getRoleFromPackage(pkg.packageJson);\n if (!role) {\n return;\n }\n\n const roleInfo = PackageRoles.getRoleInfo(role);\n\n // Only web and common packages benefit from being marked as side effect free\n if (roleInfo.platform === 'node') {\n return;\n }\n // Bundled packages don't need to mark themselves as having no side effects\n if (roleInfo.output.length === 1 && roleInfo.output[0] === 'bundle') {\n return;\n }\n\n // Already declared\n if ('sideEffects' in pkg.packageJson) {\n return;\n }\n\n const pkgEntries = Object.entries(pkg.packageJson);\n pkgEntries.splice(\n // Place it just above the scripts field\n pkgEntries.findIndex(([name]) => name === 'scripts'),\n 0,\n ['sideEffects', false],\n );\n pkg.packageJson = Object.fromEntries(pkgEntries) as BackstagePackageJson;\n pkg.changed = true;\n}\n\nexport function createRepositoryFieldFixer() {\n const rootPkg = require(targetPaths.resolveRoot('package.json'));\n const rootRepoField = rootPkg.repository;\n if (!rootRepoField) {\n return () => {};\n }\n\n const rootType = rootRepoField.type || 'git';\n const rootUrl = rootRepoField.url;\n const rootDir = rootRepoField.directory || '';\n\n return (pkg: FixablePackage) => {\n const expectedPath = posix.join(\n rootDir,\n relativePath(targetPaths.rootDir, pkg.dir),\n );\n const repoField = pkg.packageJson.repository;\n\n if (!repoField || typeof repoField === 'string') {\n const pkgEntries = Object.entries(pkg.packageJson);\n pkgEntries.splice(\n // Place it just above the backstage field\n pkgEntries.findIndex(([name]) => name === 'backstage'),\n 0,\n [\n 'repository',\n {\n type: rootType,\n url: rootUrl,\n directory: expectedPath,\n },\n ],\n );\n pkg.packageJson = Object.fromEntries(pkgEntries) as BackstagePackageJson;\n pkg.changed = true;\n return;\n }\n\n // If there's a type or URL mismatch, leave the field as is\n if (repoField.type !== rootType || repoField.url !== rootUrl) {\n return;\n }\n\n if (repoField.directory !== expectedPath) {\n repoField.directory = expectedPath;\n pkg.changed = true;\n }\n };\n}\n\nfunction guessPluginId(role: PackageRole, pkgName: string): string | undefined {\n switch (role) {\n case 'frontend':\n case 'frontend-plugin':\n return pkgName.match(/plugin-(.*)/)?.[1];\n case 'frontend-plugin-module':\n return pkgName.match(/plugin-(.*)-module-/)?.[1];\n case 'backend-plugin':\n return pkgName.match(/plugin-(.*)-backend$/)?.[1];\n case 'backend-plugin-module':\n return pkgName.match(/plugin-(.*)-backend-module-/)?.[1];\n case 'common-library':\n return pkgName.match(/plugin-(.*)-(?:common)$/)?.[1];\n case 'web-library':\n return pkgName.match(/plugin-(.*)-(?:react|test-utils)/)?.[1];\n case 'node-library':\n return pkgName.match(/plugin-(.*)-(?:node|backend)-?/)?.[1];\n default:\n throw new Error(\n `Invalid 'backstage.role' field in \"${pkgName}\", got '${role}'`,\n );\n }\n}\n\nexport function fixPluginId(pkg: FixablePackage) {\n const role = pkg.packageJson.backstage?.role;\n if (!role) {\n return;\n }\n\n if (\n role === 'backend' ||\n role === 'frontend' ||\n role === 'cli' ||\n role === 'cli-module'\n ) {\n return;\n }\n\n const currentId = pkg.packageJson.backstage?.pluginId;\n if (currentId !== undefined) {\n if (typeof currentId !== 'string' && currentId !== null) {\n throw new Error(\n `Invalid 'backstage.pluginId' field in \"${pkg.packageJson.name}\", must be a string`,\n );\n }\n return;\n }\n\n const guessedPluginId = guessPluginId(role, pkg.packageJson.name);\n if (\n !guessedPluginId &&\n (role === 'frontend-plugin' ||\n role === 'frontend-plugin-module' ||\n role === 'backend-plugin' ||\n role === 'backend-plugin-module')\n ) {\n const path = relativePath(\n targetPaths.rootDir,\n resolvePath(pkg.dir, 'package.json'),\n );\n const msg = `Failed to guess plugin ID for \"${pkg.packageJson.name}\", please set the 'backstage.pluginId' field manually in \"${path}\"`;\n if (role.endsWith('module')) {\n const suggestedRole = role.startsWith('frontend')\n ? 'web-library'\n : 'node-library';\n throw new Error(\n `${msg}. It is also possible that this package is not a module, and should use the '${suggestedRole}' role instead.`,\n );\n } else {\n throw new Error(msg);\n }\n }\n\n if (guessedPluginId) {\n pkg.packageJson.backstage = {\n ...pkg.packageJson.backstage,\n pluginId: guessedPluginId,\n };\n pkg.changed = true;\n }\n}\n\nconst pluginPackageRoles: Array<string | undefined> = [\n 'frontend-plugin',\n 'backend-plugin',\n 'common-library',\n 'web-library',\n 'node-library',\n];\n\nexport function fixPluginPackages(\n pkg: FixablePackage,\n repoPackages: FixablePackage[],\n) {\n const pkgBackstage = pkg.packageJson.backstage;\n const role = pkgBackstage?.role;\n if (!role) {\n return;\n }\n\n if (\n role === 'backend' ||\n role === 'frontend' ||\n role === 'cli' ||\n role === 'cli-module'\n ) {\n return;\n }\n\n const pluginId = pkgBackstage.pluginId;\n if (!pluginId) {\n // Might be a plugin-less library, skip\n if (\n role === 'common-library' ||\n role === 'web-library' ||\n role === 'node-library' ||\n role === 'frontend-plugin-module' // TODO(Rugvip): Remove this once frontend modules are required to have a plugin ID\n ) {\n return;\n }\n throw new Error(\n `Missing 'backstage.pluginId' field in \"${pkg.packageJson.name}\"`,\n );\n }\n\n if (role === 'backend-plugin-module' || role === 'frontend-plugin-module') {\n const targetRole = role.replace('-module', '');\n\n // Try to find a plugin package in the same repo, but otherwise fall back to looking up the package name by ID of @backstage/* plugins\n const pluginPkgName =\n repoPackages.find(\n p =>\n p.packageJson.backstage?.pluginId === pluginId &&\n p.packageJson.backstage?.role === targetRole,\n )?.packageJson.name ??\n (role === 'backend-plugin-module'\n ? knownBackendPluginPackageNameByPluginId[pluginId]\n : knownFrontendPluginPackageNameByPluginId[pluginId]);\n if (!pluginPkgName) {\n // If we can't find a matching package in the repo but one is declared, skip\n if (pkgBackstage.pluginPackage) {\n return;\n }\n const path = relativePath(\n targetPaths.rootDir,\n resolvePath(pkg.dir, 'package.json'),\n );\n const suggestedRole =\n role === 'frontend-plugin-module' ? 'web-library' : 'node-library';\n throw new Error(\n `Failed to find plugin package for \"${pkg.packageJson.name}\", please declare the name of the plugin package that this package is a module for in the 'backstage.pluginPackage' field in \"${path}\". ` +\n `It is also possible that this package is not a module, and should use the '${suggestedRole}' role instead.`,\n );\n }\n\n if (pkgBackstage.pluginPackage !== pluginPkgName) {\n pkgBackstage.pluginPackage = pluginPkgName;\n pkg.changed = true;\n }\n } else {\n let pluginPackages: string[] | undefined = repoPackages\n .filter(\n p =>\n p.packageJson.backstage?.pluginId === pluginId &&\n pluginPackageRoles.includes(p.packageJson.backstage?.role),\n )\n .map(p => p.packageJson.name)\n .sort();\n\n if (pluginPackages.length === 0) {\n pluginPackages = undefined;\n }\n\n if (pkgBackstage.pluginPackages?.join(',') !== pluginPackages?.join(',')) {\n pkgBackstage.pluginPackages = pluginPackages;\n pkg.changed = true;\n }\n }\n}\n\nexport function fixPeerModules(pkg: FixablePackage) {\n const pkgBackstage = pkg.packageJson.backstage;\n const role = pkgBackstage?.role;\n if (!role) {\n return;\n }\n\n const peerModules = pkgBackstage.peerModules;\n if (peerModules === undefined) {\n return;\n }\n\n const packagePath = relativePath(\n targetPaths.rootDir,\n resolvePath(pkg.dir, 'package.json'),\n );\n\n // Validate that peerModules is only used on plugin packages\n if (role !== 'backend-plugin' && role !== 'frontend-plugin') {\n throw new Error(\n `The 'backstage.peerModules' field in \"${pkg.packageJson.name}\" can only be used on plugin packages (backend-plugin or frontend-plugin), but package has role '${role}' in \"${packagePath}\"`,\n );\n }\n\n // Validate that peerModules is an array\n if (!Array.isArray(peerModules)) {\n throw new Error(\n `Invalid 'backstage.peerModules' field in \"${pkg.packageJson.name}\", must be an array of package names in \"${packagePath}\"`,\n );\n }\n\n // Validate that all entries are non-empty strings\n for (const entry of peerModules) {\n if (typeof entry !== 'string' || entry.length === 0) {\n throw new Error(\n `Invalid entry in 'backstage.peerModules' field in \"${pkg.packageJson.name}\", all entries must be non-empty package name strings in \"${packagePath}\"`,\n );\n }\n }\n}\n\ntype PackageFixer = (pkg: FixablePackage, packages: FixablePackage[]) => void;\n\nexport default async ({\n args,\n info,\n}: import('@backstage/cli-node').CliCommandContext) => {\n const {\n flags: { publish, check },\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n flags: {\n publish: {\n type: Boolean,\n description:\n 'Enable additional fixes that only apply when publishing packages',\n },\n check: {\n type: Boolean,\n description:\n 'Fail if any packages would have been changed by the command',\n },\n },\n },\n undefined,\n args,\n );\n\n const packages = await readFixablePackages();\n const fixRepositoryField = createRepositoryFieldFixer();\n\n const fixers: PackageFixer[] = [fixPackageExports, fixSideEffects];\n\n if (publish) {\n fixers.push(\n fixRepositoryField,\n fixPluginId,\n fixPluginPackages,\n fixPeerModules,\n );\n }\n\n for (const fixer of fixers) {\n for (const pkg of packages) {\n fixer(pkg, packages);\n }\n }\n\n if (check) {\n if (printPackageFixHint(packages)) {\n process.exit(1);\n }\n } else {\n await writeFixedPackages(packages);\n }\n};\n"],"names":["PackageGraph","targetPaths","fs","resolvePath","path","extname","PackageRoles","posix","relativePath","knownBackendPluginPackageNameByPluginId","knownFrontendPluginPackageNameByPluginId","cli"],"mappings":"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"}
1
+ {"version":3,"file":"fix.cjs.js","sources":["../../../src/commands/repo/fix.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 {\n BackstagePackage,\n BackstagePackageJson,\n PackageGraph,\n PackageRole,\n PackageRoles,\n} from '@backstage/cli-node';\nimport { cli } from 'cleye';\nimport fs from 'fs-extra';\nimport {\n resolve as resolvePath,\n posix,\n relative as relativePath,\n extname,\n} from 'node:path';\nimport { targetPaths } from '@backstage/cli-common';\nimport {\n knownBackendPluginPackageNameByPluginId,\n knownFrontendPluginPackageNameByPluginId,\n} from '@internal/cli';\n\nconst SCRIPT_EXTS = ['.js', '.jsx', '.ts', '.tsx', '.json'];\n\n/**\n * A mutable object representing a package.json file with potential fixes.\n */\nexport interface FixablePackage extends BackstagePackage {\n changed: boolean;\n}\n\nexport async function readFixablePackages(): Promise<FixablePackage[]> {\n const packages = await PackageGraph.listTargetPackages();\n return packages.map(pkg => ({ ...pkg, changed: false }));\n}\n\nexport function printPackageFixHint(packages: FixablePackage[]) {\n const changed = packages.filter(pkg => pkg.changed);\n if (changed.length > 0) {\n const rootPkg = require(targetPaths.resolveRoot('package.json'));\n const fixCmd =\n rootPkg.scripts?.fix === 'backstage-cli repo fix'\n ? 'fix'\n : 'backstage-cli repo fix';\n console.log(\n `The following packages are out of sync, run 'yarn ${fixCmd}' to fix them:`,\n );\n for (const pkg of changed) {\n console.log(` ${pkg.packageJson.name}`);\n }\n return true;\n }\n return false;\n}\n\nexport async function writeFixedPackages(\n packages: FixablePackage[],\n): Promise<void> {\n await Promise.all(\n packages.map(async pkg => {\n if (!pkg.changed) {\n return;\n }\n\n await fs.writeJson(\n resolvePath(pkg.dir, 'package.json'),\n pkg.packageJson,\n {\n spaces: 2,\n },\n );\n }),\n );\n}\n\nfunction trimRelative(path: string): string {\n if (path.startsWith('./')) {\n return path.slice(2);\n }\n return path;\n}\n\nexport function fixPackageExports(pkg: FixablePackage) {\n let { exports: exp } = pkg.packageJson;\n if (!exp) {\n return;\n }\n if (Array.isArray(exp)) {\n throw new Error('Unexpected array in package.json exports field');\n }\n\n // If exports is a string we rewrite it to an object to add package.json\n if (typeof exp === 'string') {\n pkg.changed = true;\n exp = { '.': exp };\n pkg.packageJson.exports = exp;\n } else if (typeof exp !== 'object') {\n return;\n }\n\n if (!exp['./package.json']) {\n pkg.changed = true;\n exp['./package.json'] = './package.json';\n }\n\n const existingTypesVersions = JSON.stringify(pkg.packageJson.typesVersions);\n\n const typeEntries: Record<string, [string]> = {};\n for (const [path, value] of Object.entries(exp)) {\n // Main entry point does not need to be listed\n if (path === '.') {\n continue;\n }\n const newPath = trimRelative(path);\n\n // Only script files and package.json should be added to typesVersions\n if (typeof value === 'string') {\n if (SCRIPT_EXTS.includes(extname(value))) {\n typeEntries[newPath] = [trimRelative(value)];\n }\n } else if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (typeof value.types === 'string') {\n typeEntries[newPath] = [trimRelative(value.types)];\n } else if (\n typeof value.default === 'string' &&\n SCRIPT_EXTS.includes(extname(value.default))\n ) {\n typeEntries[newPath] = [trimRelative(value.default)];\n }\n }\n }\n\n const hasTypeEntries = Object.keys(typeEntries).length > 0;\n const typesVersions = hasTypeEntries ? { '*': typeEntries } : undefined;\n\n if (existingTypesVersions !== JSON.stringify(typesVersions)) {\n if (pkg.packageJson.typesVersions) {\n // Update in place to preserve field order\n if (typesVersions) {\n pkg.packageJson.typesVersions = typesVersions;\n } else {\n delete pkg.packageJson.typesVersions;\n }\n } else if (typesVersions) {\n // Insert after exports when adding for the first time\n const newPkgEntries = Object.entries(pkg.packageJson);\n newPkgEntries.splice(\n newPkgEntries.findIndex(([name]) => name === 'exports') + 1,\n 0,\n ['typesVersions', typesVersions],\n );\n pkg.packageJson = Object.fromEntries(\n newPkgEntries,\n ) as BackstagePackageJson;\n }\n pkg.changed = true;\n }\n\n // Remove the legacy fields from publishConfig, which are no longer needed\n const publishConfig = pkg.packageJson.publishConfig as\n | Record<string, string>\n | undefined;\n if (publishConfig) {\n for (const field of ['main', 'module', 'browser', 'types']) {\n if (publishConfig[field]) {\n delete publishConfig[field];\n pkg.changed = true;\n }\n }\n }\n}\n\nexport function fixSideEffects(pkg: FixablePackage) {\n const role = PackageRoles.getRoleFromPackage(pkg.packageJson);\n if (!role) {\n return;\n }\n\n const roleInfo = PackageRoles.getRoleInfo(role);\n\n // Only web and common packages benefit from being marked as side effect free\n if (roleInfo.platform === 'node') {\n return;\n }\n // Bundled packages don't need to mark themselves as having no side effects\n if (roleInfo.output.length === 1 && roleInfo.output[0] === 'bundle') {\n return;\n }\n\n // Already declared\n if ('sideEffects' in pkg.packageJson) {\n return;\n }\n\n const pkgEntries = Object.entries(pkg.packageJson);\n pkgEntries.splice(\n // Place it just above the scripts field\n pkgEntries.findIndex(([name]) => name === 'scripts'),\n 0,\n ['sideEffects', false],\n );\n pkg.packageJson = Object.fromEntries(pkgEntries) as BackstagePackageJson;\n pkg.changed = true;\n}\n\nexport function createRepositoryFieldFixer() {\n const rootPkg = require(targetPaths.resolveRoot('package.json'));\n const rootRepoField = rootPkg.repository;\n if (!rootRepoField) {\n return () => {};\n }\n\n const rootType = rootRepoField.type || 'git';\n const rootUrl = rootRepoField.url;\n const rootDir = rootRepoField.directory || '';\n\n return (pkg: FixablePackage) => {\n const expectedPath = posix.join(\n rootDir,\n relativePath(targetPaths.rootDir, pkg.dir),\n );\n const repoField = pkg.packageJson.repository;\n\n if (!repoField || typeof repoField === 'string') {\n const pkgEntries = Object.entries(pkg.packageJson);\n pkgEntries.splice(\n // Place it just above the backstage field\n pkgEntries.findIndex(([name]) => name === 'backstage'),\n 0,\n [\n 'repository',\n {\n type: rootType,\n url: rootUrl,\n directory: expectedPath,\n },\n ],\n );\n pkg.packageJson = Object.fromEntries(pkgEntries) as BackstagePackageJson;\n pkg.changed = true;\n return;\n }\n\n // If there's a type or URL mismatch, leave the field as is\n if (repoField.type !== rootType || repoField.url !== rootUrl) {\n return;\n }\n\n if (repoField.directory !== expectedPath) {\n repoField.directory = expectedPath;\n pkg.changed = true;\n }\n };\n}\n\nfunction guessPluginId(role: PackageRole, pkgName: string): string | undefined {\n switch (role) {\n case 'frontend':\n case 'frontend-plugin':\n return pkgName.match(/plugin-(.*)/)?.[1];\n case 'frontend-plugin-module':\n return pkgName.match(/plugin-(.*)-module-/)?.[1];\n case 'backend-plugin':\n return pkgName.match(/plugin-(.*)-backend$/)?.[1];\n case 'backend-plugin-module':\n return pkgName.match(/plugin-(.*)-backend-module-/)?.[1];\n case 'common-library':\n return pkgName.match(/plugin-(.*)-(?:common)$/)?.[1];\n case 'web-library':\n return pkgName.match(/plugin-(.*)-(?:react|test-utils)/)?.[1];\n case 'node-library':\n return pkgName.match(/plugin-(.*)-(?:node|backend)-?/)?.[1];\n default:\n throw new Error(\n `Invalid 'backstage.role' field in \"${pkgName}\", got '${role}'`,\n );\n }\n}\n\nexport function fixPluginId(pkg: FixablePackage) {\n const role = pkg.packageJson.backstage?.role;\n if (!role) {\n return;\n }\n\n if (\n role === 'backend' ||\n role === 'frontend' ||\n role === 'cli' ||\n role === 'cli-module'\n ) {\n return;\n }\n\n const currentId = pkg.packageJson.backstage?.pluginId;\n if (currentId !== undefined) {\n if (typeof currentId !== 'string' && currentId !== null) {\n throw new Error(\n `Invalid 'backstage.pluginId' field in \"${pkg.packageJson.name}\", must be a string`,\n );\n }\n return;\n }\n\n const guessedPluginId = guessPluginId(role, pkg.packageJson.name);\n if (\n !guessedPluginId &&\n (role === 'frontend-plugin' ||\n role === 'frontend-plugin-module' ||\n role === 'backend-plugin' ||\n role === 'backend-plugin-module')\n ) {\n const path = relativePath(\n targetPaths.rootDir,\n resolvePath(pkg.dir, 'package.json'),\n );\n const msg = `Failed to guess plugin ID for \"${pkg.packageJson.name}\", please set the 'backstage.pluginId' field manually in \"${path}\"`;\n if (role.endsWith('module')) {\n const suggestedRole = role.startsWith('frontend')\n ? 'web-library'\n : 'node-library';\n throw new Error(\n `${msg}. It is also possible that this package is not a module, and should use the '${suggestedRole}' role instead.`,\n );\n } else {\n throw new Error(msg);\n }\n }\n\n if (guessedPluginId) {\n pkg.packageJson.backstage = {\n ...pkg.packageJson.backstage,\n pluginId: guessedPluginId,\n };\n pkg.changed = true;\n }\n}\n\nconst pluginPackageRoles: Array<string | undefined> = [\n 'frontend-plugin',\n 'backend-plugin',\n 'common-library',\n 'web-library',\n 'node-library',\n];\n\nexport function fixPluginPackages(\n pkg: FixablePackage,\n repoPackages: FixablePackage[],\n) {\n const pkgBackstage = pkg.packageJson.backstage;\n const role = pkgBackstage?.role;\n if (!role) {\n return;\n }\n\n if (\n role === 'backend' ||\n role === 'frontend' ||\n role === 'cli' ||\n role === 'cli-module'\n ) {\n return;\n }\n\n const pluginId = pkgBackstage.pluginId;\n if (!pluginId) {\n // Might be a plugin-less library, skip\n if (\n role === 'common-library' ||\n role === 'web-library' ||\n role === 'node-library' ||\n role === 'frontend-plugin-module' // TODO(Rugvip): Remove this once frontend modules are required to have a plugin ID\n ) {\n return;\n }\n throw new Error(\n `Missing 'backstage.pluginId' field in \"${pkg.packageJson.name}\"`,\n );\n }\n\n if (role === 'backend-plugin-module' || role === 'frontend-plugin-module') {\n const targetRole = role.replace('-module', '');\n\n // Try to find a plugin package in the same repo, but otherwise fall back to looking up the package name by ID of @backstage/* plugins\n const pluginPkgName =\n repoPackages.find(\n p =>\n p.packageJson.backstage?.pluginId === pluginId &&\n p.packageJson.backstage?.role === targetRole,\n )?.packageJson.name ??\n (role === 'backend-plugin-module'\n ? knownBackendPluginPackageNameByPluginId[pluginId]\n : knownFrontendPluginPackageNameByPluginId[pluginId]);\n if (!pluginPkgName) {\n // If we can't find a matching package in the repo but one is declared, skip\n if (pkgBackstage.pluginPackage) {\n return;\n }\n const path = relativePath(\n targetPaths.rootDir,\n resolvePath(pkg.dir, 'package.json'),\n );\n const suggestedRole =\n role === 'frontend-plugin-module' ? 'web-library' : 'node-library';\n throw new Error(\n `Failed to find plugin package for \"${pkg.packageJson.name}\", please declare the name of the plugin package that this package is a module for in the 'backstage.pluginPackage' field in \"${path}\". ` +\n `It is also possible that this package is not a module, and should use the '${suggestedRole}' role instead.`,\n );\n }\n\n if (pkgBackstage.pluginPackage !== pluginPkgName) {\n pkgBackstage.pluginPackage = pluginPkgName;\n pkg.changed = true;\n }\n } else {\n let pluginPackages: string[] | undefined = repoPackages\n .filter(\n p =>\n p.packageJson.backstage?.pluginId === pluginId &&\n pluginPackageRoles.includes(p.packageJson.backstage?.role),\n )\n .map(p => p.packageJson.name)\n .sort();\n\n if (pluginPackages.length === 0) {\n pluginPackages = undefined;\n }\n\n if (pkgBackstage.pluginPackages?.join(',') !== pluginPackages?.join(',')) {\n pkgBackstage.pluginPackages = pluginPackages;\n pkg.changed = true;\n }\n }\n}\n\nexport function fixPeerModules(pkg: FixablePackage) {\n const pkgBackstage = pkg.packageJson.backstage;\n const role = pkgBackstage?.role;\n if (!role) {\n return;\n }\n\n const peerModules = pkgBackstage.peerModules;\n if (peerModules === undefined) {\n return;\n }\n\n const packagePath = relativePath(\n targetPaths.rootDir,\n resolvePath(pkg.dir, 'package.json'),\n );\n\n // Validate that peerModules is only used on plugin packages\n if (role !== 'backend-plugin' && role !== 'frontend-plugin') {\n throw new Error(\n `The 'backstage.peerModules' field in \"${pkg.packageJson.name}\" can only be used on plugin packages (backend-plugin or frontend-plugin), but package has role '${role}' in \"${packagePath}\"`,\n );\n }\n\n // Validate that peerModules is an array\n if (!Array.isArray(peerModules)) {\n throw new Error(\n `Invalid 'backstage.peerModules' field in \"${pkg.packageJson.name}\", must be an array of package names in \"${packagePath}\"`,\n );\n }\n\n // Validate that all entries are non-empty strings\n for (const entry of peerModules) {\n if (typeof entry !== 'string' || entry.length === 0) {\n throw new Error(\n `Invalid entry in 'backstage.peerModules' field in \"${pkg.packageJson.name}\", all entries must be non-empty package name strings in \"${packagePath}\"`,\n );\n }\n }\n}\n\ntype PackageFixer = (pkg: FixablePackage, packages: FixablePackage[]) => void;\n\nexport default async ({\n args,\n info,\n}: import('@backstage/cli-node').CliCommandContext) => {\n const {\n flags: { publish, check },\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n flags: {\n publish: {\n type: Boolean,\n description:\n 'Enable additional fixes that only apply when publishing packages',\n },\n check: {\n type: Boolean,\n description:\n 'Fail if any packages would have been changed by the command',\n },\n },\n },\n undefined,\n args,\n );\n\n const packages = await readFixablePackages();\n const fixRepositoryField = createRepositoryFieldFixer();\n\n const fixers: PackageFixer[] = [fixPackageExports, fixSideEffects];\n\n if (publish) {\n fixers.push(\n fixRepositoryField,\n fixPluginId,\n fixPluginPackages,\n fixPeerModules,\n );\n }\n\n for (const fixer of fixers) {\n for (const pkg of packages) {\n fixer(pkg, packages);\n }\n }\n\n if (check) {\n if (printPackageFixHint(packages)) {\n process.exit(1);\n }\n } else {\n await writeFixedPackages(packages);\n }\n};\n"],"names":["PackageGraph","targetPaths","fs","resolvePath","path","extname","PackageRoles","posix","relativePath","knownBackendPluginPackageNameByPluginId","knownFrontendPluginPackageNameByPluginId","cli"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-deprecations.cjs.js","sources":["../../../src/commands/repo/list-deprecations.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 { ESLint } from 'eslint';\nimport { cli } from 'cleye';\nimport { relative as relativePath } from 'node:path';\nimport { PackageGraph } from '@backstage/cli-node';\nimport { targetPaths } from '@backstage/cli-common';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: { json },\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n flags: {\n json: { type: Boolean, description: 'Output as JSON' },\n },\n },\n undefined,\n args,\n );\n\n const packages = await PackageGraph.listTargetPackages();\n\n const eslint = new ESLint({\n cwd: targetPaths.dir,\n overrideConfig: {\n plugins: ['@typescript-eslint'],\n rules: {\n '@typescript-eslint/no-deprecated': 'error',\n },\n parserOptions: {\n project: [targetPaths.resolveRoot('tsconfig.json')],\n },\n },\n extensions: ['jsx', 'ts', 'tsx', 'mjs', 'cjs'],\n });\n\n const { stderr } = process;\n if (stderr.isTTY) {\n stderr.write('Initializing TypeScript...');\n }\n\n const deprecations = [];\n for (const [index, pkg] of packages.entries()) {\n const results = await eslint.lintFiles(pkg.dir);\n for (const result of results) {\n for (const message of result.messages) {\n if (message.ruleId !== '@typescript-eslint/no-deprecated') {\n continue;\n }\n\n const path = relativePath(targetPaths.rootDir, result.filePath);\n deprecations.push({\n path,\n message: message.message,\n line: message.line,\n column: message.column,\n });\n }\n }\n\n if (stderr.isTTY) {\n stderr.clearLine(0);\n stderr.cursorTo(0);\n stderr.write(`Scanning packages ${index + 1}/${packages.length}`);\n }\n }\n\n if (stderr.isTTY) {\n stderr.clearLine(0);\n stderr.cursorTo(0);\n }\n\n if (json) {\n console.log(JSON.stringify(deprecations, null, 2));\n } else {\n for (const d of deprecations) {\n const location = `${d.path}:${d.line}:${d.column}`;\n const wrappedMessage = d.message.replace(/\\r?\\n\\s*/g, ' ');\n console.log(`${location} - ${chalk.yellow(wrappedMessage)}`);\n }\n }\n\n if (deprecations.length > 0) {\n process.exit(1);\n }\n};\n"],"names":["cli","PackageGraph","eslint","ESLint","targetPaths","path","relativePath","chalk"],"mappings":"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"}
1
+ {"version":3,"file":"list-deprecations.cjs.js","sources":["../../../src/commands/repo/list-deprecations.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 { ESLint } from 'eslint';\nimport { cli } from 'cleye';\nimport { relative as relativePath } from 'node:path';\nimport { PackageGraph } from '@backstage/cli-node';\nimport { targetPaths } from '@backstage/cli-common';\nimport type { CliCommandContext } from '@backstage/cli-node';\n\nexport default async ({ args, info }: CliCommandContext) => {\n const {\n flags: { json },\n } = cli(\n {\n name: info.usage,\n booleanFlagNegation: true,\n flags: {\n json: { type: Boolean, description: 'Output as JSON' },\n },\n },\n undefined,\n args,\n );\n\n const packages = await PackageGraph.listTargetPackages();\n\n const eslint = new ESLint({\n cwd: targetPaths.dir,\n overrideConfig: {\n plugins: ['@typescript-eslint'],\n rules: {\n '@typescript-eslint/no-deprecated': 'error',\n },\n parserOptions: {\n project: [targetPaths.resolveRoot('tsconfig.json')],\n },\n },\n extensions: ['jsx', 'ts', 'tsx', 'mjs', 'cjs'],\n });\n\n const { stderr } = process;\n if (stderr.isTTY) {\n stderr.write('Initializing TypeScript...');\n }\n\n const deprecations = [];\n for (const [index, pkg] of packages.entries()) {\n const results = await eslint.lintFiles(pkg.dir);\n for (const result of results) {\n for (const message of result.messages) {\n if (message.ruleId !== '@typescript-eslint/no-deprecated') {\n continue;\n }\n\n const path = relativePath(targetPaths.rootDir, result.filePath);\n deprecations.push({\n path,\n message: message.message,\n line: message.line,\n column: message.column,\n });\n }\n }\n\n if (stderr.isTTY) {\n stderr.clearLine(0);\n stderr.cursorTo(0);\n stderr.write(`Scanning packages ${index + 1}/${packages.length}`);\n }\n }\n\n if (stderr.isTTY) {\n stderr.clearLine(0);\n stderr.cursorTo(0);\n }\n\n if (json) {\n console.log(JSON.stringify(deprecations, null, 2));\n } else {\n for (const d of deprecations) {\n const location = `${d.path}:${d.line}:${d.column}`;\n const wrappedMessage = d.message.replace(/\\r?\\n\\s*/g, ' ');\n console.log(`${location} - ${chalk.yellow(wrappedMessage)}`);\n }\n }\n\n if (deprecations.length > 0) {\n process.exit(1);\n }\n};\n"],"names":["cli","PackageGraph","eslint","ESLint","targetPaths","path","relativePath","chalk"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/index.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createCliModule } from '@backstage/cli-node';\nimport packageJson from '../package.json';\n\nexport default createCliModule({\n packageJson,\n init: async reg => {\n reg.addCommand({\n path: ['repo', 'fix'],\n description: 'Automatically fix packages in the project',\n execute: { loader: () => import('./commands/repo/fix') },\n });\n\n reg.addCommand({\n path: ['repo', 'list-deprecations'],\n description: 'List deprecations',\n execute: { loader: () => import('./commands/repo/list-deprecations') },\n });\n },\n});\n"],"names":["createCliModule","packageJson"],"mappings":";;;;;;;AAkBA,YAAeA,uBAAA,CAAgB;AAAA,eAC7BC,gBAAA;AAAA,EACA,IAAA,EAAM,OAAM,GAAA,KAAO;AACjB,IAAA,GAAA,CAAI,UAAA,CAAW;AAAA,MACb,IAAA,EAAM,CAAC,MAAA,EAAQ,KAAK,CAAA;AAAA,MACpB,WAAA,EAAa,2CAAA;AAAA,MACb,SAAS,EAAE,MAAA,EAAQ,MAAM,OAAO,4BAAqB,CAAA;AAAE,KACxD,CAAA;AAED,IAAA,GAAA,CAAI,UAAA,CAAW;AAAA,MACb,IAAA,EAAM,CAAC,MAAA,EAAQ,mBAAmB,CAAA;AAAA,MAClC,WAAA,EAAa,mBAAA;AAAA,MACb,SAAS,EAAE,MAAA,EAAQ,MAAM,OAAO,0CAAmC,CAAA;AAAE,KACtE,CAAA;AAAA,EACH;AACF,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/index.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createCliModule } from '@backstage/cli-node';\nimport packageJson from '../package.json';\n\nexport default createCliModule({\n packageJson,\n init: async reg => {\n reg.addCommand({\n path: ['repo', 'fix'],\n description: 'Automatically fix packages in the project',\n execute: { loader: () => import('./commands/repo/fix') },\n });\n\n reg.addCommand({\n path: ['repo', 'list-deprecations'],\n description: 'List deprecations',\n execute: { loader: () => import('./commands/repo/list-deprecations') },\n });\n },\n});\n"],"names":["createCliModule","packageJson"],"mappings":";;;;;;;AAkBA,YAAeA,uBAAA,CAAgB;AAAA,eAC7BC,gBAAA;AAAA,EACA,IAAA,EAAM,OAAM,GAAA,KAAO;AACjB,IAAA,GAAA,CAAI,UAAA,CAAW;AAAA,MACb,IAAA,EAAM,CAAC,MAAA,EAAQ,KAAK,CAAA;AAAA,MACpB,WAAA,EAAa,2CAAA;AAAA,MACb,SAAS,EAAE,MAAA,EAAQ,MAAM,OAAO,4BAAqB,CAAA;AAAE,KACxD,CAAA;AAED,IAAA,GAAA,CAAI,UAAA,CAAW;AAAA,MACb,IAAA,EAAM,CAAC,MAAA,EAAQ,mBAAmB,CAAA;AAAA,MAClC,WAAA,EAAa,mBAAA;AAAA,MACb,SAAS,EAAE,MAAA,EAAQ,MAAM,OAAO,0CAAmC,CAAA;AAAE,KACtE,CAAA;AAAA,EACH;AACF,CAAC,CAAA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"OpaqueType.cjs.js","sources":["../../../../opaque-internal/src/OpaqueType.ts"],"sourcesContent":["/*\n * Copyright 2024 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\n// TODO(Rugvip): This lives here temporarily, but should be moved to a more\n// central location. It's useful for backend packages too so we'll need to have\n// it in a common package, but it might also be that we want to make it\n// available publicly too in which case it would make sense to have this be part\n// of @backstage/version-bridge. The problem with exporting it from there is\n// that it would need to be very stable at that point, so it might be a bit\n// early to put it there already.\n\n/**\n * A helper for working with opaque types.\n */\nexport class OpaqueType<\n T extends {\n public: { $$type: string };\n versions: { version: string | undefined };\n },\n> {\n /**\n * Creates a new opaque type.\n *\n * @param options.type The type identifier of the opaque type\n * @param options.versions The available versions of the opaque type\n * @returns A new opaque type helper\n */\n static create<\n T extends {\n public: { $$type: string };\n versions: { version: string | undefined };\n },\n >(options: {\n type: T['public']['$$type'];\n versions: Array<T['versions']['version']>;\n }) {\n return new OpaqueType<T>(options.type, new Set(options.versions));\n }\n\n #type: string;\n #versions: Set<string | undefined>;\n\n private constructor(type: string, versions: Set<string | undefined>) {\n this.#type = type;\n this.#versions = versions;\n }\n\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TPublic`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TPublic: T['public'] = undefined as any;\n\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TInternal`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TInternal: T['public'] & T['versions'] = undefined as any;\n\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @returns True if the value matches this opaque type\n */\n isType = (value: unknown): value is T['public'] => {\n return this.#isThisInternalType(value);\n };\n\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @throws If the value is not an instance of this opaque type or is of an unsupported version\n * @returns The internal version of the opaque type\n */\n toInternal = (value: unknown): T['public'] & T['versions'] => {\n if (!this.#isThisInternalType(value)) {\n throw new TypeError(\n `Invalid opaque type, expected '${\n this.#type\n }', but got '${this.#stringifyUnknown(value)}'`,\n );\n }\n\n if (!this.#versions.has(value.version)) {\n const versions = Array.from(this.#versions).map(this.#stringifyVersion);\n if (versions.length > 1) {\n versions[versions.length - 1] = `or ${versions[versions.length - 1]}`;\n }\n const expected =\n versions.length > 2 ? versions.join(', ') : versions.join(' ');\n throw new TypeError(\n `Invalid opaque type instance, got version ${this.#stringifyVersion(\n value.version,\n )}, expected ${expected}`,\n );\n }\n\n return value;\n };\n\n /**\n * Creates an instance of the opaque type, returning the public type.\n *\n * @param version The version of the instance to create\n * @param value The remaining public and internal properties of the instance\n * @returns An instance of the opaque type\n */\n createInstance<\n TVersion extends T['versions']['version'],\n TPublic extends T['public'],\n >(\n version: TVersion,\n props: Omit<T['public'], '$$type'> &\n (T['versions'] extends infer UVersion\n ? UVersion extends { version: TVersion }\n ? Omit<UVersion, 'version'>\n : never\n : never) &\n Object, // & Object to allow for object properties too, e.g. toString()\n ): TPublic {\n return Object.assign(props as object, {\n $$type: this.#type,\n ...(version && { version }),\n }) as unknown as TPublic;\n }\n\n #isThisInternalType(value: unknown): value is T['public'] & T['versions'] {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n return (value as T['public']).$$type === this.#type;\n }\n\n #stringifyUnknown(value: unknown) {\n if (typeof value !== 'object') {\n return `<${typeof value}>`;\n }\n if (value === null) {\n return '<null>';\n }\n if ('$$type' in value) {\n return String(value.$$type);\n }\n return String(value);\n }\n\n #stringifyVersion = (version: string | undefined) => {\n return version ? `'${version}'` : 'undefined';\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpaqueType.cjs.js","sources":["../../../../opaque-internal/src/OpaqueType.ts"],"sourcesContent":["/*\n * Copyright 2024 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\n// TODO(Rugvip): This lives here temporarily, but should be moved to a more\n// central location. It's useful for backend packages too so we'll need to have\n// it in a common package, but it might also be that we want to make it\n// available publicly too in which case it would make sense to have this be part\n// of @backstage/version-bridge. The problem with exporting it from there is\n// that it would need to be very stable at that point, so it might be a bit\n// early to put it there already.\n\n/**\n * A helper for working with opaque types.\n */\nexport class OpaqueType<\n T extends {\n public: { $$type: string };\n versions: { version: string | undefined };\n },\n> {\n /**\n * Creates a new opaque type.\n *\n * @param options.type The type identifier of the opaque type\n * @param options.versions The available versions of the opaque type\n * @returns A new opaque type helper\n */\n static create<\n T extends {\n public: { $$type: string };\n versions: { version: string | undefined };\n },\n >(options: {\n type: T['public']['$$type'];\n versions: Array<T['versions']['version']>;\n }) {\n return new OpaqueType<T>(options.type, new Set(options.versions));\n }\n\n #type: string;\n #versions: Set<string | undefined>;\n\n private constructor(type: string, versions: Set<string | undefined>) {\n this.#type = type;\n this.#versions = versions;\n }\n\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TPublic`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TPublic: T['public'] = undefined as any;\n\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TInternal`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TInternal: T['public'] & T['versions'] = undefined as any;\n\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @returns True if the value matches this opaque type\n */\n isType = (value: unknown): value is T['public'] => {\n return this.#isThisInternalType(value);\n };\n\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @throws If the value is not an instance of this opaque type or is of an unsupported version\n * @returns The internal version of the opaque type\n */\n toInternal = (value: unknown): T['public'] & T['versions'] => {\n if (!this.#isThisInternalType(value)) {\n throw new TypeError(\n `Invalid opaque type, expected '${\n this.#type\n }', but got '${this.#stringifyUnknown(value)}'`,\n );\n }\n\n if (!this.#versions.has(value.version)) {\n const versions = Array.from(this.#versions).map(this.#stringifyVersion);\n if (versions.length > 1) {\n versions[versions.length - 1] = `or ${versions[versions.length - 1]}`;\n }\n const expected =\n versions.length > 2 ? versions.join(', ') : versions.join(' ');\n throw new TypeError(\n `Invalid opaque type instance, got version ${this.#stringifyVersion(\n value.version,\n )}, expected ${expected}`,\n );\n }\n\n return value;\n };\n\n /**\n * Creates an instance of the opaque type, returning the public type.\n *\n * @param version The version of the instance to create\n * @param value The remaining public and internal properties of the instance\n * @returns An instance of the opaque type\n */\n createInstance<\n TVersion extends T['versions']['version'],\n TPublic extends T['public'],\n >(\n version: TVersion,\n props: Omit<T['public'], '$$type'> &\n (T['versions'] extends infer UVersion\n ? UVersion extends { version: TVersion }\n ? Omit<UVersion, 'version'>\n : never\n : never) &\n Object, // & Object to allow for object properties too, e.g. toString()\n ): TPublic {\n return Object.assign(props as object, {\n $$type: this.#type,\n ...(version && { version }),\n }) as unknown as TPublic;\n }\n\n #isThisInternalType(value: unknown): value is T['public'] & T['versions'] {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n return (value as T['public']).$$type === this.#type;\n }\n\n #stringifyUnknown(value: unknown) {\n if (typeof value !== 'object') {\n return `<${typeof value}>`;\n }\n if (value === null) {\n return '<null>';\n }\n if ('$$type' in value) {\n return String(value.$$type);\n }\n return String(value);\n }\n\n #stringifyVersion = (version: string | undefined) => {\n return version ? `'${version}'` : 'undefined';\n };\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli-module-maintenance",
3
- "version": "0.1.5-next.0",
3
+ "version": "0.1.6-next.0",
4
4
  "description": "CLI module for Backstage CLI",
5
5
  "backstage": {
6
6
  "role": "cli-module"
@@ -33,8 +33,8 @@
33
33
  "test": "backstage-cli package test"
34
34
  },
35
35
  "dependencies": {
36
- "@backstage/cli-common": "0.3.0",
37
- "@backstage/cli-node": "0.3.4",
36
+ "@backstage/cli-common": "0.3.2-next.0",
37
+ "@backstage/cli-node": "0.3.5-next.0",
38
38
  "@typescript-eslint/eslint-plugin": "^8.17.0",
39
39
  "chalk": "^4.0.0",
40
40
  "cleye": "^2.6.0",
@@ -42,7 +42,7 @@
42
42
  "fs-extra": "^11.2.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@backstage/cli": "0.36.6-next.1",
45
+ "@backstage/cli": "0.36.7-next.0",
46
46
  "@types/fs-extra": "^11.0.0"
47
47
  },
48
48
  "typesVersions": {