From 1c137a84dabd56bd709611f5c415b28ed7925341 Mon Sep 17 00:00:00 2001 From: Piootrekk Date: Wed, 4 Dec 2024 23:32:17 +0100 Subject: [PATCH] crud operations --- .gitignore | 7 + Dockerfile => express-proxy/Dockerfile | 0 index.js => express-proxy/index.js | 0 .../package-lock.json | 0 package.json => express-proxy/package.json | 0 readme.md => express-proxy/readme.md | 0 .../swagger-definition.yaml | 0 fastify-proxy/package.json | 6 + fastify-proxy/src/app.ts | 7 + fastify-proxy/src/config/env.ts | 4 +- .../src/modules/url/url.controller.ts | 124 ++++++ fastify-proxy/src/modules/url/url.route.ts | 91 +++++ fastify-proxy/src/modules/url/url.schema.ts | 42 ++ fastify-proxy/src/modules/url/url.service.ts | 29 ++ fastify-proxy/src/plugins/swagger.ts | 22 + fastify-proxy/src/server.ts | 2 +- fastify-proxy/src/types/jsonable.types.ts | 9 + fastify-proxy/yarn.lock | 381 +++++++++++++++++- 18 files changed, 716 insertions(+), 8 deletions(-) rename Dockerfile => express-proxy/Dockerfile (100%) rename index.js => express-proxy/index.js (100%) rename package-lock.json => express-proxy/package-lock.json (100%) rename package.json => express-proxy/package.json (100%) rename readme.md => express-proxy/readme.md (100%) rename swagger-definition.yaml => express-proxy/swagger-definition.yaml (100%) create mode 100644 fastify-proxy/src/modules/url/url.controller.ts create mode 100644 fastify-proxy/src/modules/url/url.route.ts create mode 100644 fastify-proxy/src/modules/url/url.schema.ts create mode 100644 fastify-proxy/src/modules/url/url.service.ts create mode 100644 fastify-proxy/src/plugins/swagger.ts create mode 100644 fastify-proxy/src/types/jsonable.types.ts diff --git a/.gitignore b/.gitignore index 804d119..6fec844 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,13 @@ $RECYCLE.BIN/ .yarn/cache/ .yarn/unplugged/ .yarn/build-state.yml +.yarn/* +!.yarn/cache +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions # Katalogi specyficzne dla różnych narzędzi .idea/ diff --git a/Dockerfile b/express-proxy/Dockerfile similarity index 100% rename from Dockerfile rename to express-proxy/Dockerfile diff --git a/index.js b/express-proxy/index.js similarity index 100% rename from index.js rename to express-proxy/index.js diff --git a/package-lock.json b/express-proxy/package-lock.json similarity index 100% rename from package-lock.json rename to express-proxy/package-lock.json diff --git a/package.json b/express-proxy/package.json similarity index 100% rename from package.json rename to express-proxy/package.json diff --git a/readme.md b/express-proxy/readme.md similarity index 100% rename from readme.md rename to express-proxy/readme.md diff --git a/swagger-definition.yaml b/express-proxy/swagger-definition.yaml similarity index 100% rename from swagger-definition.yaml rename to express-proxy/swagger-definition.yaml diff --git a/fastify-proxy/package.json b/fastify-proxy/package.json index 92492e9..fb75003 100644 --- a/fastify-proxy/package.json +++ b/fastify-proxy/package.json @@ -7,7 +7,13 @@ "dev": "tsnd --respawn --transpile-only --exit-child src/server.ts" }, "dependencies": { + "@fastify/cors": "^10.0.1", + "@fastify/swagger": "^9.4.0", + "@fastify/swagger-ui": "^5.2.0", + "axios": "^1.7.9", + "dotenv": "^16.4.7", "fastify": "^5.1.0", + "fastify-plugin": "^5.0.1", "fastify-zod": "^1.4.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5" diff --git a/fastify-proxy/src/app.ts b/fastify-proxy/src/app.ts index 5128124..ce9e97a 100644 --- a/fastify-proxy/src/app.ts +++ b/fastify-proxy/src/app.ts @@ -1,10 +1,17 @@ import Fastify from "fastify"; +import urlRoutes from "./modules/url/url.route"; +import swaggerPlugin from "./plugins/swagger"; +import cors from "@fastify/cors"; const buildApp = async () => { const app = Fastify({ logger: true, }); + app.register(cors); + app.register(swaggerPlugin); + app.register(urlRoutes, { prefix: "url" }); + return app; }; diff --git a/fastify-proxy/src/config/env.ts b/fastify-proxy/src/config/env.ts index c635f1d..cd88f05 100644 --- a/fastify-proxy/src/config/env.ts +++ b/fastify-proxy/src/config/env.ts @@ -1,7 +1,9 @@ import { z } from "zod"; +import { config } from "dotenv"; +config(); const envSchema = z.object({ - PORT: z.string(), + PORT: z.string().min(1).transform(Number), }); const { PORT } = process.env; const parsedEnv = envSchema.safeParse({ PORT }); diff --git a/fastify-proxy/src/modules/url/url.controller.ts b/fastify-proxy/src/modules/url/url.controller.ts new file mode 100644 index 0000000..6e4f96f --- /dev/null +++ b/fastify-proxy/src/modules/url/url.controller.ts @@ -0,0 +1,124 @@ +import { FastifyReply, FastifyRequest } from "fastify"; +import { + deleteUrlData, + getUrlData, + patchUrlData, + postUrlData, + putUrlData, +} from "./url.service"; +import { TUrlQuery, TErrorResponse, TUrlBody } from "./url.schema"; +import { AxiosError } from "axios"; + +const errorHandler = (err: unknown): Omit => { + if (err instanceof AxiosError) + return { + message: err.message, + code: err.code, + status: err.response?.status, + }; + else { + return { + message: "Unknown error", + code: "ERROR", + status: 500, + }; + } +}; + +const getUrlHandler = async ( + request: FastifyRequest<{ Querystring: TUrlQuery }>, + reply: FastifyReply +) => { + const { link } = request.query; + try { + const response = await getUrlData(link); + reply.status(200).send(response.data); + } catch (error) { + const errHandler = errorHandler(error); + reply.status(errHandler.status || 500).send({ + ...errHandler, + path: link, + }); + } +}; + +const deletetUrlHandler = async ( + request: FastifyRequest<{ Querystring: TUrlQuery }>, + reply: FastifyReply +) => { + const { link } = request.query; + try { + const response = await deleteUrlData(link); + reply.status(200).send(response.data); + } catch (error) { + const errHandler = errorHandler(error); + reply.status(errHandler.status || 500).send({ + ...errHandler, + path: link, + }); + } +}; + +const postUrlHandler = async ( + request: FastifyRequest<{ Querystring: TUrlQuery; Body: TUrlBody }>, + reply: FastifyReply +) => { + const { link } = request.query; + const data = request.body; + + try { + const response = await postUrlData(link, data); + reply.status(response.status).send(response.data); + } catch (error) { + const errHandler = errorHandler(error); + reply.status(errHandler.status || 500).send({ + ...errHandler, + path: link, + }); + } +}; + +const patchUrlHandler = async ( + request: FastifyRequest<{ Querystring: TUrlQuery; Body: TUrlBody }>, + reply: FastifyReply +) => { + const { link } = request.query; + const data = request.body; + try { + const response = await patchUrlData(link, data); + reply.status(response.status).send(response.data); + } catch (error) { + const errHandler = errorHandler(error); + reply.status(errHandler.status || 500).send({ + ...errHandler, + path: link, + }); + } +}; + +const putUrlHandler = async ( + request: FastifyRequest<{ Querystring: TUrlQuery; Body: TUrlBody }>, + reply: FastifyReply +) => { + const { link } = request.query; + const data = request.body; + + try { + const response = await putUrlData(link, data); + reply.status(response.status).send(response.data); + } catch (error) { + const errHandler = errorHandler(error); + reply.status(errHandler.status || 500).send({ + ...errHandler, + path: link, + }); + } +}; + +export { + getUrlHandler, + postUrlHandler, + deletetUrlHandler, + putUrlHandler, + patchUrlHandler, +}; diff --git a/fastify-proxy/src/modules/url/url.route.ts b/fastify-proxy/src/modules/url/url.route.ts new file mode 100644 index 0000000..543e8c0 --- /dev/null +++ b/fastify-proxy/src/modules/url/url.route.ts @@ -0,0 +1,91 @@ +import { FastifyInstance } from "fastify"; +import { + getUrlHandler, + postUrlHandler, + deletetUrlHandler, + putUrlHandler, + patchUrlHandler, +} from "./url.controller"; +import { + urlBodySchemaJson, + urlQuerySchemaJson, + urlResponseRerrorSchemaJson, + urlResponseSchemaJson, +} from "./url.schema"; + +const urlRoutes = async (server: FastifyInstance) => { + server.get( + "/", + { + schema: { + querystring: urlQuerySchemaJson, + response: { + "2xx": urlResponseSchemaJson, + "4xx": urlResponseRerrorSchemaJson, + "5xx": urlResponseRerrorSchemaJson, + }, + }, + }, + getUrlHandler + ); + server.post( + "/", + { + schema: { + querystring: urlQuerySchemaJson, + body: urlBodySchemaJson, + response: { + "2xx": urlResponseSchemaJson, + "4xx": urlResponseRerrorSchemaJson, + "5xx": urlResponseRerrorSchemaJson, + }, + }, + }, + postUrlHandler + ); + server.delete( + "/", + { + schema: { + querystring: urlQuerySchemaJson, + response: { + "2xx": urlResponseSchemaJson, + "4xx": urlResponseRerrorSchemaJson, + "5xx": urlResponseRerrorSchemaJson, + }, + }, + }, + deletetUrlHandler + ); + server.put( + "/", + { + schema: { + querystring: urlQuerySchemaJson, + body: urlBodySchemaJson, + response: { + "2xx": urlResponseSchemaJson, + "4xx": urlResponseRerrorSchemaJson, + "5xx": urlResponseRerrorSchemaJson, + }, + }, + }, + putUrlHandler + ); + server.patch( + "/", + { + schema: { + querystring: urlQuerySchemaJson, + body: urlBodySchemaJson, + response: { + "2xx": urlResponseSchemaJson, + "4xx": urlResponseRerrorSchemaJson, + "5xx": urlResponseRerrorSchemaJson, + }, + }, + }, + patchUrlHandler + ); +}; +export default urlRoutes; diff --git a/fastify-proxy/src/modules/url/url.schema.ts b/fastify-proxy/src/modules/url/url.schema.ts new file mode 100644 index 0000000..23ada2d --- /dev/null +++ b/fastify-proxy/src/modules/url/url.schema.ts @@ -0,0 +1,42 @@ +import { z } from "zod"; +import zodToJsonSchema from "zod-to-json-schema"; + +export const urlQuerySchema = z.object({ + link: z.string().refine( + (val) => { + try { + new URL(val); + return true; + } catch { + return false; + } + }, + { message: "Invalid URL format" } + ), +}); + +const urlBodySchema = z.record(z.any()); +const urlResponseErrorSchema = z.object({ + message: z.string().optional(), + status: z.number().optional(), + code: z.string().optional(), + path: z.string().url(), +}); +const urlResponseSchema = z.any(); + +const urlResponseRerrorSchemaJson = zodToJsonSchema(urlResponseErrorSchema); +const urlQuerySchemaJson = zodToJsonSchema(urlQuerySchema); +const urlResponseSchemaJson = zodToJsonSchema(urlResponseSchema); +const urlBodySchemaJson = zodToJsonSchema(urlBodySchema); + +type TUrlQuery = z.infer; +type TErrorResponse = z.infer; +type TUrlBody = z.infer; + +export { + urlQuerySchemaJson, + urlResponseSchemaJson, + urlBodySchemaJson, + urlResponseRerrorSchemaJson, +}; +export type { TUrlQuery, TErrorResponse, TUrlBody }; diff --git a/fastify-proxy/src/modules/url/url.service.ts b/fastify-proxy/src/modules/url/url.service.ts new file mode 100644 index 0000000..d4c7267 --- /dev/null +++ b/fastify-proxy/src/modules/url/url.service.ts @@ -0,0 +1,29 @@ +import axios from "axios"; +import { TJsonable } from "../../types/jsonable.types"; + +const getUrlData = async (link: string) => { + const response = await axios.get(link); + return response; +}; + +const deleteUrlData = async (link: string) => { + const response = await axios.delete(link); + return response; +}; + +const postUrlData = async (link: string, body: TJsonable) => { + const response = await axios.post(link, body); + return response; +}; + +const putUrlData = async (link: string, body: TJsonable) => { + const response = await axios.put(link, body); + return response; +}; + +const patchUrlData = async (link: string, body: TJsonable) => { + const response = await axios.patch(link, body); + return response; +}; + +export { getUrlData, postUrlData, patchUrlData, putUrlData, deleteUrlData }; diff --git a/fastify-proxy/src/plugins/swagger.ts b/fastify-proxy/src/plugins/swagger.ts new file mode 100644 index 0000000..8e80df2 --- /dev/null +++ b/fastify-proxy/src/plugins/swagger.ts @@ -0,0 +1,22 @@ +import { FastifyPluginCallback } from "fastify"; +import FastifySwagger from "@fastify/swagger"; +import FastifySwaggerUi from "@fastify/swagger-ui"; + +const swagger: FastifyPluginCallback = async (fastify, _, done) => { + await fastify.register(FastifySwagger, { + openapi: { + info: { + title: "CRUD PROXY", + version: "1.0.0", + }, + }, + }); + + await fastify.register(FastifySwaggerUi, { + routePrefix: "/docs", + }); + + done(); +}; + +export default swagger; diff --git a/fastify-proxy/src/server.ts b/fastify-proxy/src/server.ts index 13ed366..1f1c86b 100644 --- a/fastify-proxy/src/server.ts +++ b/fastify-proxy/src/server.ts @@ -4,7 +4,7 @@ import env from "./config/env"; const main = async () => { const server = await buildApp(); try { - await server.listen({ port: Number(env.PORT) }); + await server.listen({ port: env.PORT }); } catch (error) { server.log.error("Can't startup server"); process.exit(1); diff --git a/fastify-proxy/src/types/jsonable.types.ts b/fastify-proxy/src/types/jsonable.types.ts new file mode 100644 index 0000000..b308b1b --- /dev/null +++ b/fastify-proxy/src/types/jsonable.types.ts @@ -0,0 +1,9 @@ +type TJsonable = + | string + | number + | boolean + | null + | TJsonable[] + | { [key: string]: TJsonable }; + +export type { TJsonable }; diff --git a/fastify-proxy/yarn.lock b/fastify-proxy/yarn.lock index bcf7c9e..016cb44 100644 --- a/fastify-proxy/yarn.lock +++ b/fastify-proxy/yarn.lock @@ -14,6 +14,11 @@ resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" integrity sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ== +"@fastify/accept-negotiator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-2.0.0.tgz#efce76b4d658e7ee669e681c2d79bffc9a654fdb" + integrity sha512-/Sce/kBzuTxIq5tJh85nVNOq9wKD8s+viIgX0fFMDBdw95gnpf53qmF1oBgJym3cPFliWUuSloVg/1w/rH0FcQ== + "@fastify/ajv-compiler@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz#9567b4c09149a0f342e931c7196a8ed9dc292954" @@ -23,6 +28,14 @@ ajv-formats "^3.0.1" fast-uri "^3.0.0" +"@fastify/cors@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-10.0.1.tgz#c208fa5f672db31a8383400349e9852762903d64" + integrity sha512-O8JIf6448uQbOgzSkCqhClw6gFTAqrdfeA6R3fc/3gwTJGUp7gl8/3tbNB+6INuu4RmgVOq99BmvdGbtu5pgOA== + dependencies: + fastify-plugin "^5.0.0" + mnemonist "0.39.8" + "@fastify/error@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@fastify/error/-/error-4.0.0.tgz#7842d6161fbce78953638318be99033a0c2d5070" @@ -53,6 +66,17 @@ http-errors "2.0.0" mime "^3.0.0" +"@fastify/send@^3.2.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@fastify/send/-/send-3.3.0.tgz#c1a8cb2d5f51a49ccd6f0db73594c2ddd943b0c4" + integrity sha512-hvrgPVG3oehn4wSPmRdqZcBCsEt7Lp6WOd6vsJ3Ms4hc5r5zouT9Ls9wq6R2tHMgJGHhNtsmd0CnhP7lmF7OTg== + dependencies: + "@lukeed/ms" "^2.0.2" + escape-html "~1.0.3" + fast-decode-uri-component "^1.0.1" + http-errors "^2.0.0" + mime "^3" + "@fastify/static@^6.0.0": version "6.12.0" resolved "https://registry.yarnpkg.com/@fastify/static/-/static-6.12.0.tgz#f3d55dda201c072bae0593e5d45dde8fd235c288" @@ -65,6 +89,18 @@ glob "^8.0.1" p-limit "^3.1.0" +"@fastify/static@^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@fastify/static/-/static-8.0.3.tgz#53300bc4eb81b7a97a3f31b84c4cd4b161439ea3" + integrity sha512-GHSoOVDIxEYEeVR5l044bRCuAKDErD/+9VE+Z9fnaTRr+DDz0Avrm4kKai1mHbPx6C0U7BVNthjd/gcMquZZUA== + dependencies: + "@fastify/accept-negotiator" "^2.0.0" + "@fastify/send" "^3.2.0" + content-disposition "^0.5.4" + fastify-plugin "^5.0.0" + fastq "^1.17.1" + glob "^11.0.0" + "@fastify/swagger-ui@^1.9.3": version "1.10.2" resolved "https://registry.yarnpkg.com/@fastify/swagger-ui/-/swagger-ui-1.10.2.tgz#f469c00517d331523dcb28bbe03f4b83bf6bd6da" @@ -76,6 +112,17 @@ rfdc "^1.3.0" yaml "^2.2.2" +"@fastify/swagger-ui@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@fastify/swagger-ui/-/swagger-ui-5.2.0.tgz#8a2cd2c78581ad313dcda68e6532750aaf4e9c37" + integrity sha512-oxL9bcL/ad8J1zXAvG2kMmj9d9mHQSM7Mx92yUk90IhvsTns9xy+GK2wXaNyv8/DFg6HpJOL2NrBAzuUt80j8g== + dependencies: + "@fastify/static" "^8.0.0" + fastify-plugin "^5.0.0" + openapi-types "^12.1.3" + rfdc "^1.3.1" + yaml "^2.4.1" + "@fastify/swagger@^8.9.0": version "8.15.0" resolved "https://registry.yarnpkg.com/@fastify/swagger/-/swagger-8.15.0.tgz#d13cadc1e7892e05c7c2bc0f24fd6cd723838b64" @@ -87,6 +134,29 @@ rfdc "^1.3.0" yaml "^2.2.2" +"@fastify/swagger@^9.4.0": + version "9.4.0" + resolved "https://registry.yarnpkg.com/@fastify/swagger/-/swagger-9.4.0.tgz#33eb8dba6c436919260525eaf76a880bafb6d4b5" + integrity sha512-3hF7asqyNfu41aeDA/ATlIG0RY4XizgaDqPR0nc1Unt3EiXWjkVMiELLaH5WZKNvB4BA/5Wovxdin7N4ii7YHw== + dependencies: + fastify-plugin "^5.0.0" + json-schema-resolver "^2.0.0" + openapi-types "^12.1.3" + rfdc "^1.3.1" + yaml "^2.4.2" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" @@ -105,7 +175,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@lukeed/ms@^2.0.1": +"@lukeed/ms@^2.0.1", "@lukeed/ms@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.2.tgz#07f09e59a74c52f4d88c6db5c1054e819538e2a8" integrity sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA== @@ -186,6 +256,28 @@ ajv@^8.0.0, ajv@^8.12.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -204,6 +296,11 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + atomic-sleep@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" @@ -217,6 +314,15 @@ avvio@^9.0.0: "@fastify/error" "^4.0.0" fastq "^1.17.1" +axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -304,6 +410,25 @@ chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -318,7 +443,7 @@ constant-case@^3.0.4: tslib "^2.0.3" upper-case "^2.0.2" -content-disposition@^0.5.3: +content-disposition@^0.5.3, content-disposition@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -335,6 +460,15 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-spawn@^7.0.0: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + debug@^4.1.1: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" @@ -342,6 +476,11 @@ debug@^4.1.1: dependencies: ms "^2.1.3" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -360,6 +499,11 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dotenv@^16.4.7: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + dynamic-dedupe@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" @@ -367,6 +511,21 @@ dynamic-dedupe@^0.3.0: dependencies: xtend "^4.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -422,6 +581,11 @@ fastify-plugin@^4.0.0: resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.5.1.tgz#44dc6a3cc2cce0988bc09e13f160120bbd91dbee" integrity sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ== +fastify-plugin@^5.0.0, fastify-plugin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-5.0.1.tgz#82d44e6fe34d1420bb5a4f7bee434d501e41939f" + integrity sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ== + fastify-zod@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/fastify-zod/-/fastify-zod-1.4.0.tgz#b576d15e239deaec7c5223240e0677f6ce81cd14" @@ -481,6 +645,28 @@ find-my-way@^9.0.0: fast-querystring "^1.0.0" safe-regex2 "^4.0.0" +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -508,6 +694,18 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" + integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -546,7 +744,7 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" -http-errors@2.0.0: +http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== @@ -594,6 +792,11 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -606,6 +809,18 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.2.tgz#11f9468a3730c6ff6f56823a820d7e3be9bef015" + integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw== + dependencies: + "@isaacs/cliui" "^8.0.2" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -650,16 +865,40 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^11.0.0: + version "11.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" + integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -mime@^3.0.0: +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^3, mime@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -679,11 +918,23 @@ minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mnemonist@0.39.8: + version "0.39.8" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.39.8.tgz#9078cd8386081afd986cca34b52b5d84ea7a4d38" + integrity sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ== + dependencies: + obliterator "^2.0.1" + ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -702,6 +953,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +obliterator@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + on-exit-leak-free@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" @@ -714,7 +970,7 @@ once@^1.3.0: dependencies: wrappy "1" -openapi-types@^12.0.0, openapi-types@^12.0.2: +openapi-types@^12.0.0, openapi-types@^12.0.2, openapi-types@^12.1.3: version "12.1.3" resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== @@ -726,6 +982,11 @@ p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -755,11 +1016,24 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -807,6 +1081,11 @@ proxy-addr@^2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -911,6 +1190,23 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -949,6 +1245,54 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -1079,6 +1423,31 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -1089,7 +1458,7 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -yaml@^2.2.2: +yaml@^2.2.2, yaml@^2.4.1, yaml@^2.4.2: version "2.6.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==