From 42f589bb18ab9fc0f89359ddf2fed8332666dac3 Mon Sep 17 00:00:00 2001 From: Mikhail Dziarkach Date: Wed, 12 Feb 2025 11:33:01 +0100 Subject: [PATCH] Init --- .editorconfig | 9 + .env.example | 5 + .github/workflows/lint.yml | 14 + .gitignore | 3 + .gitignote | 3 + .husky/pre-commit | 4 + app/config/config.ts | 7 + app/controllers/meteor.controller.ts | 55 + app/controllers/rover.controller.ts | 46 + app/middlewares/validator.ts | 21 + app/repositories/meteor.repository.ts | 14 + app/repositories/rover.repository.ts | 16 + app/services/meteor.service.ts | 62 + app/services/rover.service.ts | 13 + app/types/meteor.ts | 8 + app/types/nearEarthObjects.ts | 24 + app/types/photo.ts | 4 + app/utils/dateUtils.ts | 18 + app/utils/errorHandler.ts | 26 + app/utils/exception.ts | 8 + app/validatorSchemas/getMeteorsSchema.ts | 31 + app/validatorSchemas/getRoverImageSchema.ts | 10 + assets/image.png | Bin 0 -> 48248 bytes eslint.config.mjs | 18 + index.ts | 41 + instrument.ts | 10 + package-lock.json | 4647 +++++++++++++++++++ package.json | 50 + postman/postman_collection.json | 125 + prettier.config.json | 6 + tsconfig.json | 14 + views/layout.njk | 14 + views/meteors.njk | 36 + views/roverImage.njk | 10 + views/roverImageForm.njk | 14 + 35 files changed, 5386 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .github/workflows/lint.yml create mode 100644 .gitignore create mode 100644 .gitignote create mode 100644 .husky/pre-commit create mode 100644 app/config/config.ts create mode 100644 app/controllers/meteor.controller.ts create mode 100644 app/controllers/rover.controller.ts create mode 100644 app/middlewares/validator.ts create mode 100644 app/repositories/meteor.repository.ts create mode 100644 app/repositories/rover.repository.ts create mode 100644 app/services/meteor.service.ts create mode 100644 app/services/rover.service.ts create mode 100644 app/types/meteor.ts create mode 100644 app/types/nearEarthObjects.ts create mode 100644 app/types/photo.ts create mode 100644 app/utils/dateUtils.ts create mode 100644 app/utils/errorHandler.ts create mode 100644 app/utils/exception.ts create mode 100644 app/validatorSchemas/getMeteorsSchema.ts create mode 100644 app/validatorSchemas/getRoverImageSchema.ts create mode 100644 assets/image.png create mode 100644 eslint.config.mjs create mode 100644 index.ts create mode 100644 instrument.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postman/postman_collection.json create mode 100644 prettier.config.json create mode 100644 tsconfig.json create mode 100644 views/layout.njk create mode 100644 views/meteors.njk create mode 100644 views/roverImage.njk create mode 100644 views/roverImageForm.njk diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3708b06 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b545eb2 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +PORT=4000 +NASA_BASE_URL="" +NASA_API_KEY="" +NASA_API_SOL="" +SENTRY_DSN="" \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..02ac342 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,14 @@ +name: Lint + +on: [push, pull_request] + +jobs: + eslint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - run: npm ci --legacy-peer-deps + - run: npm run build:lint diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f00ef2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.env +dist \ No newline at end of file diff --git a/.gitignote b/.gitignote new file mode 100644 index 0000000..a0d218e --- /dev/null +++ b/.gitignote @@ -0,0 +1,3 @@ +node_modules +dist +.env \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..3e1cef8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run precommit diff --git a/app/config/config.ts b/app/config/config.ts new file mode 100644 index 0000000..a5b2bc6 --- /dev/null +++ b/app/config/config.ts @@ -0,0 +1,7 @@ +export default { + sentryDsn: process.env.SENTRY_DSN, + port: process.env.PORT, + nasaBaseUrl: process.env.NASA_BASE_URL, + nasaApiKey: process.env.NASA_API_KEY, + nasaSol: process.env.NASA_API_SOL, +}; diff --git a/app/controllers/meteor.controller.ts b/app/controllers/meteor.controller.ts new file mode 100644 index 0000000..7222fad --- /dev/null +++ b/app/controllers/meteor.controller.ts @@ -0,0 +1,55 @@ +import { Request, Response, NextFunction } from "express"; +import { getMeteorsData } from "../services/meteor.service"; +import { makeDateRange } from "../utils/dateUtils"; + +export const getMeteors = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + try { + const date = String(req.query.date); + const [startDate, endDate] = makeDateRange(date); + const count = req.query.count === "true"; + const wereDangerousMeteors = req.query["were-dangerous-meteors"] === "true"; + + const result = await getMeteorsData({ + startDate, + endDate, + count, + wereDangerousMeteors, + }); + + res.json(result); + } catch (err) { + next(err); + } +}; + +export const renderMeteors = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + try { + const date = String(req.query.date); + const [startDate, endDate] = makeDateRange(date); + const count = req.query.count === "true"; + const wereDangerousMeteors = req.query["were-dangerous-meteors"] === "true"; + + const meteors = await getMeteorsData({ + startDate, + endDate, + count, + wereDangerousMeteors, + }); + + res.render("meteors.njk", { + meteors: meteors.data, + wereDangerousMeteors: meteors.wereDangerousMeteors, + count: meteors.count, + }); + } catch (err) { + next(err); + } +}; diff --git a/app/controllers/rover.controller.ts b/app/controllers/rover.controller.ts new file mode 100644 index 0000000..edfdf04 --- /dev/null +++ b/app/controllers/rover.controller.ts @@ -0,0 +1,46 @@ +import { Request, Response, NextFunction } from "express"; +import { getRoverImageData } from "../services/rover.service"; + +export const getRoverImage = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + try { + const { api_key } = req.body; + const result = await getRoverImageData(api_key); + + res.json(result); + } catch (err) { + next(err); + } +}; + +export const renderRoverImageForm = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + try { + res.render("roverImageForm.njk"); + } catch (err) { + next(err); + } +}; + +export const renderRoverImage = async ( + req: Request, + res: Response, + next: NextFunction, +) => { + try { + const { api_key } = req.body; + const image = await getRoverImageData(api_key); + + res.render("roverImage.njk", { + image, + }); + } catch (err) { + next(err); + } +}; diff --git a/app/middlewares/validator.ts b/app/middlewares/validator.ts new file mode 100644 index 0000000..581ef9f --- /dev/null +++ b/app/middlewares/validator.ts @@ -0,0 +1,21 @@ +import { Request, Response, NextFunction } from "express"; +import { Schema } from "joi"; +import Exception from "../utils/exception"; + +const validator = (schema: Schema, property = "body") => { + return (req: Request, res: Response, next: NextFunction) => { + const data = property === "body" ? req.body : req.query; + const { error } = schema.validate(data, { abortEarly: false }); + + if (error) { + throw new Exception( + 400, + `${error.details.map(({ message }) => message)}`, + ); + } + + next(); + }; +}; + +export default validator; diff --git a/app/repositories/meteor.repository.ts b/app/repositories/meteor.repository.ts new file mode 100644 index 0000000..965c9c1 --- /dev/null +++ b/app/repositories/meteor.repository.ts @@ -0,0 +1,14 @@ +import axios from "axios"; +import config from "../config/config"; + +export const findAllMeteors = async (startDate: string, endDate: string) => { + const result = await axios.get(`${config.nasaBaseUrl}/neo/rest/v1/feed`, { + params: { + start_date: startDate, + end_date: endDate, + api_key: config.nasaApiKey, + }, + }); + + return result?.data; +}; diff --git a/app/repositories/rover.repository.ts b/app/repositories/rover.repository.ts new file mode 100644 index 0000000..876bc2f --- /dev/null +++ b/app/repositories/rover.repository.ts @@ -0,0 +1,16 @@ +import axios from "axios"; +import config from "../config/config"; + +export const findRoverPhotos = async (apiKey: string) => { + const result = await axios.get( + `${config.nasaBaseUrl}/mars-photos/api/v1/rovers/curiosity/photos`, + { + params: { + sol: config.nasaSol, + api_key: apiKey, + }, + }, + ); + + return result?.data?.photos; +}; diff --git a/app/services/meteor.service.ts b/app/services/meteor.service.ts new file mode 100644 index 0000000..5aba818 --- /dev/null +++ b/app/services/meteor.service.ts @@ -0,0 +1,62 @@ +import { findAllMeteors } from "../repositories/meteor.repository"; +import Exception from "../utils/exception"; +import { NearEarthObjects } from "../types/nearEarthObjects"; +import { Meteor } from "../types/meteor"; + +export const getMeteorsData = async ({ + startDate, + endDate, + count, + wereDangerousMeteors, +}: { + startDate: string; + endDate: string; + count: boolean; + wereDangerousMeteors: boolean; +}) => { + const response = await findAllMeteors(startDate, endDate); + + const nearEarthObjects: NearEarthObjects = response?.near_earth_objects; + + if (!nearEarthObjects) { + throw new Exception(400, "No data available for these parameters"); + } + + const data: Meteor[] = Object.values(nearEarthObjects) + .map((dateValues) => { + return dateValues.map((meteor) => ({ + id: meteor.id, + name: meteor.name, + diameter_meters: + meteor.estimated_diameter?.meters?.estimated_diameter_max, + is_potentially_hazardous_asteroid: + meteor.is_potentially_hazardous_asteroid, + close_approach_date_full: + meteor.close_approach_data[0].close_approach_date_full, + relative_velocity_kps: + meteor.close_approach_data[0].relative_velocity.kilometers_per_second, + })); + }) + .flat(); + + let responseData: { + data: Meteor[]; + count?: number; + wereDangerousMeteors?: boolean; + } = { data }; + + if (count) { + responseData = { ...responseData, count: data.length }; + } + + if (wereDangerousMeteors) { + responseData = { + ...responseData, + wereDangerousMeteors: data.some( + (meteor) => meteor.is_potentially_hazardous_asteroid, + ), + }; + } + + return responseData; +}; diff --git a/app/services/rover.service.ts b/app/services/rover.service.ts new file mode 100644 index 0000000..810ceaa --- /dev/null +++ b/app/services/rover.service.ts @@ -0,0 +1,13 @@ +import { Photo } from "../types/photo"; +import { findRoverPhotos } from "../repositories/rover.repository"; + +export const getRoverImageData = async (apiKey: string) => { + const photos = await findRoverPhotos(apiKey); + + const photo = photos.reduce((mostRecent: Photo, currentPhoto: Photo) => { + return new Date(currentPhoto.earth_date) > new Date(mostRecent.earth_date) + ? currentPhoto + : mostRecent; + }); + return photo?.img_src; +}; diff --git a/app/types/meteor.ts b/app/types/meteor.ts new file mode 100644 index 0000000..a3b7021 --- /dev/null +++ b/app/types/meteor.ts @@ -0,0 +1,8 @@ +export interface Meteor { + id: string; + name: string; + diameter_meters: number; + is_potentially_hazardous_asteroid: boolean; + close_approach_date_full: string; + relative_velocity_kps: string; +} diff --git a/app/types/nearEarthObjects.ts b/app/types/nearEarthObjects.ts new file mode 100644 index 0000000..8756448 --- /dev/null +++ b/app/types/nearEarthObjects.ts @@ -0,0 +1,24 @@ +export type NearEarthObjects = Record; + +interface NearEarthObject { + id: string; + name: string; + estimated_diameter: EstimatedDiameter; + is_potentially_hazardous_asteroid: boolean; + close_approach_data: CloseApproachData[]; + is_sentry_object: boolean; +} + +interface EstimatedDiameter { + meters: { + estimated_diameter_min: number; + estimated_diameter_max: number; + }; +} + +interface CloseApproachData { + close_approach_date_full: string; + relative_velocity: { + kilometers_per_second: string; + }; +} diff --git a/app/types/photo.ts b/app/types/photo.ts new file mode 100644 index 0000000..f224723 --- /dev/null +++ b/app/types/photo.ts @@ -0,0 +1,4 @@ +export interface Photo { + earth_date: string; + img_src: string; +} diff --git a/app/utils/dateUtils.ts b/app/utils/dateUtils.ts new file mode 100644 index 0000000..8dcd5bf --- /dev/null +++ b/app/utils/dateUtils.ts @@ -0,0 +1,18 @@ +import { isMatch, format } from "date-fns"; + +const parseDate = (date: string) => { + const hasMatch = isMatch(date, "yyyy-MM-dd"); + if (hasMatch) { + return date; + } else { + return format(new Date(), "yyyy-MM-dd"); + } +}; + +export const makeDateRange = (date: string): string[] => { + if (Array.isArray(date)) { + return [parseDate(date[0]), parseDate(date[1])]; + } + + return [parseDate(date), parseDate(date)]; +}; diff --git a/app/utils/errorHandler.ts b/app/utils/errorHandler.ts new file mode 100644 index 0000000..de2b490 --- /dev/null +++ b/app/utils/errorHandler.ts @@ -0,0 +1,26 @@ +import { Request, Response, NextFunction } from "express"; +import * as Sentry from "@sentry/node"; +import Exception from "./exception"; + +const errorHandler = ( + err: Error | Exception, + req: Request, + res: Response, + next: NextFunction, +) => { + if (res.headersSent) { + return next(err); + } + + console.error(err.stack); + + Sentry.captureException(err); + + if (err instanceof Exception) { + res.status(err.statusCode || 500).json({ error: err.message }); + } + + res.status(500).json({ error: err.message || "Internal Server Error" }); +}; + +export default errorHandler; diff --git a/app/utils/exception.ts b/app/utils/exception.ts new file mode 100644 index 0000000..0bfbfc3 --- /dev/null +++ b/app/utils/exception.ts @@ -0,0 +1,8 @@ +export default class Exception extends Error { + statusCode: number; + + constructor(statusCode: number, message: string) { + super(message); + this.statusCode = statusCode; + } +} diff --git a/app/validatorSchemas/getMeteorsSchema.ts b/app/validatorSchemas/getMeteorsSchema.ts new file mode 100644 index 0000000..9a2b5d8 --- /dev/null +++ b/app/validatorSchemas/getMeteorsSchema.ts @@ -0,0 +1,31 @@ +import Joi from "joi"; + +const getMeteorsSchema = Joi.object({ + date: Joi.alternatives().try( + Joi.array().items( + Joi.string().isoDate().required().messages({ + "date.base": "The date must be a valid ISO date format (YYYY-MM-DD).", + "any.required": "The date parameter is required.", + }), + ), + Joi.string().isoDate().required().messages({ + "date.base": "The date must be a valid ISO date format (YYYY-MM-DD).", + "any.required": "The date parameter is required.", + }), + ), + + count: Joi.string().valid("true", "false").optional().messages({ + "string.base": "count must be a string.", + "any.only": 'count must be either "true" or "false".', + }), + + "were-dangerous-meteors": Joi.string() + .valid("true", "false") + .optional() + .messages({ + "string.base": "were-dangerous-meteors must be a string.", + "any.only": 'were-dangerous-meteors must be either "true" or "false".', + }), +}); + +export default getMeteorsSchema; diff --git a/app/validatorSchemas/getRoverImageSchema.ts b/app/validatorSchemas/getRoverImageSchema.ts new file mode 100644 index 0000000..5ace2fc --- /dev/null +++ b/app/validatorSchemas/getRoverImageSchema.ts @@ -0,0 +1,10 @@ +import Joi from "joi"; + +const getRoverImageSchema = Joi.object({ + api_key: Joi.string().required().messages({ + "string.base": "api_key should be a string", + "any.required": "api_key is required", + }), +}); + +export default getRoverImageSchema; diff --git a/assets/image.png b/assets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..97c88b419a6f6160fc3a141eda58a16c4ffa72e1 GIT binary patch literal 48248 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 JtWvOw_#XzlO*H@j literal 0 HcmV?d00001 diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..4f3b4a0 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,18 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import prettierRecommended from "eslint-plugin-prettier/recommended"; +import tseslint from "typescript-eslint"; + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { files: ["**/*.{js,ts}"] }, + { languageOptions: { globals: globals.node } }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.strict, + ...tseslint.configs.stylistic, + prettierRecommended, + { + ignores: ["dist/*"], + }, +]; diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..8fae54a --- /dev/null +++ b/index.ts @@ -0,0 +1,41 @@ +import "./instrument"; +import express, { Request, Response } from "express"; +import nunjucks from "nunjucks"; +import bodyParser from "body-parser"; +import config from "./app/config/config"; +import { getMeteors, renderMeteors } from "./app/controllers/meteor.controller"; +import errorHandler from "./app/utils/errorHandler"; +import { + getRoverImage, + renderRoverImage, + renderRoverImageForm, +} from "./app/controllers/rover.controller"; +import getRoverImageSchema from "./app/validatorSchemas/getRoverImageSchema"; +import getMeteorsSchema from "./app/validatorSchemas/getMeteorsSchema"; +import validator from "./app/middlewares/validator"; + +const app = express(); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: true })); + +nunjucks.configure("views", { + autoescape: true, + express: app, +}); +app.set("view engine", "njk"); + +app.get("/api/meteors", validator(getMeteorsSchema, "query"), getMeteors); +app.get("/meteors", validator(getMeteorsSchema, "query"), renderMeteors); + +app.post("/api/rovers/image", validator(getRoverImageSchema), getRoverImage); +app.get("/rovers/image-form", renderRoverImageForm); +app.post("/rovers/image", validator(getRoverImageSchema), renderRoverImage); + +app.use(errorHandler); +app.use("*", (req: Request, res: Response) => { + res.status(404).send("Page not found"); +}); + +app.listen(config.port, () => { + console.log(`Server started, port: ${config.port}`); +}); diff --git a/instrument.ts b/instrument.ts new file mode 100644 index 0000000..a188ccd --- /dev/null +++ b/instrument.ts @@ -0,0 +1,10 @@ +import * as Sentry from "@sentry/node"; +import { nodeProfilingIntegration } from "@sentry/profiling-node"; +import config from "./app/config/config"; + +Sentry.init({ + dsn: config.sentryDsn, + integrations: [nodeProfilingIntegration()], + tracesSampleRate: 1.0, + profilesSampleRate: 1.0, +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1d740d8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4647 @@ +{ + "name": "proxy-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "proxy-server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@sentry/node": "^8.37.1", + "@sentry/profiling-node": "^8.37.1", + "axios": "^1.7.7", + "body-parser": "^1.20.3", + "date-fns": "^4.1.0", + "express": "^4.21.1", + "joi": "^17.13.3", + "nunjucks": "^3.2.4" + }, + "devDependencies": { + "@eslint/js": "^9.14.0", + "@types/express": "^5.0.0", + "@types/nunjucks": "^3.2.6", + "cross-env": "^7.0.3", + "eslint": "^9.14.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "globals": "^15.12.0", + "husky": "^8.0.0", + "lint-staged": "^15.2.10", + "prettier": "^3.3.3", + "typescript": "^5.6.3", + "typescript-eslint": "^8.13.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dev": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.54.1.tgz", + "integrity": "sha512-tFOyYT8tFRSuUc+pEXnHG99270y7K8MSBLQSPiYBJ/0cgCp+8KmSej4joBfah0JoXAwbPzMCom3ri0xsiYbLvg==", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.27.0.tgz", + "integrity": "sha512-CdZ3qmHCwNhFAzjTgHqrDQ44Qxcpz43cVxZRhOs+Ns/79ug+Mr84Bkb626bkJLkA3+BLimA5YAEVRlJC6pFb7g==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.27.0.tgz", + "integrity": "sha512-yQPKnK5e+76XuiqUH/gKyS8wv/7qITd5ln56QkBTf3uggr0VkXOXfcaAuG330UfdYu83wsyoBwqwxigpIG+Jkg==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.54.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.54.1.tgz", + "integrity": "sha512-z5EapvWSHnHwk1NnIF++x9IIe9U83/Bna9xYMHCpZ9EWDfNzMBwg/fOZtwLa2zbX2oEd+Qoze34M+Pujd92IyQ==", + "dependencies": { + "@opentelemetry/api-logs": "0.54.1", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.42.0.tgz", + "integrity": "sha512-fiuU6OKsqHJiydHWgTRQ7MnIrJ2lEqsdgFtNIH4LbAUJl/5XmrIeoDzDnox+hfkgWK65jsleFuQDtYb5hW1koQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.40.0.tgz", + "integrity": "sha512-3aR/3YBQ160siitwwRLjwqrv2KBT16897+bo6yz8wIfel6nWOxTZBJudcbsK3p42pTC7qrbotJ9t/1wRLpv79Q==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.36" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.12.0.tgz", + "integrity": "sha512-pnPxatoFE0OXIZDQhL2okF//dmbiWFzcSc8pUg9TqofCLYZySSxDCgQc69CJBo5JnI3Gz1KP+mOjS4WAeRIH4g==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.44.0.tgz", + "integrity": "sha512-GWgibp6Q0wxyFaaU8ERIgMMYgzcHmGrw3ILUtGchLtLncHNOKk0SNoWGqiylXWWT4HTn5XdV8MGawUgpZh80cA==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.41.0.tgz", + "integrity": "sha512-pNRjFvf0mvqfJueaeL/qEkuGJwgtE5pgjIHGYwjc2rMViNCrtY9/Sf+Nu8ww6dDd/Oyk2fwZZP7i0XZfCnETrA==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.16.0.tgz", + "integrity": "sha512-hMDRUxV38ln1R3lNz6osj3YjlO32ykbHqVrzG7gEhGXFQfu7LJUx8t9tEwE4r2h3CD4D0Rw4YGDU4yF4mP3ilg==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.54.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.39.0.tgz", + "integrity": "sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.44.0.tgz", + "integrity": "sha512-FYXTe3Bv96aNpYktqm86BFUTpjglKD0kWI5T5bxYkLUPEPvFn38vWGMJTGrDMVou/i55E4jlWvcm6hFIqLsMbg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.54.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.41.0.tgz", + "integrity": "sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz", + "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/instrumentation": "0.53.0", + "@opentelemetry/semantic-conventions": "1.27.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz", + "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.43.0.tgz", + "integrity": "sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.4.0.tgz", + "integrity": "sha512-I9VwDG314g7SDL4t8kD/7+1ytaDBRbZQjhVaQaVIDR8K+mlsoBhLsWH79yHxhHQKvwCSZwqXF+TiTOhoQVUt7A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz", + "integrity": "sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.40.0.tgz", + "integrity": "sha512-21xRwZsEdMPnROu/QsaOIODmzw59IYpGFmuC4aFWvMj6stA8+Ei1tX67nkarJttlNjoM94um0N4X26AD7ff54A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.48.0.tgz", + "integrity": "sha512-9YWvaGvrrcrydMsYGLu0w+RgmosLMKe3kv/UNlsPy8RLnCkN2z+bhhbjjjuxtUmvEuKZMCoXFluABVuBr1yhjw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.42.0.tgz", + "integrity": "sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.41.0.tgz", + "integrity": "sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.41.0.tgz", + "integrity": "sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.40.0.tgz", + "integrity": "sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz", + "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.42.0.tgz", + "integrity": "sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.6.0.tgz", + "integrity": "sha512-ABJBhm5OdhGmbh0S/fOTE4N69IZ00CsHC5ijMYfzbw3E5NwLgpQk5xsljaECrJ8wz1SfXbO03FiSuu5AyRAkvQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-undici/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.27.0.tgz", + "integrity": "sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==", + "dependencies": { + "@opentelemetry/core": "1.27.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.27.0.tgz", + "integrity": "sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==", + "dependencies": { + "@opentelemetry/core": "1.27.0", + "@opentelemetry/resources": "1.27.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@prisma/instrumentation": { + "version": "5.19.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.19.1.tgz", + "integrity": "sha512-VLnzMQq7CWroL5AeaW0Py2huiNKeoMfCH3SUxstdzPrlWQi6UQ9UrfcbUkNHlVFqOMacqy8X/8YtE0kuKDpD9w==", + "dependencies": { + "@opentelemetry/api": "^1.8", + "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0", + "@opentelemetry/sdk-trace-base": "^1.22" + } + }, + "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/core": { + "version": "8.37.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.37.1.tgz", + "integrity": "sha512-82csXby589iDupM3VgCHJeWZagUyEEaDnbFcoZ/Z91QX2Sjq8FcF5OsforoXjw09i0XTFqlkFAnQVpDBmMXcpQ==", + "dependencies": { + "@sentry/types": "8.37.1", + "@sentry/utils": "8.37.1" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/node": { + "version": "8.37.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.37.1.tgz", + "integrity": "sha512-ACRZmqOBHRPKsyVhnDR4+RH1QQr7WMdH7RNl62VlKNZGLvraxW1CUqTSeNUFUuOwks3P6nozROSQs8VMSC/nVg==", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.25.1", + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/instrumentation-amqplib": "^0.42.0", + "@opentelemetry/instrumentation-connect": "0.40.0", + "@opentelemetry/instrumentation-dataloader": "0.12.0", + "@opentelemetry/instrumentation-express": "0.44.0", + "@opentelemetry/instrumentation-fastify": "0.41.0", + "@opentelemetry/instrumentation-fs": "0.16.0", + "@opentelemetry/instrumentation-generic-pool": "0.39.0", + "@opentelemetry/instrumentation-graphql": "0.44.0", + "@opentelemetry/instrumentation-hapi": "0.41.0", + "@opentelemetry/instrumentation-http": "0.53.0", + "@opentelemetry/instrumentation-ioredis": "0.43.0", + "@opentelemetry/instrumentation-kafkajs": "0.4.0", + "@opentelemetry/instrumentation-koa": "0.43.0", + "@opentelemetry/instrumentation-lru-memoizer": "0.40.0", + "@opentelemetry/instrumentation-mongodb": "0.48.0", + "@opentelemetry/instrumentation-mongoose": "0.42.0", + "@opentelemetry/instrumentation-mysql": "0.41.0", + "@opentelemetry/instrumentation-mysql2": "0.41.0", + "@opentelemetry/instrumentation-nestjs-core": "0.40.0", + "@opentelemetry/instrumentation-pg": "0.44.0", + "@opentelemetry/instrumentation-redis-4": "0.42.0", + "@opentelemetry/instrumentation-undici": "0.6.0", + "@opentelemetry/resources": "^1.26.0", + "@opentelemetry/sdk-trace-base": "^1.26.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@prisma/instrumentation": "5.19.1", + "@sentry/core": "8.37.1", + "@sentry/opentelemetry": "8.37.1", + "@sentry/types": "8.37.1", + "@sentry/utils": "8.37.1", + "import-in-the-middle": "^1.11.2" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/opentelemetry": { + "version": "8.37.1", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.37.1.tgz", + "integrity": "sha512-P/Rp7R+qNiRYz9qtVMV12YL9CIrZjzXWGVUBZjJayHu37jdvMowCol5G850QPYy0E2O0AQnFtxBno2yeURn8QQ==", + "dependencies": { + "@sentry/core": "8.37.1", + "@sentry/types": "8.37.1", + "@sentry/utils": "8.37.1" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/instrumentation": "^0.54.0", + "@opentelemetry/sdk-trace-base": "^1.26.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + } + }, + "node_modules/@sentry/profiling-node": { + "version": "8.37.1", + "resolved": "https://registry.npmjs.org/@sentry/profiling-node/-/profiling-node-8.37.1.tgz", + "integrity": "sha512-4pkl2PyaX/uNQm6eCzKepCbSTL/3eumZjVxJz5EfIn9D5vqesBn3NVyb1dha7+5BTzvHsi+N9ZGQUa2XHVskbw==", + "hasInstallScript": true, + "dependencies": { + "@sentry/core": "8.37.1", + "@sentry/node": "8.37.1", + "@sentry/types": "8.37.1", + "@sentry/utils": "8.37.1", + "detect-libc": "^2.0.2", + "node-abi": "^3.61.0" + }, + "bin": { + "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.js" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/types": { + "version": "8.37.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.37.1.tgz", + "integrity": "sha512-ryMOTROLSLINKFEbHWvi7GigNrsQhsaScw2NddybJGztJQ5UhxIGESnxGxWCufBmWFDwd7+5u0jDPCVUJybp7w==", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/utils": { + "version": "8.37.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.37.1.tgz", + "integrity": "sha512-Qtn2IfpII12K17txG/ZtTci35XYjYi4CxbQ3j7nXY7toGv/+MqPXwV5q2i9g94XaSXlE5Wy9/hoCZoZpZs/djA==", + "dependencies": { + "@sentry/types": "8.37.1" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", + "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/nunjucks": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/nunjucks/-/nunjucks-3.2.6.tgz", + "integrity": "sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==", + "dev": true + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz", + "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/type-utils": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz", + "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz", + "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@typescript-eslint/types": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", + "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==" + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-in-the-middle": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz", + "integrity": "sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lint-staged": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.6", + "execa": "~8.0.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.5.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", + "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-in-the-middle/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/require-in-the-middle/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.13.0.tgz", + "integrity": "sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.13.0", + "@typescript-eslint/parser": "8.13.0", + "@typescript-eslint/utils": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fb53b18 --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "proxy-server", + "version": "1.0.0", + "description": "To make it easy for you to get started with GitLab, here's a list of recommended next steps.", + "main": "index.js", + "scripts": { + "start": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node --env-file=.env ./dist/index.js", + "build": "npm run build:format && npm run build:typecheck && npm run build:lint", + "build:format": "prettier -w ./", + "build:typecheck": "tsc", + "build:lint": "eslint ./", + "build:lint:fix": "eslint . --fix", + "prepare": "husky install", + "precommit": "lint-staged" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@sentry/node": "^8.37.1", + "@sentry/profiling-node": "^8.37.1", + "axios": "^1.7.7", + "body-parser": "^1.20.3", + "date-fns": "^4.1.0", + "express": "^4.21.1", + "joi": "^17.13.3", + "nunjucks": "^3.2.4" + }, + "devDependencies": { + "@eslint/js": "^9.14.0", + "@types/express": "^5.0.0", + "@types/nunjucks": "^3.2.6", + "cross-env": "^7.0.3", + "eslint": "^9.14.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "globals": "^15.12.0", + "husky": "^8.0.0", + "lint-staged": "^15.2.10", + "prettier": "^3.3.3", + "typescript": "^5.6.3", + "typescript-eslint": "^8.13.0" + }, + "lint-staged": { + "src/**/*.ts": [ + "prettier -w ./", + "eslint ./" + ] + } +} diff --git a/postman/postman_collection.json b/postman/postman_collection.json new file mode 100644 index 0000000..42b105e --- /dev/null +++ b/postman/postman_collection.json @@ -0,0 +1,125 @@ +{ + "info": { + "_postman_id": "b149af7c-87f6-41b7-9455-4b3a86b6eef0", + "name": "Proxy Server", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "4200603" + }, + "item": [ + { + "name": "api meteors", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/api/meteors?date=2024-10-10&count=true", + "protocol": "http", + "host": ["localhost"], + "port": "4000", + "path": ["api", "meteors"], + "query": [ + { + "key": "date", + "value": "2024-10-10" + }, + { + "key": "count", + "value": "true" + } + ] + } + }, + "response": [] + }, + { + "name": "meteors", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/meteors", + "protocol": "http", + "host": ["localhost"], + "port": "4000", + "path": ["meteors"] + } + }, + "response": [] + }, + { + "name": "api rover image", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"api_key\": \"1NZaf5OlxNeQ8ORdO8CWvdDRWrCVT52kDr4Kmrid\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/api/rovers/image", + "protocol": "http", + "host": ["localhost"], + "port": "4000", + "path": ["api", "rovers", "image"] + } + }, + "response": [] + }, + { + "name": "rover image", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"api_key\": \"1NZaf5OlxNeQ8ORdO8CWvdDRWrCVT52kDr4Kmrid\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/rovers/image", + "protocol": "http", + "host": ["localhost"], + "port": "4000", + "path": ["rovers", "image"] + } + }, + "response": [] + }, + { + "name": "rover image form", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"api_key\": \"1NZaf5OlxNeQ8ORdO8CWvdDRWrCVT52kDr4Kmrid\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/rovers/image-form", + "protocol": "http", + "host": ["localhost"], + "port": "4000", + "path": ["rovers", "image-form"] + } + }, + "response": [] + } + ] +} diff --git a/prettier.config.json b/prettier.config.json new file mode 100644 index 0000000..05b5e83 --- /dev/null +++ b/prettier.config.json @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": false, + "singleQuote": true +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9da5bbc --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "NodeNext", + "rootDir": "./", + "outDir": "./dist", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + }, + "include": ["**/*.ts"], + "exclude": ["./dist"] +} diff --git a/views/layout.njk b/views/layout.njk new file mode 100644 index 0000000..60e5972 --- /dev/null +++ b/views/layout.njk @@ -0,0 +1,14 @@ + + + + + Meteors data + + + + + + {% block content %}{% endblock %} + + + \ No newline at end of file diff --git a/views/meteors.njk b/views/meteors.njk new file mode 100644 index 0000000..6774db1 --- /dev/null +++ b/views/meteors.njk @@ -0,0 +1,36 @@ +{% extends 'layout.njk' %} + +{% set title = 'Home' %} + +{% block content %} + {% if wereDangerousMeteors %} +

