diff --git a/.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch b/.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch deleted file mode 100644 index 6128bf7fee..0000000000 --- a/.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch +++ /dev/null @@ -1,67 +0,0 @@ -diff --git a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js -index 2df94cad639ce9a8f0a0a83f17a6b47476af0c02..0b239c0cf215014bde683644930695164eeb4dba 100644 ---- a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js -+++ b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js -@@ -1,5 +1,6 @@ - 'use strict'; - -+var backendPluginApi = require('@backstage/backend-plugin-api'); - var concatStream = require('concat-stream'); - var platformPath = require('path'); - var getRawBody = require('raw-body'); -@@ -65,7 +66,7 @@ class ReadableArrayResponse { - const dir = options?.targetDir ?? await fs__default.default.mkdtemp(platformPath__default.default.join(this.workDir, "backstage-")); - for (let i = 0; i < this.stream.length; i++) { - if (!this.stream[i].path.endsWith("/")) { -- const filePath = platformPath__default.default.join(dir, this.stream[i].path); -+ const filePath = backendPluginApi.resolveSafeChildPath(dir, this.stream[i].path); - await fs__default.default.mkdir(platformPath.dirname(filePath), { recursive: true }); - await pipeline(this.stream[i].data, fs__default.default.createWriteStream(filePath)); - } -diff --git a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map -index bd3acca9e7282197c98fed5bd79889633a818859..615620f9cdfabd4f5b3cebd3bb2d9ca6033df0ca 100644 ---- a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map -+++ b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"ReadableArrayResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.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 UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport platformPath, { dirname } from 'path';\nimport getRawBody from 'raw-body';\nimport fs from 'fs-extra';\nimport { promisify } from 'util';\nimport tar from 'tar';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport { FromReadableArrayOptions } from '../types';\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a array of Readable objects into a tree response reader.\n */\nexport class ReadableArrayResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: FromReadableArrayOptions,\n private readonly workDir: string,\n public readonly etag: string,\n ) {\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n files.push({\n path: this.stream[i].path,\n content: () => getRawBody(this.stream[i].data),\n lastModifiedAt: this.stream[i]?.lastModifiedAt,\n });\n }\n }\n\n return files;\n }\n\n async archive(): Promise {\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n const filePath = platformPath.join(dir, this.stream[i].path);\n await fs.mkdir(dirname(filePath), { recursive: true });\n await pipeline(this.stream[i].data, fs.createWriteStream(filePath));\n }\n }\n\n return dir;\n }\n}\n"],"names":["promisify","pipelineCb","getRawBody","tar","concatStream","Readable","fs","platformPath","dirname"],"mappings":";;;;;;;;;;;;;;;;;;AA8BA,MAAM,QAAA,GAAWA,eAAUC,eAAU,CAAA;AAK9B,MAAM,qBAAA,CAAkE;AAAA,EAG7E,WAAA,CACmB,MAAA,EACA,OAAA,EACD,IAAA,EAChB;AAHiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACD,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEhB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EARQ,IAAA,GAAO,KAAA;AAAA;AAAA,EAWP,QAAA,GAAW;AACjB,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,KAAA,GAAyD;AAC7D,IAAA,IAAA,CAAK,QAAA,EAAS;AAEd,IAAA,MAAM,QAAQ,KAAA,EAA4C;AAE1D,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,IAAI,CAAC,KAAK,MAAA,CAAO,CAAC,EAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA;AAAA,UACrB,SAAS,MAAMC,2BAAA,CAAW,KAAK,MAAA,CAAO,CAAC,EAAE,IAAI,CAAA;AAAA,UAC7C,cAAA,EAAgB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG;AAAA,SACjC,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAM,OAAA,GAA0C;AAC9C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,EAAI;AAE9B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAI,OAAA,CAAgB,OAAM,OAAA,KAAW;AACtD,QAAA,MAAM,QAAA;AAAA,UACJC,oBAAA,CAAI,OAAO,EAAE,GAAA,EAAK,QAAO,EAAG,CAAC,EAAE,CAAC,CAAA;AAAA,UAChCC,8BAAa,OAAO;AAAA,SACtB;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAOC,eAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC3B,CAAA,SAAE;AACA,MAAA,MAAMC,mBAAA,CAAG,OAAO,MAAM,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,OAAA,EACiB;AACjB,IAAA,IAAA,CAAK,QAAA,EAAS;AAEd,IAAA,MAAM,GAAA,GACJ,OAAA,EAAS,SAAA,IACR,MAAMA,mBAAA,CAAG,OAAA,CAAQC,6BAAA,CAAa,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,YAAY,CAAC,CAAA;AAEjE,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,IAAI,CAAC,KAAK,MAAA,CAAO,CAAC,EAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtC,QAAA,MAAM,QAAA,GAAWA,8BAAa,IAAA,CAAK,GAAA,EAAK,KAAK,MAAA,CAAO,CAAC,EAAE,IAAI,CAAA;AAC3D,QAAA,MAAMD,mBAAA,CAAG,MAAME,oBAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACrD,QAAA,MAAM,QAAA,CAAS,KAAK,MAAA,CAAO,CAAC,EAAE,IAAA,EAAMF,mBAAA,CAAG,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAAA,MACpE;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;;"} -\ No newline at end of file -+{"version":3,"file":"ReadableArrayResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.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 resolveSafeChildPath,\n UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport platformPath, { dirname } from 'path';\nimport getRawBody from 'raw-body';\nimport fs from 'fs-extra';\nimport { promisify } from 'util';\nimport tar from 'tar';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport { FromReadableArrayOptions } from '../types';\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a array of Readable objects into a tree response reader.\n */\nexport class ReadableArrayResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: FromReadableArrayOptions,\n private readonly workDir: string,\n public readonly etag: string,\n ) {\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n files.push({\n path: this.stream[i].path,\n content: () => getRawBody(this.stream[i].data),\n lastModifiedAt: this.stream[i]?.lastModifiedAt,\n });\n }\n }\n\n return files;\n }\n\n async archive(): Promise {\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n const filePath = resolveSafeChildPath(dir, this.stream[i].path);\n await fs.mkdir(dirname(filePath), { recursive: true });\n await pipeline(this.stream[i].data, fs.createWriteStream(filePath));\n }\n }\n\n return dir;\n }\n}\n"],"names":["promisify","pipelineCb","getRawBody","tar","concatStream","Readable","fs","platformPath","resolveSafeChildPath","dirname"],"mappings":"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"} -\ No newline at end of file -diff --git a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js -index c69f9272480ebf79ad37eb48677fb298c152be26..6ffe0ef8f45e52ad4fcd9d0227d1ce06451d4da3 100644 ---- a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js -+++ b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js -@@ -1,5 +1,6 @@ - 'use strict'; - -+var backendPluginApi = require('@backstage/backend-plugin-api'); - var concatStream = require('concat-stream'); - var fs = require('fs-extra'); - var platformPath = require('path'); -@@ -115,6 +116,17 @@ class TarArchiveResponse { - if (filterError) { - return false; - } -+ const entry = stat; -+ if ((entry.type === "SymbolicLink" || entry.type === "Link") && entry.linkpath) { -+ const strippedPath = path.split("/").slice(strip).join("/"); -+ const linkDir = platformPath__default.default.dirname( -+ platformPath__default.default.join(dir, strippedPath) -+ ); -+ const targetPath = platformPath__default.default.resolve(linkDir, entry.linkpath); -+ if (!backendPluginApi.isChildPath(dir, targetPath)) { -+ return false; -+ } -+ } - const relativePath = this.stripFirstDirectory ? util$1.stripFirstDirectoryFromPath(path) : path; - if (this.subPath && !relativePath.startsWith(this.subPath)) { - return false; -diff --git a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map -index 61fffa57b65d86fcbf85cf13a380b564a35aec52..918a7dd0b18451b84320e4d2a04096dca9f4cbd7 100644 ---- a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map -+++ b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"TarArchiveResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/TarArchiveResponse.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 UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport fs from 'fs-extra';\nimport platformPath from 'path';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport tar, { Parse, ParseStream, ReadEntry } from 'tar';\nimport { promisify } from 'util';\nimport { stripFirstDirectoryFromPath } from './util';\n\n// Tar types for `Parse` is not a proper constructor, but it should be\nconst TarParseStream = Parse as unknown as { new (): ParseStream };\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a tar archive stream into a tree response reader.\n */\nexport class TarArchiveResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: Readable,\n private readonly subPath: string,\n private readonly workDir: string,\n public readonly etag: string,\n private readonly filter?: (path: string, info: { size: number }) => boolean,\n private readonly stripFirstDirectory: boolean = true,\n ) {\n if (subPath) {\n if (!subPath.endsWith('/')) {\n this.subPath += '/';\n }\n if (subPath.startsWith('/')) {\n throw new TypeError(\n `TarArchiveResponse subPath must not start with a /, got '${subPath}'`,\n );\n }\n }\n\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n const parser = new TarParseStream();\n\n parser.on('entry', (entry: ReadEntry & Readable) => {\n if (entry.type === 'Directory') {\n entry.resume();\n return;\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(entry.path)\n : entry.path;\n\n if (this.subPath) {\n if (!relativePath.startsWith(this.subPath)) {\n entry.resume();\n return;\n }\n }\n\n const path = relativePath.slice(this.subPath.length);\n if (this.filter) {\n if (!this.filter(path, { size: entry.remain })) {\n entry.resume();\n return;\n }\n }\n\n const content = new Promise(async resolve => {\n await pipeline(entry, concatStream(resolve));\n });\n\n files.push({\n path,\n content: () => content,\n });\n\n entry.resume();\n });\n\n await pipeline(this.stream, parser);\n\n return files;\n }\n\n async archive(): Promise {\n if (!this.subPath) {\n this.onlyOnce();\n\n return this.stream;\n }\n\n // TODO(Rugvip): method for repacking a tar with a subpath is to simply extract into a\n // tmp dir and recreate the archive. Would be nicer to stream things instead.\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n // Equivalent of tar --strip-components=N\n // When no subPath is given, remove just 1 top level directory\n let strip = this.subPath ? this.subPath.split('/').length : 1;\n if (!this.stripFirstDirectory) {\n strip--;\n }\n\n let filterError: Error | undefined = undefined;\n await pipeline(\n this.stream,\n tar.extract({\n strip,\n cwd: dir,\n filter: (path, stat) => {\n // Filter errors will short-circuit the rest of the filtering and then throw\n if (filterError) {\n return false;\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(path)\n : path;\n if (this.subPath && !relativePath.startsWith(this.subPath)) {\n return false;\n }\n if (this.filter) {\n const innerPath = path.split('/').slice(strip).join('/');\n try {\n return this.filter(innerPath, { size: stat.size });\n } catch (error) {\n filterError = error;\n return false;\n }\n }\n return true;\n },\n }),\n );\n\n if (filterError) {\n // If the dir was provided we don't want to remove it, but if it wasn't it means\n // we created a temporary directory and we should remove it.\n if (!options?.targetDir) {\n await fs.remove(dir).catch(() => {});\n }\n throw filterError;\n }\n\n return dir;\n }\n}\n"],"names":["Parse","promisify","pipelineCb","stripFirstDirectoryFromPath","concatStream","tar","Readable","fs","platformPath"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"TarArchiveResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/TarArchiveResponse.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 isChildPath,\n UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport fs from 'fs-extra';\nimport platformPath from 'path';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport tar, { FileStat, Parse, ParseStream, ReadEntry } from 'tar';\nimport { promisify } from 'util';\nimport { stripFirstDirectoryFromPath } from './util';\n\n// Tar types for `Parse` is not a proper constructor, but it should be\nconst TarParseStream = Parse as unknown as { new (): ParseStream };\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a tar archive stream into a tree response reader.\n */\nexport class TarArchiveResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: Readable,\n private readonly subPath: string,\n private readonly workDir: string,\n public readonly etag: string,\n private readonly filter?: (path: string, info: { size: number }) => boolean,\n private readonly stripFirstDirectory: boolean = true,\n ) {\n if (subPath) {\n if (!subPath.endsWith('/')) {\n this.subPath += '/';\n }\n if (subPath.startsWith('/')) {\n throw new TypeError(\n `TarArchiveResponse subPath must not start with a /, got '${subPath}'`,\n );\n }\n }\n\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n const parser = new TarParseStream();\n\n parser.on('entry', (entry: ReadEntry & Readable) => {\n if (entry.type === 'Directory') {\n entry.resume();\n return;\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(entry.path)\n : entry.path;\n\n if (this.subPath) {\n if (!relativePath.startsWith(this.subPath)) {\n entry.resume();\n return;\n }\n }\n\n const path = relativePath.slice(this.subPath.length);\n if (this.filter) {\n if (!this.filter(path, { size: entry.remain })) {\n entry.resume();\n return;\n }\n }\n\n const content = new Promise(async resolve => {\n await pipeline(entry, concatStream(resolve));\n });\n\n files.push({\n path,\n content: () => content,\n });\n\n entry.resume();\n });\n\n await pipeline(this.stream, parser);\n\n return files;\n }\n\n async archive(): Promise {\n if (!this.subPath) {\n this.onlyOnce();\n\n return this.stream;\n }\n\n // TODO(Rugvip): method for repacking a tar with a subpath is to simply extract into a\n // tmp dir and recreate the archive. Would be nicer to stream things instead.\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n // Equivalent of tar --strip-components=N\n // When no subPath is given, remove just 1 top level directory\n let strip = this.subPath ? this.subPath.split('/').length : 1;\n if (!this.stripFirstDirectory) {\n strip--;\n }\n\n let filterError: Error | undefined = undefined;\n await pipeline(\n this.stream,\n tar.extract({\n strip,\n cwd: dir,\n filter: (path, stat) => {\n // Filter errors will short-circuit the rest of the filtering and then throw\n if (filterError) {\n return false;\n }\n\n // Block symlinks/hardlinks that escape the extraction directory\n const entry = stat as FileStat & { type?: string; linkpath?: string };\n if (\n (entry.type === 'SymbolicLink' || entry.type === 'Link') &&\n entry.linkpath\n ) {\n const strippedPath = path.split('/').slice(strip).join('/');\n const linkDir = platformPath.dirname(\n platformPath.join(dir, strippedPath),\n );\n const targetPath = platformPath.resolve(linkDir, entry.linkpath);\n if (!isChildPath(dir, targetPath)) {\n return false;\n }\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(path)\n : path;\n if (this.subPath && !relativePath.startsWith(this.subPath)) {\n return false;\n }\n if (this.filter) {\n const innerPath = path.split('/').slice(strip).join('/');\n try {\n return this.filter(innerPath, { size: stat.size });\n } catch (error) {\n filterError = error;\n return false;\n }\n }\n return true;\n },\n }),\n );\n\n if (filterError) {\n // If the dir was provided we don't want to remove it, but if it wasn't it means\n // we created a temporary directory and we should remove it.\n if (!options?.targetDir) {\n await fs.remove(dir).catch(() => {});\n }\n throw filterError;\n }\n\n return dir;\n }\n}\n"],"names":["Parse","promisify","pipelineCb","stripFirstDirectoryFromPath","concatStream","tar","Readable","fs","platformPath","isChildPath"],"mappings":"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"} -\ No newline at end of file diff --git a/.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch b/.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch deleted file mode 100644 index db7c95dc09..0000000000 --- a/.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch +++ /dev/null @@ -1,82 +0,0 @@ -diff --git a/dist/index.d.ts b/dist/index.d.ts -index 6fbb82a5e2ff588138c36011040df3eca4888728..e7e7e887dc5c364545cb63b539bf400c9e387bd9 100644 ---- a/dist/index.d.ts -+++ b/dist/index.d.ts -@@ -89,7 +89,7 @@ declare function createFetchCatalogEntityAction(options: { - */ - declare function createDebugLogAction(): _backstage_plugin_scaffolder_node.TemplateAction<{ - message?: string | undefined; -- listWorkspace?: boolean | "with-contents" | "with-filenames" | undefined; -+ listWorkspace?: boolean | "with-filenames" | "with-contents" | undefined; - }, { - [x: string]: any; - }, "v2">; -diff --git a/dist/scaffolder/actions/builtin/debug/log.cjs.js b/dist/scaffolder/actions/builtin/debug/log.cjs.js -index debb877e59feae9557b4c112fcb3fedc1ef43128..de033041063a03ec02f68fb1659d7b1c7c87a18d 100644 ---- a/dist/scaffolder/actions/builtin/debug/log.cjs.js -+++ b/dist/scaffolder/actions/builtin/debug/log.cjs.js -@@ -1,5 +1,6 @@ - 'use strict'; - -+var backendPluginApi = require('@backstage/backend-plugin-api'); - var fs$1 = require('fs-extra'); - var path = require('path'); - var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node'); -@@ -37,10 +38,18 @@ function createDebugLogAction() { - ${files.map((f) => { - const relativePath = path.relative(ctx.workspacePath, f); - if (ctx.input?.listWorkspace === "with-contents") { -- const content = fs__default.default.readFileSync(f, "utf-8"); -- return ` - ${relativePath}: -+ try { -+ const safePath = backendPluginApi.resolveSafeChildPath( -+ ctx.workspacePath, -+ relativePath -+ ); -+ const content = fs__default.default.readFileSync(safePath, "utf-8"); -+ return ` - ${relativePath}: - - ${content}`; -+ } catch { -+ return ` - ${relativePath}: [skipped]`; -+ } - } - return ` - ${relativePath}`; - }).join("\n")}` -diff --git a/dist/scaffolder/actions/builtin/debug/log.cjs.js.map b/dist/scaffolder/actions/builtin/debug/log.cjs.js.map -index 3732752f9c45a1459f4dd3e7616dfe191f077d47..d2fc04266c004de38ddfab5a46e69d53327c36cd 100644 ---- a/dist/scaffolder/actions/builtin/debug/log.cjs.js.map -+++ b/dist/scaffolder/actions/builtin/debug/log.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"log.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/debug/log.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { readdir, stat } from 'fs-extra';\nimport { join, relative } from 'path';\nimport { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { examples } from './log.examples';\nimport fs from 'fs';\n\nconst id = 'debug:log';\n\n/**\n * Writes a message into the log or lists all files in the workspace\n *\n * @remarks\n *\n * This task is useful for local development and testing of both the scaffolder\n * and scaffolder templates.\n *\n * @public\n */\nexport function createDebugLogAction() {\n return createTemplateAction({\n id,\n description:\n 'Writes a message into the log and/or lists all files in the workspace.',\n examples,\n schema: {\n input: {\n message: z =>\n z.string({ description: 'Message to output.' }).optional(),\n listWorkspace: z =>\n z\n .union([z.boolean(), z.enum(['with-filenames', 'with-contents'])], {\n description:\n 'List all files in the workspace. If used with \"with-contents\", also the file contents are listed.',\n })\n .optional(),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n ctx.logger.info(JSON.stringify(ctx.input, null, 2));\n\n if (ctx.input?.message) {\n ctx.logger.info(ctx.input.message);\n }\n\n if (ctx.input?.listWorkspace) {\n const files = await recursiveReadDir(ctx.workspacePath);\n ctx.logger.info(\n `Workspace:\\n${files\n .map(f => {\n const relativePath = relative(ctx.workspacePath, f);\n if (ctx.input?.listWorkspace === 'with-contents') {\n const content = fs.readFileSync(f, 'utf-8');\n return ` - ${relativePath}:\\n\\n ${content}`;\n }\n return ` - ${relativePath}`;\n })\n .join('\\n')}`,\n );\n }\n },\n });\n}\n\nexport async function recursiveReadDir(dir: string): Promise {\n const subdirs = await readdir(dir);\n const files = await Promise.all(\n subdirs.map(async subdir => {\n const res = join(dir, subdir);\n return (await stat(res)).isDirectory() ? recursiveReadDir(res) : [res];\n }),\n );\n return files.reduce((a, f) => a.concat(f), []);\n}\n"],"names":["createTemplateAction","examples","relative","fs","readdir","join","stat"],"mappings":";;;;;;;;;;;;AAsBA,MAAM,EAAA,GAAK,WAAA;AAYJ,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA;AAAA,IACA,WAAA,EACE,wEAAA;AAAA,cACFC,qBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,OACP,CAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAa,oBAAA,EAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,QAC3D,aAAA,EAAe,CAAA,CAAA,KACb,CAAA,CACG,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,EAAQ,EAAG,CAAA,CAAE,KAAK,CAAC,gBAAA,EAAkB,eAAe,CAAC,CAAC,CAAA,EAAG;AAAA,UACjE,WAAA,EACE;AAAA,SACH,EACA,QAAA;AAAS;AAChB,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,GAAA,CAAI,MAAA,CAAO,KAAK,IAAA,CAAK,SAAA,CAAU,IAAI,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAElD,MAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACtB,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAAA,MACnC;AAEA,MAAA,IAAI,GAAA,CAAI,OAAO,aAAA,EAAe;AAC5B,QAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,GAAA,CAAI,aAAa,CAAA;AACtD,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA;AAAA,UACT,CAAA;AAAA,EAAe,KAAA,CACZ,IAAI,CAAA,CAAA,KAAK;AACR,YAAA,MAAM,YAAA,GAAeC,aAAA,CAAS,GAAA,CAAI,aAAA,EAAe,CAAC,CAAA;AAClD,YAAA,IAAI,GAAA,CAAI,KAAA,EAAO,aAAA,KAAkB,eAAA,EAAiB;AAChD,cAAA,MAAM,OAAA,GAAUC,mBAAA,CAAG,YAAA,CAAa,CAAA,EAAG,OAAO,CAAA;AAC1C,cAAA,OAAO,MAAM,YAAY,CAAA;;AAAA,EAAA,EAAU,OAAO,CAAA,CAAA;AAAA,YAC5C;AACA,YAAA,OAAO,OAAO,YAAY,CAAA,CAAA;AAAA,UAC5B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,iBAAiB,GAAA,EAAgC;AACrE,EAAA,MAAM,OAAA,GAAU,MAAMC,YAAA,CAAQ,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,OAAM,MAAA,KAAU;AAC1B,MAAA,MAAM,GAAA,GAAMC,SAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAC5B,MAAA,OAAA,CAAQ,MAAMC,SAAA,CAAK,GAAG,CAAA,EAAG,WAAA,KAAgB,gBAAA,CAAiB,GAAG,CAAA,GAAI,CAAC,GAAG,CAAA;AAAA,IACvE,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA;AAC/C;;;;;"} -\ No newline at end of file -+{"version":3,"file":"log.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/debug/log.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { resolveSafeChildPath } from '@backstage/backend-plugin-api';\nimport { readdir, stat } from 'fs-extra';\nimport { join, relative } from 'path';\nimport { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { examples } from './log.examples';\nimport fs from 'fs';\n\nconst id = 'debug:log';\n\n/**\n * Writes a message into the log or lists all files in the workspace\n *\n * @remarks\n *\n * This task is useful for local development and testing of both the scaffolder\n * and scaffolder templates.\n *\n * @public\n */\nexport function createDebugLogAction() {\n return createTemplateAction({\n id,\n description:\n 'Writes a message into the log and/or lists all files in the workspace.',\n examples,\n schema: {\n input: {\n message: z =>\n z.string({ description: 'Message to output.' }).optional(),\n listWorkspace: z =>\n z\n .union([z.boolean(), z.enum(['with-filenames', 'with-contents'])], {\n description:\n 'List all files in the workspace. If used with \"with-contents\", also the file contents are listed.',\n })\n .optional(),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n ctx.logger.info(JSON.stringify(ctx.input, null, 2));\n\n if (ctx.input?.message) {\n ctx.logger.info(ctx.input.message);\n }\n\n if (ctx.input?.listWorkspace) {\n const files = await recursiveReadDir(ctx.workspacePath);\n ctx.logger.info(\n `Workspace:\\n${files\n .map(f => {\n const relativePath = relative(ctx.workspacePath, f);\n if (ctx.input?.listWorkspace === 'with-contents') {\n try {\n const safePath = resolveSafeChildPath(\n ctx.workspacePath,\n relativePath,\n );\n const content = fs.readFileSync(safePath, 'utf-8');\n return ` - ${relativePath}:\\n\\n ${content}`;\n } catch {\n return ` - ${relativePath}: [skipped]`;\n }\n }\n return ` - ${relativePath}`;\n })\n .join('\\n')}`,\n );\n }\n },\n });\n}\n\nexport async function recursiveReadDir(dir: string): Promise {\n const subdirs = await readdir(dir);\n const files = await Promise.all(\n subdirs.map(async subdir => {\n const res = join(dir, subdir);\n return (await stat(res)).isDirectory() ? recursiveReadDir(res) : [res];\n }),\n );\n return files.reduce((a, f) => a.concat(f), []);\n}\n"],"names":["createTemplateAction","examples","relative","resolveSafeChildPath","fs","readdir","join","stat"],"mappings":";;;;;;;;;;;;;AAuBA,MAAM,EAAA,GAAK,WAAA;AAYJ,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA;AAAA,IACA,WAAA,EACE,wEAAA;AAAA,cACFC,qBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,OACP,CAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAa,oBAAA,EAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,QAC3D,aAAA,EAAe,CAAA,CAAA,KACb,CAAA,CACG,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,EAAQ,EAAG,CAAA,CAAE,KAAK,CAAC,gBAAA,EAAkB,eAAe,CAAC,CAAC,CAAA,EAAG;AAAA,UACjE,WAAA,EACE;AAAA,SACH,EACA,QAAA;AAAS;AAChB,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,GAAA,CAAI,MAAA,CAAO,KAAK,IAAA,CAAK,SAAA,CAAU,IAAI,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAElD,MAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACtB,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAAA,MACnC;AAEA,MAAA,IAAI,GAAA,CAAI,OAAO,aAAA,EAAe;AAC5B,QAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,GAAA,CAAI,aAAa,CAAA;AACtD,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA;AAAA,UACT,CAAA;AAAA,EAAe,KAAA,CACZ,IAAI,CAAA,CAAA,KAAK;AACR,YAAA,MAAM,YAAA,GAAeC,aAAA,CAAS,GAAA,CAAI,aAAA,EAAe,CAAC,CAAA;AAClD,YAAA,IAAI,GAAA,CAAI,KAAA,EAAO,aAAA,KAAkB,eAAA,EAAiB;AAChD,cAAA,IAAI;AACF,gBAAA,MAAM,QAAA,GAAWC,qCAAA;AAAA,kBACf,GAAA,CAAI,aAAA;AAAA,kBACJ;AAAA,iBACF;AACA,gBAAA,MAAM,OAAA,GAAUC,mBAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,gBAAA,OAAO,MAAM,YAAY,CAAA;;AAAA,EAAA,EAAU,OAAO,CAAA,CAAA;AAAA,cAC5C,CAAA,CAAA,MAAQ;AACN,gBAAA,OAAO,MAAM,YAAY,CAAA,WAAA,CAAA;AAAA,cAC3B;AAAA,YACF;AACA,YAAA,OAAO,OAAO,YAAY,CAAA,CAAA;AAAA,UAC5B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,iBAAiB,GAAA,EAAgC;AACrE,EAAA,MAAM,OAAA,GAAU,MAAMC,YAAA,CAAQ,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,OAAM,MAAA,KAAU;AAC1B,MAAA,MAAM,GAAA,GAAMC,SAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAC5B,MAAA,OAAA,CAAQ,MAAMC,SAAA,CAAK,GAAG,CAAA,EAAG,WAAA,KAAgB,gBAAA,CAAiB,GAAG,CAAA,GAAI,CAAC,GAAG,CAAA;AAAA,IACvE,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA;AAC/C;;;;;"} -\ No newline at end of file -diff --git a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js -index c02eedfb99e0ba47a00209f36c1c4dd834dd9984..da7121ce9a6eafa8fc57ed99b9c0a32c48306664 100644 ---- a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js -+++ b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js -@@ -41,10 +41,11 @@ const createFilesystemDeleteAction = () => { - }); - for (const filepath of resolvedPaths) { - try { -- await fs__default.default.remove(filepath); -- ctx.logger.info(`File ${filepath} deleted successfully`); -+ const safePath = backendPluginApi.resolveSafeChildPath(ctx.workspacePath, filepath); -+ await fs__default.default.remove(safePath); -+ ctx.logger.info(`File ${safePath} deleted successfully`); - } catch (err) { -- ctx.logger.error(`Failed to delete file ${filepath}:`, err); -+ ctx.logger.error(`Failed to delete file`, err); - throw err; - } - } -diff --git a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map -index a6cd11449f9e08e3eb4b76d1a85d8e552a2d16e1..8b77d360c817656e4f232a815a80b145260d1b90 100644 ---- a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map -+++ b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"delete.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/filesystem/delete.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { InputError } from '@backstage/errors';\nimport { resolveSafeChildPath } from '@backstage/backend-plugin-api';\nimport fs from 'fs-extra';\nimport globby from 'globby';\nimport { examples } from './delete.examples';\n\n/**\n * Creates new action that enables deletion of files and directories in the workspace.\n * @public\n */\nexport const createFilesystemDeleteAction = () => {\n return createTemplateAction({\n id: 'fs:delete',\n description: 'Deletes files and directories from the workspace',\n examples,\n schema: {\n input: {\n files: z =>\n z.array(z.string(), {\n description: 'A list of files and directories that will be deleted',\n }),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n if (!Array.isArray(ctx.input?.files)) {\n throw new InputError('files must be an Array');\n }\n\n for (const file of ctx.input.files) {\n // globby cannot handle backslash file separators\n const safeFilepath = resolveSafeChildPath(\n ctx.workspacePath,\n file,\n ).replace(/\\\\/g, '/');\n const resolvedPaths = await globby(safeFilepath, {\n cwd: ctx.workspacePath,\n absolute: true,\n dot: true,\n });\n\n for (const filepath of resolvedPaths) {\n try {\n await fs.remove(filepath);\n ctx.logger.info(`File ${filepath} deleted successfully`);\n } catch (err) {\n ctx.logger.error(`Failed to delete file ${filepath}:`, err);\n throw err;\n }\n }\n }\n },\n });\n};\n"],"names":["createTemplateAction","examples","InputError","resolveSafeChildPath","globby","fs"],"mappings":";;;;;;;;;;;;;;AA2BO,MAAM,+BAA+B,MAAM;AAChD,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA,EAAI,WAAA;AAAA,IACJ,WAAA,EAAa,kDAAA;AAAA,cACbC,wBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAO,CAAA,CAAA,KACL,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,EAAG;AAAA,UAClB,WAAA,EAAa;AAAA,SACd;AAAA;AACL,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA,EAAG;AACpC,QAAA,MAAM,IAAIC,kBAAW,wBAAwB,CAAA;AAAA,MAC/C;AAEA,MAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO;AAElC,QAAA,MAAM,YAAA,GAAeC,qCAAA;AAAA,UACnB,GAAA,CAAI,aAAA;AAAA,UACJ;AAAA,SACF,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACpB,QAAA,MAAM,aAAA,GAAgB,MAAMC,uBAAA,CAAO,YAAA,EAAc;AAAA,UAC/C,KAAK,GAAA,CAAI,aAAA;AAAA,UACT,QAAA,EAAU,IAAA;AAAA,UACV,GAAA,EAAK;AAAA,SACN,CAAA;AAED,QAAA,KAAA,MAAW,YAAY,aAAA,EAAe;AACpC,UAAA,IAAI;AACF,YAAA,MAAMC,mBAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,YAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,qBAAA,CAAuB,CAAA;AAAA,UACzD,SAAS,GAAA,EAAK;AACZ,YAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,KAAK,GAAG,CAAA;AAC1D,YAAA,MAAM,GAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"} -\ No newline at end of file -+{"version":3,"file":"delete.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/filesystem/delete.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { InputError } from '@backstage/errors';\nimport {\n isChildPath,\n resolveSafeChildPath,\n} from '@backstage/backend-plugin-api';\nimport fs from 'fs-extra';\nimport globby from 'globby';\nimport { examples } from './delete.examples';\n\n/**\n * Creates new action that enables deletion of files and directories in the workspace.\n * @public\n */\nexport const createFilesystemDeleteAction = () => {\n return createTemplateAction({\n id: 'fs:delete',\n description: 'Deletes files and directories from the workspace',\n examples,\n schema: {\n input: {\n files: z =>\n z.array(z.string(), {\n description: 'A list of files and directories that will be deleted',\n }),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n if (!Array.isArray(ctx.input?.files)) {\n throw new InputError('files must be an Array');\n }\n\n for (const file of ctx.input.files) {\n // globby cannot handle backslash file separators\n const safeFilepath = resolveSafeChildPath(\n ctx.workspacePath,\n file,\n ).replace(/\\\\/g, '/');\n const resolvedPaths = await globby(safeFilepath, {\n cwd: ctx.workspacePath,\n absolute: true,\n dot: true,\n });\n\n for (const filepath of resolvedPaths) {\n try {\n const safePath = resolveSafeChildPath(ctx.workspacePath, filepath);\n await fs.remove(safePath);\n ctx.logger.info(`File ${safePath} deleted successfully`);\n } catch (err) {\n ctx.logger.error(`Failed to delete file`, err);\n throw err;\n }\n }\n }\n },\n });\n};\n"],"names":["createTemplateAction","examples","InputError","resolveSafeChildPath","globby","fs"],"mappings":";;;;;;;;;;;;;;AA8BO,MAAM,+BAA+B,MAAM;AAChD,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA,EAAI,WAAA;AAAA,IACJ,WAAA,EAAa,kDAAA;AAAA,cACbC,wBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAO,CAAA,CAAA,KACL,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,EAAG;AAAA,UAClB,WAAA,EAAa;AAAA,SACd;AAAA;AACL,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA,EAAG;AACpC,QAAA,MAAM,IAAIC,kBAAW,wBAAwB,CAAA;AAAA,MAC/C;AAEA,MAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO;AAElC,QAAA,MAAM,YAAA,GAAeC,qCAAA;AAAA,UACnB,GAAA,CAAI,aAAA;AAAA,UACJ;AAAA,SACF,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACpB,QAAA,MAAM,aAAA,GAAgB,MAAMC,uBAAA,CAAO,YAAA,EAAc;AAAA,UAC/C,KAAK,GAAA,CAAI,aAAA;AAAA,UACT,QAAA,EAAU,IAAA;AAAA,UACV,GAAA,EAAK;AAAA,SACN,CAAA;AAED,QAAA,KAAA,MAAW,YAAY,aAAA,EAAe;AACpC,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAWD,qCAAA,CAAqB,GAAA,CAAI,aAAA,EAAe,QAAQ,CAAA;AACjE,YAAA,MAAME,mBAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,YAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,qBAAA,CAAuB,CAAA;AAAA,UACzD,SAAS,GAAA,EAAK;AACZ,YAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,CAAA,qBAAA,CAAA,EAAyB,GAAG,CAAA;AAC7C,YAAA,MAAM,GAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"} -\ No newline at end of file diff --git a/.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch b/.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch deleted file mode 100644 index f3f987786e..0000000000 --- a/.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/dist/actions/fetch.cjs.js b/dist/actions/fetch.cjs.js -index 9b4b30cc47e65d3ad71f819adecd6deb52200057..21f534c4a13dfaf084fa21a632a541ace31209dc 100644 ---- a/dist/actions/fetch.cjs.js -+++ b/dist/actions/fetch.cjs.js -@@ -23,7 +23,7 @@ async function fetchContents(options) { - if (!fetchUrlIsAbsolute && baseUrl?.startsWith("file://")) { - const basePath = baseUrl.slice("file://".length); - const srcDir = backendPluginApi.resolveSafeChildPath(path__default.default.dirname(basePath), fetchUrl); -- await fs__default.default.copy(srcDir, outputPath); -+ await fs__default.default.copy(srcDir, outputPath, { filter: (src) => backendPluginApi.isChildPath(srcDir, src) }); - } else { - const readUrl = getReadUrl(fetchUrl, baseUrl, integrations); - const res = await reader.readTree(readUrl, { token }); -diff --git a/dist/actions/fetch.cjs.js.map b/dist/actions/fetch.cjs.js.map -index c7a6ca5ba4adb8eef9b5659541e3c209421f43e2..f9edfd651d826639d0b79919bf72fbed88e873b5 100644 ---- a/dist/actions/fetch.cjs.js.map -+++ b/dist/actions/fetch.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"fetch.cjs.js","sources":["../../src/actions/fetch.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { UrlReaderService } from '@backstage/backend-plugin-api';\nimport { resolveSafeChildPath } from '@backstage/backend-plugin-api';\nimport { InputError } from '@backstage/errors';\nimport { ScmIntegrations } from '@backstage/integration';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/**\n * A helper function that reads the contents of a directory from the given URL.\n * Can be used in your own actions, and also used behind fetch:template and fetch:plain\n *\n * @public\n */\nexport async function fetchContents(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const srcDir = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copy(srcDir, outputPath);\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readTree(readUrl, { token });\n await fs.ensureDir(outputPath);\n await res.dir({ targetDir: outputPath });\n }\n}\n\n/**\n * A helper function that reads the content of a single file from the given URL.\n * Can be used in your own actions, and also used behind `fetch:plain:file`\n *\n * @public\n */\nexport async function fetchFile(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const src = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copyFile(src, outputPath);\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readUrl(readUrl, { token });\n await fs.ensureDir(path.dirname(outputPath));\n const buffer = await res.buffer();\n await fs.outputFile(outputPath, buffer);\n }\n}\n\nfunction isFetchUrlAbsolute(fetchUrl: string) {\n let fetchUrlIsAbsolute = false;\n try {\n // eslint-disable-next-line no-new\n new URL(fetchUrl);\n fetchUrlIsAbsolute = true;\n } catch {\n /* ignored */\n }\n return fetchUrlIsAbsolute;\n}\n\nfunction getReadUrl(\n fetchUrl: string,\n baseUrl: string | undefined,\n integrations: ScmIntegrations,\n) {\n if (isFetchUrlAbsolute(fetchUrl)) {\n return fetchUrl;\n } else if (baseUrl) {\n const integration = integrations.byUrl(baseUrl);\n if (!integration) {\n throw new InputError(`No integration found for location ${baseUrl}`);\n }\n\n return integration.resolveUrl({\n url: fetchUrl,\n base: baseUrl,\n });\n }\n throw new InputError(\n `Failed to fetch, template location could not be determined and the fetch URL is relative, ${fetchUrl}`,\n );\n}\n"],"names":["resolveSafeChildPath","path","fs","InputError"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"fetch.cjs.js","sources":["../../src/actions/fetch.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { UrlReaderService } from '@backstage/backend-plugin-api';\nimport {\n isChildPath,\n resolveSafeChildPath,\n} from '@backstage/backend-plugin-api';\nimport { InputError } from '@backstage/errors';\nimport { ScmIntegrations } from '@backstage/integration';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/**\n * A helper function that reads the contents of a directory from the given URL.\n * Can be used in your own actions, and also used behind fetch:template and fetch:plain\n *\n * @public\n */\nexport async function fetchContents(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const srcDir = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copy(srcDir, outputPath, { filter: src => isChildPath(srcDir, src) });\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readTree(readUrl, { token });\n await fs.ensureDir(outputPath);\n await res.dir({ targetDir: outputPath });\n }\n}\n\n/**\n * A helper function that reads the content of a single file from the given URL.\n * Can be used in your own actions, and also used behind `fetch:plain:file`\n *\n * @public\n */\nexport async function fetchFile(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const src = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copyFile(src, outputPath);\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readUrl(readUrl, { token });\n await fs.ensureDir(path.dirname(outputPath));\n const buffer = await res.buffer();\n await fs.outputFile(outputPath, buffer);\n }\n}\n\nfunction isFetchUrlAbsolute(fetchUrl: string) {\n let fetchUrlIsAbsolute = false;\n try {\n // eslint-disable-next-line no-new\n new URL(fetchUrl);\n fetchUrlIsAbsolute = true;\n } catch {\n /* ignored */\n }\n return fetchUrlIsAbsolute;\n}\n\nfunction getReadUrl(\n fetchUrl: string,\n baseUrl: string | undefined,\n integrations: ScmIntegrations,\n) {\n if (isFetchUrlAbsolute(fetchUrl)) {\n return fetchUrl;\n } else if (baseUrl) {\n const integration = integrations.byUrl(baseUrl);\n if (!integration) {\n throw new InputError(`No integration found for location ${baseUrl}`);\n }\n\n return integration.resolveUrl({\n url: fetchUrl,\n base: baseUrl,\n });\n }\n throw new InputError(\n `Failed to fetch, template location could not be determined and the fetch URL is relative, ${fetchUrl}`,\n );\n}\n"],"names":["resolveSafeChildPath","path","fs","isChildPath","InputError"],"mappings":"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"} -\ No newline at end of file diff --git a/dynamic-plugins/.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch b/dynamic-plugins/.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch deleted file mode 100644 index 6128bf7fee..0000000000 --- a/dynamic-plugins/.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch +++ /dev/null @@ -1,67 +0,0 @@ -diff --git a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js -index 2df94cad639ce9a8f0a0a83f17a6b47476af0c02..0b239c0cf215014bde683644930695164eeb4dba 100644 ---- a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js -+++ b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js -@@ -1,5 +1,6 @@ - 'use strict'; - -+var backendPluginApi = require('@backstage/backend-plugin-api'); - var concatStream = require('concat-stream'); - var platformPath = require('path'); - var getRawBody = require('raw-body'); -@@ -65,7 +66,7 @@ class ReadableArrayResponse { - const dir = options?.targetDir ?? await fs__default.default.mkdtemp(platformPath__default.default.join(this.workDir, "backstage-")); - for (let i = 0; i < this.stream.length; i++) { - if (!this.stream[i].path.endsWith("/")) { -- const filePath = platformPath__default.default.join(dir, this.stream[i].path); -+ const filePath = backendPluginApi.resolveSafeChildPath(dir, this.stream[i].path); - await fs__default.default.mkdir(platformPath.dirname(filePath), { recursive: true }); - await pipeline(this.stream[i].data, fs__default.default.createWriteStream(filePath)); - } -diff --git a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map -index bd3acca9e7282197c98fed5bd79889633a818859..615620f9cdfabd4f5b3cebd3bb2d9ca6033df0ca 100644 ---- a/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map -+++ b/dist/entrypoints/urlReader/lib/tree/ReadableArrayResponse.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"ReadableArrayResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.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 UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport platformPath, { dirname } from 'path';\nimport getRawBody from 'raw-body';\nimport fs from 'fs-extra';\nimport { promisify } from 'util';\nimport tar from 'tar';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport { FromReadableArrayOptions } from '../types';\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a array of Readable objects into a tree response reader.\n */\nexport class ReadableArrayResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: FromReadableArrayOptions,\n private readonly workDir: string,\n public readonly etag: string,\n ) {\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n files.push({\n path: this.stream[i].path,\n content: () => getRawBody(this.stream[i].data),\n lastModifiedAt: this.stream[i]?.lastModifiedAt,\n });\n }\n }\n\n return files;\n }\n\n async archive(): Promise {\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n const filePath = platformPath.join(dir, this.stream[i].path);\n await fs.mkdir(dirname(filePath), { recursive: true });\n await pipeline(this.stream[i].data, fs.createWriteStream(filePath));\n }\n }\n\n return dir;\n }\n}\n"],"names":["promisify","pipelineCb","getRawBody","tar","concatStream","Readable","fs","platformPath","dirname"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"ReadableArrayResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.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 resolveSafeChildPath,\n UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport platformPath, { dirname } from 'path';\nimport getRawBody from 'raw-body';\nimport fs from 'fs-extra';\nimport { promisify } from 'util';\nimport tar from 'tar';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport { FromReadableArrayOptions } from '../types';\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a array of Readable objects into a tree response reader.\n */\nexport class ReadableArrayResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: FromReadableArrayOptions,\n private readonly workDir: string,\n public readonly etag: string,\n ) {\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n files.push({\n path: this.stream[i].path,\n content: () => getRawBody(this.stream[i].data),\n lastModifiedAt: this.stream[i]?.lastModifiedAt,\n });\n }\n }\n\n return files;\n }\n\n async archive(): Promise {\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n for (let i = 0; i < this.stream.length; i++) {\n if (!this.stream[i].path.endsWith('/')) {\n const filePath = resolveSafeChildPath(dir, this.stream[i].path);\n await fs.mkdir(dirname(filePath), { recursive: true });\n await pipeline(this.stream[i].data, fs.createWriteStream(filePath));\n }\n }\n\n return dir;\n }\n}\n"],"names":["promisify","pipelineCb","getRawBody","tar","concatStream","Readable","fs","platformPath","resolveSafeChildPath","dirname"],"mappings":";;;;;;;;;;;;;;;;;;;AA+BA,MAAM,QAAA,GAAWA,eAAUC,eAAU,CAAA;AAK9B,MAAM,qBAAA,CAAkE;AAAA,EAG7E,WAAA,CACmB,MAAA,EACA,OAAA,EACD,IAAA,EAChB;AAHiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACD,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEhB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EARQ,IAAA,GAAO,KAAA;AAAA;AAAA,EAWP,QAAA,GAAW;AACjB,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,KAAA,GAAyD;AAC7D,IAAA,IAAA,CAAK,QAAA,EAAS;AAEd,IAAA,MAAM,QAAQ,KAAA,EAA4C;AAE1D,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,IAAI,CAAC,KAAK,MAAA,CAAO,CAAC,EAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA;AAAA,UACrB,SAAS,MAAMC,2BAAA,CAAW,KAAK,MAAA,CAAO,CAAC,EAAE,IAAI,CAAA;AAAA,UAC7C,cAAA,EAAgB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG;AAAA,SACjC,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAM,OAAA,GAA0C;AAC9C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,EAAI;AAE9B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,IAAI,OAAA,CAAgB,OAAM,OAAA,KAAW;AACtD,QAAA,MAAM,QAAA;AAAA,UACJC,oBAAA,CAAI,OAAO,EAAE,GAAA,EAAK,QAAO,EAAG,CAAC,EAAE,CAAC,CAAA;AAAA,UAChCC,8BAAa,OAAO;AAAA,SACtB;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAOC,eAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC3B,CAAA,SAAE;AACA,MAAA,MAAMC,mBAAA,CAAG,OAAO,MAAM,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,OAAA,EACiB;AACjB,IAAA,IAAA,CAAK,QAAA,EAAS;AAEd,IAAA,MAAM,GAAA,GACJ,OAAA,EAAS,SAAA,IACR,MAAMA,mBAAA,CAAG,OAAA,CAAQC,6BAAA,CAAa,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,YAAY,CAAC,CAAA;AAEjE,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC3C,MAAA,IAAI,CAAC,KAAK,MAAA,CAAO,CAAC,EAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtC,QAAA,MAAM,WAAWC,qCAAA,CAAqB,GAAA,EAAK,KAAK,MAAA,CAAO,CAAC,EAAE,IAAI,CAAA;AAC9D,QAAA,MAAMF,mBAAA,CAAG,MAAMG,oBAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACrD,QAAA,MAAM,QAAA,CAAS,KAAK,MAAA,CAAO,CAAC,EAAE,IAAA,EAAMH,mBAAA,CAAG,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAAA,MACpE;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;;"} -\ No newline at end of file -diff --git a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js -index c69f9272480ebf79ad37eb48677fb298c152be26..6ffe0ef8f45e52ad4fcd9d0227d1ce06451d4da3 100644 ---- a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js -+++ b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js -@@ -1,5 +1,6 @@ - 'use strict'; - -+var backendPluginApi = require('@backstage/backend-plugin-api'); - var concatStream = require('concat-stream'); - var fs = require('fs-extra'); - var platformPath = require('path'); -@@ -115,6 +116,17 @@ class TarArchiveResponse { - if (filterError) { - return false; - } -+ const entry = stat; -+ if ((entry.type === "SymbolicLink" || entry.type === "Link") && entry.linkpath) { -+ const strippedPath = path.split("/").slice(strip).join("/"); -+ const linkDir = platformPath__default.default.dirname( -+ platformPath__default.default.join(dir, strippedPath) -+ ); -+ const targetPath = platformPath__default.default.resolve(linkDir, entry.linkpath); -+ if (!backendPluginApi.isChildPath(dir, targetPath)) { -+ return false; -+ } -+ } - const relativePath = this.stripFirstDirectory ? util$1.stripFirstDirectoryFromPath(path) : path; - if (this.subPath && !relativePath.startsWith(this.subPath)) { - return false; -diff --git a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map -index 61fffa57b65d86fcbf85cf13a380b564a35aec52..918a7dd0b18451b84320e4d2a04096dca9f4cbd7 100644 ---- a/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map -+++ b/dist/entrypoints/urlReader/lib/tree/TarArchiveResponse.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"TarArchiveResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/TarArchiveResponse.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 UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport fs from 'fs-extra';\nimport platformPath from 'path';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport tar, { Parse, ParseStream, ReadEntry } from 'tar';\nimport { promisify } from 'util';\nimport { stripFirstDirectoryFromPath } from './util';\n\n// Tar types for `Parse` is not a proper constructor, but it should be\nconst TarParseStream = Parse as unknown as { new (): ParseStream };\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a tar archive stream into a tree response reader.\n */\nexport class TarArchiveResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: Readable,\n private readonly subPath: string,\n private readonly workDir: string,\n public readonly etag: string,\n private readonly filter?: (path: string, info: { size: number }) => boolean,\n private readonly stripFirstDirectory: boolean = true,\n ) {\n if (subPath) {\n if (!subPath.endsWith('/')) {\n this.subPath += '/';\n }\n if (subPath.startsWith('/')) {\n throw new TypeError(\n `TarArchiveResponse subPath must not start with a /, got '${subPath}'`,\n );\n }\n }\n\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n const parser = new TarParseStream();\n\n parser.on('entry', (entry: ReadEntry & Readable) => {\n if (entry.type === 'Directory') {\n entry.resume();\n return;\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(entry.path)\n : entry.path;\n\n if (this.subPath) {\n if (!relativePath.startsWith(this.subPath)) {\n entry.resume();\n return;\n }\n }\n\n const path = relativePath.slice(this.subPath.length);\n if (this.filter) {\n if (!this.filter(path, { size: entry.remain })) {\n entry.resume();\n return;\n }\n }\n\n const content = new Promise(async resolve => {\n await pipeline(entry, concatStream(resolve));\n });\n\n files.push({\n path,\n content: () => content,\n });\n\n entry.resume();\n });\n\n await pipeline(this.stream, parser);\n\n return files;\n }\n\n async archive(): Promise {\n if (!this.subPath) {\n this.onlyOnce();\n\n return this.stream;\n }\n\n // TODO(Rugvip): method for repacking a tar with a subpath is to simply extract into a\n // tmp dir and recreate the archive. Would be nicer to stream things instead.\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n // Equivalent of tar --strip-components=N\n // When no subPath is given, remove just 1 top level directory\n let strip = this.subPath ? this.subPath.split('/').length : 1;\n if (!this.stripFirstDirectory) {\n strip--;\n }\n\n let filterError: Error | undefined = undefined;\n await pipeline(\n this.stream,\n tar.extract({\n strip,\n cwd: dir,\n filter: (path, stat) => {\n // Filter errors will short-circuit the rest of the filtering and then throw\n if (filterError) {\n return false;\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(path)\n : path;\n if (this.subPath && !relativePath.startsWith(this.subPath)) {\n return false;\n }\n if (this.filter) {\n const innerPath = path.split('/').slice(strip).join('/');\n try {\n return this.filter(innerPath, { size: stat.size });\n } catch (error) {\n filterError = error;\n return false;\n }\n }\n return true;\n },\n }),\n );\n\n if (filterError) {\n // If the dir was provided we don't want to remove it, but if it wasn't it means\n // we created a temporary directory and we should remove it.\n if (!options?.targetDir) {\n await fs.remove(dir).catch(() => {});\n }\n throw filterError;\n }\n\n return dir;\n }\n}\n"],"names":["Parse","promisify","pipelineCb","stripFirstDirectoryFromPath","concatStream","tar","Readable","fs","platformPath"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"TarArchiveResponse.cjs.js","sources":["../../../../../src/entrypoints/urlReader/lib/tree/TarArchiveResponse.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 isChildPath,\n UrlReaderServiceReadTreeResponse,\n UrlReaderServiceReadTreeResponseDirOptions,\n UrlReaderServiceReadTreeResponseFile,\n} from '@backstage/backend-plugin-api';\nimport concatStream from 'concat-stream';\nimport fs from 'fs-extra';\nimport platformPath from 'path';\nimport { pipeline as pipelineCb, Readable } from 'stream';\nimport tar, { FileStat, Parse, ParseStream, ReadEntry } from 'tar';\nimport { promisify } from 'util';\nimport { stripFirstDirectoryFromPath } from './util';\n\n// Tar types for `Parse` is not a proper constructor, but it should be\nconst TarParseStream = Parse as unknown as { new (): ParseStream };\n\nconst pipeline = promisify(pipelineCb);\n\n/**\n * Wraps a tar archive stream into a tree response reader.\n */\nexport class TarArchiveResponse implements UrlReaderServiceReadTreeResponse {\n private read = false;\n\n constructor(\n private readonly stream: Readable,\n private readonly subPath: string,\n private readonly workDir: string,\n public readonly etag: string,\n private readonly filter?: (path: string, info: { size: number }) => boolean,\n private readonly stripFirstDirectory: boolean = true,\n ) {\n if (subPath) {\n if (!subPath.endsWith('/')) {\n this.subPath += '/';\n }\n if (subPath.startsWith('/')) {\n throw new TypeError(\n `TarArchiveResponse subPath must not start with a /, got '${subPath}'`,\n );\n }\n }\n\n this.etag = etag;\n }\n\n // Make sure the input stream is only read once\n private onlyOnce() {\n if (this.read) {\n throw new Error('Response has already been read');\n }\n this.read = true;\n }\n\n async files(): Promise {\n this.onlyOnce();\n\n const files = Array();\n const parser = new TarParseStream();\n\n parser.on('entry', (entry: ReadEntry & Readable) => {\n if (entry.type === 'Directory') {\n entry.resume();\n return;\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(entry.path)\n : entry.path;\n\n if (this.subPath) {\n if (!relativePath.startsWith(this.subPath)) {\n entry.resume();\n return;\n }\n }\n\n const path = relativePath.slice(this.subPath.length);\n if (this.filter) {\n if (!this.filter(path, { size: entry.remain })) {\n entry.resume();\n return;\n }\n }\n\n const content = new Promise(async resolve => {\n await pipeline(entry, concatStream(resolve));\n });\n\n files.push({\n path,\n content: () => content,\n });\n\n entry.resume();\n });\n\n await pipeline(this.stream, parser);\n\n return files;\n }\n\n async archive(): Promise {\n if (!this.subPath) {\n this.onlyOnce();\n\n return this.stream;\n }\n\n // TODO(Rugvip): method for repacking a tar with a subpath is to simply extract into a\n // tmp dir and recreate the archive. Would be nicer to stream things instead.\n const tmpDir = await this.dir();\n\n try {\n const data = await new Promise(async resolve => {\n await pipeline(\n tar.create({ cwd: tmpDir }, ['']),\n concatStream(resolve),\n );\n });\n return Readable.from(data);\n } finally {\n await fs.remove(tmpDir);\n }\n }\n\n async dir(\n options?: UrlReaderServiceReadTreeResponseDirOptions,\n ): Promise {\n this.onlyOnce();\n\n const dir =\n options?.targetDir ??\n (await fs.mkdtemp(platformPath.join(this.workDir, 'backstage-')));\n\n // Equivalent of tar --strip-components=N\n // When no subPath is given, remove just 1 top level directory\n let strip = this.subPath ? this.subPath.split('/').length : 1;\n if (!this.stripFirstDirectory) {\n strip--;\n }\n\n let filterError: Error | undefined = undefined;\n await pipeline(\n this.stream,\n tar.extract({\n strip,\n cwd: dir,\n filter: (path, stat) => {\n // Filter errors will short-circuit the rest of the filtering and then throw\n if (filterError) {\n return false;\n }\n\n // Block symlinks/hardlinks that escape the extraction directory\n const entry = stat as FileStat & { type?: string; linkpath?: string };\n if (\n (entry.type === 'SymbolicLink' || entry.type === 'Link') &&\n entry.linkpath\n ) {\n const strippedPath = path.split('/').slice(strip).join('/');\n const linkDir = platformPath.dirname(\n platformPath.join(dir, strippedPath),\n );\n const targetPath = platformPath.resolve(linkDir, entry.linkpath);\n if (!isChildPath(dir, targetPath)) {\n return false;\n }\n }\n\n // File path relative to the root extracted directory. Will remove the\n // top level dir name from the path since its name is hard to predetermine.\n const relativePath = this.stripFirstDirectory\n ? stripFirstDirectoryFromPath(path)\n : path;\n if (this.subPath && !relativePath.startsWith(this.subPath)) {\n return false;\n }\n if (this.filter) {\n const innerPath = path.split('/').slice(strip).join('/');\n try {\n return this.filter(innerPath, { size: stat.size });\n } catch (error) {\n filterError = error;\n return false;\n }\n }\n return true;\n },\n }),\n );\n\n if (filterError) {\n // If the dir was provided we don't want to remove it, but if it wasn't it means\n // we created a temporary directory and we should remove it.\n if (!options?.targetDir) {\n await fs.remove(dir).catch(() => {});\n }\n throw filterError;\n }\n\n return dir;\n }\n}\n"],"names":["Parse","promisify","pipelineCb","stripFirstDirectoryFromPath","concatStream","tar","Readable","fs","platformPath","isChildPath"],"mappings":"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"} -\ No newline at end of file diff --git a/dynamic-plugins/.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch b/dynamic-plugins/.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch deleted file mode 100644 index db7c95dc09..0000000000 --- a/dynamic-plugins/.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch +++ /dev/null @@ -1,82 +0,0 @@ -diff --git a/dist/index.d.ts b/dist/index.d.ts -index 6fbb82a5e2ff588138c36011040df3eca4888728..e7e7e887dc5c364545cb63b539bf400c9e387bd9 100644 ---- a/dist/index.d.ts -+++ b/dist/index.d.ts -@@ -89,7 +89,7 @@ declare function createFetchCatalogEntityAction(options: { - */ - declare function createDebugLogAction(): _backstage_plugin_scaffolder_node.TemplateAction<{ - message?: string | undefined; -- listWorkspace?: boolean | "with-contents" | "with-filenames" | undefined; -+ listWorkspace?: boolean | "with-filenames" | "with-contents" | undefined; - }, { - [x: string]: any; - }, "v2">; -diff --git a/dist/scaffolder/actions/builtin/debug/log.cjs.js b/dist/scaffolder/actions/builtin/debug/log.cjs.js -index debb877e59feae9557b4c112fcb3fedc1ef43128..de033041063a03ec02f68fb1659d7b1c7c87a18d 100644 ---- a/dist/scaffolder/actions/builtin/debug/log.cjs.js -+++ b/dist/scaffolder/actions/builtin/debug/log.cjs.js -@@ -1,5 +1,6 @@ - 'use strict'; - -+var backendPluginApi = require('@backstage/backend-plugin-api'); - var fs$1 = require('fs-extra'); - var path = require('path'); - var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node'); -@@ -37,10 +38,18 @@ function createDebugLogAction() { - ${files.map((f) => { - const relativePath = path.relative(ctx.workspacePath, f); - if (ctx.input?.listWorkspace === "with-contents") { -- const content = fs__default.default.readFileSync(f, "utf-8"); -- return ` - ${relativePath}: -+ try { -+ const safePath = backendPluginApi.resolveSafeChildPath( -+ ctx.workspacePath, -+ relativePath -+ ); -+ const content = fs__default.default.readFileSync(safePath, "utf-8"); -+ return ` - ${relativePath}: - - ${content}`; -+ } catch { -+ return ` - ${relativePath}: [skipped]`; -+ } - } - return ` - ${relativePath}`; - }).join("\n")}` -diff --git a/dist/scaffolder/actions/builtin/debug/log.cjs.js.map b/dist/scaffolder/actions/builtin/debug/log.cjs.js.map -index 3732752f9c45a1459f4dd3e7616dfe191f077d47..d2fc04266c004de38ddfab5a46e69d53327c36cd 100644 ---- a/dist/scaffolder/actions/builtin/debug/log.cjs.js.map -+++ b/dist/scaffolder/actions/builtin/debug/log.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"log.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/debug/log.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { readdir, stat } from 'fs-extra';\nimport { join, relative } from 'path';\nimport { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { examples } from './log.examples';\nimport fs from 'fs';\n\nconst id = 'debug:log';\n\n/**\n * Writes a message into the log or lists all files in the workspace\n *\n * @remarks\n *\n * This task is useful for local development and testing of both the scaffolder\n * and scaffolder templates.\n *\n * @public\n */\nexport function createDebugLogAction() {\n return createTemplateAction({\n id,\n description:\n 'Writes a message into the log and/or lists all files in the workspace.',\n examples,\n schema: {\n input: {\n message: z =>\n z.string({ description: 'Message to output.' }).optional(),\n listWorkspace: z =>\n z\n .union([z.boolean(), z.enum(['with-filenames', 'with-contents'])], {\n description:\n 'List all files in the workspace. If used with \"with-contents\", also the file contents are listed.',\n })\n .optional(),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n ctx.logger.info(JSON.stringify(ctx.input, null, 2));\n\n if (ctx.input?.message) {\n ctx.logger.info(ctx.input.message);\n }\n\n if (ctx.input?.listWorkspace) {\n const files = await recursiveReadDir(ctx.workspacePath);\n ctx.logger.info(\n `Workspace:\\n${files\n .map(f => {\n const relativePath = relative(ctx.workspacePath, f);\n if (ctx.input?.listWorkspace === 'with-contents') {\n const content = fs.readFileSync(f, 'utf-8');\n return ` - ${relativePath}:\\n\\n ${content}`;\n }\n return ` - ${relativePath}`;\n })\n .join('\\n')}`,\n );\n }\n },\n });\n}\n\nexport async function recursiveReadDir(dir: string): Promise {\n const subdirs = await readdir(dir);\n const files = await Promise.all(\n subdirs.map(async subdir => {\n const res = join(dir, subdir);\n return (await stat(res)).isDirectory() ? recursiveReadDir(res) : [res];\n }),\n );\n return files.reduce((a, f) => a.concat(f), []);\n}\n"],"names":["createTemplateAction","examples","relative","fs","readdir","join","stat"],"mappings":";;;;;;;;;;;;AAsBA,MAAM,EAAA,GAAK,WAAA;AAYJ,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA;AAAA,IACA,WAAA,EACE,wEAAA;AAAA,cACFC,qBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,OACP,CAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAa,oBAAA,EAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,QAC3D,aAAA,EAAe,CAAA,CAAA,KACb,CAAA,CACG,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,EAAQ,EAAG,CAAA,CAAE,KAAK,CAAC,gBAAA,EAAkB,eAAe,CAAC,CAAC,CAAA,EAAG;AAAA,UACjE,WAAA,EACE;AAAA,SACH,EACA,QAAA;AAAS;AAChB,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,GAAA,CAAI,MAAA,CAAO,KAAK,IAAA,CAAK,SAAA,CAAU,IAAI,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAElD,MAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACtB,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAAA,MACnC;AAEA,MAAA,IAAI,GAAA,CAAI,OAAO,aAAA,EAAe;AAC5B,QAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,GAAA,CAAI,aAAa,CAAA;AACtD,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA;AAAA,UACT,CAAA;AAAA,EAAe,KAAA,CACZ,IAAI,CAAA,CAAA,KAAK;AACR,YAAA,MAAM,YAAA,GAAeC,aAAA,CAAS,GAAA,CAAI,aAAA,EAAe,CAAC,CAAA;AAClD,YAAA,IAAI,GAAA,CAAI,KAAA,EAAO,aAAA,KAAkB,eAAA,EAAiB;AAChD,cAAA,MAAM,OAAA,GAAUC,mBAAA,CAAG,YAAA,CAAa,CAAA,EAAG,OAAO,CAAA;AAC1C,cAAA,OAAO,MAAM,YAAY,CAAA;;AAAA,EAAA,EAAU,OAAO,CAAA,CAAA;AAAA,YAC5C;AACA,YAAA,OAAO,OAAO,YAAY,CAAA,CAAA;AAAA,UAC5B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,iBAAiB,GAAA,EAAgC;AACrE,EAAA,MAAM,OAAA,GAAU,MAAMC,YAAA,CAAQ,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,OAAM,MAAA,KAAU;AAC1B,MAAA,MAAM,GAAA,GAAMC,SAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAC5B,MAAA,OAAA,CAAQ,MAAMC,SAAA,CAAK,GAAG,CAAA,EAAG,WAAA,KAAgB,gBAAA,CAAiB,GAAG,CAAA,GAAI,CAAC,GAAG,CAAA;AAAA,IACvE,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA;AAC/C;;;;;"} -\ No newline at end of file -+{"version":3,"file":"log.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/debug/log.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { resolveSafeChildPath } from '@backstage/backend-plugin-api';\nimport { readdir, stat } from 'fs-extra';\nimport { join, relative } from 'path';\nimport { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { examples } from './log.examples';\nimport fs from 'fs';\n\nconst id = 'debug:log';\n\n/**\n * Writes a message into the log or lists all files in the workspace\n *\n * @remarks\n *\n * This task is useful for local development and testing of both the scaffolder\n * and scaffolder templates.\n *\n * @public\n */\nexport function createDebugLogAction() {\n return createTemplateAction({\n id,\n description:\n 'Writes a message into the log and/or lists all files in the workspace.',\n examples,\n schema: {\n input: {\n message: z =>\n z.string({ description: 'Message to output.' }).optional(),\n listWorkspace: z =>\n z\n .union([z.boolean(), z.enum(['with-filenames', 'with-contents'])], {\n description:\n 'List all files in the workspace. If used with \"with-contents\", also the file contents are listed.',\n })\n .optional(),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n ctx.logger.info(JSON.stringify(ctx.input, null, 2));\n\n if (ctx.input?.message) {\n ctx.logger.info(ctx.input.message);\n }\n\n if (ctx.input?.listWorkspace) {\n const files = await recursiveReadDir(ctx.workspacePath);\n ctx.logger.info(\n `Workspace:\\n${files\n .map(f => {\n const relativePath = relative(ctx.workspacePath, f);\n if (ctx.input?.listWorkspace === 'with-contents') {\n try {\n const safePath = resolveSafeChildPath(\n ctx.workspacePath,\n relativePath,\n );\n const content = fs.readFileSync(safePath, 'utf-8');\n return ` - ${relativePath}:\\n\\n ${content}`;\n } catch {\n return ` - ${relativePath}: [skipped]`;\n }\n }\n return ` - ${relativePath}`;\n })\n .join('\\n')}`,\n );\n }\n },\n });\n}\n\nexport async function recursiveReadDir(dir: string): Promise {\n const subdirs = await readdir(dir);\n const files = await Promise.all(\n subdirs.map(async subdir => {\n const res = join(dir, subdir);\n return (await stat(res)).isDirectory() ? recursiveReadDir(res) : [res];\n }),\n );\n return files.reduce((a, f) => a.concat(f), []);\n}\n"],"names":["createTemplateAction","examples","relative","resolveSafeChildPath","fs","readdir","join","stat"],"mappings":";;;;;;;;;;;;;AAuBA,MAAM,EAAA,GAAK,WAAA;AAYJ,SAAS,oBAAA,GAAuB;AACrC,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA;AAAA,IACA,WAAA,EACE,wEAAA;AAAA,cACFC,qBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,OACP,CAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAa,oBAAA,EAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,QAC3D,aAAA,EAAe,CAAA,CAAA,KACb,CAAA,CACG,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,EAAQ,EAAG,CAAA,CAAE,KAAK,CAAC,gBAAA,EAAkB,eAAe,CAAC,CAAC,CAAA,EAAG;AAAA,UACjE,WAAA,EACE;AAAA,SACH,EACA,QAAA;AAAS;AAChB,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,GAAA,CAAI,MAAA,CAAO,KAAK,IAAA,CAAK,SAAA,CAAU,IAAI,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAElD,MAAA,IAAI,GAAA,CAAI,OAAO,OAAA,EAAS;AACtB,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAAA,MACnC;AAEA,MAAA,IAAI,GAAA,CAAI,OAAO,aAAA,EAAe;AAC5B,QAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,GAAA,CAAI,aAAa,CAAA;AACtD,QAAA,GAAA,CAAI,MAAA,CAAO,IAAA;AAAA,UACT,CAAA;AAAA,EAAe,KAAA,CACZ,IAAI,CAAA,CAAA,KAAK;AACR,YAAA,MAAM,YAAA,GAAeC,aAAA,CAAS,GAAA,CAAI,aAAA,EAAe,CAAC,CAAA;AAClD,YAAA,IAAI,GAAA,CAAI,KAAA,EAAO,aAAA,KAAkB,eAAA,EAAiB;AAChD,cAAA,IAAI;AACF,gBAAA,MAAM,QAAA,GAAWC,qCAAA;AAAA,kBACf,GAAA,CAAI,aAAA;AAAA,kBACJ;AAAA,iBACF;AACA,gBAAA,MAAM,OAAA,GAAUC,mBAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,gBAAA,OAAO,MAAM,YAAY,CAAA;;AAAA,EAAA,EAAU,OAAO,CAAA,CAAA;AAAA,cAC5C,CAAA,CAAA,MAAQ;AACN,gBAAA,OAAO,MAAM,YAAY,CAAA,WAAA,CAAA;AAAA,cAC3B;AAAA,YACF;AACA,YAAA,OAAO,OAAO,YAAY,CAAA,CAAA;AAAA,UAC5B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,iBAAiB,GAAA,EAAgC;AACrE,EAAA,MAAM,OAAA,GAAU,MAAMC,YAAA,CAAQ,GAAG,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC1B,OAAA,CAAQ,GAAA,CAAI,OAAM,MAAA,KAAU;AAC1B,MAAA,MAAM,GAAA,GAAMC,SAAA,CAAK,GAAA,EAAK,MAAM,CAAA;AAC5B,MAAA,OAAA,CAAQ,MAAMC,SAAA,CAAK,GAAG,CAAA,EAAG,WAAA,KAAgB,gBAAA,CAAiB,GAAG,CAAA,GAAI,CAAC,GAAG,CAAA;AAAA,IACvE,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,MAAA,CAAO,CAAC,CAAA,EAAG,EAAE,CAAA;AAC/C;;;;;"} -\ No newline at end of file -diff --git a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js -index c02eedfb99e0ba47a00209f36c1c4dd834dd9984..da7121ce9a6eafa8fc57ed99b9c0a32c48306664 100644 ---- a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js -+++ b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js -@@ -41,10 +41,11 @@ const createFilesystemDeleteAction = () => { - }); - for (const filepath of resolvedPaths) { - try { -- await fs__default.default.remove(filepath); -- ctx.logger.info(`File ${filepath} deleted successfully`); -+ const safePath = backendPluginApi.resolveSafeChildPath(ctx.workspacePath, filepath); -+ await fs__default.default.remove(safePath); -+ ctx.logger.info(`File ${safePath} deleted successfully`); - } catch (err) { -- ctx.logger.error(`Failed to delete file ${filepath}:`, err); -+ ctx.logger.error(`Failed to delete file`, err); - throw err; - } - } -diff --git a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map -index a6cd11449f9e08e3eb4b76d1a85d8e552a2d16e1..8b77d360c817656e4f232a815a80b145260d1b90 100644 ---- a/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map -+++ b/dist/scaffolder/actions/builtin/filesystem/delete.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"delete.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/filesystem/delete.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { InputError } from '@backstage/errors';\nimport { resolveSafeChildPath } from '@backstage/backend-plugin-api';\nimport fs from 'fs-extra';\nimport globby from 'globby';\nimport { examples } from './delete.examples';\n\n/**\n * Creates new action that enables deletion of files and directories in the workspace.\n * @public\n */\nexport const createFilesystemDeleteAction = () => {\n return createTemplateAction({\n id: 'fs:delete',\n description: 'Deletes files and directories from the workspace',\n examples,\n schema: {\n input: {\n files: z =>\n z.array(z.string(), {\n description: 'A list of files and directories that will be deleted',\n }),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n if (!Array.isArray(ctx.input?.files)) {\n throw new InputError('files must be an Array');\n }\n\n for (const file of ctx.input.files) {\n // globby cannot handle backslash file separators\n const safeFilepath = resolveSafeChildPath(\n ctx.workspacePath,\n file,\n ).replace(/\\\\/g, '/');\n const resolvedPaths = await globby(safeFilepath, {\n cwd: ctx.workspacePath,\n absolute: true,\n dot: true,\n });\n\n for (const filepath of resolvedPaths) {\n try {\n await fs.remove(filepath);\n ctx.logger.info(`File ${filepath} deleted successfully`);\n } catch (err) {\n ctx.logger.error(`Failed to delete file ${filepath}:`, err);\n throw err;\n }\n }\n }\n },\n });\n};\n"],"names":["createTemplateAction","examples","InputError","resolveSafeChildPath","globby","fs"],"mappings":";;;;;;;;;;;;;;AA2BO,MAAM,+BAA+B,MAAM;AAChD,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA,EAAI,WAAA;AAAA,IACJ,WAAA,EAAa,kDAAA;AAAA,cACbC,wBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAO,CAAA,CAAA,KACL,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,EAAG;AAAA,UAClB,WAAA,EAAa;AAAA,SACd;AAAA;AACL,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA,EAAG;AACpC,QAAA,MAAM,IAAIC,kBAAW,wBAAwB,CAAA;AAAA,MAC/C;AAEA,MAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO;AAElC,QAAA,MAAM,YAAA,GAAeC,qCAAA;AAAA,UACnB,GAAA,CAAI,aAAA;AAAA,UACJ;AAAA,SACF,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACpB,QAAA,MAAM,aAAA,GAAgB,MAAMC,uBAAA,CAAO,YAAA,EAAc;AAAA,UAC/C,KAAK,GAAA,CAAI,aAAA;AAAA,UACT,QAAA,EAAU,IAAA;AAAA,UACV,GAAA,EAAK;AAAA,SACN,CAAA;AAED,QAAA,KAAA,MAAW,YAAY,aAAA,EAAe;AACpC,UAAA,IAAI;AACF,YAAA,MAAMC,mBAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,YAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,qBAAA,CAAuB,CAAA;AAAA,UACzD,SAAS,GAAA,EAAK;AACZ,YAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,KAAK,GAAG,CAAA;AAC1D,YAAA,MAAM,GAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"} -\ No newline at end of file -+{"version":3,"file":"delete.cjs.js","sources":["../../../../../src/scaffolder/actions/builtin/filesystem/delete.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { InputError } from '@backstage/errors';\nimport {\n isChildPath,\n resolveSafeChildPath,\n} from '@backstage/backend-plugin-api';\nimport fs from 'fs-extra';\nimport globby from 'globby';\nimport { examples } from './delete.examples';\n\n/**\n * Creates new action that enables deletion of files and directories in the workspace.\n * @public\n */\nexport const createFilesystemDeleteAction = () => {\n return createTemplateAction({\n id: 'fs:delete',\n description: 'Deletes files and directories from the workspace',\n examples,\n schema: {\n input: {\n files: z =>\n z.array(z.string(), {\n description: 'A list of files and directories that will be deleted',\n }),\n },\n },\n supportsDryRun: true,\n async handler(ctx) {\n if (!Array.isArray(ctx.input?.files)) {\n throw new InputError('files must be an Array');\n }\n\n for (const file of ctx.input.files) {\n // globby cannot handle backslash file separators\n const safeFilepath = resolveSafeChildPath(\n ctx.workspacePath,\n file,\n ).replace(/\\\\/g, '/');\n const resolvedPaths = await globby(safeFilepath, {\n cwd: ctx.workspacePath,\n absolute: true,\n dot: true,\n });\n\n for (const filepath of resolvedPaths) {\n try {\n const safePath = resolveSafeChildPath(ctx.workspacePath, filepath);\n await fs.remove(safePath);\n ctx.logger.info(`File ${safePath} deleted successfully`);\n } catch (err) {\n ctx.logger.error(`Failed to delete file`, err);\n throw err;\n }\n }\n }\n },\n });\n};\n"],"names":["createTemplateAction","examples","InputError","resolveSafeChildPath","globby","fs"],"mappings":";;;;;;;;;;;;;;AA8BO,MAAM,+BAA+B,MAAM;AAChD,EAAA,OAAOA,yCAAA,CAAqB;AAAA,IAC1B,EAAA,EAAI,WAAA;AAAA,IACJ,WAAA,EAAa,kDAAA;AAAA,cACbC,wBAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO;AAAA,QACL,OAAO,CAAA,CAAA,KACL,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAO,EAAG;AAAA,UAClB,WAAA,EAAa;AAAA,SACd;AAAA;AACL,KACF;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,MAAM,QAAQ,GAAA,EAAK;AACjB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA,EAAG;AACpC,QAAA,MAAM,IAAIC,kBAAW,wBAAwB,CAAA;AAAA,MAC/C;AAEA,MAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO;AAElC,QAAA,MAAM,YAAA,GAAeC,qCAAA;AAAA,UACnB,GAAA,CAAI,aAAA;AAAA,UACJ;AAAA,SACF,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACpB,QAAA,MAAM,aAAA,GAAgB,MAAMC,uBAAA,CAAO,YAAA,EAAc;AAAA,UAC/C,KAAK,GAAA,CAAI,aAAA;AAAA,UACT,QAAA,EAAU,IAAA;AAAA,UACV,GAAA,EAAK;AAAA,SACN,CAAA;AAED,QAAA,KAAA,MAAW,YAAY,aAAA,EAAe;AACpC,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAWD,qCAAA,CAAqB,GAAA,CAAI,aAAA,EAAe,QAAQ,CAAA;AACjE,YAAA,MAAME,mBAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,YAAA,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,qBAAA,CAAuB,CAAA;AAAA,UACzD,SAAS,GAAA,EAAK;AACZ,YAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,CAAA,qBAAA,CAAA,EAAyB,GAAG,CAAA;AAC7C,YAAA,MAAM,GAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"} -\ No newline at end of file diff --git a/dynamic-plugins/.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch b/dynamic-plugins/.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch deleted file mode 100644 index f3f987786e..0000000000 --- a/dynamic-plugins/.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/dist/actions/fetch.cjs.js b/dist/actions/fetch.cjs.js -index 9b4b30cc47e65d3ad71f819adecd6deb52200057..21f534c4a13dfaf084fa21a632a541ace31209dc 100644 ---- a/dist/actions/fetch.cjs.js -+++ b/dist/actions/fetch.cjs.js -@@ -23,7 +23,7 @@ async function fetchContents(options) { - if (!fetchUrlIsAbsolute && baseUrl?.startsWith("file://")) { - const basePath = baseUrl.slice("file://".length); - const srcDir = backendPluginApi.resolveSafeChildPath(path__default.default.dirname(basePath), fetchUrl); -- await fs__default.default.copy(srcDir, outputPath); -+ await fs__default.default.copy(srcDir, outputPath, { filter: (src) => backendPluginApi.isChildPath(srcDir, src) }); - } else { - const readUrl = getReadUrl(fetchUrl, baseUrl, integrations); - const res = await reader.readTree(readUrl, { token }); -diff --git a/dist/actions/fetch.cjs.js.map b/dist/actions/fetch.cjs.js.map -index c7a6ca5ba4adb8eef9b5659541e3c209421f43e2..f9edfd651d826639d0b79919bf72fbed88e873b5 100644 ---- a/dist/actions/fetch.cjs.js.map -+++ b/dist/actions/fetch.cjs.js.map -@@ -1 +1 @@ --{"version":3,"file":"fetch.cjs.js","sources":["../../src/actions/fetch.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { UrlReaderService } from '@backstage/backend-plugin-api';\nimport { resolveSafeChildPath } from '@backstage/backend-plugin-api';\nimport { InputError } from '@backstage/errors';\nimport { ScmIntegrations } from '@backstage/integration';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/**\n * A helper function that reads the contents of a directory from the given URL.\n * Can be used in your own actions, and also used behind fetch:template and fetch:plain\n *\n * @public\n */\nexport async function fetchContents(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const srcDir = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copy(srcDir, outputPath);\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readTree(readUrl, { token });\n await fs.ensureDir(outputPath);\n await res.dir({ targetDir: outputPath });\n }\n}\n\n/**\n * A helper function that reads the content of a single file from the given URL.\n * Can be used in your own actions, and also used behind `fetch:plain:file`\n *\n * @public\n */\nexport async function fetchFile(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const src = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copyFile(src, outputPath);\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readUrl(readUrl, { token });\n await fs.ensureDir(path.dirname(outputPath));\n const buffer = await res.buffer();\n await fs.outputFile(outputPath, buffer);\n }\n}\n\nfunction isFetchUrlAbsolute(fetchUrl: string) {\n let fetchUrlIsAbsolute = false;\n try {\n // eslint-disable-next-line no-new\n new URL(fetchUrl);\n fetchUrlIsAbsolute = true;\n } catch {\n /* ignored */\n }\n return fetchUrlIsAbsolute;\n}\n\nfunction getReadUrl(\n fetchUrl: string,\n baseUrl: string | undefined,\n integrations: ScmIntegrations,\n) {\n if (isFetchUrlAbsolute(fetchUrl)) {\n return fetchUrl;\n } else if (baseUrl) {\n const integration = integrations.byUrl(baseUrl);\n if (!integration) {\n throw new InputError(`No integration found for location ${baseUrl}`);\n }\n\n return integration.resolveUrl({\n url: fetchUrl,\n base: baseUrl,\n });\n }\n throw new InputError(\n `Failed to fetch, template location could not be determined and the fetch URL is relative, ${fetchUrl}`,\n );\n}\n"],"names":["resolveSafeChildPath","path","fs","InputError"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"fetch.cjs.js","sources":["../../src/actions/fetch.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { UrlReaderService } from '@backstage/backend-plugin-api';\nimport {\n isChildPath,\n resolveSafeChildPath,\n} from '@backstage/backend-plugin-api';\nimport { InputError } from '@backstage/errors';\nimport { ScmIntegrations } from '@backstage/integration';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/**\n * A helper function that reads the contents of a directory from the given URL.\n * Can be used in your own actions, and also used behind fetch:template and fetch:plain\n *\n * @public\n */\nexport async function fetchContents(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const srcDir = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copy(srcDir, outputPath, { filter: src => isChildPath(srcDir, src) });\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readTree(readUrl, { token });\n await fs.ensureDir(outputPath);\n await res.dir({ targetDir: outputPath });\n }\n}\n\n/**\n * A helper function that reads the content of a single file from the given URL.\n * Can be used in your own actions, and also used behind `fetch:plain:file`\n *\n * @public\n */\nexport async function fetchFile(options: {\n reader: UrlReaderService;\n integrations: ScmIntegrations;\n baseUrl?: string;\n fetchUrl?: string;\n outputPath: string;\n token?: string;\n}) {\n const {\n reader,\n integrations,\n baseUrl,\n fetchUrl = '.',\n outputPath,\n token,\n } = options;\n\n const fetchUrlIsAbsolute = isFetchUrlAbsolute(fetchUrl);\n\n // We handle both file locations and url ones\n if (!fetchUrlIsAbsolute && baseUrl?.startsWith('file://')) {\n const basePath = baseUrl.slice('file://'.length);\n const src = resolveSafeChildPath(path.dirname(basePath), fetchUrl);\n await fs.copyFile(src, outputPath);\n } else {\n const readUrl = getReadUrl(fetchUrl, baseUrl, integrations);\n\n const res = await reader.readUrl(readUrl, { token });\n await fs.ensureDir(path.dirname(outputPath));\n const buffer = await res.buffer();\n await fs.outputFile(outputPath, buffer);\n }\n}\n\nfunction isFetchUrlAbsolute(fetchUrl: string) {\n let fetchUrlIsAbsolute = false;\n try {\n // eslint-disable-next-line no-new\n new URL(fetchUrl);\n fetchUrlIsAbsolute = true;\n } catch {\n /* ignored */\n }\n return fetchUrlIsAbsolute;\n}\n\nfunction getReadUrl(\n fetchUrl: string,\n baseUrl: string | undefined,\n integrations: ScmIntegrations,\n) {\n if (isFetchUrlAbsolute(fetchUrl)) {\n return fetchUrl;\n } else if (baseUrl) {\n const integration = integrations.byUrl(baseUrl);\n if (!integration) {\n throw new InputError(`No integration found for location ${baseUrl}`);\n }\n\n return integration.resolveUrl({\n url: fetchUrl,\n base: baseUrl,\n });\n }\n throw new InputError(\n `Failed to fetch, template location could not be determined and the fetch URL is relative, ${fetchUrl}`,\n );\n}\n"],"names":["resolveSafeChildPath","path","fs","isChildPath","InputError"],"mappings":"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"} -\ No newline at end of file diff --git a/dynamic-plugins/package.json b/dynamic-plugins/package.json index c07eb66edf..75f20636dc 100644 --- a/dynamic-plugins/package.json +++ b/dynamic-plugins/package.json @@ -34,8 +34,6 @@ "@backstage/plugin-auth-node": "0.6.6", "@backstage/plugin-home@^0.8.11": "patch:@backstage/plugin-home@npm%3A0.8.12#./.yarn/patches/@backstage-plugin-home-npm-0.8.12-0d7fbcc764.patch", "@backstage/plugin-techdocs@1.14.1": "patch:@backstage/plugin-techdocs@npm%3A1.14.1#./.yarn/patches/@backstage-plugin-techdocs-npm-1.14.1-c83e1ea3d7.patch", - "@backstage/backend-defaults": "patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch", - "@backstage/plugin-scaffolder-node": "patch:@backstage/plugin-scaffolder-node@npm%3A0.11.0#./.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch", "@backstage/cli-common@^0.1.15": "patch:@backstage/cli-common@npm%3A0.1.15#./.yarn/patches/@backstage-cli-common-npm-0.1.15-7e1948f753.patch", "@backstage/backend-plugin-api": "patch:@backstage/backend-plugin-api@npm%3A1.4.3#./.yarn/patches/@backstage-backend-plugin-api-npm-1.4.3-b7f08217ef.patch", "@backstage/plugin-permission-node": "0.10.4", diff --git a/dynamic-plugins/yarn.lock b/dynamic-plugins/yarn.lock index ead587986a..0a7a215b40 100644 --- a/dynamic-plugins/yarn.lock +++ b/dynamic-plugins/yarn.lock @@ -3576,14 +3576,25 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-app-api@npm:1.2.6": - version: 1.2.6 - resolution: "@backstage/backend-app-api@npm:1.2.6" +"@backstage/backend-app-api@npm:^1.2.5": + version: 1.6.1 + resolution: "@backstage/backend-app-api@npm:1.6.1" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.9.0 + "@backstage/config": ^1.3.7 + "@backstage/errors": ^1.3.0 + checksum: 3400130446093e2649fdf6d908b8a3ccefdfa67b8a856df79c8258cdd729eae34444685a110879ab4003d3d66904e914b8410594a222324746e857dc26d0ef82 + languageName: node + linkType: hard + +"@backstage/backend-app-api@npm:^1.2.7": + version: 1.2.7 + resolution: "@backstage/backend-app-api@npm:1.2.7" + dependencies: + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - checksum: 9e15ab6e7125663d24d2697091f1f70fb873d41549ed4b05c283ea1e86f38af8aa51939e4a366729204697effd4f0a10c9c6db586fa62e2b6d7ce163dcbd2d55 + checksum: c43478358c0a7c53a04c8a2a831df1e36ec571bb154bb53f99387ff40f5f45f2fea9a8bafe7c0866fc7cf3ec88f49b487cddc1c440d96acc5c1deafc410c7620 languageName: node linkType: hard @@ -3664,9 +3675,9 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-defaults@npm:0.12.0": - version: 0.12.0 - resolution: "@backstage/backend-defaults@npm:0.12.0" +"@backstage/backend-defaults@npm:^0.11.1": + version: 0.11.1 + resolution: "@backstage/backend-defaults@npm:0.11.1" dependencies: "@aws-sdk/abort-controller": ^3.347.0 "@aws-sdk/client-codecommit": ^3.350.0 @@ -3674,18 +3685,18 @@ __metadata: "@aws-sdk/credential-providers": ^3.350.0 "@aws-sdk/types": ^3.347.0 "@azure/storage-blob": ^12.5.0 - "@backstage/backend-app-api": ^1.2.6 + "@backstage/backend-app-api": ^1.2.5 "@backstage/backend-dev-utils": ^0.1.5 - "@backstage/backend-plugin-api": ^1.4.2 - "@backstage/cli-node": ^0.2.14 + "@backstage/backend-plugin-api": ^1.4.1 + "@backstage/cli-node": ^0.2.13 "@backstage/config": ^1.3.3 "@backstage/config-loader": ^1.10.2 "@backstage/errors": ^1.2.7 "@backstage/integration": ^1.17.1 "@backstage/integration-aws-node": ^0.1.17 - "@backstage/plugin-auth-node": ^0.6.6 - "@backstage/plugin-events-node": ^0.4.14 - "@backstage/plugin-permission-node": ^0.10.3 + "@backstage/plugin-auth-node": ^0.6.5 + "@backstage/plugin-events-node": ^0.4.13 + "@backstage/plugin-permission-node": ^0.10.2 "@backstage/types": ^1.2.1 "@google-cloud/storage": ^7.0.0 "@keyv/memcache": ^2.0.1 @@ -3698,7 +3709,7 @@ __metadata: "@types/express": ^4.17.6 archiver: ^7.0.0 base64-stream: ^1.0.0 - better-sqlite3: ^12.0.0 + better-sqlite3: ^11.0.0 compression: ^1.7.4 concat-stream: ^2.0.0 cookie: ^0.7.0 @@ -3710,7 +3721,6 @@ __metadata: fs-extra: ^11.2.0 git-url-parse: ^15.0.0 helmet: ^6.0.0 - infinispan: ^0.12.0 is-glob: ^4.0.3 jose: ^5.0.0 keyv: ^5.2.1 @@ -3744,13 +3754,13 @@ __metadata: peerDependenciesMeta: "@google-cloud/cloud-sql-connector": optional: true - checksum: bacb5c88246eb9aa7731bb0f46ee43c3b90faf5eca24735a4d2fe3cd7575a0404441158667e77a7acaf9fcd3755722de9066792c3e718bee39c8c480dfb78209 + checksum: a14743f50cb8f627af23aee5760f3b07bbfff5883407bbbe50c85c06df6ac678bc3559496b1d94f5c70ddbebe33673caf5fe56c8bdbc254019561d06962bb892 languageName: node linkType: hard -"@backstage/backend-defaults@patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch::locator=dynamic-plugins-root%40workspace%3A.": - version: 0.12.0 - resolution: "@backstage/backend-defaults@patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch::version=0.12.0&hash=8d31fb&locator=dynamic-plugins-root%40workspace%3A." +"@backstage/backend-defaults@npm:^0.12.0, @backstage/backend-defaults@npm:^0.12.1": + version: 0.12.2 + resolution: "@backstage/backend-defaults@npm:0.12.2" dependencies: "@aws-sdk/abort-controller": ^3.347.0 "@aws-sdk/client-codecommit": ^3.350.0 @@ -3758,19 +3768,19 @@ __metadata: "@aws-sdk/credential-providers": ^3.350.0 "@aws-sdk/types": ^3.347.0 "@azure/storage-blob": ^12.5.0 - "@backstage/backend-app-api": ^1.2.6 + "@backstage/backend-app-api": ^1.2.7 "@backstage/backend-dev-utils": ^0.1.5 - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/cli-node": ^0.2.14 - "@backstage/config": ^1.3.3 - "@backstage/config-loader": ^1.10.2 + "@backstage/config": ^1.3.4 + "@backstage/config-loader": ^1.10.4 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 + "@backstage/integration": ^1.18.0 "@backstage/integration-aws-node": ^0.1.17 - "@backstage/plugin-auth-node": ^0.6.6 - "@backstage/plugin-events-node": ^0.4.14 - "@backstage/plugin-permission-node": ^0.10.3 - "@backstage/types": ^1.2.1 + "@backstage/plugin-auth-node": ^0.6.7 + "@backstage/plugin-events-node": ^0.4.15 + "@backstage/plugin-permission-node": ^0.10.4 + "@backstage/types": ^1.2.2 "@google-cloud/storage": ^7.0.0 "@keyv/memcache": ^2.0.1 "@keyv/redis": ^4.0.1 @@ -3828,7 +3838,7 @@ __metadata: peerDependenciesMeta: "@google-cloud/cloud-sql-connector": optional: true - checksum: 0ced6361c5bc9c7bc274ee4328bc55c3eb1070846f0e978876d2f2ebd61dc00fc90c8e4e1df16da776e9942b3e9e347652f62afd7f3c97d9f808ca8e78dd0231 + checksum: ce15cf8b292be4089dc017f370b950099227d5dce5e7e4adfc453b69bccf72810c5e99058a702c65e7fb69d48523bd000b48c34a60d6b303cb865dfb4d834c89 languageName: node linkType: hard @@ -3973,6 +3983,30 @@ __metadata: languageName: node linkType: hard +"@backstage/cli-common@npm:^0.1.18": + version: 0.1.18 + resolution: "@backstage/cli-common@npm:0.1.18" + dependencies: + "@backstage/errors": ^1.2.7 + cross-spawn: ^7.0.3 + global-agent: ^3.0.0 + undici: ^7.2.3 + checksum: 110c1709380d7b757ee71d290fe35b986963e78b71d9a5e5abad6d999860e937f56268d581ccc28f8a3b7ff77e53b8d9b4e60e8f03f4ad47e432841e61f31b97 + languageName: node + linkType: hard + +"@backstage/cli-common@npm:^0.2.1": + version: 0.2.1 + resolution: "@backstage/cli-common@npm:0.2.1" + dependencies: + "@backstage/errors": ^1.3.0 + cross-spawn: ^7.0.3 + global-agent: ^3.0.0 + undici: ^7.24.5 + checksum: f460083f5276caac3b04bbc86552d12047af438a08209dc8774bbecfa4c97d95ced188611f17e8f6c862b28af9137a0c7072e28ca9b0e97f8352e39035dc53d8 + languageName: node + linkType: hard + "@backstage/cli-common@patch:@backstage/cli-common@npm%3A0.1.15#./.yarn/patches/@backstage-cli-common-npm-0.1.15-7e1948f753.patch::locator=dynamic-plugins-root%40workspace%3A.": version: 0.1.15 resolution: "@backstage/cli-common@patch:@backstage/cli-common@npm%3A0.1.15#./.yarn/patches/@backstage-cli-common-npm-0.1.15-7e1948f753.patch::version=0.1.15&hash=abcf5e&locator=dynamic-plugins-root%40workspace%3A." @@ -3996,6 +4030,22 @@ __metadata: languageName: node linkType: hard +"@backstage/cli-node@npm:^0.2.13": + version: 0.2.18 + resolution: "@backstage/cli-node@npm:0.2.18" + dependencies: + "@backstage/cli-common": ^0.1.18 + "@backstage/errors": ^1.2.7 + "@backstage/types": ^1.2.2 + "@manypkg/get-packages": ^1.1.3 + "@yarnpkg/parsers": ^3.0.0 + fs-extra: ^11.2.0 + semver: ^7.5.3 + zod: ^3.25.76 + checksum: f66febdf9cba4f7913946de4beff4644cfb5b28719f1b104a55fad9d59a3dd7f31bfb8de0d792bb554dc13436f83d7567f135ee9f3053f3be746f613dca8bdb7 + languageName: node + linkType: hard + "@backstage/cli@npm:^0.34.1": version: 0.34.1 resolution: "@backstage/cli@npm:0.34.1" @@ -4163,6 +4213,29 @@ __metadata: languageName: node linkType: hard +"@backstage/config-loader@npm:^1.10.4": + version: 1.10.10 + resolution: "@backstage/config-loader@npm:1.10.10" + dependencies: + "@backstage/cli-common": ^0.2.1 + "@backstage/config": ^1.3.7 + "@backstage/errors": ^1.3.0 + "@backstage/types": ^1.2.2 + "@types/json-schema": ^7.0.6 + ajv: ^8.10.0 + chokidar: ^3.5.2 + fs-extra: ^11.2.0 + json-schema: ^0.4.0 + json-schema-merge-allof: ^0.8.1 + json-schema-traverse: ^1.0.0 + lodash: ^4.17.21 + minimist: ^1.2.5 + typescript-json-schema: ^0.67.0 + yaml: ^2.0.0 + checksum: 3519e7065fc8b5c1ee18531596d0b35b6dfbb505257ef57cfba777ebe894408db109ab3e70deea3e43139a497c99f1eda8b72c1b6537ea0ea695a167cedc66f0 + languageName: node + linkType: hard + "@backstage/config@npm:^1.2.0, @backstage/config@npm:^1.3.2, @backstage/config@npm:^1.3.3, @backstage/config@npm:^1.3.4, @backstage/config@npm:^1.3.5": version: 1.3.5 resolution: "@backstage/config@npm:1.3.5" @@ -4174,6 +4247,17 @@ __metadata: languageName: node linkType: hard +"@backstage/config@npm:^1.3.7": + version: 1.3.7 + resolution: "@backstage/config@npm:1.3.7" + dependencies: + "@backstage/errors": ^1.3.0 + "@backstage/types": ^1.2.2 + ms: ^2.1.3 + checksum: 9fe63f73a4348f8f85f79f90bdf1624ee8ab8f37367fe5d71157e8407a56302104cab81951a2e6374a73f2e9f4e6655812147f24928406f9ecc2d78884d3eb9e + languageName: node + linkType: hard + "@backstage/core-app-api@npm:^1.18.0, @backstage/core-app-api@npm:^1.19.0, @backstage/core-app-api@npm:^1.19.1": version: 1.19.1 resolution: "@backstage/core-app-api@npm:1.19.1" @@ -4459,6 +4543,16 @@ __metadata: languageName: node linkType: hard +"@backstage/errors@npm:^1.3.0": + version: 1.3.0 + resolution: "@backstage/errors@npm:1.3.0" + dependencies: + "@backstage/types": ^1.2.2 + serialize-error: ^8.0.1 + checksum: 3ab1ec4e39646b01d8720508cb0551ec60ee632f1a62e75b1be5c0363bc6336f82b64300ea1facac10222ddb40d58e4b24413be834012d3f880dc3425177b9b6 + languageName: node + linkType: hard + "@backstage/eslint-plugin@npm:^0.1.11": version: 0.1.11 resolution: "@backstage/eslint-plugin@npm:0.1.11" @@ -5225,6 +5319,23 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-events-node@npm:^0.4.13": + version: 0.4.21 + resolution: "@backstage/plugin-events-node@npm:0.4.21" + dependencies: + "@backstage/backend-plugin-api": ^1.9.0 + "@backstage/errors": ^1.3.0 + "@backstage/types": ^1.2.2 + "@types/content-type": ^1.1.8 + "@types/express": ^4.17.6 + content-type: ^1.0.5 + cross-fetch: ^4.0.0 + express: ^4.22.0 + uri-template: ^2.0.0 + checksum: 104d7507c1d171d2b02fda6e08f4d1dc56619db9efef07e0063413804517b366ead4c7fb8b8332230c7d11b10fdaf24c640a871ca8ce35b3c00ad443957b9324 + languageName: node + linkType: hard + "@backstage/plugin-events-node@npm:^0.4.14, @backstage/plugin-events-node@npm:^0.4.15": version: 0.4.15 resolution: "@backstage/plugin-events-node@npm:0.4.15" @@ -5776,16 +5887,16 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-scaffolder-node@npm:0.11.0": - version: 0.11.0 - resolution: "@backstage/plugin-scaffolder-node@npm:0.11.0" +"@backstage/plugin-scaffolder-node@npm:^0.10.0": + version: 0.10.0 + resolution: "@backstage/plugin-scaffolder-node@npm:0.10.0" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.1 "@backstage/catalog-model": ^1.7.5 "@backstage/errors": ^1.2.7 "@backstage/integration": ^1.17.1 "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/plugin-scaffolder-common": ^1.7.0 + "@backstage/plugin-scaffolder-common": ^1.6.0 "@backstage/types": ^1.2.1 "@isomorphic-git/pgp-plugin": ^0.0.7 concat-stream: ^2.0.0 @@ -5800,20 +5911,47 @@ __metadata: winston-transport: ^4.7.0 zod: ^3.22.4 zod-to-json-schema: ^3.20.4 - checksum: 55b56f41d764e226b42fb2b069b4c211c82f82695614ec1a44241d274d70f3ec3b6c39c665ff45583e0c181a394644029e49a277d1b6d9bbed98841e114941b3 + checksum: 0e9f5481f0dbffcdb0798be749575407fd8ce05246fe6cbb86fc6c5386ed02353521d178439369d8373bb988fc30305d2ac305db465b67e911c305a582a88a84 languageName: node linkType: hard -"@backstage/plugin-scaffolder-node@patch:@backstage/plugin-scaffolder-node@npm%3A0.11.0#./.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch::locator=dynamic-plugins-root%40workspace%3A.": - version: 0.11.0 - resolution: "@backstage/plugin-scaffolder-node@patch:@backstage/plugin-scaffolder-node@npm%3A0.11.0#./.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch::version=0.11.0&hash=7aa336&locator=dynamic-plugins-root%40workspace%3A." +"@backstage/plugin-scaffolder-node@npm:^0.11.0, @backstage/plugin-scaffolder-node@npm:^0.11.1": + version: 0.11.2 + resolution: "@backstage/plugin-scaffolder-node@npm:0.11.2" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/catalog-model": ^1.7.5 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 + "@backstage/integration": ^1.18.0 "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/plugin-scaffolder-common": ^1.7.0 + "@backstage/plugin-scaffolder-common": ^1.7.1 + "@backstage/types": ^1.2.2 + "@isomorphic-git/pgp-plugin": ^0.0.7 + concat-stream: ^2.0.0 + fs-extra: ^11.2.0 + globby: ^11.0.0 + isomorphic-git: ^1.23.0 + jsonschema: ^1.5.0 + lodash: ^4.17.21 + p-limit: ^3.1.0 + tar: ^6.1.12 + winston: ^3.2.1 + winston-transport: ^4.7.0 + zod: ^3.22.4 + zod-to-json-schema: ^3.20.4 + checksum: fbf3f003b7d20721da4e54a30e80230f3c48a4b8b0f7852f9d7711da4e0577d67e5cd6efc59c634d93e382020fe8fd8d53fcf6106a471e54c067e22fcd1d1264 + languageName: node + linkType: hard + +"@backstage/plugin-scaffolder-node@npm:^0.9.0": + version: 0.9.0 + resolution: "@backstage/plugin-scaffolder-node@npm:0.9.0" + dependencies: + "@backstage/backend-plugin-api": ^1.4.0 + "@backstage/catalog-model": ^1.7.4 + "@backstage/errors": ^1.2.7 + "@backstage/integration": ^1.17.0 + "@backstage/plugin-scaffolder-common": ^1.5.11 "@backstage/types": ^1.2.1 "@isomorphic-git/pgp-plugin": ^0.0.7 concat-stream: ^2.0.0 @@ -5828,7 +5966,7 @@ __metadata: winston-transport: ^4.7.0 zod: ^3.22.4 zod-to-json-schema: ^3.20.4 - checksum: 8b9516afe77e7ac6ddefaf1fdbcf09afc0c965bcb65d44085c1880acd3ad7d93dee38ffb2c28e766112936b963f42ead96d98910468cb76ef9ea84d03fe93aca + checksum: 90efbcdc6cb7a3dedcd3f24a0ef18be5069be6dc4ed4640c686b5e3ae7929db11400d99643edf85085b660aeb3cdf800067734374c9b7bb78b111743e3b66d78 languageName: node linkType: hard @@ -15580,6 +15718,15 @@ __metadata: languageName: node linkType: hard +"acorn-walk@npm:^8.3.4": + version: 8.3.5 + resolution: "acorn-walk@npm:8.3.5" + dependencies: + acorn: ^8.11.0 + checksum: ea8b55206c8913ce1d71a62dc10215ad919e3caf64053de72038e0be25dd8ef1454ffdcb6f25ed3b5325204f7ae18131e7fbbdfd7554f9538985a570188c60a8 + languageName: node + linkType: hard + "acorn@npm:^8.1.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" @@ -15589,6 +15736,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.11.0, acorn@npm:^8.15.0": + version: 8.16.0 + resolution: "acorn@npm:8.16.0" + bin: + acorn: bin/acorn + checksum: bbfa466cd0dbd18b4460a85e9d0fc2f35db999380892403c573261beda91f23836db2aa71fd3ae65e94424ad14ff8e2b7bd37c7a2624278fd89137cd6e448c41 + languageName: node + linkType: hard + "address@npm:^1.0.1, address@npm:^1.1.2": version: 1.2.2 resolution: "address@npm:1.2.2" @@ -17208,6 +17364,17 @@ __metadata: languageName: node linkType: hard +"better-sqlite3@npm:^11.0.0": + version: 11.10.0 + resolution: "better-sqlite3@npm:11.10.0" + dependencies: + bindings: ^1.5.0 + node-gyp: latest + prebuild-install: ^7.1.1 + checksum: 4ee0d0f4eee88028f82a2ac104411c72ca6672e1046bbab11844090f719aa2ca2eff167440952310875cef8ae0ec9e3e30e2e94a212933b6e37372375b317357 + languageName: node + linkType: hard + "better-sqlite3@npm:^12.0.0": version: 12.2.0 resolution: "better-sqlite3@npm:12.2.0" @@ -21598,7 +21765,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.14.0, express@npm:^4.17.1, express@npm:^4.17.3, express@npm:^4.18.1, express@npm:^4.18.2, express@npm:^4.21.2": +"express@npm:^4.14.0, express@npm:^4.17.1, express@npm:^4.17.3, express@npm:^4.18.1, express@npm:^4.18.2, express@npm:^4.21.2, express@npm:^4.22.0": version: 4.22.1 resolution: "express@npm:4.22.1" dependencies: @@ -35414,6 +35581,25 @@ __metadata: languageName: node linkType: hard +"typescript-json-schema@npm:^0.67.0": + version: 0.67.1 + resolution: "typescript-json-schema@npm:0.67.1" + dependencies: + "@types/json-schema": ^7.0.9 + "@types/node": ^18.11.9 + glob: ^7.1.7 + path-equal: ^1.2.5 + safe-stable-stringify: ^2.2.0 + ts-node: ^10.9.1 + typescript: ~5.5.0 + vm2: ^3.10.0 + yargs: ^17.1.1 + bin: + typescript-json-schema: bin/typescript-json-schema + checksum: 5722c3f071fec25c286e24e9e32fce64e96591d152cb5d6a4851e31147c7e1354a6ecb4c15e09059cc5f6e803e53a8126bfa66a70491822862242470be73b44c + languageName: node + linkType: hard + "typescript@npm:5.9.3": version: 5.9.3 resolution: "typescript@npm:5.9.3" @@ -35558,6 +35744,13 @@ __metadata: languageName: node linkType: hard +"undici@npm:^7.24.5": + version: 7.25.0 + resolution: "undici@npm:7.25.0" + checksum: 502f855d69dd0f343a4b4999b995b99eab8764639983776bb5afd09b50671863244defe093e7fb97df767c948d6548c0c3d97f8dbb35fec16c1c8c1c15843f17 + languageName: node + linkType: hard + "unfetch@npm:^3.1.1": version: 3.1.2 resolution: "unfetch@npm:3.1.2" @@ -36636,6 +36829,18 @@ __metadata: languageName: node linkType: hard +"vm2@npm:^3.10.0": + version: 3.10.5 + resolution: "vm2@npm:3.10.5" + dependencies: + acorn: ^8.15.0 + acorn-walk: ^8.3.4 + bin: + vm2: bin/vm2 + checksum: 6baa28db89abf8d0110166e04ed4d8e1e1ccd8411f7143cb7f3921c6fb2f1cc0558e70d57e6e21cdbf3eae5d34affe9275baa3bb305038b29eb8eac017620838 + languageName: node + linkType: hard + "w3c-xmlserializer@npm:^4.0.0": version: 4.0.0 resolution: "w3c-xmlserializer@npm:4.0.0" @@ -37450,7 +37655,7 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.19.1, zod@npm:^3.20.0, zod@npm:^3.22.4": +"zod@npm:^3.19.1, zod@npm:^3.20.0, zod@npm:^3.22.4, zod@npm:^3.25.76": version: 3.25.76 resolution: "zod@npm:3.25.76" checksum: c9a403a62b329188a5f6bd24d5d935d2bba345f7ab8151d1baa1505b5da9f227fb139354b043711490c798e91f3df75991395e40142e6510a4b16409f302b849 diff --git a/e2e-tests/.local-test/rhdh b/e2e-tests/.local-test/rhdh new file mode 160000 index 0000000000..bcb94986c5 --- /dev/null +++ b/e2e-tests/.local-test/rhdh @@ -0,0 +1 @@ +Subproject commit bcb94986c5fa0405c377f4736f067ba5c6bab04e diff --git a/package.json b/package.json index 25d6d3ba05..f8765c2257 100644 --- a/package.json +++ b/package.json @@ -62,10 +62,6 @@ "express": "4.22.1", "@backstage/plugin-catalog-graph@0.4.22": "patch:@backstage/plugin-catalog-graph@npm%3A0.4.22#./.yarn/patches/@backstage-plugin-catalog-graph-npm-0.4.22-9b7885f2b0.patch", "@backstage/plugin-search@1.4.29": "patch:@backstage/plugin-search@npm%3A1.4.29#./.yarn/patches/@backstage-plugin-search-npm-1.4.29-73fcb2942c.patch", - "@backstage/backend-defaults@0.12.0": "patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch", - "@backstage/backend-defaults@^0.12.0": "patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch", - "@backstage/plugin-scaffolder-backend@2.2.0": "patch:@backstage/plugin-scaffolder-backend@npm%3A2.2.0#./.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch", - "@backstage/plugin-scaffolder-node@^0.11.0": "patch:@backstage/plugin-scaffolder-node@npm%3A0.11.0#./.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch", "@backstage/cli-common@^0.1.15": "patch:@backstage/cli-common@npm%3A0.1.15#./.yarn/patches/@backstage-cli-common-npm-0.1.15-7e1948f753.patch", "@backstage/backend-plugin-api": "patch:@backstage/backend-plugin-api@npm%3A1.4.3#./.yarn/patches/@backstage-backend-plugin-api-npm-1.4.3-b7f08217ef.patch", "infinispan": "^0.13.0" diff --git a/packages/backend/package.json b/packages/backend/package.json index ceae6c72b3..7a934108f5 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -25,7 +25,7 @@ "@backstage-community/plugin-rbac-node": "1.14.0", "@backstage-community/plugin-scaffolder-backend-module-annotator": "2.10.0", "@backstage/backend-app-api": "1.2.6", - "@backstage/backend-defaults": "0.12.0", + "@backstage/backend-defaults": "0.12.3", "@backstage/backend-dynamic-feature-service": "0.7.3", "@backstage/backend-plugin-api": "1.4.2", "@backstage/catalog-client": "1.11.0", @@ -60,7 +60,7 @@ "@backstage/plugin-events-node": "0.4.14", "@backstage/plugin-permission-backend": "0.7.3", "@backstage/plugin-proxy-backend": "0.6.5", - "@backstage/plugin-scaffolder-backend": "2.2.0", + "@backstage/plugin-scaffolder-backend": "2.2.3", "@backstage/plugin-search-backend": "2.0.5", "@backstage/plugin-search-backend-module-catalog": "0.3.7", "@backstage/plugin-search-backend-module-pg": "0.5.47", diff --git a/plugins/dynamic-plugins-info-backend/package.json b/plugins/dynamic-plugins-info-backend/package.json index daf54b6477..4d994fae4b 100644 --- a/plugins/dynamic-plugins-info-backend/package.json +++ b/plugins/dynamic-plugins-info-backend/package.json @@ -32,7 +32,7 @@ "prettier:fix": "prettier --ignore-unknown --write ." }, "dependencies": { - "@backstage/backend-defaults": "0.12.0", + "@backstage/backend-defaults": "0.12.3", "@backstage/backend-dynamic-feature-service": "0.7.3", "@backstage/backend-plugin-api": "1.4.2", "@backstage/config": "1.3.3", diff --git a/plugins/licensed-users-info-backend/package.json b/plugins/licensed-users-info-backend/package.json index f8c6ac9143..45e0d91309 100644 --- a/plugins/licensed-users-info-backend/package.json +++ b/plugins/licensed-users-info-backend/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@backstage-community/plugin-rbac-common": "1.20.0", - "@backstage/backend-defaults": "0.12.0", + "@backstage/backend-defaults": "0.12.3", "@backstage/backend-plugin-api": "1.4.2", "@backstage/catalog-client": "1.11.0", "@backstage/catalog-model": "1.7.5", diff --git a/plugins/scalprum-backend/package.json b/plugins/scalprum-backend/package.json index 477e4bec27..58cc70296d 100644 --- a/plugins/scalprum-backend/package.json +++ b/plugins/scalprum-backend/package.json @@ -31,7 +31,7 @@ "prettier:fix": "prettier --ignore-unknown --write ." }, "dependencies": { - "@backstage/backend-defaults": "0.12.0", + "@backstage/backend-defaults": "0.12.3", "@backstage/backend-dynamic-feature-service": "0.7.3", "@backstage/backend-plugin-api": "1.4.2", "@backstage/config": "1.3.3", diff --git a/yarn.lock b/yarn.lock index 86f4a33ce0..bcaa1ec9f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2830,7 +2830,7 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-app-api@npm:1.2.6, @backstage/backend-app-api@npm:^1.2.6": +"@backstage/backend-app-api@npm:1.2.6": version: 1.2.6 resolution: "@backstage/backend-app-api@npm:1.2.6" dependencies: @@ -2841,93 +2841,20 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-defaults@npm:0.12.0": - version: 0.12.0 - resolution: "@backstage/backend-defaults@npm:0.12.0" +"@backstage/backend-app-api@npm:^1.2.6, @backstage/backend-app-api@npm:^1.2.7": + version: 1.2.7 + resolution: "@backstage/backend-app-api@npm:1.2.7" dependencies: - "@aws-sdk/abort-controller": ^3.347.0 - "@aws-sdk/client-codecommit": ^3.350.0 - "@aws-sdk/client-s3": ^3.350.0 - "@aws-sdk/credential-providers": ^3.350.0 - "@aws-sdk/types": ^3.347.0 - "@azure/storage-blob": ^12.5.0 - "@backstage/backend-app-api": ^1.2.6 - "@backstage/backend-dev-utils": ^0.1.5 - "@backstage/backend-plugin-api": ^1.4.2 - "@backstage/cli-node": ^0.2.14 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 - "@backstage/config-loader": ^1.10.2 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/integration-aws-node": ^0.1.17 - "@backstage/plugin-auth-node": ^0.6.6 - "@backstage/plugin-events-node": ^0.4.14 - "@backstage/plugin-permission-node": ^0.10.3 - "@backstage/types": ^1.2.1 - "@google-cloud/storage": ^7.0.0 - "@keyv/memcache": ^2.0.1 - "@keyv/redis": ^4.0.1 - "@keyv/valkey": ^1.0.1 - "@manypkg/get-packages": ^1.1.3 - "@octokit/rest": ^19.0.3 - "@opentelemetry/api": ^1.9.0 - "@types/cors": ^2.8.6 - "@types/express": ^4.17.6 - archiver: ^7.0.0 - base64-stream: ^1.0.0 - better-sqlite3: ^12.0.0 - compression: ^1.7.4 - concat-stream: ^2.0.0 - cookie: ^0.7.0 - cors: ^2.8.5 - cron: ^3.0.0 - express: ^4.17.1 - express-promise-router: ^4.1.0 - express-rate-limit: ^7.5.0 - fs-extra: ^11.2.0 - git-url-parse: ^15.0.0 - helmet: ^6.0.0 - infinispan: ^0.12.0 - is-glob: ^4.0.3 - jose: ^5.0.0 - keyv: ^5.2.1 - knex: ^3.0.0 - lodash: ^4.17.21 - logform: ^2.3.2 - luxon: ^3.0.0 - minimatch: ^9.0.0 - mysql2: ^3.0.0 - node-fetch: ^2.7.0 - node-forge: ^1.3.1 - p-limit: ^3.1.0 - path-to-regexp: ^8.0.0 - pg: ^8.11.3 - pg-connection-string: ^2.3.0 - pg-format: ^1.0.4 - rate-limit-redis: ^4.2.0 - raw-body: ^2.4.1 - selfsigned: ^2.0.0 - tar: ^6.1.12 - triple-beam: ^1.4.1 - uuid: ^11.0.0 - winston: ^3.2.1 - winston-transport: ^4.5.0 - yauzl: ^3.0.0 - yn: ^4.0.0 - zod: ^3.22.4 - zod-to-json-schema: ^3.20.4 - peerDependencies: - "@google-cloud/cloud-sql-connector": ^1.4.0 - peerDependenciesMeta: - "@google-cloud/cloud-sql-connector": - optional: true - checksum: bacb5c88246eb9aa7731bb0f46ee43c3b90faf5eca24735a4d2fe3cd7575a0404441158667e77a7acaf9fcd3755722de9066792c3e718bee39c8c480dfb78209 + checksum: c43478358c0a7c53a04c8a2a831df1e36ec571bb154bb53f99387ff40f5f45f2fea9a8bafe7c0866fc7cf3ec88f49b487cddc1c440d96acc5c1deafc410c7620 languageName: node linkType: hard -"@backstage/backend-defaults@patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch::locator=root%40workspace%3A.": - version: 0.12.0 - resolution: "@backstage/backend-defaults@patch:@backstage/backend-defaults@npm%3A0.12.0#./.yarn/patches/@backstage-backend-defaults-npm-0.12.0-ef8b4e5984.patch::version=0.12.0&hash=8d31fb&locator=root%40workspace%3A." +"@backstage/backend-defaults@npm:0.12.3, @backstage/backend-defaults@npm:^0.12.0, @backstage/backend-defaults@npm:^0.12.3": + version: 0.12.3 + resolution: "@backstage/backend-defaults@npm:0.12.3" dependencies: "@aws-sdk/abort-controller": ^3.347.0 "@aws-sdk/client-codecommit": ^3.350.0 @@ -2935,19 +2862,19 @@ __metadata: "@aws-sdk/credential-providers": ^3.350.0 "@aws-sdk/types": ^3.347.0 "@azure/storage-blob": ^12.5.0 - "@backstage/backend-app-api": ^1.2.6 + "@backstage/backend-app-api": ^1.2.7 "@backstage/backend-dev-utils": ^0.1.5 - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/cli-node": ^0.2.14 - "@backstage/config": ^1.3.3 - "@backstage/config-loader": ^1.10.2 + "@backstage/config": ^1.3.4 + "@backstage/config-loader": ^1.10.4 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 + "@backstage/integration": ^1.18.0 "@backstage/integration-aws-node": ^0.1.17 - "@backstage/plugin-auth-node": ^0.6.6 - "@backstage/plugin-events-node": ^0.4.14 - "@backstage/plugin-permission-node": ^0.10.3 - "@backstage/types": ^1.2.1 + "@backstage/plugin-auth-node": ^0.6.7 + "@backstage/plugin-events-node": ^0.4.15 + "@backstage/plugin-permission-node": ^0.10.4 + "@backstage/types": ^1.2.2 "@google-cloud/storage": ^7.0.0 "@keyv/memcache": ^2.0.1 "@keyv/redis": ^4.0.1 @@ -2991,7 +2918,7 @@ __metadata: rate-limit-redis: ^4.2.0 raw-body: ^2.4.1 selfsigned: ^2.0.0 - tar: ^6.1.12 + tar: ^7.4.3 triple-beam: ^1.4.1 uuid: ^11.0.0 winston: ^3.2.1 @@ -3005,7 +2932,7 @@ __metadata: peerDependenciesMeta: "@google-cloud/cloud-sql-connector": optional: true - checksum: 0ced6361c5bc9c7bc274ee4328bc55c3eb1070846f0e978876d2f2ebd61dc00fc90c8e4e1df16da776e9942b3e9e347652f62afd7f3c97d9f808ca8e78dd0231 + checksum: fe01313ae6d9de21b32e278af7cfb6fe649e1543b4e6f28e75ff48094f5af1de3ed03e25ff8044b1783b062f0618ee07e39a1e49bfaeefabdc761c6efad4212f languageName: node linkType: hard @@ -3051,14 +2978,14 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-openapi-utils@npm:^0.6.0": - version: 0.6.0 - resolution: "@backstage/backend-openapi-utils@npm:0.6.0" +"@backstage/backend-openapi-utils@npm:^0.6.0, @backstage/backend-openapi-utils@npm:^0.6.1": + version: 0.6.1 + resolution: "@backstage/backend-openapi-utils@npm:0.6.1" dependencies: "@apidevtools/swagger-parser": ^10.1.0 - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/errors": ^1.2.7 - "@backstage/types": ^1.2.1 + "@backstage/types": ^1.2.2 "@types/express": ^4.17.6 "@types/express-serve-static-core": ^4.17.5 ajv: ^8.16.0 @@ -3071,7 +2998,7 @@ __metadata: mockttp: ^3.13.0 openapi-merge: ^1.3.2 openapi3-ts: ^3.1.2 - checksum: 81dddb23261cacb8b1a2e08d788dd96942610d4f2c094ffbd20de88933c142237c86776f73a0c30c040e0e5c58b882220af374cd9f662e17e966a97d8b7cc64b + checksum: c3d8dc96eaae8a3ea43d9e9f22034ab61e97c5572c70f9740688100c97e5d9c6dab20a9f920296bad06be45b954cfa77b13ad3f8ee36bc19ecd36b686736d38f languageName: node linkType: hard @@ -3182,6 +3109,20 @@ __metadata: languageName: node linkType: hard +"@backstage/catalog-client@npm:^1.12.0": + version: 1.15.0 + resolution: "@backstage/catalog-client@npm:1.15.0" + dependencies: + "@backstage/catalog-model": ^1.8.0 + "@backstage/errors": ^1.3.0 + "@backstage/filter-predicates": ^0.1.2 + cross-fetch: ^4.0.0 + lodash: ^4.17.21 + uri-template: ^2.0.0 + checksum: a2c9e77c7dd2c1a3cca1054250125ad9379b92c2470750644d545c6dead2ffdfaefe99d54034943f26cd9ce40a86f658003143311371e7d24a6923cdf36527c2 + languageName: node + linkType: hard + "@backstage/catalog-model@npm:1.7.5, @backstage/catalog-model@npm:^1.7.5": version: 1.7.5 resolution: "@backstage/catalog-model@npm:1.7.5" @@ -3194,6 +3135,20 @@ __metadata: languageName: node linkType: hard +"@backstage/catalog-model@npm:^1.8.0": + version: 1.8.0 + resolution: "@backstage/catalog-model@npm:1.8.0" + dependencies: + "@backstage/errors": ^1.3.0 + "@backstage/types": ^1.2.2 + ajv: ^8.10.0 + ajv-errors: ^3.0.0 + lodash: ^4.17.21 + zod: ^3.25.76 + checksum: b6e04a443f32fc5e4bdf28f2412262a6885da36818e0dd14d1f635428b45f2286f3bcd2462018d3de6d36165c87a1810704acf6218fa4135b98c4fa2183c8960 + languageName: node + linkType: hard + "@backstage/cli-common@npm:0.1.15": version: 0.1.15 resolution: "@backstage/cli-common@npm:0.1.15" @@ -3368,7 +3323,7 @@ __metadata: languageName: node linkType: hard -"@backstage/config-loader@npm:1.10.2, @backstage/config-loader@npm:^1.10.2, @backstage/config-loader@npm:^1.9.5": +"@backstage/config-loader@npm:1.10.2": version: 1.10.2 resolution: "@backstage/config-loader@npm:1.10.2" dependencies: @@ -3391,7 +3346,30 @@ __metadata: languageName: node linkType: hard -"@backstage/config@npm:1.3.3, @backstage/config@npm:^1.3.2, @backstage/config@npm:^1.3.3": +"@backstage/config-loader@npm:^1.10.2, @backstage/config-loader@npm:^1.10.4, @backstage/config-loader@npm:^1.9.5": + version: 1.10.4 + resolution: "@backstage/config-loader@npm:1.10.4" + dependencies: + "@backstage/cli-common": ^0.1.15 + "@backstage/config": ^1.3.4 + "@backstage/errors": ^1.2.7 + "@backstage/types": ^1.2.2 + "@types/json-schema": ^7.0.6 + ajv: ^8.10.0 + chokidar: ^3.5.2 + fs-extra: ^11.2.0 + json-schema: ^0.4.0 + json-schema-merge-allof: ^0.8.1 + json-schema-traverse: ^1.0.0 + lodash: ^4.17.21 + minimist: ^1.2.5 + typescript-json-schema: ^0.65.0 + yaml: ^2.0.0 + checksum: fe42f79b0eafa6825c241f882d3916c70b11c0f1063bbee1c76c3b0cc9a611e601a3e86277fad4456339eea144f936e83610811f65855fde094416ff65083468 + languageName: node + linkType: hard + +"@backstage/config@npm:1.3.3": version: 1.3.3 resolution: "@backstage/config@npm:1.3.3" dependencies: @@ -3402,6 +3380,28 @@ __metadata: languageName: node linkType: hard +"@backstage/config@npm:^1.3.2, @backstage/config@npm:^1.3.3, @backstage/config@npm:^1.3.4": + version: 1.3.4 + resolution: "@backstage/config@npm:1.3.4" + dependencies: + "@backstage/errors": ^1.2.7 + "@backstage/types": ^1.2.2 + ms: ^2.1.3 + checksum: fe7344c2b3b777ea0351fb0a5cebc56b8d964dc4b107547e15d2a9d40a17a349621f42bfb03d805ba0445ab0939adfa4239cf7db175525dd9ee276bb6139fa3c + languageName: node + linkType: hard + +"@backstage/config@npm:^1.3.7": + version: 1.3.7 + resolution: "@backstage/config@npm:1.3.7" + dependencies: + "@backstage/errors": ^1.3.0 + "@backstage/types": ^1.2.2 + ms: ^2.1.3 + checksum: 9fe63f73a4348f8f85f79f90bdf1624ee8ab8f37367fe5d71157e8407a56302104cab81951a2e6374a73f2e9f4e6655812147f24928406f9ecc2d78884d3eb9e + languageName: node + linkType: hard + "@backstage/core-app-api@npm:1.18.0": version: 1.18.0 resolution: "@backstage/core-app-api@npm:1.18.0" @@ -3661,6 +3661,16 @@ __metadata: languageName: node linkType: hard +"@backstage/errors@npm:^1.3.0": + version: 1.3.0 + resolution: "@backstage/errors@npm:1.3.0" + dependencies: + "@backstage/types": ^1.2.2 + serialize-error: ^8.0.1 + checksum: 3ab1ec4e39646b01d8720508cb0551ec60ee632f1a62e75b1be5c0363bc6336f82b64300ea1facac10222ddb40d58e4b24413be834012d3f880dc3425177b9b6 + languageName: node + linkType: hard + "@backstage/eslint-plugin@npm:^0.1.11": version: 0.1.11 resolution: "@backstage/eslint-plugin@npm:0.1.11" @@ -3671,6 +3681,19 @@ __metadata: languageName: node linkType: hard +"@backstage/filter-predicates@npm:^0.1.2": + version: 0.1.2 + resolution: "@backstage/filter-predicates@npm:0.1.2" + dependencies: + "@backstage/config": ^1.3.7 + "@backstage/errors": ^1.3.0 + "@backstage/types": ^1.2.2 + zod: ^3.25.76 || ^4.0.0 + zod-validation-error: ^4.0.2 + checksum: dcf685234168e6731448df975da0dea9202f6c018523482798bcb4cbe29b1211b206e66898bb9517a800ab8a5cb4a191b6701acea68d19cfb9d4bd362433b35d + languageName: node + linkType: hard + "@backstage/frontend-app-api@npm:0.12.0, @backstage/frontend-app-api@npm:^0.12.0": version: 0.12.0 resolution: "@backstage/frontend-app-api@npm:0.12.0" @@ -4415,13 +4438,13 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-bitbucket-cloud-common@npm:^0.3.1": - version: 0.3.1 - resolution: "@backstage/plugin-bitbucket-cloud-common@npm:0.3.1" +"@backstage/plugin-bitbucket-cloud-common@npm:^0.3.2": + version: 0.3.2 + resolution: "@backstage/plugin-bitbucket-cloud-common@npm:0.3.2" dependencies: - "@backstage/integration": ^1.17.1 + "@backstage/integration": ^1.18.0 cross-fetch: ^4.0.0 - checksum: a92ce22e57f8ea84f99a51c644cda5f72400a4fc4b6571cf349aee311ce415ff62a9ababbbb17be91866353f071219ecce98c566db172c9b2e7328a612f5c370 + checksum: f651ead95da9a6f845d4d2d0b3fbfeb6a6f184445a180f9f4717f85649ebd28587459f95f003819a55b01857628a2a234a4bab8f169f45134b4cdbc8bd61b790 languageName: node linkType: hard @@ -4452,7 +4475,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@npm:0.2.11, @backstage/plugin-catalog-backend-module-scaffolder-entity-model@npm:^0.2.11": +"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@npm:0.2.11": version: 0.2.11 resolution: "@backstage/plugin-catalog-backend-module-scaffolder-entity-model@npm:0.2.11" dependencies: @@ -4465,6 +4488,19 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@npm:^0.2.12": + version: 0.2.12 + resolution: "@backstage/plugin-catalog-backend-module-scaffolder-entity-model@npm:0.2.12" + dependencies: + "@backstage/backend-plugin-api": ^1.4.3 + "@backstage/catalog-model": ^1.7.5 + "@backstage/plugin-catalog-common": ^1.1.5 + "@backstage/plugin-catalog-node": ^1.19.0 + "@backstage/plugin-scaffolder-common": ^1.7.1 + checksum: 2ff9048206a971f1ec2da615d4afb9bdf6a9b97aa70cbaae82b3a599e4c9e7539ddbcc621337f20ca2bdc4f5e6107c51b26d65abd02153c0363fd7b501ec3aa5 + languageName: node + linkType: hard + "@backstage/plugin-catalog-backend@npm:3.0.1, @backstage/plugin-catalog-backend@npm:^3.0.1": version: 3.0.1 resolution: "@backstage/plugin-catalog-backend@npm:3.0.1" @@ -4617,7 +4653,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-node@npm:1.18.0, @backstage/plugin-catalog-node@npm:^1.18.0": +"@backstage/plugin-catalog-node@npm:1.18.0": version: 1.18.0 resolution: "@backstage/plugin-catalog-node@npm:1.18.0" dependencies: @@ -4635,6 +4671,24 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-catalog-node@npm:^1.18.0, @backstage/plugin-catalog-node@npm:^1.19.0": + version: 1.19.0 + resolution: "@backstage/plugin-catalog-node@npm:1.19.0" + dependencies: + "@backstage/backend-plugin-api": ^1.4.3 + "@backstage/catalog-client": ^1.12.0 + "@backstage/catalog-model": ^1.7.5 + "@backstage/errors": ^1.2.7 + "@backstage/plugin-catalog-common": ^1.1.5 + "@backstage/plugin-permission-common": ^0.9.1 + "@backstage/plugin-permission-node": ^0.10.4 + "@backstage/types": ^1.2.2 + lodash: ^4.17.21 + yaml: ^2.0.0 + checksum: c012b23757d679b6a029707c2ea7df9e375939cfcb9a0adf32ee0ebdde1b7176b41a93350d284b09e93095fb3f76d0230bf788bb26da04fa3cec5f2f296c30d9 + languageName: node + linkType: hard + "@backstage/plugin-catalog-react@npm:1.20.1": version: 1.20.1 resolution: "@backstage/plugin-catalog-react@npm:1.20.1" @@ -4768,7 +4822,7 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-events-node@npm:0.4.14, @backstage/plugin-events-node@npm:^0.4.14": +"@backstage/plugin-events-node@npm:0.4.14": version: 0.4.14 resolution: "@backstage/plugin-events-node@npm:0.4.14" dependencies: @@ -4785,6 +4839,23 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-events-node@npm:^0.4.14, @backstage/plugin-events-node@npm:^0.4.15": + version: 0.4.15 + resolution: "@backstage/plugin-events-node@npm:0.4.15" + dependencies: + "@backstage/backend-plugin-api": ^1.4.3 + "@backstage/errors": ^1.2.7 + "@backstage/types": ^1.2.2 + "@types/content-type": ^1.1.8 + "@types/express": ^4.17.6 + content-type: ^1.0.5 + cross-fetch: ^4.0.0 + express: ^4.17.1 + uri-template: ^2.0.0 + checksum: 0439e5f44845a9113b2ad08235ca04fa0a57fb9bbefd5c1e9942390867a11cce006f1c9d4e551a3c7ee33b14dccb0773b28b72eb76695b018c43ea953e12af3c + languageName: node + linkType: hard + "@backstage/plugin-home-react@npm:^0.1.29": version: 0.1.29 resolution: "@backstage/plugin-home-react@npm:0.1.29" @@ -4974,229 +5045,170 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-azure@npm:^0.2.12": - version: 0.2.12 - resolution: "@backstage/plugin-scaffolder-backend-module-azure@npm:0.2.12" +"@backstage/plugin-scaffolder-backend-module-azure@npm:^0.2.13": + version: 0.2.13 + resolution: "@backstage/plugin-scaffolder-backend-module-azure@npm:0.2.13" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-scaffolder-node": ^0.11.1 azure-devops-node-api: ^14.0.0 yaml: ^2.0.0 - checksum: ad93fb1a9c2e95407330e7bc8c320a448b79af24b23271c235aeff6f63cd89b52c0a06417335278826b9561f862f97ba70ddf7c3035c7ac1338e49e488908590 + checksum: 141ebce0ef8bc69cf10575a23292a1c7e3f307ac2eb3e9e21e57e1706b6ae471b18f074d7a05ec577286148b20fef6fb2b03337f1367e2b74131569ff2226858 languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud@npm:^0.2.12": - version: 0.2.12 - resolution: "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud@npm:0.2.12" +"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud@npm:^0.2.13": + version: 0.2.13 + resolution: "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud@npm:0.2.13" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-bitbucket-cloud-common": ^0.3.1 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-bitbucket-cloud-common": ^0.3.2 + "@backstage/plugin-scaffolder-node": ^0.11.1 bitbucket: ^2.12.0 fs-extra: ^11.2.0 yaml: ^2.0.0 zod: ^3.22.4 - checksum: db0612a26e6d8fc28d3df455c677b97d0ae7d1695f8b3face5c7167df4070822f80ecedb1cb8e31cf07f263f05b004006a74a30cdf36a3842f96aa430f22582f + checksum: 6038f2a255ec1754faadd99a393366a8c9da2a5b055849c142ab18416e17cfffd50918e3c4306a4ff46e081cd1237edfc96e0413d01fe253e1c3ac1a103513db languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-bitbucket-server@npm:^0.2.12": - version: 0.2.12 - resolution: "@backstage/plugin-scaffolder-backend-module-bitbucket-server@npm:0.2.12" +"@backstage/plugin-scaffolder-backend-module-bitbucket-server@npm:^0.2.13": + version: 0.2.13 + resolution: "@backstage/plugin-scaffolder-backend-module-bitbucket-server@npm:0.2.13" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-scaffolder-node": ^0.11.1 fs-extra: ^11.2.0 yaml: ^2.0.0 zod: ^3.22.4 - checksum: 04442d4ced6c3bfc2ac0f0f538ad82e630f5f3ecace65446a9ccba843f3c8c9c7eef9e8642812aa233dac456c49ffbbe8525e07f3a21bc1519ff1d2c447aebdc + checksum: f1fcc981824436377112d917cbece889b486f7dea16d474739753a62458b290b7e884c1f5468634792b14faaa056f82287ae4ec7d9d8c9eb959e6d98cff38b3a languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-bitbucket@npm:^0.3.13": - version: 0.3.13 - resolution: "@backstage/plugin-scaffolder-backend-module-bitbucket@npm:0.3.13" +"@backstage/plugin-scaffolder-backend-module-bitbucket@npm:^0.3.14": + version: 0.3.14 + resolution: "@backstage/plugin-scaffolder-backend-module-bitbucket@npm:0.3.14" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": ^0.2.12 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": ^0.2.13 + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": ^0.2.13 + "@backstage/plugin-scaffolder-node": ^0.11.1 fs-extra: ^11.2.0 yaml: ^2.0.0 - checksum: b12b85782cea3c63e739bc76daea4dc8fa25b06578a292cde2f512b4fa9df8d897bb382cec3e801335b47d1b9acf4ca74f669b8c5e913df6970602e799f4c48c + checksum: bb8e5a4fe84c2f1a71993e965dc7c5b135334576856d2578ff951640a113a888d1d69736af9f08b7adaa3aa8fa199e18b89b745870deaca7d14fd382c9de9ae6 languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-gerrit@npm:^0.2.12": - version: 0.2.12 - resolution: "@backstage/plugin-scaffolder-backend-module-gerrit@npm:0.2.12" +"@backstage/plugin-scaffolder-backend-module-gerrit@npm:^0.2.13": + version: 0.2.13 + resolution: "@backstage/plugin-scaffolder-backend-module-gerrit@npm:0.2.13" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-scaffolder-node": ^0.11.1 yaml: ^2.0.0 - checksum: 9e8f3a9ff52e8af1b207814d20928505bcb90969458baf05fa7d0bac2a0e0e7695282546a774478c5d080ec5dc22a9521496d1e5c3443508f9c67695a5fb1d54 + checksum: 2183c0bb06372d25c6b146d206ecb9241539988ffab25cb5280da2ba605e0bdbee76cbb9f631c23ac41287d5739c5d1e8b2250a8c77ae8e2c11dcdd1a6fbefe1 languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-gitea@npm:^0.2.12": - version: 0.2.12 - resolution: "@backstage/plugin-scaffolder-backend-module-gitea@npm:0.2.12" +"@backstage/plugin-scaffolder-backend-module-gitea@npm:^0.2.13": + version: 0.2.13 + resolution: "@backstage/plugin-scaffolder-backend-module-gitea@npm:0.2.13" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-scaffolder-node": ^0.11.1 yaml: ^2.0.0 - checksum: 2ada288f8e326f12d7aca607f0695e74ac7f3e9b31d7c55e0707237e4c9aecf77b254b9babf2f176981e10e597c09974c56e56932a6c20b4725d8b6d5f678d81 + checksum: 86b93f5e58af292da8d636a02307eb6a2a20c9858647a9721f3a7d555114f840f79713a5f875d2cdee42c6fdefd4af51e3e455c640a5cb267f829ac092e9d8bf languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-github@npm:^0.8.2": - version: 0.8.2 - resolution: "@backstage/plugin-scaffolder-backend-module-github@npm:0.8.2" +"@backstage/plugin-scaffolder-backend-module-github@npm:^0.9.0": + version: 0.9.0 + resolution: "@backstage/plugin-scaffolder-backend-module-github@npm:0.9.0" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/catalog-model": ^1.7.5 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-catalog-node": ^1.18.0 - "@backstage/plugin-scaffolder-node": ^0.11.0 - "@backstage/types": ^1.2.1 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-catalog-node": ^1.19.0 + "@backstage/plugin-scaffolder-node": ^0.11.1 + "@backstage/types": ^1.2.2 "@octokit/webhooks": ^10.9.2 libsodium-wrappers: ^0.7.11 octokit: ^3.0.0 octokit-plugin-create-pull-request: ^5.0.0 yaml: ^2.0.0 zod: ^3.22.4 - checksum: 8d381b89d226eebec85a63280cd6c6e43c93c5dbcef56ea7fe6f489f438b6fff752bdf8dedfdc2399d4a85b0c7aedae5e855a7ad0bc94cc2f56b5aff97a9be6f + checksum: f5071ac5ba55ddff5f2a30eba5c4e10c92bb13c0b4a0c7485faedce03178fc342f3a5275ee4b44dd55b4aebf4c1a77cf964bf96f5199c2b5e4e6e20906733b25 languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend-module-gitlab@npm:^0.9.4": - version: 0.9.4 - resolution: "@backstage/plugin-scaffolder-backend-module-gitlab@npm:0.9.4" +"@backstage/plugin-scaffolder-backend-module-gitlab@npm:^0.9.5": + version: 0.9.5 + resolution: "@backstage/plugin-scaffolder-backend-module-gitlab@npm:0.9.5" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/config": ^1.3.3 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-scaffolder-node": ^0.11.0 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-scaffolder-node": ^0.11.1 "@gitbeaker/requester-utils": ^41.2.0 "@gitbeaker/rest": ^41.2.0 luxon: ^3.0.0 winston: ^3.2.1 yaml: ^2.0.0 zod: ^3.22.4 - checksum: 53ec6deb3da36fe1dde6a20fa47b0ec5cf5b88d420455f4c098304f523248b892168492aad346cb4365155fc9a5253c2cf2f65625de9d91cf9fc0b7179346996 + checksum: 47dbb3eb13c8b45ee88c2c1b387361b4e80c7e78e5eb4e9c7362689ef3d8d8171a2fe9bdf93e268145bc3529079d49170b2729ac7c6f68a6b7e4c154391fc3b6 languageName: node linkType: hard -"@backstage/plugin-scaffolder-backend@npm:2.2.0": - version: 2.2.0 - resolution: "@backstage/plugin-scaffolder-backend@npm:2.2.0" - dependencies: - "@backstage/backend-defaults": ^0.12.0 - "@backstage/backend-openapi-utils": ^0.6.0 - "@backstage/backend-plugin-api": ^1.4.2 - "@backstage/catalog-model": ^1.7.5 - "@backstage/config": ^1.3.3 - "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-auth-node": ^0.6.6 - "@backstage/plugin-bitbucket-cloud-common": ^0.3.1 - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": ^0.2.11 - "@backstage/plugin-catalog-node": ^1.18.0 - "@backstage/plugin-events-node": ^0.4.14 - "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/plugin-permission-node": ^0.10.3 - "@backstage/plugin-scaffolder-backend-module-azure": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-bitbucket": ^0.3.13 - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-gerrit": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-gitea": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-github": ^0.8.2 - "@backstage/plugin-scaffolder-backend-module-gitlab": ^0.9.4 - "@backstage/plugin-scaffolder-common": ^1.7.0 - "@backstage/plugin-scaffolder-node": ^0.11.0 - "@backstage/types": ^1.2.1 - "@opentelemetry/api": ^1.9.0 - "@types/luxon": ^3.0.0 - concat-stream: ^2.0.0 - express: ^4.17.1 - fs-extra: ^11.2.0 - globby: ^11.0.0 - isbinaryfile: ^5.0.0 - isolated-vm: ^5.0.1 - jsonschema: ^1.5.0 - knex: ^3.0.0 - lodash: ^4.17.21 - logform: ^2.3.2 - luxon: ^3.0.0 - nunjucks: ^3.2.3 - p-limit: ^3.1.0 - p-queue: ^6.6.2 - prom-client: ^15.0.0 - tar: ^6.1.12 - triple-beam: ^1.4.1 - uuid: ^11.0.0 - winston: ^3.2.1 - winston-transport: ^4.7.0 - yaml: ^2.0.0 - zen-observable: ^0.10.0 - zod: ^3.22.4 - zod-to-json-schema: ^3.20.4 - checksum: 978d27966de02549413ac1da999afb2c33229d7b3c9b838bc5698dea1f3817fde7968bc3708edd97f2a0e8cbe032c78c9bf04d45a057836046319966be19a8f2 - languageName: node - linkType: hard - -"@backstage/plugin-scaffolder-backend@patch:@backstage/plugin-scaffolder-backend@npm%3A2.2.0#./.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch::locator=root%40workspace%3A.": - version: 2.2.0 - resolution: "@backstage/plugin-scaffolder-backend@patch:@backstage/plugin-scaffolder-backend@npm%3A2.2.0#./.yarn/patches/@backstage-plugin-scaffolder-backend-npm-2.2.0-487419bad1.patch::version=2.2.0&hash=0a69b9&locator=root%40workspace%3A." +"@backstage/plugin-scaffolder-backend@npm:2.2.3": + version: 2.2.3 + resolution: "@backstage/plugin-scaffolder-backend@npm:2.2.3" dependencies: - "@backstage/backend-defaults": ^0.12.0 - "@backstage/backend-openapi-utils": ^0.6.0 - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-defaults": ^0.12.3 + "@backstage/backend-openapi-utils": ^0.6.1 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/catalog-model": ^1.7.5 - "@backstage/config": ^1.3.3 + "@backstage/config": ^1.3.4 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-auth-node": ^0.6.6 - "@backstage/plugin-bitbucket-cloud-common": ^0.3.1 - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": ^0.2.11 - "@backstage/plugin-catalog-node": ^1.18.0 - "@backstage/plugin-events-node": ^0.4.14 + "@backstage/integration": ^1.18.0 + "@backstage/plugin-auth-node": ^0.6.7 + "@backstage/plugin-bitbucket-cloud-common": ^0.3.2 + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": ^0.2.12 + "@backstage/plugin-catalog-node": ^1.19.0 + "@backstage/plugin-events-node": ^0.4.15 "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/plugin-permission-node": ^0.10.3 - "@backstage/plugin-scaffolder-backend-module-azure": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-bitbucket": ^0.3.13 - "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-bitbucket-server": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-gerrit": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-gitea": ^0.2.12 - "@backstage/plugin-scaffolder-backend-module-github": ^0.8.2 - "@backstage/plugin-scaffolder-backend-module-gitlab": ^0.9.4 - "@backstage/plugin-scaffolder-common": ^1.7.0 - "@backstage/plugin-scaffolder-node": ^0.11.0 - "@backstage/types": ^1.2.1 + "@backstage/plugin-permission-node": ^0.10.4 + "@backstage/plugin-scaffolder-backend-module-azure": ^0.2.13 + "@backstage/plugin-scaffolder-backend-module-bitbucket": ^0.3.14 + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": ^0.2.13 + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": ^0.2.13 + "@backstage/plugin-scaffolder-backend-module-gerrit": ^0.2.13 + "@backstage/plugin-scaffolder-backend-module-gitea": ^0.2.13 + "@backstage/plugin-scaffolder-backend-module-github": ^0.9.0 + "@backstage/plugin-scaffolder-backend-module-gitlab": ^0.9.5 + "@backstage/plugin-scaffolder-common": ^1.7.1 + "@backstage/plugin-scaffolder-node": ^0.11.3 + "@backstage/types": ^1.2.2 "@opentelemetry/api": ^1.9.0 "@types/luxon": ^3.0.0 concat-stream: ^2.0.0 @@ -5214,7 +5226,6 @@ __metadata: p-limit: ^3.1.0 p-queue: ^6.6.2 prom-client: ^15.0.0 - tar: ^6.1.12 triple-beam: ^1.4.1 uuid: ^11.0.0 winston: ^3.2.1 @@ -5223,68 +5234,40 @@ __metadata: zen-observable: ^0.10.0 zod: ^3.22.4 zod-to-json-schema: ^3.20.4 - checksum: ee1abf77d074647380cc3b42e7c3db68d93da6c7facbc53f36c457e434a4e1485f7a74b51d28b65db23a882b467bfbc288241540e4aded1d3f65ba1742c40509 + checksum: 75b4776e0be615537482b3266a5a5a5572a6a34bc056cc1ef32ea5abccac1b6f7834a517ea1e24da700bc932242886d5fa3ae9c43810eaf3f17052b93330b5d5 languageName: node linkType: hard -"@backstage/plugin-scaffolder-common@npm:^1.7.0": - version: 1.7.0 - resolution: "@backstage/plugin-scaffolder-common@npm:1.7.0" +"@backstage/plugin-scaffolder-common@npm:^1.7.0, @backstage/plugin-scaffolder-common@npm:^1.7.1": + version: 1.7.1 + resolution: "@backstage/plugin-scaffolder-common@npm:1.7.1" dependencies: "@backstage/catalog-model": ^1.7.5 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 + "@backstage/integration": ^1.18.0 "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/types": ^1.2.1 + "@backstage/types": ^1.2.2 "@microsoft/fetch-event-source": ^2.0.1 "@types/json-schema": ^7.0.9 cross-fetch: ^4.0.0 json-schema: ^0.4.0 uri-template: ^2.0.0 zen-observable: ^0.10.0 - checksum: 1f2feeee8ed53451a344968c24c25cf577ba129f4b7710cff4d958af91b96576ab3dc6646252e85532b4b89845f82b695496c8023a5c8ba35d4086e7bebf0c96 + checksum: 1fc271b311c81c286dc0b3c229b5f37e073ebed1c0714e2dc087d74e59c5fb131e7444fd8e7156174723a552b13d3ce471a5e32a66bc9b74a79af55511e09ff4 languageName: node linkType: hard -"@backstage/plugin-scaffolder-node@npm:0.11.0": - version: 0.11.0 - resolution: "@backstage/plugin-scaffolder-node@npm:0.11.0" +"@backstage/plugin-scaffolder-node@npm:^0.11.0, @backstage/plugin-scaffolder-node@npm:^0.11.1, @backstage/plugin-scaffolder-node@npm:^0.11.3": + version: 0.11.3 + resolution: "@backstage/plugin-scaffolder-node@npm:0.11.3" dependencies: - "@backstage/backend-plugin-api": ^1.4.2 - "@backstage/catalog-model": ^1.7.5 - "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 - "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/plugin-scaffolder-common": ^1.7.0 - "@backstage/types": ^1.2.1 - "@isomorphic-git/pgp-plugin": ^0.0.7 - concat-stream: ^2.0.0 - fs-extra: ^11.2.0 - globby: ^11.0.0 - isomorphic-git: ^1.23.0 - jsonschema: ^1.5.0 - lodash: ^4.17.21 - p-limit: ^3.1.0 - tar: ^6.1.12 - winston: ^3.2.1 - winston-transport: ^4.7.0 - zod: ^3.22.4 - zod-to-json-schema: ^3.20.4 - checksum: 55b56f41d764e226b42fb2b069b4c211c82f82695614ec1a44241d274d70f3ec3b6c39c665ff45583e0c181a394644029e49a277d1b6d9bbed98841e114941b3 - languageName: node - linkType: hard - -"@backstage/plugin-scaffolder-node@patch:@backstage/plugin-scaffolder-node@npm%3A0.11.0#./.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch::locator=root%40workspace%3A.": - version: 0.11.0 - resolution: "@backstage/plugin-scaffolder-node@patch:@backstage/plugin-scaffolder-node@npm%3A0.11.0#./.yarn/patches/@backstage-plugin-scaffolder-node-npm-0.11.0-2e81f51535.patch::version=0.11.0&hash=7aa336&locator=root%40workspace%3A." - dependencies: - "@backstage/backend-plugin-api": ^1.4.2 + "@backstage/backend-plugin-api": ^1.4.3 "@backstage/catalog-model": ^1.7.5 "@backstage/errors": ^1.2.7 - "@backstage/integration": ^1.17.1 + "@backstage/integration": ^1.18.0 "@backstage/plugin-permission-common": ^0.9.1 - "@backstage/plugin-scaffolder-common": ^1.7.0 - "@backstage/types": ^1.2.1 + "@backstage/plugin-scaffolder-common": ^1.7.1 + "@backstage/types": ^1.2.2 "@isomorphic-git/pgp-plugin": ^0.0.7 concat-stream: ^2.0.0 fs-extra: ^11.2.0 @@ -5293,12 +5276,12 @@ __metadata: jsonschema: ^1.5.0 lodash: ^4.17.21 p-limit: ^3.1.0 - tar: ^6.1.12 + tar: ^7.4.3 winston: ^3.2.1 winston-transport: ^4.7.0 zod: ^3.22.4 zod-to-json-schema: ^3.20.4 - checksum: 8b9516afe77e7ac6ddefaf1fdbcf09afc0c965bcb65d44085c1880acd3ad7d93dee38ffb2c28e766112936b963f42ead96d98910468cb76ef9ea84d03fe93aca + checksum: 006050bd576371d7e61cd20ec85a9fcff85992fe76e1373507160e9ff61a71c18d090b801a28288a0c1b8bd8eb52bfff200d8f901b8ec7668b57410c85dda229 languageName: node linkType: hard @@ -7603,7 +7586,7 @@ __metadata: version: 0.0.0-use.local resolution: "@internal/plugin-dynamic-plugins-info-backend@workspace:plugins/dynamic-plugins-info-backend" dependencies: - "@backstage/backend-defaults": 0.12.0 + "@backstage/backend-defaults": 0.12.3 "@backstage/backend-dynamic-feature-service": 0.7.3 "@backstage/backend-plugin-api": 1.4.2 "@backstage/backend-test-utils": 1.8.0 @@ -7626,7 +7609,7 @@ __metadata: resolution: "@internal/plugin-licensed-users-info-backend@workspace:plugins/licensed-users-info-backend" dependencies: "@backstage-community/plugin-rbac-common": 1.20.0 - "@backstage/backend-defaults": 0.12.0 + "@backstage/backend-defaults": 0.12.3 "@backstage/backend-plugin-api": 1.4.2 "@backstage/backend-test-utils": 1.8.0 "@backstage/catalog-client": 1.11.0 @@ -7657,7 +7640,7 @@ __metadata: version: 0.0.0-use.local resolution: "@internal/plugin-scalprum-backend@workspace:plugins/scalprum-backend" dependencies: - "@backstage/backend-defaults": 0.12.0 + "@backstage/backend-defaults": 0.12.3 "@backstage/backend-dynamic-feature-service": 0.7.3 "@backstage/backend-plugin-api": 1.4.2 "@backstage/backend-test-utils": 1.8.0 @@ -7735,6 +7718,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.0 + resolution: "@isaacs/fs-minipass@npm:4.0.0" + dependencies: + minipass: ^7.0.4 + checksum: a8f46881bcffe48d8b467173fa709ef656e732d28fb4acdef2e14ba9de2ecc97527cc921f52081fff327737880af6f0b5201414c27451b56bb3b47d903f54a97 + languageName: node + linkType: hard + "@isomorphic-git/pgp-plugin@npm:^0.0.7": version: 0.0.7 resolution: "@isomorphic-git/pgp-plugin@npm:0.0.7" @@ -19139,7 +19131,7 @@ __metadata: "@backstage-community/plugin-rbac-node": 1.14.0 "@backstage-community/plugin-scaffolder-backend-module-annotator": 2.10.0 "@backstage/backend-app-api": 1.2.6 - "@backstage/backend-defaults": 0.12.0 + "@backstage/backend-defaults": 0.12.3 "@backstage/backend-dynamic-feature-service": 0.7.3 "@backstage/backend-plugin-api": 1.4.2 "@backstage/backend-test-utils": 1.8.0 @@ -19177,7 +19169,7 @@ __metadata: "@backstage/plugin-events-node": 0.4.14 "@backstage/plugin-permission-backend": 0.7.3 "@backstage/plugin-proxy-backend": 0.6.5 - "@backstage/plugin-scaffolder-backend": 2.2.0 + "@backstage/plugin-scaffolder-backend": 2.2.3 "@backstage/plugin-search-backend": 2.0.5 "@backstage/plugin-search-backend-module-catalog": 0.3.7 "@backstage/plugin-search-backend-module-pg": 0.5.47 @@ -20124,6 +20116,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d + languageName: node + linkType: hard + "chrome-trace-event@npm:^1.0.2": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" @@ -24635,7 +24634,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.1, glob@npm:^10.4.5": +"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.1, glob@npm:^10.4.5": version: 10.5.0 resolution: "glob@npm:10.5.0" dependencies: @@ -29660,6 +29659,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.0.4": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 2ede17c0bf8fec499be3360fd07f0ec7666189e3907320a9b653f1530cf84af98928c5b12d80bfb75f321833bf2e97785b940540213ebdafe97a5f10327e664d + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -29670,6 +29676,16 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: ^7.0.4 + rimraf: ^5.0.5 + checksum: da0a53899252380475240c587e52c824f8998d9720982ba5c4693c68e89230718884a209858c156c6e08d51aad35700a3589987e540593c36f6713fe30cd7338 + languageName: node + linkType: hard + "mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" @@ -29697,6 +29713,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d + languageName: node + linkType: hard + "mock-fs@npm:5.5.0": version: 5.5.0 resolution: "mock-fs@npm:5.5.0" @@ -34113,6 +34138,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^5.0.5": + version: 5.0.5 + resolution: "rimraf@npm:5.0.5" + dependencies: + glob: ^10.3.7 + bin: + rimraf: dist/esm/bin.mjs + checksum: d66eef829b2e23b16445f34e73d75c7b7cf4cbc8834b04720def1c8f298eb0753c3d76df77325fad79d0a2c60470525d95f89c2475283ad985fd7441c32732d1 + languageName: node + linkType: hard + "ripemd160@npm:=2.0.1": version: 2.0.1 resolution: "ripemd160@npm:2.0.1" @@ -36135,6 +36171,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.0.1 + mkdirp: ^3.0.1 + yallist: ^5.0.0 + checksum: 8485350c0688331c94493031f417df069b778aadb25598abdad51862e007c39d1dd5310702c7be4a6784731a174799d8885d2fde0484269aea205b724d7b2ffa + languageName: node + linkType: hard + "tarn@npm:^3.0.2": version: 3.0.2 resolution: "tarn@npm:3.0.2" @@ -38641,6 +38691,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + "yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" @@ -38832,6 +38889,15 @@ __metadata: languageName: node linkType: hard +"zod-validation-error@npm:^4.0.2": + version: 4.0.2 + resolution: "zod-validation-error@npm:4.0.2" + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + checksum: f16ccbc08c5345f28788beea814d82e1f047978414f1511bd97a171580d7dbe63cecc368caa352c1391e201539288c241d61145e57c6b84cb19112dc88a72098 + languageName: node + linkType: hard + "zod@npm:3.23.8, zod@npm:^3.22.4": version: 3.23.8 resolution: "zod@npm:3.23.8" @@ -38839,6 +38905,20 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.25.76": + version: 3.25.76 + resolution: "zod@npm:3.25.76" + checksum: c9a403a62b329188a5f6bd24d5d935d2bba345f7ab8151d1baa1505b5da9f227fb139354b043711490c798e91f3df75991395e40142e6510a4b16409f302b849 + languageName: node + linkType: hard + +"zod@npm:^3.25.76 || ^4.0.0": + version: 4.3.6 + resolution: "zod@npm:4.3.6" + checksum: 19cec761b46bae4b6e7e861ea740f3f248e50a6671825afc8a5758e27b35d6f20ccde9942422fd5cf6f8b697f18bd05ef8bb33f5f2db112ab25cc628de2fae47 + languageName: node + linkType: hard + "zstd-codec@npm:^0.1.5": version: 0.1.5 resolution: "zstd-codec@npm:0.1.5"