@backstage/cli-node
Advanced tools
+10
-0
| # @backstage/cli-node | ||
| ## 0.1.2-next.1 | ||
| ### Patch Changes | ||
| - 4edd1ef71453: semver upgrade to 7.5.3 | ||
| - Updated dependencies | ||
| - @backstage/cli-common@0.1.12 | ||
| - @backstage/errors@1.2.1-next.0 | ||
| - @backstage/types@1.1.0 | ||
| ## 0.1.2-next.0 | ||
@@ -4,0 +14,0 @@ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.cjs.js","sources":["../src/paths.ts","../src/run.ts","../src/git/GitUtils.ts","../src/monorepo/isMonoRepo.ts","../src/monorepo/Lockfile.ts","../src/monorepo/PackageGraph.ts","../src/roles/PackageRoles.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 { findPaths } from '@backstage/cli-common';\n\n/* eslint-disable-next-line no-restricted-syntax */\nexport const paths = findPaths(__dirname);\n","/*\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 { execFile as execFileCb } from 'child_process';\nimport { promisify } from 'util';\n\nexport const execFile = promisify(execFileCb);\n","/*\n * Copyright 2022 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 { assertError, ForwardedError } from '@backstage/errors';\nimport { paths } from '../paths';\nimport { execFile } from '../run';\n\n/**\n * Run a git command, trimming the output splitting it into lines.\n */\nexport async function runGit(...args: string[]) {\n try {\n const { stdout } = await execFile('git', args, {\n shell: true,\n cwd: paths.targetRoot,\n });\n return stdout.trim().split(/\\r\\n|\\r|\\n/);\n } catch (error) {\n assertError(error);\n if (error.stderr || typeof error.code === 'number') {\n const stderr = (error.stderr as undefined | Buffer)?.toString('utf8');\n const msg = stderr?.trim() ?? `with exit code ${error.code}`;\n throw new Error(`git ${args[0]} failed, ${msg}`);\n }\n throw new ForwardedError('Unknown execution error', error);\n }\n}\n\n/**\n * Utilities for working with git.\n *\n * @public\n */\nexport class GitUtils {\n /**\n * Returns a sorted list of all files that have changed since the merge base\n * of the provided `ref` and HEAD, as well as all files that are not tracked by git.\n */\n static async listChangedFiles(ref: string) {\n if (!ref) {\n throw new Error('ref is required');\n }\n\n let diffRef = ref;\n try {\n const [base] = await runGit('merge-base', 'HEAD', ref);\n diffRef = base;\n } catch {\n // silently fall back to using the ref directly if merge base is not available\n }\n\n const tracked = await runGit('diff', '--name-only', diffRef);\n const untracked = await runGit(\n 'ls-files',\n '--others',\n '--exclude-standard',\n );\n\n return Array.from(new Set([...tracked, ...untracked]));\n }\n\n /**\n * Returns the contents of a file at a specific ref.\n */\n static async readFileAtRef(path: string, ref: string) {\n let showRef = ref;\n try {\n const [base] = await runGit('merge-base', 'HEAD', ref);\n showRef = base;\n } catch {\n // silently fall back to using the ref directly if merge base is not available\n }\n\n const { stdout } = await execFile('git', ['show', `${showRef}:${path}`], {\n shell: true,\n cwd: paths.targetRoot,\n maxBuffer: 1024 * 1024 * 50,\n });\n return stdout;\n }\n}\n","/*\n * Copyright 2022 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 { paths } from '../paths';\nimport fs from 'fs-extra';\n\n/**\n * Returns try if the current project is a monorepo.\n *\n * @public\n */\nexport async function isMonoRepo(): Promise<boolean> {\n const rootPackageJsonPath = paths.resolveTargetRoot('package.json');\n try {\n const pkg = await fs.readJson(rootPackageJsonPath);\n return Boolean(pkg?.workspaces?.packages);\n } catch (error) {\n return false;\n }\n}\n","/*\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 { parseSyml } from '@yarnpkg/parsers';\nimport fs from 'fs-extra';\n\nconst ENTRY_PATTERN = /^((?:@[^/]+\\/)?[^@/]+)@(.+)$/;\n\n/** @internal */\ntype LockfileData = {\n [entry: string]: {\n version: string;\n resolved?: string;\n integrity?: string /* old */;\n checksum?: string /* new */;\n dependencies?: { [name: string]: string };\n peerDependencies?: { [name: string]: string };\n };\n};\n\n/** @internal */\ntype LockfileQueryEntry = {\n range: string;\n version: string;\n dataKey: string;\n};\n\n/**\n * An entry for a single difference between two {@link Lockfile}s.\n *\n * @public\n */\nexport type LockfileDiffEntry = {\n name: string;\n range: string;\n};\n\n/**\n * Represents the difference between two {@link Lockfile}s.\n *\n * @public\n */\nexport type LockfileDiff = {\n added: LockfileDiffEntry[];\n changed: LockfileDiffEntry[];\n removed: LockfileDiffEntry[];\n};\n\n// these are special top level yarn keys.\n// https://github.com/yarnpkg/berry/blob/9bd61fbffb83d0b8166a9cc26bec3a58743aa453/packages/yarnpkg-parsers/sources/syml.ts#L9\nconst SPECIAL_OBJECT_KEYS = [\n `__metadata`,\n `version`,\n `resolution`,\n `dependencies`,\n `peerDependencies`,\n `dependenciesMeta`,\n `peerDependenciesMeta`,\n `binaries`,\n];\n\n/**\n * Represents a package manager lockfile.\n *\n * @public\n */\nexport class Lockfile {\n /**\n * Load a {@link Lockfile} from a file path.\n */\n static async load(path: string): Promise<Lockfile> {\n const lockfileContents = await fs.readFile(path, 'utf8');\n return Lockfile.parse(lockfileContents);\n }\n\n /**\n * Parse lockfile contents into a {@link Lockfile}.\n *\n * @public\n */\n static parse(content: string): Lockfile {\n let data: LockfileData;\n try {\n data = parseSyml(content);\n } catch (err) {\n throw new Error(`Failed yarn.lock parse, ${err}`);\n }\n\n const packages = new Map<string, LockfileQueryEntry[]>();\n\n for (const [key, value] of Object.entries(data)) {\n if (SPECIAL_OBJECT_KEYS.includes(key)) continue;\n\n const [, name, ranges] = ENTRY_PATTERN.exec(key) ?? [];\n if (!name) {\n throw new Error(`Failed to parse yarn.lock entry '${key}'`);\n }\n\n let queries = packages.get(name);\n if (!queries) {\n queries = [];\n packages.set(name, queries);\n }\n for (let range of ranges.split(/\\s*,\\s*/)) {\n if (range.startsWith(`${name}@`)) {\n range = range.slice(`${name}@`.length);\n }\n if (range.startsWith('npm:')) {\n range = range.slice('npm:'.length);\n }\n queries.push({ range, version: value.version, dataKey: key });\n }\n }\n\n return new Lockfile(packages, data);\n }\n\n private constructor(\n private readonly packages: Map<string, LockfileQueryEntry[]>,\n private readonly data: LockfileData,\n ) {}\n\n /**\n * Creates a simplified dependency graph from the lockfile data, where each\n * key is a package, and the value is a set of all packages that it depends on\n * across all versions.\n */\n createSimplifiedDependencyGraph(): Map<string, Set<string>> {\n const graph = new Map<string, Set<string>>();\n\n for (const [name, entries] of this.packages) {\n const dependencies = new Set(\n entries.flatMap(e => {\n const data = this.data[e.dataKey];\n return [\n ...Object.keys(data?.dependencies ?? {}),\n ...Object.keys(data?.peerDependencies ?? {}),\n ];\n }),\n );\n graph.set(name, dependencies);\n }\n\n return graph;\n }\n\n /**\n * Diff with another lockfile, returning entries that have been\n * added, changed, and removed compared to the other lockfile.\n */\n diff(otherLockfile: Lockfile): LockfileDiff {\n const diff = {\n added: new Array<{ name: string; range: string }>(),\n changed: new Array<{ name: string; range: string }>(),\n removed: new Array<{ name: string; range: string }>(),\n };\n\n // Keeps track of packages that only exist in this lockfile\n const remainingOldNames = new Set(this.packages.keys());\n\n for (const [name, otherQueries] of otherLockfile.packages) {\n remainingOldNames.delete(name);\n\n const thisQueries = this.packages.get(name);\n // If the packages doesn't exist in this lockfile, add all entries\n if (!thisQueries) {\n diff.removed.push(...otherQueries.map(q => ({ name, range: q.range })));\n continue;\n }\n\n const remainingOldRanges = new Set(thisQueries.map(q => q.range));\n\n for (const otherQuery of otherQueries) {\n remainingOldRanges.delete(otherQuery.range);\n\n const thisQuery = thisQueries.find(q => q.range === otherQuery.range);\n if (!thisQuery) {\n diff.removed.push({ name, range: otherQuery.range });\n continue;\n }\n\n const otherPkg = otherLockfile.data[otherQuery.dataKey];\n const thisPkg = this.data[thisQuery.dataKey];\n if (otherPkg && thisPkg) {\n const thisCheck = thisPkg.integrity || thisPkg.checksum;\n const otherCheck = otherPkg.integrity || otherPkg.checksum;\n if (thisCheck !== otherCheck) {\n diff.changed.push({ name, range: otherQuery.range });\n }\n }\n }\n\n for (const thisRange of remainingOldRanges) {\n diff.added.push({ name, range: thisRange });\n }\n }\n\n for (const name of remainingOldNames) {\n const queries = this.packages.get(name) ?? [];\n diff.added.push(...queries.map(q => ({ name, range: q.range })));\n }\n\n return diff;\n }\n}\n","/*\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 path from 'path';\nimport { getPackages, Package } from '@manypkg/get-packages';\nimport { paths } from '../paths';\nimport { PackageRole } from '../roles';\nimport { GitUtils } from '../git';\nimport { Lockfile } from './Lockfile';\nimport { JsonValue } from '@backstage/types';\n\n/**\n * Known fields in Backstage package.json files.\n *\n * @public\n */\nexport interface BackstagePackageJson {\n name: string;\n version: string;\n private?: boolean;\n\n main?: string;\n module?: string;\n types?: string;\n\n scripts?: {\n [key: string]: string;\n };\n // The `bundled` field is a field known within Backstage, it means\n // that the package bundles all of its dependencies in its build output.\n bundled?: boolean;\n\n backstage?: {\n role?: PackageRole;\n };\n\n exports?: JsonValue;\n typesVersions?: Record<string, Record<string, string[]>>;\n\n files?: string[];\n\n publishConfig?: {\n access?: 'public' | 'restricted';\n directory?: string;\n registry?: string;\n alphaTypes?: string;\n betaTypes?: string;\n };\n\n dependencies?: {\n [key: string]: string;\n };\n peerDependencies?: {\n [key: string]: string;\n };\n devDependencies?: {\n [key: string]: string;\n };\n optionalDependencies?: {\n [key: string]: string;\n };\n}\n\n/**\n * A local Backstage monorepo package\n *\n * @public\n */\nexport type BackstagePackage = {\n dir: string;\n packageJson: BackstagePackageJson;\n};\n\n/**\n * A local package in the monorepo package graph.\n *\n * @public\n */\nexport type PackageGraphNode = {\n /** The name of the package */\n name: string;\n /** The directory of the package */\n dir: string;\n /** The package data of the package itself */\n packageJson: BackstagePackageJson;\n\n /** All direct local dependencies of the package */\n allLocalDependencies: Map<string, PackageGraphNode>;\n /** All direct local dependencies that will be present in the published package */\n publishedLocalDependencies: Map<string, PackageGraphNode>;\n /** Local dependencies */\n localDependencies: Map<string, PackageGraphNode>;\n /** Local devDependencies */\n localDevDependencies: Map<string, PackageGraphNode>;\n /** Local optionalDependencies */\n localOptionalDependencies: Map<string, PackageGraphNode>;\n\n /** All direct incoming local dependencies of the package */\n allLocalDependents: Map<string, PackageGraphNode>;\n /** All direct incoming local dependencies that will be present in the published package */\n publishedLocalDependents: Map<string, PackageGraphNode>;\n /** Incoming local dependencies */\n localDependents: Map<string, PackageGraphNode>;\n /** Incoming local devDependencies */\n localDevDependents: Map<string, PackageGraphNode>;\n /** Incoming local optionalDependencies */\n localOptionalDependents: Map<string, PackageGraphNode>;\n};\n\n/**\n * Represents a local Backstage monorepo package graph.\n *\n * @public\n */\nexport class PackageGraph extends Map<string, PackageGraphNode> {\n /**\n * Lists all local packages in a monorepo.\n */\n static async listTargetPackages(): Promise<BackstagePackage[]> {\n const { packages } = await getPackages(paths.targetDir);\n return packages as BackstagePackage[];\n }\n\n /**\n * Creates a package graph from a list of local packages.\n */\n static fromPackages(packages: Package[]): PackageGraph {\n const graph = new PackageGraph();\n\n // Add all local packages to the graph\n for (const pkg of packages) {\n const name = pkg.packageJson.name;\n const existingPkg = graph.get(name);\n if (existingPkg) {\n throw new Error(\n `Duplicate package name '${name}' at ${pkg.dir} and ${existingPkg.dir}`,\n );\n }\n\n graph.set(name, {\n name,\n dir: pkg.dir,\n packageJson: pkg.packageJson as BackstagePackageJson,\n\n allLocalDependencies: new Map(),\n publishedLocalDependencies: new Map(),\n localDependencies: new Map(),\n localDevDependencies: new Map(),\n localOptionalDependencies: new Map(),\n\n allLocalDependents: new Map(),\n publishedLocalDependents: new Map(),\n localDependents: new Map(),\n localDevDependents: new Map(),\n localOptionalDependents: new Map(),\n });\n }\n\n // Populate the local dependency structure\n for (const node of graph.values()) {\n for (const depName of Object.keys(node.packageJson.dependencies || {})) {\n const depPkg = graph.get(depName);\n if (depPkg) {\n node.allLocalDependencies.set(depName, depPkg);\n node.publishedLocalDependencies.set(depName, depPkg);\n node.localDependencies.set(depName, depPkg);\n\n depPkg.allLocalDependents.set(node.name, node);\n depPkg.publishedLocalDependents.set(node.name, node);\n depPkg.localDependents.set(node.name, node);\n }\n }\n for (const depName of Object.keys(\n node.packageJson.devDependencies || {},\n )) {\n const depPkg = graph.get(depName);\n if (depPkg) {\n node.allLocalDependencies.set(depName, depPkg);\n node.localDevDependencies.set(depName, depPkg);\n\n depPkg.allLocalDependents.set(node.name, node);\n depPkg.localDevDependents.set(node.name, node);\n }\n }\n for (const depName of Object.keys(\n node.packageJson.optionalDependencies || {},\n )) {\n const depPkg = graph.get(depName);\n if (depPkg) {\n node.allLocalDependencies.set(depName, depPkg);\n node.publishedLocalDependencies.set(depName, depPkg);\n node.localOptionalDependencies.set(depName, depPkg);\n\n depPkg.allLocalDependents.set(node.name, node);\n depPkg.publishedLocalDependents.set(node.name, node);\n depPkg.localOptionalDependents.set(node.name, node);\n }\n }\n }\n\n return graph;\n }\n\n /**\n * Traverses the package graph and collects a set of package names.\n *\n * The traversal starts at the provided list names, and continues\n * throughout all the names returned by the `collectFn`, which is\n * called once for each seen package.\n */\n collectPackageNames(\n startingPackageNames: string[],\n collectFn: (pkg: PackageGraphNode) => Iterable<string> | undefined,\n ): Set<string> {\n const targets = new Set<string>();\n const searchNames = startingPackageNames.slice();\n\n while (searchNames.length) {\n const name = searchNames.pop()!;\n\n if (targets.has(name)) {\n continue;\n }\n\n const node = this.get(name);\n if (!node) {\n throw new Error(`Package '${name}' not found`);\n }\n\n targets.add(name);\n\n const collected = collectFn(node);\n if (collected) {\n searchNames.push(...collected);\n }\n }\n\n return targets;\n }\n\n /**\n * Lists all packages that have changed since a given git ref.\n *\n * @remarks\n *\n * If the `analyzeLockfile` option is set to true, the change detection will\n * also consider changes to the dependency management lockfile.\n */\n async listChangedPackages(options: {\n ref: string;\n analyzeLockfile?: boolean;\n }) {\n const changedFiles = await GitUtils.listChangedFiles(options.ref);\n\n const dirMap = new Map(\n Array.from(this.values()).map(pkg => [\n // relative from root, convert to posix, and add a / at the end\n path\n .relative(paths.targetRoot, pkg.dir)\n .split(path.sep)\n .join(path.posix.sep) + path.posix.sep,\n pkg,\n ]),\n );\n const packageDirs = Array.from(dirMap.keys());\n\n const result = new Array<PackageGraphNode>();\n let searchIndex = 0;\n\n changedFiles.sort();\n packageDirs.sort();\n\n for (const packageDir of packageDirs) {\n // Skip through changes that appear before our package dir\n while (\n searchIndex < changedFiles.length &&\n changedFiles[searchIndex] < packageDir\n ) {\n searchIndex += 1;\n }\n\n // Check if we arrived at a match, otherwise we move on to the next package dir\n if (changedFiles[searchIndex]?.startsWith(packageDir)) {\n searchIndex += 1;\n\n result.push(dirMap.get(packageDir)!);\n\n // Skip through the rest of the changed files for the same package\n while (changedFiles[searchIndex]?.startsWith(packageDir)) {\n searchIndex += 1;\n }\n }\n }\n\n if (changedFiles.includes('yarn.lock') && options.analyzeLockfile) {\n // Load the lockfile in the working tree and the one at the ref and diff them\n let thisLockfile: Lockfile;\n let otherLockfile: Lockfile;\n try {\n thisLockfile = await Lockfile.load(\n paths.resolveTargetRoot('yarn.lock'),\n );\n otherLockfile = Lockfile.parse(\n await GitUtils.readFileAtRef('yarn.lock', options.ref),\n );\n } catch (error) {\n console.warn(\n `Failed to read lockfiles, assuming all packages have changed, ${error}`,\n );\n return Array.from(this.values());\n }\n const diff = thisLockfile.diff(otherLockfile);\n\n // Create a simplified dependency graph only keeps track of package names\n const graph = thisLockfile.createSimplifiedDependencyGraph();\n\n // Merge the dependency graph from the other lockfile into this one in\n // order to be able to detect removals accurately.\n {\n const otherGraph = thisLockfile.createSimplifiedDependencyGraph();\n for (const [name, dependencies] of otherGraph) {\n const node = graph.get(name);\n if (node) {\n dependencies.forEach(d => node.add(d));\n } else {\n graph.set(name, dependencies);\n }\n }\n }\n\n // The check is simplified by only considering the package names rather\n // than the exact version range queries that were changed.\n // TODO(Rugvip): Use a more exact check\n const changedPackages = new Set(\n [...diff.added, ...diff.changed, ...diff.removed].map(e => e.name),\n );\n\n // Starting with our set of changed packages from the diff, we loop through\n // the full graph and add any package that has a dependency on a changed package.\n // We keep looping until all transitive dependencies have been detected.\n let changed = false;\n do {\n changed = false;\n for (const [name, dependencies] of graph) {\n if (changedPackages.has(name)) {\n continue;\n }\n for (const dep of dependencies) {\n if (changedPackages.has(dep)) {\n changed = true;\n changedPackages.add(name);\n break;\n }\n }\n }\n } while (changed);\n\n // Add all local packages that had a transitive dependency change to the result set\n for (const node of this.values()) {\n if (changedPackages.has(node.name) && !result.includes(node)) {\n result.push(node);\n }\n }\n }\n\n return result;\n }\n}\n","/*\n * Copyright 2022 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 { z } from 'zod';\nimport { PackageRole, PackageRoleInfo } from './types';\n\nconst packageRoleInfos: PackageRoleInfo[] = [\n {\n role: 'frontend',\n platform: 'web',\n output: ['bundle'],\n },\n {\n role: 'backend',\n platform: 'node',\n output: ['bundle'],\n },\n {\n role: 'cli',\n platform: 'node',\n output: ['cjs'],\n },\n {\n role: 'web-library',\n platform: 'web',\n output: ['types', 'esm'],\n },\n {\n role: 'node-library',\n platform: 'node',\n output: ['types', 'cjs'],\n },\n {\n role: 'common-library',\n platform: 'common',\n output: ['types', 'esm', 'cjs'],\n },\n {\n role: 'frontend-plugin',\n platform: 'web',\n output: ['types', 'esm'],\n },\n {\n role: 'frontend-plugin-module',\n platform: 'web',\n output: ['types', 'esm'],\n },\n {\n role: 'backend-plugin',\n platform: 'node',\n output: ['types', 'cjs'],\n },\n {\n role: 'backend-plugin-module',\n platform: 'node',\n output: ['types', 'cjs'],\n },\n];\n\nconst readSchema = z.object({\n name: z.string().optional(),\n backstage: z\n .object({\n role: z.string().optional(),\n })\n .optional(),\n});\n\nconst detectionSchema = z.object({\n name: z.string().optional(),\n scripts: z\n .object({\n start: z.string().optional(),\n build: z.string().optional(),\n })\n .optional(),\n publishConfig: z\n .object({\n main: z.string().optional(),\n types: z.string().optional(),\n module: z.string().optional(),\n })\n .optional(),\n main: z.string().optional(),\n types: z.string().optional(),\n module: z.string().optional(),\n});\n\n/**\n * Utilities for working with Backstage package roles.\n *\n * @public\n */\nexport class PackageRoles {\n /**\n * Get the associated info for a package role.\n */\n static getRoleInfo(role: string): PackageRoleInfo {\n const roleInfo = packageRoleInfos.find(r => r.role === role);\n if (!roleInfo) {\n throw new Error(`Unknown package role '${role}'`);\n }\n return roleInfo;\n }\n\n /**\n * Given package JSON data, get the package role.\n */\n static getRoleFromPackage(pkgJson: unknown): PackageRole | undefined {\n const pkg = readSchema.parse(pkgJson);\n\n if (pkg.backstage) {\n const { role } = pkg.backstage;\n if (!role) {\n throw new Error(\n `Package ${pkg.name} must specify a role in the \"backstage\" field`,\n );\n }\n\n return this.getRoleInfo(role).role;\n }\n\n return undefined;\n }\n\n /**\n * Attempt to detect the role of a package from its package.json.\n */\n static detectRoleFromPackage(pkgJson: unknown): PackageRole | undefined {\n const pkg = detectionSchema.parse(pkgJson);\n\n if (pkg.scripts?.start?.includes('app:serve')) {\n return 'frontend';\n }\n if (pkg.scripts?.build?.includes('backend:bundle')) {\n return 'backend';\n }\n if (\n pkg.name?.includes('plugin-') &&\n pkg.name?.includes('-backend-module-')\n ) {\n return 'backend-plugin-module';\n }\n if (pkg.name?.includes('plugin-') && pkg.name?.includes('-module-')) {\n return 'frontend-plugin-module';\n }\n if (pkg.scripts?.start?.includes('plugin:serve')) {\n return 'frontend-plugin';\n }\n if (pkg.scripts?.start?.includes('backend:dev')) {\n return 'backend-plugin';\n }\n\n const mainEntry = pkg.publishConfig?.main || pkg.main;\n const moduleEntry = pkg.publishConfig?.module || pkg.module;\n const typesEntry = pkg.publishConfig?.types || pkg.types;\n if (typesEntry) {\n if (mainEntry && moduleEntry) {\n return 'common-library';\n }\n if (moduleEntry || mainEntry?.endsWith('.esm.js')) {\n return 'web-library';\n }\n if (mainEntry) {\n return 'node-library';\n }\n } else if (mainEntry) {\n return 'cli';\n }\n\n return undefined;\n }\n}\n"],"names":["findPaths","promisify","execFileCb","assertError","ForwardedError","fs","parseSyml","getPackages","path","z"],"mappings":"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"} | ||
| {"version":3,"file":"index.cjs.js","sources":["../src/paths.ts","../src/run.ts","../src/git/GitUtils.ts","../src/monorepo/isMonoRepo.ts","../src/monorepo/Lockfile.ts","../src/monorepo/PackageGraph.ts","../src/roles/PackageRoles.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 { findPaths } from '@backstage/cli-common';\n\n/* eslint-disable-next-line no-restricted-syntax */\nexport const paths = findPaths(__dirname);\n","/*\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 { execFile as execFileCb } from 'child_process';\nimport { promisify } from 'util';\n\nexport const execFile = promisify(execFileCb);\n","/*\n * Copyright 2022 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 { assertError, ForwardedError } from '@backstage/errors';\nimport { paths } from '../paths';\nimport { execFile } from '../run';\n\n/**\n * Run a git command, trimming the output splitting it into lines.\n */\nexport async function runGit(...args: string[]) {\n try {\n const { stdout } = await execFile('git', args, {\n shell: true,\n cwd: paths.targetRoot,\n });\n return stdout.trim().split(/\\r\\n|\\r|\\n/);\n } catch (error) {\n assertError(error);\n if (error.stderr || typeof error.code === 'number') {\n const stderr = (error.stderr as undefined | Buffer)?.toString('utf8');\n const msg = stderr?.trim() ?? `with exit code ${error.code}`;\n throw new Error(`git ${args[0]} failed, ${msg}`);\n }\n throw new ForwardedError('Unknown execution error', error);\n }\n}\n\n/**\n * Utilities for working with git.\n *\n * @public\n */\nexport class GitUtils {\n /**\n * Returns a sorted list of all files that have changed since the merge base\n * of the provided `ref` and HEAD, as well as all files that are not tracked by git.\n */\n static async listChangedFiles(ref: string) {\n if (!ref) {\n throw new Error('ref is required');\n }\n\n let diffRef = ref;\n try {\n const [base] = await runGit('merge-base', 'HEAD', ref);\n diffRef = base;\n } catch {\n // silently fall back to using the ref directly if merge base is not available\n }\n\n const tracked = await runGit('diff', '--name-only', diffRef);\n const untracked = await runGit(\n 'ls-files',\n '--others',\n '--exclude-standard',\n );\n\n return Array.from(new Set([...tracked, ...untracked]));\n }\n\n /**\n * Returns the contents of a file at a specific ref.\n */\n static async readFileAtRef(path: string, ref: string) {\n let showRef = ref;\n try {\n const [base] = await runGit('merge-base', 'HEAD', ref);\n showRef = base;\n } catch {\n // silently fall back to using the ref directly if merge base is not available\n }\n\n const { stdout } = await execFile('git', ['show', `${showRef}:${path}`], {\n shell: true,\n cwd: paths.targetRoot,\n maxBuffer: 1024 * 1024 * 50,\n });\n return stdout;\n }\n}\n","/*\n * Copyright 2022 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 { paths } from '../paths';\nimport fs from 'fs-extra';\n\n/**\n * Returns try if the current project is a monorepo.\n *\n * @public\n */\nexport async function isMonoRepo(): Promise<boolean> {\n const rootPackageJsonPath = paths.resolveTargetRoot('package.json');\n try {\n const pkg = await fs.readJson(rootPackageJsonPath);\n return Boolean(pkg?.workspaces?.packages);\n } catch (error) {\n return false;\n }\n}\n","/*\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 { parseSyml } from '@yarnpkg/parsers';\nimport fs from 'fs-extra';\n\nconst ENTRY_PATTERN = /^((?:@[^/]+\\/)?[^@/]+)@(.+)$/;\n\n/** @internal */\ntype LockfileData = {\n [entry: string]: {\n version: string;\n resolved?: string;\n integrity?: string /* old */;\n checksum?: string /* new */;\n dependencies?: { [name: string]: string };\n peerDependencies?: { [name: string]: string };\n };\n};\n\n/** @internal */\ntype LockfileQueryEntry = {\n range: string;\n version: string;\n dataKey: string;\n};\n\n/**\n * An entry for a single difference between two {@link Lockfile}s.\n *\n * @public\n */\nexport type LockfileDiffEntry = {\n name: string;\n range: string;\n};\n\n/**\n * Represents the difference between two {@link Lockfile}s.\n *\n * @public\n */\nexport type LockfileDiff = {\n added: LockfileDiffEntry[];\n changed: LockfileDiffEntry[];\n removed: LockfileDiffEntry[];\n};\n\n// these are special top level yarn keys.\n// https://github.com/yarnpkg/berry/blob/9bd61fbffb83d0b8166a9cc26bec3a58743aa453/packages/yarnpkg-parsers/sources/syml.ts#L9\nconst SPECIAL_OBJECT_KEYS = [\n `__metadata`,\n `version`,\n `resolution`,\n `dependencies`,\n `peerDependencies`,\n `dependenciesMeta`,\n `peerDependenciesMeta`,\n `binaries`,\n];\n\n/**\n * Represents a package manager lockfile.\n *\n * @public\n */\nexport class Lockfile {\n /**\n * Load a {@link Lockfile} from a file path.\n */\n static async load(path: string): Promise<Lockfile> {\n const lockfileContents = await fs.readFile(path, 'utf8');\n return Lockfile.parse(lockfileContents);\n }\n\n /**\n * Parse lockfile contents into a {@link Lockfile}.\n *\n * @public\n */\n static parse(content: string): Lockfile {\n let data: LockfileData;\n try {\n data = parseSyml(content);\n } catch (err) {\n throw new Error(`Failed yarn.lock parse, ${err}`);\n }\n\n const packages = new Map<string, LockfileQueryEntry[]>();\n\n for (const [key, value] of Object.entries(data)) {\n if (SPECIAL_OBJECT_KEYS.includes(key)) continue;\n\n const [, name, ranges] = ENTRY_PATTERN.exec(key) ?? [];\n if (!name) {\n throw new Error(`Failed to parse yarn.lock entry '${key}'`);\n }\n\n let queries = packages.get(name);\n if (!queries) {\n queries = [];\n packages.set(name, queries);\n }\n for (let range of ranges.split(/\\s*,\\s*/)) {\n if (range.startsWith(`${name}@`)) {\n range = range.slice(`${name}@`.length);\n }\n if (range.startsWith('npm:')) {\n range = range.slice('npm:'.length);\n }\n queries.push({ range, version: value.version, dataKey: key });\n }\n }\n\n return new Lockfile(packages, data);\n }\n\n private constructor(\n private readonly packages: Map<string, LockfileQueryEntry[]>,\n private readonly data: LockfileData,\n ) {}\n\n /**\n * Creates a simplified dependency graph from the lockfile data, where each\n * key is a package, and the value is a set of all packages that it depends on\n * across all versions.\n */\n createSimplifiedDependencyGraph(): Map<string, Set<string>> {\n const graph = new Map<string, Set<string>>();\n\n for (const [name, entries] of this.packages) {\n const dependencies = new Set(\n entries.flatMap(e => {\n const data = this.data[e.dataKey];\n return [\n ...Object.keys(data?.dependencies ?? {}),\n ...Object.keys(data?.peerDependencies ?? {}),\n ];\n }),\n );\n graph.set(name, dependencies);\n }\n\n return graph;\n }\n\n /**\n * Diff with another lockfile, returning entries that have been\n * added, changed, and removed compared to the other lockfile.\n */\n diff(otherLockfile: Lockfile): LockfileDiff {\n const diff = {\n added: new Array<{ name: string; range: string }>(),\n changed: new Array<{ name: string; range: string }>(),\n removed: new Array<{ name: string; range: string }>(),\n };\n\n // Keeps track of packages that only exist in this lockfile\n const remainingOldNames = new Set(this.packages.keys());\n\n for (const [name, otherQueries] of otherLockfile.packages) {\n remainingOldNames.delete(name);\n\n const thisQueries = this.packages.get(name);\n // If the packages doesn't exist in this lockfile, add all entries\n if (!thisQueries) {\n diff.removed.push(...otherQueries.map(q => ({ name, range: q.range })));\n continue;\n }\n\n const remainingOldRanges = new Set(thisQueries.map(q => q.range));\n\n for (const otherQuery of otherQueries) {\n remainingOldRanges.delete(otherQuery.range);\n\n const thisQuery = thisQueries.find(q => q.range === otherQuery.range);\n if (!thisQuery) {\n diff.removed.push({ name, range: otherQuery.range });\n continue;\n }\n\n const otherPkg = otherLockfile.data[otherQuery.dataKey];\n const thisPkg = this.data[thisQuery.dataKey];\n if (otherPkg && thisPkg) {\n const thisCheck = thisPkg.integrity || thisPkg.checksum;\n const otherCheck = otherPkg.integrity || otherPkg.checksum;\n if (thisCheck !== otherCheck) {\n diff.changed.push({ name, range: otherQuery.range });\n }\n }\n }\n\n for (const thisRange of remainingOldRanges) {\n diff.added.push({ name, range: thisRange });\n }\n }\n\n for (const name of remainingOldNames) {\n const queries = this.packages.get(name) ?? [];\n diff.added.push(...queries.map(q => ({ name, range: q.range })));\n }\n\n return diff;\n }\n}\n","/*\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 path from 'path';\nimport { getPackages, Package } from '@manypkg/get-packages';\nimport { paths } from '../paths';\nimport { PackageRole } from '../roles';\nimport { GitUtils } from '../git';\nimport { Lockfile } from './Lockfile';\nimport { JsonValue } from '@backstage/types';\n\n/**\n * Known fields in Backstage package.json files.\n *\n * @public\n */\nexport interface BackstagePackageJson {\n name: string;\n version: string;\n private?: boolean;\n\n main?: string;\n module?: string;\n types?: string;\n\n scripts?: {\n [key: string]: string;\n };\n // The `bundled` field is a field known within Backstage, it means\n // that the package bundles all of its dependencies in its build output.\n bundled?: boolean;\n\n backstage?: {\n role?: PackageRole;\n };\n\n exports?: JsonValue;\n typesVersions?: Record<string, Record<string, string[]>>;\n\n files?: string[];\n\n publishConfig?: {\n access?: 'public' | 'restricted';\n directory?: string;\n registry?: string;\n alphaTypes?: string;\n betaTypes?: string;\n };\n\n dependencies?: {\n [key: string]: string;\n };\n peerDependencies?: {\n [key: string]: string;\n };\n devDependencies?: {\n [key: string]: string;\n };\n optionalDependencies?: {\n [key: string]: string;\n };\n}\n\n/**\n * A local Backstage monorepo package\n *\n * @public\n */\nexport type BackstagePackage = {\n dir: string;\n packageJson: BackstagePackageJson;\n};\n\n/**\n * A local package in the monorepo package graph.\n *\n * @public\n */\nexport type PackageGraphNode = {\n /** The name of the package */\n name: string;\n /** The directory of the package */\n dir: string;\n /** The package data of the package itself */\n packageJson: BackstagePackageJson;\n\n /** All direct local dependencies of the package */\n allLocalDependencies: Map<string, PackageGraphNode>;\n /** All direct local dependencies that will be present in the published package */\n publishedLocalDependencies: Map<string, PackageGraphNode>;\n /** Local dependencies */\n localDependencies: Map<string, PackageGraphNode>;\n /** Local devDependencies */\n localDevDependencies: Map<string, PackageGraphNode>;\n /** Local optionalDependencies */\n localOptionalDependencies: Map<string, PackageGraphNode>;\n\n /** All direct incoming local dependencies of the package */\n allLocalDependents: Map<string, PackageGraphNode>;\n /** All direct incoming local dependencies that will be present in the published package */\n publishedLocalDependents: Map<string, PackageGraphNode>;\n /** Incoming local dependencies */\n localDependents: Map<string, PackageGraphNode>;\n /** Incoming local devDependencies */\n localDevDependents: Map<string, PackageGraphNode>;\n /** Incoming local optionalDependencies */\n localOptionalDependents: Map<string, PackageGraphNode>;\n};\n\n/**\n * Represents a local Backstage monorepo package graph.\n *\n * @public\n */\nexport class PackageGraph extends Map<string, PackageGraphNode> {\n /**\n * Lists all local packages in a monorepo.\n */\n static async listTargetPackages(): Promise<BackstagePackage[]> {\n const { packages } = await getPackages(paths.targetDir);\n return packages as BackstagePackage[];\n }\n\n /**\n * Creates a package graph from a list of local packages.\n */\n static fromPackages(packages: Package[]): PackageGraph {\n const graph = new PackageGraph();\n\n // Add all local packages to the graph\n for (const pkg of packages) {\n const name = pkg.packageJson.name;\n const existingPkg = graph.get(name);\n if (existingPkg) {\n throw new Error(\n `Duplicate package name '${name}' at ${pkg.dir} and ${existingPkg.dir}`,\n );\n }\n\n graph.set(name, {\n name,\n dir: pkg.dir,\n packageJson: pkg.packageJson as BackstagePackageJson,\n\n allLocalDependencies: new Map(),\n publishedLocalDependencies: new Map(),\n localDependencies: new Map(),\n localDevDependencies: new Map(),\n localOptionalDependencies: new Map(),\n\n allLocalDependents: new Map(),\n publishedLocalDependents: new Map(),\n localDependents: new Map(),\n localDevDependents: new Map(),\n localOptionalDependents: new Map(),\n });\n }\n\n // Populate the local dependency structure\n for (const node of graph.values()) {\n for (const depName of Object.keys(node.packageJson.dependencies || {})) {\n const depPkg = graph.get(depName);\n if (depPkg) {\n node.allLocalDependencies.set(depName, depPkg);\n node.publishedLocalDependencies.set(depName, depPkg);\n node.localDependencies.set(depName, depPkg);\n\n depPkg.allLocalDependents.set(node.name, node);\n depPkg.publishedLocalDependents.set(node.name, node);\n depPkg.localDependents.set(node.name, node);\n }\n }\n for (const depName of Object.keys(\n node.packageJson.devDependencies || {},\n )) {\n const depPkg = graph.get(depName);\n if (depPkg) {\n node.allLocalDependencies.set(depName, depPkg);\n node.localDevDependencies.set(depName, depPkg);\n\n depPkg.allLocalDependents.set(node.name, node);\n depPkg.localDevDependents.set(node.name, node);\n }\n }\n for (const depName of Object.keys(\n node.packageJson.optionalDependencies || {},\n )) {\n const depPkg = graph.get(depName);\n if (depPkg) {\n node.allLocalDependencies.set(depName, depPkg);\n node.publishedLocalDependencies.set(depName, depPkg);\n node.localOptionalDependencies.set(depName, depPkg);\n\n depPkg.allLocalDependents.set(node.name, node);\n depPkg.publishedLocalDependents.set(node.name, node);\n depPkg.localOptionalDependents.set(node.name, node);\n }\n }\n }\n\n return graph;\n }\n\n /**\n * Traverses the package graph and collects a set of package names.\n *\n * The traversal starts at the provided list names, and continues\n * throughout all the names returned by the `collectFn`, which is\n * called once for each seen package.\n */\n collectPackageNames(\n startingPackageNames: string[],\n collectFn: (pkg: PackageGraphNode) => Iterable<string> | undefined,\n ): Set<string> {\n const targets = new Set<string>();\n const searchNames = startingPackageNames.slice();\n\n while (searchNames.length) {\n const name = searchNames.pop()!;\n\n if (targets.has(name)) {\n continue;\n }\n\n const node = this.get(name);\n if (!node) {\n throw new Error(`Package '${name}' not found`);\n }\n\n targets.add(name);\n\n const collected = collectFn(node);\n if (collected) {\n searchNames.push(...collected);\n }\n }\n\n return targets;\n }\n\n /**\n * Lists all packages that have changed since a given git ref.\n *\n * @remarks\n *\n * If the `analyzeLockfile` option is set to true, the change detection will\n * also consider changes to the dependency management lockfile.\n */\n async listChangedPackages(options: {\n ref: string;\n analyzeLockfile?: boolean;\n }) {\n const changedFiles = await GitUtils.listChangedFiles(options.ref);\n\n const dirMap = new Map(\n Array.from(this.values()).map(pkg => [\n // relative from root, convert to posix, and add a / at the end\n path\n .relative(paths.targetRoot, pkg.dir)\n .split(path.sep)\n .join(path.posix.sep) + path.posix.sep,\n pkg,\n ]),\n );\n const packageDirs = Array.from(dirMap.keys());\n\n const result = new Array<PackageGraphNode>();\n let searchIndex = 0;\n\n changedFiles.sort();\n packageDirs.sort();\n\n for (const packageDir of packageDirs) {\n // Skip through changes that appear before our package dir\n while (\n searchIndex < changedFiles.length &&\n changedFiles[searchIndex] < packageDir\n ) {\n searchIndex += 1;\n }\n\n // Check if we arrived at a match, otherwise we move on to the next package dir\n if (changedFiles[searchIndex]?.startsWith(packageDir)) {\n searchIndex += 1;\n\n result.push(dirMap.get(packageDir)!);\n\n // Skip through the rest of the changed files for the same package\n while (changedFiles[searchIndex]?.startsWith(packageDir)) {\n searchIndex += 1;\n }\n }\n }\n\n if (changedFiles.includes('yarn.lock') && options.analyzeLockfile) {\n // Load the lockfile in the working tree and the one at the ref and diff them\n let thisLockfile: Lockfile;\n let otherLockfile: Lockfile;\n try {\n thisLockfile = await Lockfile.load(\n paths.resolveTargetRoot('yarn.lock'),\n );\n otherLockfile = Lockfile.parse(\n await GitUtils.readFileAtRef('yarn.lock', options.ref),\n );\n } catch (error) {\n console.warn(\n `Failed to read lockfiles, assuming all packages have changed, ${error}`,\n );\n return Array.from(this.values());\n }\n const diff = thisLockfile.diff(otherLockfile);\n\n // Create a simplified dependency graph only keeps track of package names\n const graph = thisLockfile.createSimplifiedDependencyGraph();\n\n // Merge the dependency graph from the other lockfile into this one in\n // order to be able to detect removals accurately.\n {\n const otherGraph = thisLockfile.createSimplifiedDependencyGraph();\n for (const [name, dependencies] of otherGraph) {\n const node = graph.get(name);\n if (node) {\n dependencies.forEach(d => node.add(d));\n } else {\n graph.set(name, dependencies);\n }\n }\n }\n\n // The check is simplified by only considering the package names rather\n // than the exact version range queries that were changed.\n // TODO(Rugvip): Use a more exact check\n const changedPackages = new Set(\n [...diff.added, ...diff.changed, ...diff.removed].map(e => e.name),\n );\n\n // Starting with our set of changed packages from the diff, we loop through\n // the full graph and add any package that has a dependency on a changed package.\n // We keep looping until all transitive dependencies have been detected.\n let changed = false;\n do {\n changed = false;\n for (const [name, dependencies] of graph) {\n if (changedPackages.has(name)) {\n continue;\n }\n for (const dep of dependencies) {\n if (changedPackages.has(dep)) {\n changed = true;\n changedPackages.add(name);\n break;\n }\n }\n }\n } while (changed);\n\n // Add all local packages that had a transitive dependency change to the result set\n for (const node of this.values()) {\n if (changedPackages.has(node.name) && !result.includes(node)) {\n result.push(node);\n }\n }\n }\n\n return result;\n }\n}\n","/*\n * Copyright 2022 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 { z } from 'zod';\nimport { PackageRole, PackageRoleInfo } from './types';\n\nconst packageRoleInfos: PackageRoleInfo[] = [\n {\n role: 'frontend',\n platform: 'web',\n output: ['bundle'],\n },\n {\n role: 'backend',\n platform: 'node',\n output: ['bundle'],\n },\n {\n role: 'cli',\n platform: 'node',\n output: ['cjs'],\n },\n {\n role: 'web-library',\n platform: 'web',\n output: ['types', 'esm'],\n },\n {\n role: 'node-library',\n platform: 'node',\n output: ['types', 'cjs'],\n },\n {\n role: 'common-library',\n platform: 'common',\n output: ['types', 'esm', 'cjs'],\n },\n {\n role: 'frontend-plugin',\n platform: 'web',\n output: ['types', 'esm'],\n },\n {\n role: 'frontend-plugin-module',\n platform: 'web',\n output: ['types', 'esm'],\n },\n {\n role: 'backend-plugin',\n platform: 'node',\n output: ['types', 'cjs'],\n },\n {\n role: 'backend-plugin-module',\n platform: 'node',\n output: ['types', 'cjs'],\n },\n];\n\nconst readSchema = z.object({\n name: z.string().optional(),\n backstage: z\n .object({\n role: z.string().optional(),\n })\n .optional(),\n});\n\nconst detectionSchema = z.object({\n name: z.string().optional(),\n scripts: z\n .object({\n start: z.string().optional(),\n build: z.string().optional(),\n })\n .optional(),\n publishConfig: z\n .object({\n main: z.string().optional(),\n types: z.string().optional(),\n module: z.string().optional(),\n })\n .optional(),\n main: z.string().optional(),\n types: z.string().optional(),\n module: z.string().optional(),\n});\n\n/**\n * Utilities for working with Backstage package roles.\n *\n * @public\n */\nexport class PackageRoles {\n /**\n * Get the associated info for a package role.\n */\n static getRoleInfo(role: string): PackageRoleInfo {\n const roleInfo = packageRoleInfos.find(r => r.role === role);\n if (!roleInfo) {\n throw new Error(`Unknown package role '${role}'`);\n }\n return roleInfo;\n }\n\n /**\n * Given package JSON data, get the package role.\n */\n static getRoleFromPackage(pkgJson: unknown): PackageRole | undefined {\n const pkg = readSchema.parse(pkgJson);\n\n if (pkg.backstage) {\n const { role } = pkg.backstage;\n if (!role) {\n throw new Error(\n `Package ${pkg.name} must specify a role in the \"backstage\" field`,\n );\n }\n\n return this.getRoleInfo(role).role;\n }\n\n return undefined;\n }\n\n /**\n * Attempt to detect the role of a package from its package.json.\n */\n static detectRoleFromPackage(pkgJson: unknown): PackageRole | undefined {\n const pkg = detectionSchema.parse(pkgJson);\n\n if (pkg.scripts?.start?.includes('app:serve')) {\n return 'frontend';\n }\n if (pkg.scripts?.build?.includes('backend:bundle')) {\n return 'backend';\n }\n if (\n pkg.name?.includes('plugin-') &&\n pkg.name?.includes('-backend-module-')\n ) {\n return 'backend-plugin-module';\n }\n if (pkg.name?.includes('plugin-') && pkg.name?.includes('-module-')) {\n return 'frontend-plugin-module';\n }\n if (pkg.scripts?.start?.includes('plugin:serve')) {\n return 'frontend-plugin';\n }\n if (pkg.scripts?.start?.includes('backend:dev')) {\n return 'backend-plugin';\n }\n\n const mainEntry = pkg.publishConfig?.main || pkg.main;\n const moduleEntry = pkg.publishConfig?.module || pkg.module;\n const typesEntry = pkg.publishConfig?.types || pkg.types;\n if (typesEntry) {\n if (mainEntry && moduleEntry) {\n return 'common-library';\n }\n if (moduleEntry || mainEntry?.endsWith('.esm.js')) {\n return 'web-library';\n }\n if (mainEntry) {\n return 'node-library';\n }\n } else if (mainEntry) {\n return 'cli';\n }\n\n return undefined;\n }\n}\n"],"names":["findPaths","promisify","execFileCb","assertError","ForwardedError","fs","parseSyml","getPackages","path","z"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBa,MAAA,KAAA,GAAQA,oBAAU,SAAS,CAAA;;ACA3B,MAAA,QAAA,GAAWC,eAAUC,sBAAU,CAAA;;ACI5C,eAAsB,UAAU,IAAgB,EAAA;AAvBhD,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAwBE,EAAI,IAAA;AACF,IAAA,MAAM,EAAE,MAAO,EAAA,GAAI,MAAM,QAAA,CAAS,OAAO,IAAM,EAAA;AAAA,MAC7C,KAAO,EAAA,IAAA;AAAA,MACP,KAAK,KAAM,CAAA,UAAA;AAAA,KACZ,CAAA,CAAA;AACD,IAAA,OAAO,MAAO,CAAA,IAAA,EAAO,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAAA,WAChC,KAAO,EAAA;AACd,IAAAC,kBAAA,CAAY,KAAK,CAAA,CAAA;AACjB,IAAA,IAAI,KAAM,CAAA,MAAA,IAAU,OAAO,KAAA,CAAM,SAAS,QAAU,EAAA;AAClD,MAAA,MAAM,MAAU,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAqC,QAAS,CAAA,MAAA,CAAA,CAAA;AAC9D,MAAA,MAAM,OAAM,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,IAAA,EAAA,KAAR,IAAkB,GAAA,EAAA,GAAA,CAAA,eAAA,EAAkB,MAAM,IAAI,CAAA,CAAA,CAAA;AAC1D,MAAM,MAAA,IAAI,MAAM,CAAO,IAAA,EAAA,IAAA,CAAK,CAAC,CAAC,CAAA,SAAA,EAAY,GAAG,CAAE,CAAA,CAAA,CAAA;AAAA,KACjD;AACA,IAAM,MAAA,IAAIC,qBAAe,CAAA,yBAAA,EAA2B,KAAK,CAAA,CAAA;AAAA,GAC3D;AACF,CAAA;AAOO,MAAM,QAAS,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB,aAAa,iBAAiB,GAAa,EAAA;AACzC,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAM,MAAA,IAAI,MAAM,iBAAiB,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,IAAI,OAAU,GAAA,GAAA,CAAA;AACd,IAAI,IAAA;AACF,MAAA,MAAM,CAAC,IAAI,CAAA,GAAI,MAAM,MAAO,CAAA,YAAA,EAAc,QAAQ,GAAG,CAAA,CAAA;AACrD,MAAU,OAAA,GAAA,IAAA,CAAA;AAAA,KACJ,CAAA,MAAA;AAAA,KAER;AAEA,IAAA,MAAM,OAAU,GAAA,MAAM,MAAO,CAAA,MAAA,EAAQ,eAAe,OAAO,CAAA,CAAA;AAC3D,IAAA,MAAM,YAAY,MAAM,MAAA;AAAA,MACtB,UAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA;AAAA,KACF,CAAA;AAEA,IAAO,OAAA,KAAA,CAAM,IAAK,iBAAA,IAAI,GAAI,CAAA,CAAC,GAAG,OAAS,EAAA,GAAG,SAAS,CAAC,CAAC,CAAA,CAAA;AAAA,GACvD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,aAAc,CAAA,IAAA,EAAc,GAAa,EAAA;AACpD,IAAA,IAAI,OAAU,GAAA,GAAA,CAAA;AACd,IAAI,IAAA;AACF,MAAA,MAAM,CAAC,IAAI,CAAA,GAAI,MAAM,MAAO,CAAA,YAAA,EAAc,QAAQ,GAAG,CAAA,CAAA;AACrD,MAAU,OAAA,GAAA,IAAA,CAAA;AAAA,KACJ,CAAA,MAAA;AAAA,KAER;AAEA,IAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAM,QAAS,CAAA,KAAA,EAAO,CAAC,MAAA,EAAQ,CAAG,EAAA,OAAO,CAAI,CAAA,EAAA,IAAI,EAAE,CAAG,EAAA;AAAA,MACvE,KAAO,EAAA,IAAA;AAAA,MACP,KAAK,KAAM,CAAA,UAAA;AAAA,MACX,SAAA,EAAW,OAAO,IAAO,GAAA,EAAA;AAAA,KAC1B,CAAA,CAAA;AACD,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF;;ACrEA,eAAsB,UAA+B,GAAA;AAxBrD,EAAA,IAAA,EAAA,CAAA;AAyBE,EAAM,MAAA,mBAAA,GAAsB,KAAM,CAAA,iBAAA,CAAkB,cAAc,CAAA,CAAA;AAClE,EAAI,IAAA;AACF,IAAA,MAAM,GAAM,GAAA,MAAMC,sBAAG,CAAA,QAAA,CAAS,mBAAmB,CAAA,CAAA;AACjD,IAAA,OAAO,OAAQ,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,UAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,QAAQ,CAAA,CAAA;AAAA,WACjC,KAAO,EAAA;AACd,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF;;ACbA,MAAM,aAAgB,GAAA,8BAAA,CAAA;AA4CtB,MAAM,mBAAsB,GAAA;AAAA,EAC1B,CAAA,UAAA,CAAA;AAAA,EACA,CAAA,OAAA,CAAA;AAAA,EACA,CAAA,UAAA,CAAA;AAAA,EACA,CAAA,YAAA,CAAA;AAAA,EACA,CAAA,gBAAA,CAAA;AAAA,EACA,CAAA,gBAAA,CAAA;AAAA,EACA,CAAA,oBAAA,CAAA;AAAA,EACA,CAAA,QAAA,CAAA;AACF,CAAA,CAAA;AAOO,MAAM,QAAS,CAAA;AAAA,EAmDZ,WAAA,CACW,UACA,IACjB,EAAA;AAFiB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAlDH,aAAa,KAAK,IAAiC,EAAA;AACjD,IAAA,MAAM,gBAAmB,GAAA,MAAMA,sBAAG,CAAA,QAAA,CAAS,MAAM,MAAM,CAAA,CAAA;AACvD,IAAO,OAAA,QAAA,CAAS,MAAM,gBAAgB,CAAA,CAAA;AAAA,GACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAM,OAA2B,EAAA;AA7F1C,IAAA,IAAA,EAAA,CAAA;AA8FI,IAAI,IAAA,IAAA,CAAA;AACJ,IAAI,IAAA;AACF,MAAA,IAAA,GAAOC,kBAAU,OAAO,CAAA,CAAA;AAAA,aACjB,GAAK,EAAA;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAA2B,wBAAA,EAAA,GAAG,CAAE,CAAA,CAAA,CAAA;AAAA,KAClD;AAEA,IAAM,MAAA,QAAA,uBAAe,GAAkC,EAAA,CAAA;AAEvD,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AAC/C,MAAI,IAAA,mBAAA,CAAoB,SAAS,GAAG,CAAA;AAAG,QAAA,SAAA;AAEvC,MAAM,MAAA,GAAG,IAAA,EAAM,MAAM,CAAA,GAAA,CAAI,mBAAc,IAAK,CAAA,GAAG,CAAtB,KAAA,IAAA,GAAA,EAAA,GAA2B,EAAC,CAAA;AACrD,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAA,MAAM,IAAI,KAAA,CAAM,CAAoC,iCAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,OAC5D;AAEA,MAAI,IAAA,OAAA,GAAU,QAAS,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAC/B,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA,OAAA,GAAU,EAAC,CAAA;AACX,QAAS,QAAA,CAAA,GAAA,CAAI,MAAM,OAAO,CAAA,CAAA;AAAA,OAC5B;AACA,MAAA,KAAA,IAAS,KAAS,IAAA,MAAA,CAAO,KAAM,CAAA,SAAS,CAAG,EAAA;AACzC,QAAA,IAAI,KAAM,CAAA,UAAA,CAAW,CAAG,EAAA,IAAI,GAAG,CAAG,EAAA;AAChC,UAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,CAAG,EAAA,IAAI,IAAI,MAAM,CAAA,CAAA;AAAA,SACvC;AACA,QAAI,IAAA,KAAA,CAAM,UAAW,CAAA,MAAM,CAAG,EAAA;AAC5B,UAAQ,KAAA,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,SACnC;AACA,QAAQ,OAAA,CAAA,IAAA,CAAK,EAAE,KAAO,EAAA,OAAA,EAAS,MAAM,OAAS,EAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAAA,OAC9D;AAAA,KACF;AAEA,IAAO,OAAA,IAAI,QAAS,CAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AAAA,GACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,+BAA4D,GAAA;AAC1D,IAAM,MAAA,KAAA,uBAAY,GAAyB,EAAA,CAAA;AAE3C,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,KAAK,QAAU,EAAA;AAC3C,MAAA,MAAM,eAAe,IAAI,GAAA;AAAA,QACvB,OAAA,CAAQ,QAAQ,CAAK,CAAA,KAAA;AAjJ7B,UAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAkJU,UAAA,MAAM,IAAO,GAAA,IAAA,CAAK,IAAK,CAAA,CAAA,CAAE,OAAO,CAAA,CAAA;AAChC,UAAO,OAAA;AAAA,YACL,GAAG,MAAO,CAAA,IAAA,CAAA,CAAK,kCAAM,YAAN,KAAA,IAAA,GAAA,EAAA,GAAsB,EAAE,CAAA;AAAA,YACvC,GAAG,MAAO,CAAA,IAAA,CAAA,CAAK,kCAAM,gBAAN,KAAA,IAAA,GAAA,EAAA,GAA0B,EAAE,CAAA;AAAA,WAC7C,CAAA;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AACA,MAAM,KAAA,CAAA,GAAA,CAAI,MAAM,YAAY,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,aAAuC,EAAA;AAnK9C,IAAA,IAAA,EAAA,CAAA;AAoKI,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,KAAA,EAAO,IAAI,KAAuC,EAAA;AAAA,MAClD,OAAA,EAAS,IAAI,KAAuC,EAAA;AAAA,MACpD,OAAA,EAAS,IAAI,KAAuC,EAAA;AAAA,KACtD,CAAA;AAGA,IAAA,MAAM,oBAAoB,IAAI,GAAA,CAAI,IAAK,CAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAEtD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,YAAY,CAAA,IAAK,cAAc,QAAU,EAAA;AACzD,MAAA,iBAAA,CAAkB,OAAO,IAAI,CAAA,CAAA;AAE7B,MAAA,MAAM,WAAc,GAAA,IAAA,CAAK,QAAS,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAE1C,MAAA,IAAI,CAAC,WAAa,EAAA;AAChB,QAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAK,GAAG,YAAA,CAAa,GAAI,CAAA,CAAA,CAAA,MAAM,EAAE,IAAA,EAAM,KAAO,EAAA,CAAA,CAAE,KAAM,EAAA,CAAE,CAAC,CAAA,CAAA;AACtE,QAAA,SAAA;AAAA,OACF;AAEA,MAAM,MAAA,kBAAA,GAAqB,IAAI,GAAI,CAAA,WAAA,CAAY,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,KAAK,CAAC,CAAA,CAAA;AAEhE,MAAA,KAAA,MAAW,cAAc,YAAc,EAAA;AACrC,QAAmB,kBAAA,CAAA,MAAA,CAAO,WAAW,KAAK,CAAA,CAAA;AAE1C,QAAA,MAAM,YAAY,WAAY,CAAA,IAAA,CAAK,OAAK,CAAE,CAAA,KAAA,KAAU,WAAW,KAAK,CAAA,CAAA;AACpE,QAAA,IAAI,CAAC,SAAW,EAAA;AACd,UAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,EAAE,MAAM,KAAO,EAAA,UAAA,CAAW,OAAO,CAAA,CAAA;AACnD,UAAA,SAAA;AAAA,SACF;AAEA,QAAA,MAAM,QAAW,GAAA,aAAA,CAAc,IAAK,CAAA,UAAA,CAAW,OAAO,CAAA,CAAA;AACtD,QAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAC3C,QAAA,IAAI,YAAY,OAAS,EAAA;AACvB,UAAM,MAAA,SAAA,GAAY,OAAQ,CAAA,SAAA,IAAa,OAAQ,CAAA,QAAA,CAAA;AAC/C,UAAM,MAAA,UAAA,GAAa,QAAS,CAAA,SAAA,IAAa,QAAS,CAAA,QAAA,CAAA;AAClD,UAAA,IAAI,cAAc,UAAY,EAAA;AAC5B,YAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,EAAE,MAAM,KAAO,EAAA,UAAA,CAAW,OAAO,CAAA,CAAA;AAAA,WACrD;AAAA,SACF;AAAA,OACF;AAEA,MAAA,KAAA,MAAW,aAAa,kBAAoB,EAAA;AAC1C,QAAA,IAAA,CAAK,MAAM,IAAK,CAAA,EAAE,IAAM,EAAA,KAAA,EAAO,WAAW,CAAA,CAAA;AAAA,OAC5C;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,QAAQ,iBAAmB,EAAA;AACpC,MAAA,MAAM,WAAU,EAAK,GAAA,IAAA,CAAA,QAAA,CAAS,IAAI,IAAI,CAAA,KAAtB,YAA2B,EAAC,CAAA;AAC5C,MAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,GAAG,OAAA,CAAQ,GAAI,CAAA,CAAA,CAAA,MAAM,EAAE,IAAA,EAAM,KAAO,EAAA,CAAA,CAAE,KAAM,EAAA,CAAE,CAAC,CAAA,CAAA;AAAA,KACjE;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;AC1FO,MAAM,qBAAqB,GAA8B,CAAA;AAAA;AAAA;AAAA;AAAA,EAI9D,aAAa,kBAAkD,GAAA;AAC7D,IAAA,MAAM,EAAE,QAAS,EAAA,GAAI,MAAMC,uBAAA,CAAY,MAAM,SAAS,CAAA,CAAA;AACtD,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa,QAAmC,EAAA;AACrD,IAAM,MAAA,KAAA,GAAQ,IAAI,YAAa,EAAA,CAAA;AAG/B,IAAA,KAAA,MAAW,OAAO,QAAU,EAAA;AAC1B,MAAM,MAAA,IAAA,GAAO,IAAI,WAAY,CAAA,IAAA,CAAA;AAC7B,MAAM,MAAA,WAAA,GAAc,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAClC,MAAA,IAAI,WAAa,EAAA;AACf,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,2BAA2B,IAAI,CAAA,KAAA,EAAQ,IAAI,GAAG,CAAA,KAAA,EAAQ,YAAY,GAAG,CAAA,CAAA;AAAA,SACvE,CAAA;AAAA,OACF;AAEA,MAAA,KAAA,CAAM,IAAI,IAAM,EAAA;AAAA,QACd,IAAA;AAAA,QACA,KAAK,GAAI,CAAA,GAAA;AAAA,QACT,aAAa,GAAI,CAAA,WAAA;AAAA,QAEjB,oBAAA,sBAA0B,GAAI,EAAA;AAAA,QAC9B,0BAAA,sBAAgC,GAAI,EAAA;AAAA,QACpC,iBAAA,sBAAuB,GAAI,EAAA;AAAA,QAC3B,oBAAA,sBAA0B,GAAI,EAAA;AAAA,QAC9B,yBAAA,sBAA+B,GAAI,EAAA;AAAA,QAEnC,kBAAA,sBAAwB,GAAI,EAAA;AAAA,QAC5B,wBAAA,sBAA8B,GAAI,EAAA;AAAA,QAClC,eAAA,sBAAqB,GAAI,EAAA;AAAA,QACzB,kBAAA,sBAAwB,GAAI,EAAA;AAAA,QAC5B,uBAAA,sBAA6B,GAAI,EAAA;AAAA,OAClC,CAAA,CAAA;AAAA,KACH;AAGA,IAAW,KAAA,MAAA,IAAA,IAAQ,KAAM,CAAA,MAAA,EAAU,EAAA;AACjC,MAAW,KAAA,MAAA,OAAA,IAAW,OAAO,IAAK,CAAA,IAAA,CAAK,YAAY,YAAgB,IAAA,EAAE,CAAG,EAAA;AACtE,QAAM,MAAA,MAAA,GAAS,KAAM,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAChC,QAAA,IAAI,MAAQ,EAAA;AACV,UAAK,IAAA,CAAA,oBAAA,CAAqB,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAC7C,UAAK,IAAA,CAAA,0BAAA,CAA2B,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACnD,UAAK,IAAA,CAAA,iBAAA,CAAkB,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAE1C,UAAA,MAAA,CAAO,kBAAmB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAC7C,UAAA,MAAA,CAAO,wBAAyB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AACnD,UAAA,MAAA,CAAO,eAAgB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,SAC5C;AAAA,OACF;AACA,MAAA,KAAA,MAAW,WAAW,MAAO,CAAA,IAAA;AAAA,QAC3B,IAAA,CAAK,WAAY,CAAA,eAAA,IAAmB,EAAC;AAAA,OACpC,EAAA;AACD,QAAM,MAAA,MAAA,GAAS,KAAM,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAChC,QAAA,IAAI,MAAQ,EAAA;AACV,UAAK,IAAA,CAAA,oBAAA,CAAqB,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAC7C,UAAK,IAAA,CAAA,oBAAA,CAAqB,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAE7C,UAAA,MAAA,CAAO,kBAAmB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAC7C,UAAA,MAAA,CAAO,kBAAmB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,SAC/C;AAAA,OACF;AACA,MAAA,KAAA,MAAW,WAAW,MAAO,CAAA,IAAA;AAAA,QAC3B,IAAA,CAAK,WAAY,CAAA,oBAAA,IAAwB,EAAC;AAAA,OACzC,EAAA;AACD,QAAM,MAAA,MAAA,GAAS,KAAM,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAChC,QAAA,IAAI,MAAQ,EAAA;AACV,UAAK,IAAA,CAAA,oBAAA,CAAqB,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAC7C,UAAK,IAAA,CAAA,0BAAA,CAA2B,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACnD,UAAK,IAAA,CAAA,yBAAA,CAA0B,GAAI,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAElD,UAAA,MAAA,CAAO,kBAAmB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAC7C,UAAA,MAAA,CAAO,wBAAyB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AACnD,UAAA,MAAA,CAAO,uBAAwB,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,SACpD;AAAA,OACF;AAAA,KACF;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAA,CACE,sBACA,SACa,EAAA;AACb,IAAM,MAAA,OAAA,uBAAc,GAAY,EAAA,CAAA;AAChC,IAAM,MAAA,WAAA,GAAc,qBAAqB,KAAM,EAAA,CAAA;AAE/C,IAAA,OAAO,YAAY,MAAQ,EAAA;AACzB,MAAM,MAAA,IAAA,GAAO,YAAY,GAAI,EAAA,CAAA;AAE7B,MAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,IAAI,CAAG,EAAA;AACrB,QAAA,SAAA;AAAA,OACF;AAEA,MAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAC1B,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAA,MAAM,IAAI,KAAA,CAAM,CAAY,SAAA,EAAA,IAAI,CAAa,WAAA,CAAA,CAAA,CAAA;AAAA,OAC/C;AAEA,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA,CAAA;AAEhB,MAAM,MAAA,SAAA,GAAY,UAAU,IAAI,CAAA,CAAA;AAChC,MAAA,IAAI,SAAW,EAAA;AACb,QAAY,WAAA,CAAA,IAAA,CAAK,GAAG,SAAS,CAAA,CAAA;AAAA,OAC/B;AAAA,KACF;AAEA,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBAAoB,OAGvB,EAAA;AAxQL,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAyQI,IAAA,MAAM,YAAe,GAAA,MAAM,QAAS,CAAA,gBAAA,CAAiB,QAAQ,GAAG,CAAA,CAAA;AAEhE,IAAA,MAAM,SAAS,IAAI,GAAA;AAAA,MACjB,MAAM,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAE,IAAI,CAAO,GAAA,KAAA;AAAA;AAAA,QAEnCC,yBACG,QAAS,CAAA,KAAA,CAAM,UAAY,EAAA,GAAA,CAAI,GAAG,CAClC,CAAA,KAAA,CAAMA,wBAAK,CAAA,GAAG,EACd,IAAK,CAAAA,wBAAA,CAAK,MAAM,GAAG,CAAA,GAAIA,yBAAK,KAAM,CAAA,GAAA;AAAA,QACrC,GAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AACA,IAAA,MAAM,WAAc,GAAA,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAE5C,IAAM,MAAA,MAAA,GAAS,IAAI,KAAwB,EAAA,CAAA;AAC3C,IAAA,IAAI,WAAc,GAAA,CAAA,CAAA;AAElB,IAAA,YAAA,CAAa,IAAK,EAAA,CAAA;AAClB,IAAA,WAAA,CAAY,IAAK,EAAA,CAAA;AAEjB,IAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AAEpC,MAAA,OACE,cAAc,YAAa,CAAA,MAAA,IAC3B,YAAa,CAAA,WAAW,IAAI,UAC5B,EAAA;AACA,QAAe,WAAA,IAAA,CAAA,CAAA;AAAA,OACjB;AAGA,MAAA,IAAA,CAAI,EAAa,GAAA,YAAA,CAAA,WAAW,CAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA2B,WAAW,UAAa,CAAA,EAAA;AACrD,QAAe,WAAA,IAAA,CAAA,CAAA;AAEf,QAAA,MAAA,CAAO,IAAK,CAAA,MAAA,CAAO,GAAI,CAAA,UAAU,CAAE,CAAA,CAAA;AAGnC,QAAA,OAAA,CAAO,EAAa,GAAA,YAAA,CAAA,WAAW,CAAxB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA2B,WAAW,UAAa,CAAA,EAAA;AACxD,UAAe,WAAA,IAAA,CAAA,CAAA;AAAA,SACjB;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IAAI,YAAa,CAAA,QAAA,CAAS,WAAW,CAAA,IAAK,QAAQ,eAAiB,EAAA;AAEjE,MAAI,IAAA,YAAA,CAAA;AACJ,MAAI,IAAA,aAAA,CAAA;AACJ,MAAI,IAAA;AACF,QAAA,YAAA,GAAe,MAAM,QAAS,CAAA,IAAA;AAAA,UAC5B,KAAA,CAAM,kBAAkB,WAAW,CAAA;AAAA,SACrC,CAAA;AACA,QAAA,aAAA,GAAgB,QAAS,CAAA,KAAA;AAAA,UACvB,MAAM,QAAA,CAAS,aAAc,CAAA,WAAA,EAAa,QAAQ,GAAG,CAAA;AAAA,SACvD,CAAA;AAAA,eACO,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,iEAAiE,KAAK,CAAA,CAAA;AAAA,SACxE,CAAA;AACA,QAAA,OAAO,KAAM,CAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAQ,CAAA,CAAA;AAAA,OACjC;AACA,MAAM,MAAA,IAAA,GAAO,YAAa,CAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AAG5C,MAAM,MAAA,KAAA,GAAQ,aAAa,+BAAgC,EAAA,CAAA;AAI3D,MAAA;AACE,QAAM,MAAA,UAAA,GAAa,aAAa,+BAAgC,EAAA,CAAA;AAChE,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,YAAY,CAAA,IAAK,UAAY,EAAA;AAC7C,UAAM,MAAA,IAAA,GAAO,KAAM,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAC3B,UAAA,IAAI,IAAM,EAAA;AACR,YAAA,YAAA,CAAa,OAAQ,CAAA,CAAA,CAAA,KAAK,IAAK,CAAA,GAAA,CAAI,CAAC,CAAC,CAAA,CAAA;AAAA,WAChC,MAAA;AACL,YAAM,KAAA,CAAA,GAAA,CAAI,MAAM,YAAY,CAAA,CAAA;AAAA,WAC9B;AAAA,SACF;AAAA,OACF;AAKA,MAAA,MAAM,kBAAkB,IAAI,GAAA;AAAA,QAC1B,CAAC,GAAG,IAAK,CAAA,KAAA,EAAO,GAAG,IAAK,CAAA,OAAA,EAAS,GAAG,IAAA,CAAK,OAAO,CAAA,CAAE,GAAI,CAAA,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAAA,OACnE,CAAA;AAKA,MAAA,IAAI,OAAU,GAAA,KAAA,CAAA;AACd,MAAG,GAAA;AACD,QAAU,OAAA,GAAA,KAAA,CAAA;AACV,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,YAAY,CAAA,IAAK,KAAO,EAAA;AACxC,UAAI,IAAA,eAAA,CAAgB,GAAI,CAAA,IAAI,CAAG,EAAA;AAC7B,YAAA,SAAA;AAAA,WACF;AACA,UAAA,KAAA,MAAW,OAAO,YAAc,EAAA;AAC9B,YAAI,IAAA,eAAA,CAAgB,GAAI,CAAA,GAAG,CAAG,EAAA;AAC5B,cAAU,OAAA,GAAA,IAAA,CAAA;AACV,cAAA,eAAA,CAAgB,IAAI,IAAI,CAAA,CAAA;AACxB,cAAA,MAAA;AAAA,aACF;AAAA,WACF;AAAA,SACF;AAAA,OACO,QAAA,OAAA,EAAA;AAGT,MAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,EAAU,EAAA;AAChC,QAAI,IAAA,eAAA,CAAgB,IAAI,IAAK,CAAA,IAAI,KAAK,CAAC,MAAA,CAAO,QAAS,CAAA,IAAI,CAAG,EAAA;AAC5D,UAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA;AAAA,SAClB;AAAA,OACF;AAAA,KACF;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACF;;ACzWA,MAAM,gBAAsC,GAAA;AAAA,EAC1C;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,IACV,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,SAAA;AAAA,IACN,QAAU,EAAA,MAAA;AAAA,IACV,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,GACnB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,KAAA;AAAA,IACN,QAAU,EAAA,MAAA;AAAA,IACV,MAAA,EAAQ,CAAC,KAAK,CAAA;AAAA,GAChB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,aAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,IACV,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAK,CAAA;AAAA,GACzB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,cAAA;AAAA,IACN,QAAU,EAAA,MAAA;AAAA,IACV,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAK,CAAA;AAAA,GACzB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,gBAAA;AAAA,IACN,QAAU,EAAA,QAAA;AAAA,IACV,MAAQ,EAAA,CAAC,OAAS,EAAA,KAAA,EAAO,KAAK,CAAA;AAAA,GAChC;AAAA,EACA;AAAA,IACE,IAAM,EAAA,iBAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,IACV,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAK,CAAA;AAAA,GACzB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,wBAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,IACV,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAK,CAAA;AAAA,GACzB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,gBAAA;AAAA,IACN,QAAU,EAAA,MAAA;AAAA,IACV,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAK,CAAA;AAAA,GACzB;AAAA,EACA;AAAA,IACE,IAAM,EAAA,uBAAA;AAAA,IACN,QAAU,EAAA,MAAA;AAAA,IACV,MAAA,EAAQ,CAAC,OAAA,EAAS,KAAK,CAAA;AAAA,GACzB;AACF,CAAA,CAAA;AAEA,MAAM,UAAA,GAAaC,MAAE,MAAO,CAAA;AAAA,EAC1B,IAAM,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC1B,SAAA,EAAWA,MACR,MAAO,CAAA;AAAA,IACN,IAAM,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,GAC3B,EACA,QAAS,EAAA;AACd,CAAC,CAAA,CAAA;AAED,MAAM,eAAA,GAAkBA,MAAE,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC1B,OAAA,EAASA,MACN,MAAO,CAAA;AAAA,IACN,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,IAC3B,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,GAC5B,EACA,QAAS,EAAA;AAAA,EACZ,aAAA,EAAeA,MACZ,MAAO,CAAA;AAAA,IACN,IAAM,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,IAC1B,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,IAC3B,MAAQ,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,GAC7B,EACA,QAAS,EAAA;AAAA,EACZ,IAAM,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC1B,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAAA,EAC3B,MAAQ,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,QAAS,EAAA;AAC9B,CAAC,CAAA,CAAA;AAOM,MAAM,YAAa,CAAA;AAAA;AAAA;AAAA;AAAA,EAIxB,OAAO,YAAY,IAA+B,EAAA;AAChD,IAAA,MAAM,WAAW,gBAAiB,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,IAAI,CAAA,CAAA;AAC3D,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,KAClD;AACA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAmB,OAA2C,EAAA;AACnE,IAAM,MAAA,GAAA,GAAM,UAAW,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAEpC,IAAA,IAAI,IAAI,SAAW,EAAA;AACjB,MAAM,MAAA,EAAE,IAAK,EAAA,GAAI,GAAI,CAAA,SAAA,CAAA;AACrB,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,QAAA,EAAW,IAAI,IAAI,CAAA,6CAAA,CAAA;AAAA,SACrB,CAAA;AAAA,OACF;AAEA,MAAO,OAAA,IAAA,CAAK,WAAY,CAAA,IAAI,CAAE,CAAA,IAAA,CAAA;AAAA,KAChC;AAEA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,sBAAsB,OAA2C,EAAA;AA7I1E,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA8II,IAAM,MAAA,GAAA,GAAM,eAAgB,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAEzC,IAAA,IAAA,CAAI,eAAI,OAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,SAAS,WAAc,CAAA,EAAA;AAC7C,MAAO,OAAA,UAAA,CAAA;AAAA,KACT;AACA,IAAA,IAAA,CAAI,eAAI,OAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,SAAS,gBAAmB,CAAA,EAAA;AAClD,MAAO,OAAA,SAAA,CAAA;AAAA,KACT;AACA,IACE,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,SAAJ,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAS,iBACnB,EAAI,GAAA,GAAA,CAAA,IAAA,KAAJ,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAS,kBACnB,CAAA,CAAA,EAAA;AACA,MAAO,OAAA,uBAAA,CAAA;AAAA,KACT;AACA,IAAI,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,SAAJ,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAS,iBAAc,EAAI,GAAA,GAAA,CAAA,IAAA,KAAJ,IAAU,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,CAAS,UAAa,CAAA,CAAA,EAAA;AACnE,MAAO,OAAA,wBAAA,CAAA;AAAA,KACT;AACA,IAAA,IAAA,CAAI,eAAI,OAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,SAAS,cAAiB,CAAA,EAAA;AAChD,MAAO,OAAA,iBAAA,CAAA;AAAA,KACT;AACA,IAAA,IAAA,CAAI,eAAI,OAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,SAAS,aAAgB,CAAA,EAAA;AAC/C,MAAO,OAAA,gBAAA,CAAA;AAAA,KACT;AAEA,IAAA,MAAM,SAAY,GAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,aAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,SAAQ,GAAI,CAAA,IAAA,CAAA;AACjD,IAAA,MAAM,WAAc,GAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,aAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,WAAU,GAAI,CAAA,MAAA,CAAA;AACrD,IAAA,MAAM,UAAa,GAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,aAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,UAAS,GAAI,CAAA,KAAA,CAAA;AACnD,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,QAAO,OAAA,gBAAA,CAAA;AAAA,OACT;AACA,MAAI,IAAA,WAAA,KAAe,SAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,QAAA,CAAS,SAAY,CAAA,CAAA,EAAA;AACjD,QAAO,OAAA,aAAA,CAAA;AAAA,OACT;AACA,MAAA,IAAI,SAAW,EAAA;AACb,QAAO,OAAA,cAAA,CAAA;AAAA,OACT;AAAA,eACS,SAAW,EAAA;AACpB,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACF;;;;;;;;"} |
+3
-3
| { | ||
| "name": "@backstage/cli-node", | ||
| "description": "Node.js library for Backstage CLIs", | ||
| "version": "0.1.2-next.0", | ||
| "version": "0.1.2-next.1", | ||
| "main": "dist/index.cjs.js", | ||
@@ -31,7 +31,7 @@ "types": "dist/index.d.ts", | ||
| "fs-extra": "10.1.0", | ||
| "semver": "^7.3.2", | ||
| "semver": "^7.5.3", | ||
| "zod": "^3.21.4" | ||
| }, | ||
| "devDependencies": { | ||
| "@backstage/cli": "^0.22.9-next.0", | ||
| "@backstage/cli": "^0.22.9-next.1", | ||
| "mock-fs": "^5.2.0" | ||
@@ -38,0 +38,0 @@ }, |
76181
0.19%Updated