There were potentially hazardous meteors.

+ {% elseif wereDangerousMeteors==false %} +

There are no hazardous meteors.

+ {% endif %} + {% if count %} +

Total number of meteors: {{ count }}

+ {% endif %} + + {% for meteor in meteors %} + + + + + + + + + + + + + + + +
NameDiameterHazardousDateVelocity
{{ meteor.name }}{{ meteor.diameter_meters }}{{ meteor.is_potentially_hazardous_asteroid }}{{ meteor.close_approach_date_full }}{{ meteor.relative_velocity_kps }}
+ {% else %} +
  • No meteor data available.
  • + {% endfor %} + +{% endblock %} \ No newline at end of file diff --git a/views/roverImage.njk b/views/roverImage.njk new file mode 100644 index 0000000..852e5a3 --- /dev/null +++ b/views/roverImage.njk @@ -0,0 +1,10 @@ +{% extends 'layout.njk' %} +{% set title = 'NodeProxyServer' %} +{% block content %} +

    Meteor Image

    + +
    + Image of the Meteor +
    + +{% endblock %} \ No newline at end of file diff --git a/views/roverImageForm.njk b/views/roverImageForm.njk new file mode 100644 index 0000000..cf946c4 --- /dev/null +++ b/views/roverImageForm.njk @@ -0,0 +1,14 @@ +{% extends 'layout.njk' %} +{% set title = 'NodeProxyServer' %} +{% block content %} +

    Mars Rover Photo

    + +
    + + +

    + + + +
    +{% endblock %} \ No newline at end of file