diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index bbbbd86d..c62fb7a8 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -11,14 +11,12 @@ on: jobs: build: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: node-version: "16.19.0" - - uses: pnpm/action-setup@v2 name: Install pnpm id: pnpm-install diff --git a/.vscode/settings.json b/.vscode/settings.json index 29519146..45542ed7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,9 @@ "[typescript][typescriptreact][typescriptangular]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "eslint.workingDirectories": ["apps", "packages"], + "eslint.workingDirectories": [ + "apps", + "packages" + ], "prettier.enable": true -} +} \ No newline at end of file diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index ccfef88e..5f3b9993 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -20,7 +20,7 @@ export type ABConfig = { type Settings< FlagName extends string, - Flags extends Record = Record + Flags extends Record = Record, > = { flags?: { defaultValues?: { @@ -44,14 +44,19 @@ type LocalData string | null; - set: (key: string, value: string) => void; + get: (key: string, args?: unknown) => string | null; + set: (key: string, value: string, args?: unknown) => void; } +type flagCacheConfig = { + refetchFlags: boolean; + timeToLive: number; +}; + export type AbbyConfig< FlagName extends string = string, Tests extends Record = Record, - Flags extends Record = Record + Flags extends Record = Record, > = { projectId: string; apiUrl?: string; @@ -60,17 +65,25 @@ export type AbbyConfig< flags?: Flags; settings?: Settings, Flags>; debug?: boolean; + flagCacheConfig?: flagCacheConfig; }; export class Abby< FlagName extends string, TestName extends string, Tests extends Record, - Flags extends Record + Flags extends Record, > { private log = (...args: any[]) => this.config.debug ? console.log(`core.Abby`, ...args) : () => {}; + private testDevtoolOverrides: Map = + new Map(); + + private flagDevtoolOverrides: Map = new Map(); + + #flagTimeoutMap: Map = new Map(); + #data: LocalData = { tests: {} as any, flags: {} as any, @@ -92,13 +105,16 @@ export class Abby< private persistantFlagStorage?: PersistentStorage ) { this._cfg = config as AbbyConfig; - this.#data.flags = Object.keys(config.flags ?? {}).reduce((acc, flagName) => { - acc[flagName as FlagName] = this.getDefaultFlagValue( - flagName as FlagName, - config.flags as any - ); - return acc; - }, {} as Record); + this.#data.flags = Object.keys(config.flags ?? {}).reduce( + (acc, flagName) => { + acc[flagName as FlagName] = this.getDefaultFlagValue( + flagName as FlagName, + config.flags as any + ); + return acc; + }, + {} as Record + ); this.#data.tests = config.tests ?? ({} as any); } @@ -139,22 +155,32 @@ export class Abby< data: AbbyDataResponse ): LocalData { return { - tests: data.tests.reduce((acc, { name, weights }) => { - if (!acc[name as keyof Tests]) { + tests: data.tests.reduce( + (acc, { name, weights }) => { + if (!acc[name as keyof Tests]) { + return acc; + } + + // assigned the fetched weights to the initial config + acc[name as keyof Tests] = { + ...acc[name as keyof Tests], + weights, + }; return acc; - } - - // assigned the fetched weights to the initial config - acc[name as keyof Tests] = { - ...acc[name as keyof Tests], - weights, - }; - return acc; - }, (this.config.tests ?? {}) as any), - flags: data.flags.reduce((acc, { name, value }) => { - acc[name] = value; - return acc; - }, {} as Record), + }, + (this.config.tests ?? {}) as any + ), + flags: data.flags.reduce( + (acc, { name, value }) => { + const validUntil = new Date( + new Date().getTime() + 1000 * 60 * (this.config.flagCacheConfig?.timeToLive ?? 1) + ); // flagdefault timeout is 1 minute + this.#flagTimeoutMap.set(name, validUntil); + acc[name] = value; + return acc; + }, + {} as Record + ), }; } @@ -201,6 +227,37 @@ export class Abby< return this.getProjectData(); } + /** + * Helper function to retrieve the time a flag is valid + * @param key + * @returns + */ + getFeatureFlagTimeout(key: F) { + return this.#flagTimeoutMap.get(key); + } + + /** + * Helper function to check if a featureflag should be refetched + * @param key name of the featureflag + * @returns value of flag + */ + getValidFlag(key: F) { + const flagTime = this.#flagTimeoutMap.get(key); + if (!flagTime) return this.#data.flags[key]; + const now = new Date(); + if (flagTime.getTime() <= now.getTime()) { + this.refetchFlags(); + } + return this.#data.flags[key]; + } + + /** + * helper function to make testing easier + */ + refetchFlags() { + this.loadProjectData(); + } + /** * Function to get the value of a feature flag. This includes * the overrides from the dev tools and the local overrides if in development mode @@ -213,7 +270,9 @@ export class Abby< ): FlagValueStringToType { this.log(`getFeatureFlag()`, key); - const storedValue = this.#data.flags[key as unknown as FlagName]; + const storedValue = this.config.flagCacheConfig?.refetchFlags + ? this.getValidFlag(key as unknown as FlagName) + : this.#data.flags[key as unknown as FlagName]; const localOverride = this.flagOverrides?.get(key as unknown as FlagName); @@ -254,7 +313,10 @@ export class Abby< * @param key The name of the test * @returns the value of the test variant */ - getTestVariant(key: T): Tests[T]["variants"][number] { + getTestVariant( + key: T, + args?: T_ARGS + ): Tests[T]["variants"][number] { this.log(`getTestVariant()`, key); const { variants, weights } = (this.#data.tests as LocalData["tests"])[ @@ -267,7 +329,7 @@ export class Abby< return override; } - const persistedValue = this.persistantTestStorage?.get(key as string); + const persistedValue = this.persistantTestStorage?.get(key as string, args); if (persistedValue != null) { this.log(`getTestVariant() => persistedValue:`, persistedValue); @@ -276,7 +338,7 @@ export class Abby< } const weightedVariant = getWeightedRandomVariant(variants, weights); - this.persistantTestStorage?.set(key as string, weightedVariant); + this.persistantTestStorage?.set(key as string, weightedVariant, args); this.log(`getTestVariant() => weightedVariant:`, weightedVariant); diff --git a/packages/core/src/shared/helpers.ts b/packages/core/src/shared/helpers.ts index c0a8fa9e..3f0e9304 100644 --- a/packages/core/src/shared/helpers.ts +++ b/packages/core/src/shared/helpers.ts @@ -9,5 +9,5 @@ export function getFFStorageKey(projectId: string, flagName: string): string { } export function assertUnreachable(x: never): never { - throw new Error("Reached unreachable code"); + throw new Error(`Reached unreachable code: ${x}`); } diff --git a/packages/core/src/shared/http.ts b/packages/core/src/shared/http.ts index 89ca3a16..75b36d9a 100644 --- a/packages/core/src/shared/http.ts +++ b/packages/core/src/shared/http.ts @@ -1,5 +1,6 @@ import { ABBY_BASE_URL } from "./constants"; import type { AbbyEventType, AbbyEvent, AbbyDataResponse } from "./index"; + export abstract class HttpService { static async getProjectData({ projectId, @@ -21,6 +22,7 @@ export abstract class HttpService { const data = (await res.json()) as AbbyDataResponse; return data; } catch (err) { + console.log(err); console.error("[ABBY]: failed to load project data, falling back to defaults"); return null; } diff --git a/packages/core/tests/base.test.ts b/packages/core/tests/base.test.ts index af69aa85..12c7de31 100644 --- a/packages/core/tests/base.test.ts +++ b/packages/core/tests/base.test.ts @@ -121,6 +121,158 @@ describe("Abby", () => { expect(abby.getFeatureFlag("flag1")).toBe(false); }); + + it("refetches an expired flag", async () => { + const date = new Date(); //current date + vi.setSystemTime(date); + const abby = new Abby({ + projectId: "expired", + flags: { + flag1: "Boolean", + flag2: "String", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 2, + }, + }); + await abby.loadProjectData(); + const expiredDate = new Date(new Date().getTime() + 1000 * 60 * 10); //date in 100 minutes + vi.setSystemTime(expiredDate); + const spy = vi.spyOn(abby, "refetchFlags"); + + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).toBeCalled(); + }); + + it("non expired flag does not get refetched", async () => { + const date = new Date(); //current date + vi.setSystemTime(date); + const abby = new Abby({ + projectId: "expired", + flags: { + flag1: "Boolean", + flag2: "Boolean", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 2, + }, + }); + + await abby.loadProjectData(); + + const spy = vi.spyOn(abby, "refetchFlags"); + + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).not.toBeCalled(); + }); + + it("respects the featureFlagCacheConfig refetchFlags value set to false", async () => { + const date = new Date(); //current date + vi.setSystemTime(date); + const abby = new Abby({ + projectId: "expired", + flags: { + flag1: "Boolean", + flag2: "Boolean", + }, + flagCacheConfig: { + refetchFlags: false, + timeToLive: 2, + }, + }); + + await abby.loadProjectData(); + + const spy = vi.spyOn(abby, "refetchFlags"); + + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).not.toBeCalled(); + }); + + it("it refetches expired flags", async () => { + const date = new Date(); //current date + vi.setSystemTime(date); + const abby = new Abby({ + projectId: "expired", + flags: { + flag1: "Boolean", + flag2: "Boolean", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 2, + }, + }); + + await abby.loadProjectData(); + + const spy = vi.spyOn(abby, "refetchFlags"); + + //set date to 5 Minutes in the future + const dateIn5Minutes = new Date(new Date().getTime() + 1000 * 60 * 5); + vi.setSystemTime(dateIn5Minutes); + + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).toBeCalled(); + }); + + it("respects the featureFlagCacheCOnfig expiration time", async () => { + const date = new Date(); //current date + vi.setSystemTime(date); + const abby = new Abby({ + projectId: "expired", + flags: { + flag1: "Boolean", + flag2: "Boolean", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 2, + }, + }); + + await abby.loadProjectData(); + + const spy = vi.spyOn(abby, "refetchFlags"); + + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).not.toBeCalled(); + + //set date to 5 Minutes in the future + const dateIn3Minutes = new Date(new Date().getTime() + 1000 * 60 * 5); + vi.setSystemTime(dateIn3Minutes); + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).toBeCalled(); + }); +}); + +it("respects the default behaviour", async () => { + const date = new Date(); //current date + vi.setSystemTime(date); + const abby = new Abby({ + projectId: "expired", + flags: { flag1: "Boolean", flag2: "Boolean" }, + }); + + await abby.loadProjectData(); + + const spy = vi.spyOn(abby, "refetchFlags"); + + //set date to 5 Minutes in the future + const dateIn3Minutes = new Date(new Date().getTime() + 1000 * 60 * 5); + vi.setSystemTime(dateIn3Minutes); + + expect(abby.getFeatureFlag("flag1")).toBeTruthy(); + expect(abby.getFeatureFlag("flag2")).toBe("test"); + expect(spy).not.toBeCalled(); }); describe("Math helpers", () => { diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts index 998f88c1..6fbd5074 100644 --- a/packages/core/tsup.config.ts +++ b/packages/core/tsup.config.ts @@ -7,5 +7,6 @@ export default defineConfig({ clean: true, sourcemap: true, treeshake: true, + format: ["cjs", "esm"], }); diff --git a/packages/nodejs/.gitignore b/packages/nodejs/.gitignore new file mode 100644 index 00000000..53c37a16 --- /dev/null +++ b/packages/nodejs/.gitignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/packages/nodejs/package.json b/packages/nodejs/package.json new file mode 100644 index 00000000..cb1324f1 --- /dev/null +++ b/packages/nodejs/package.json @@ -0,0 +1,64 @@ +{ + "name": "@tryabby/nodejs", + "version": "1.0.0", + "description": "", + "scripts": { + "test": "vitest ", + "build": "tsup src/index.ts", + "dev": "tsnd --respawn --transpile-only ./src/index.ts", + "dev:fastify": "tsnd --respawn --transpile-only ./src/fastify/index.ts", + "dev:debugger": "nodemon ./src/index.ts --inspect" + }, + "main": "dist/index.js", + "files": [ + "dist" + ], + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "./express": { + "import": "./dist/express/abbyMiddlewareFactory.js", + "require": "./dist/express/abbyMiddlewareFactory.cjs", + "types": "./dist/abbyMiddlewareFactory.d.ts" + }, + "./node": { + "import": "./dist/abby/createAbby.js", + "require": "./dist/abby/createAbby.cjs", + "types": "./dist/createAbby.d.ts" + } + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@fastify/cookie": "^8.3.0", + "@tryabby/core": "workspace:^", + "cookie-parser": "^1.4.6", + "express": "^4.18.2", + "fastify": "^4.19.2", + "ts-toolbelt": "^9.6.0" + }, + "devDependencies": { + "@types/cookie-parser": "^1.4.3", + "@types/express": "^4.17.17", + "@types/jest": "^29.5.1", + "@types/node": "^20.2.5", + "@types/supertest": "^2.0.12", + "flush-promises": "^1.0.2", + "install": "^0.13.0", + "msw": "^0.49.1", + "node-fetch": "^3.3.1", + "nodemon": "^2.0.22", + "supertest": "^6.3.3", + "ts-node": "^10.9.1", + "ts-node-dev": "^2.0.0", + "tsconfig": "workspace:*", + "tsup": "^6.5.0", + "typescript": "^5.0.4", + "vite": "^4.3.9", + "vitest": "^0.31.4" + } +} \ No newline at end of file diff --git a/packages/nodejs/src/abby/abby.ts b/packages/nodejs/src/abby/abby.ts new file mode 100644 index 00000000..d144d6ac --- /dev/null +++ b/packages/nodejs/src/abby/abby.ts @@ -0,0 +1,22 @@ +import { createAbby } from "./createAbby"; + +export const { getFeatureFlagValue, getABTestValue } = createAbby({ + projectId: "clfn3hs1t0002kx08x3kidi80", + currentEnvironment: process.env.NODE_ENV, + tests: { + "New Test3": { + variants: ["A", "B"], + }, + }, + flags: { + lol: "Boolean", + test3: "Boolean", + testAbby: "Boolean", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 1, + }, +}); + +export const abby = { getFeatureFlagValue, getABTestValue }; diff --git a/packages/nodejs/src/abby/createAbby.ts b/packages/nodejs/src/abby/createAbby.ts new file mode 100644 index 00000000..3f069353 --- /dev/null +++ b/packages/nodejs/src/abby/createAbby.ts @@ -0,0 +1,48 @@ +import { ABConfig, Abby, AbbyConfig, FlagValueString, FlagValueStringToType } from "@tryabby/core"; +import { F } from "ts-toolbelt"; +import { TestStorageService } from "../shared/StorageService"; +import { FastifyReply, FastifyRequest } from "fastify"; +import { Request } from "express"; + +export function createAbby< + FlagName extends string, + TestName extends string, + Tests extends Record, + Flags extends Record = Record, + ConfigType extends AbbyConfig = AbbyConfig, +>(abbyConfig: F.Narrow>) { + const abbyCoreInstance = new Abby(abbyConfig, { + get: (key: string, args?: unknown) => { + return TestStorageService.get(abbyConfig.projectId, key as string, args); + }, + set: (key: string, value: any, args?: unknown) => { + TestStorageService.set(abbyConfig.projectId, key as string, value, args); + }, + }); + + //load data and initialise the abby Object + abbyCoreInstance.loadProjectData(); + + const config = abbyConfig as unknown as ConfigType; + + /** + * @param name Name of the test that the variant should be retrieved for + * @returns Value of the currently selected variant + */ + const getABTestValue = ( + name: T, + reqRes: { req: Request | FastifyRequest; res: Response | FastifyReply } + ) => { + return abbyCoreInstance.getTestVariant(name, reqRes); + }; + /** + * + * @param name Name of the feature flag + * @returns Value of the feature flag + */ + const getFeatureFlagValue = (name: F) => { + return abbyCoreInstance.getFeatureFlag(name); + }; + + return { getFeatureFlagValue, getABTestValue }; +} diff --git a/packages/nodejs/src/abby/helpers.ts b/packages/nodejs/src/abby/helpers.ts new file mode 100644 index 00000000..10008e70 --- /dev/null +++ b/packages/nodejs/src/abby/helpers.ts @@ -0,0 +1,15 @@ +import { Request } from "express"; + +/** + * helper function to parse express cookie + * @param req express Request + */ +export function parseCookies(req: Request) { + const cookies = req.headers.cookie; + const cookieMap = new Map(); + cookies?.split(";").map((res, index) => { + const parsedCookie = res.trim().split("="); + cookieMap.set(parsedCookie[0], parsedCookie[1]); + }); + return cookieMap; +} diff --git a/packages/nodejs/src/abby/index.ts b/packages/nodejs/src/abby/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/nodejs/src/express/abbyMiddlewareFactory.ts b/packages/nodejs/src/express/abbyMiddlewareFactory.ts new file mode 100644 index 00000000..f723874e --- /dev/null +++ b/packages/nodejs/src/express/abbyMiddlewareFactory.ts @@ -0,0 +1,78 @@ +import { NextFunction, Request, Response } from "express"; +import { AbbyConfig, ABConfig, FlagValueString } from "@tryabby/core"; +import { createAbby } from "../abby/createAbby"; +import { F } from "ts-toolbelt"; + +interface AbbyMiddlewareFactoryResult { + featureFlagMiddleware: ( + name: F, + req: Request, + res: Response, + next: NextFunction, + deciderFunction: (req: Request, flagValue: any) => boolean + ) => void; + allTestsMiddleWare: (req: Request, res: Response, next: NextFunction) => void; + getVariant: (name: T) => any; +} + +export const abbyMiddlewareFactory = < + FlagName extends string, + TestName extends string, + Tests extends Record, + Flags extends Record = Record, + ConfigType extends AbbyConfig = AbbyConfig, +>({ + abbyConfig, +}: { + abbyConfig: F.Narrow>; +}) => { + const abbyNodeInstance = createAbby(abbyConfig); + const configNarrowed = abbyConfig as unknown as ConfigType; + + const featureFlagMiddleware = ( + name: F, + req: Request, + res: Response, + next: NextFunction + ) => { + const flagValue = abbyNodeInstance.getFeatureFlagValue(name as unknown as FlagName); //TODO fix type + + const decision = flagValue; + if (!decision) { + res.status(403).json("errorMessage"); + return; + } + next(); + }; + + const extractTest = (name: T): any => { + const variant = abbyNodeInstance.getABTestValue(name as string, null); + return { name, variant }; + }; + + const allTestsMiddleWare = ( + req: Request, + res: Response, + next: NextFunction + ) => { + if (configNarrowed.tests) { + const allTests = Object.keys(configNarrowed.tests) as T[]; //TODO get type in a proper way + const testWithVariant = allTests.map((test) => { + return extractTest(test); + }); + } + next(); + }; + + // const allFlagMiddleWare = ( + // req: Request, + // res: Response, + // next: NextFunction + // ) => {}; + + const getVariant = (name: T, reqRes: { req: Request; res: Response }) => { + return abbyNodeInstance.getABTestValue(name as string, reqRes); + }; + + return { featureFlagMiddleware, allTestsMiddleWare, getVariant }; +}; diff --git a/packages/nodejs/src/fastify/fastifyHookFactory.ts b/packages/nodejs/src/fastify/fastifyHookFactory.ts new file mode 100644 index 00000000..5904a9f7 --- /dev/null +++ b/packages/nodejs/src/fastify/fastifyHookFactory.ts @@ -0,0 +1,77 @@ +import { ABConfig, FlagValueString, AbbyConfig } from "@tryabby/core"; +import { F } from "ts-toolbelt"; +import { createAbby } from "../abby/createAbby"; +import { FastifyReply, FastifyRequest, HookHandlerDoneFunction } from "fastify"; + +export const abbyFastifyFactory = < + FlagName extends string, + TestName extends string, + Tests extends Record, + Flags extends Record = Record, + ConfigType extends AbbyConfig = AbbyConfig, +>({ + abbyConfig, +}: { + abbyConfig: F.Narrow>; +}) => { + const abbyNodeInstance = createAbby(abbyConfig); + const configNarrowed = abbyConfig as unknown as ConfigType; + /** + * hook to disable a path via feature flag + */ + const featureFlagHook = ( + key: F, + request: FastifyRequest, + reply: FastifyReply, + done: HookHandlerDoneFunction + ) => { + const flagValue = abbyNodeInstance.getFeatureFlagValue(key as unknown as FlagName); //TODO fix type + if (flagValue) { + reply.status(403); + reply.send(); + return; + } + done(); + }; + + /** + * helper function to extract a single test + * @param name + * @returns + */ + + const extractTest = (name: T): any => { + const variant = abbyNodeInstance.getABTestValue(name); + return { name, variant }; + }; + + /** + * hook to parse all ab values on the request object needs to be used at the top + */ + const ABTestHook = ( + request: FastifyRequest, + reply: FastifyReply, + done: HookHandlerDoneFunction + ) => { + if (configNarrowed.tests) { + const allTests = Object.keys(configNarrowed.tests) as T[]; + const vals = allTests.map((test) => { + return extractTest(test); + }); + } + done(); + }; + + const getFlagValue = (key: F) => { + return abbyNodeInstance.getFeatureFlagValue(key as unknown as FlagName); + }; + + const getTestValue = ( + key: T, + reqRes: { req: FastifyRequest; res: FastifyReply } + ) => { + return abbyNodeInstance.getABTestValue(key, reqRes); + }; + + return { ABTestHook, featureFlagHook, getFlagValue, getTestValue }; +}; diff --git a/packages/nodejs/src/fastify/index.ts b/packages/nodejs/src/fastify/index.ts new file mode 100644 index 00000000..69cf876c --- /dev/null +++ b/packages/nodejs/src/fastify/index.ts @@ -0,0 +1,54 @@ +import Fastify from "fastify"; +import { abbyFastifyFactory } from "./fastifyHookFactory"; +import fastifyCookie from "@fastify/cookie"; + +const fastify = Fastify(); + +// Register the fastify-cookie plugin +fastify.register(fastifyCookie); + +const { featureFlagHook, ABTestHook, getTestValue } = abbyFastifyFactory({ + abbyConfig: { + projectId: "clfn3hs1t0002kx08x3kidi80", + currentEnvironment: process.env.NODE_ENV, + tests: { + "New Test3": { + variants: ["A", "B"], + }, + "New Test6": { + variants: ["A", "GG"], + }, + }, + flags: { + lol: "Boolean", + test3: "Boolean", + testAbby: "Boolean", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 1, + }, + }, +}); + +// fastify.addHook("onRequest", (request, reply, done) => { +// ABTestHook(request, reply, done); +// // featureFlagHook("lol", request, reply, done); +// }); + +const port = 3000; +fastify.get("/", function (request, reply) { + // setResponse(reply); + const variant = getTestValue("New Test3", { req: request, res: reply }); + // const variant2 = getTestValue("New Test6"); + reply.send("hi"); +}); + +fastify.listen({ port }, function (err, address) { + if (err) { + fastify.log.error(err); + process.exit(1); + } + + fastify.log.info(`Fastify is listening on port: ${address}`); +}); diff --git a/packages/nodejs/src/index.ts b/packages/nodejs/src/index.ts new file mode 100644 index 00000000..bb839bf3 --- /dev/null +++ b/packages/nodejs/src/index.ts @@ -0,0 +1,47 @@ +import express, { Request } from "express"; +import { abbyMiddlewareFactory } from "./express/abbyMiddlewareFactory"; +import cookieParser from "cookie-parser"; + +const app = express(); +const port = 3000; + +app.use(cookieParser()); + +const { featureFlagMiddleware, allTestsMiddleWare, getVariant } = abbyMiddlewareFactory({ + abbyConfig: { + projectId: "clfn3hs1t0002kx08x3kidi80", + currentEnvironment: process.env.NODE_ENV, + tests: { + "New Test3": { + variants: ["A", "B"], + }, + "New Test6": { + variants: ["A"], + }, + }, + flags: { + lol: "Boolean", + test3: "Boolean", + testAbby: "Boolean", + }, + flagCacheConfig: { + refetchFlags: true, + timeToLive: 1, + }, + }, +}); + +app.use(express.json()); + +// app.use("/", (req, res, next) => { +// allTestsMiddleWare(req, res, next); +// }); + +// app.use("/", (req, res, next) => featureFlagMiddleware("test3", req, res, next)); + +app.get("/", async (req, res) => { + const variant = getVariant("New Test3", { req, res }); + res.send(variant === "B" ? "very nice content that needs to be protected" : "vriant B"); +}); + +app.listen(port, () => console.log(`Express app running on port ${port}!`)); diff --git a/packages/nodejs/src/shared/StorageService.ts b/packages/nodejs/src/shared/StorageService.ts new file mode 100644 index 00000000..5e1db32a --- /dev/null +++ b/packages/nodejs/src/shared/StorageService.ts @@ -0,0 +1,89 @@ +import { IStorageService, getABStorageKey } from "@tryabby/core"; +import { parseCookies } from "./helpers"; +import { Request, Response } from "express"; +import { FastifyReply, FastifyRequest } from "fastify"; + +export class ABStorageService implements IStorageService { + get( + projectId: string, + key: string, + args?: { + req: Request | FastifyRequest; + } + ): string | null { + const req = args?.req; + if (!req) return null; + const cookieMap = this.parseCookies(req); + const cookieKey = getABStorageKey(projectId, key); + const cookieValue = cookieMap.get(cookieKey); + return cookieValue ?? null; + } + set( + projectId: string, + key: string, + value: string, + args?: { + res: Response | FastifyReply; + } + ): void { + const response = args?.res; + if (!response) return; + const cookieKey = getABStorageKey(projectId, key); + + if (this.isFastifyReply(response)) { + //fastify + response.setCookie(cookieKey, value); + } else if (this.isExpressResponse(response)) { + //express + response.cookie(cookieKey, value); + } + } + remove(projectId: string, key: string): void { + throw new Error("Method not implemented."); + } + + parseCookies(req: Request | FastifyRequest) { + if (this.isExpressRequest(req)) { + return parseCookies(req); + } else if (this.isFastifyRequest(req)) { + return parseCookies(req); + } else { + throw new Error("req must be an instance of either Request or Fastify Request"); + } + } + + isFastifyRequest(req: unknown): req is FastifyRequest { + const possibleRequest = req as FastifyRequest; + return possibleRequest.cookies !== undefined; + } + + isExpressRequest(args: unknown): args is Request { + const possibleRequest = args as Request; + return possibleRequest.app !== undefined; + } + + isFastifyReply(res: unknown): res is FastifyReply { + const possibleReply = res as FastifyReply; + return possibleReply.setCookie !== undefined; + } + + isExpressResponse(res: unknown): res is Response { + const possibleRequest = res as Response; + return possibleRequest.cookie !== null; + } +} + +class FFStorageService implements IStorageService { + get(projectId: string, key: string): string | null { + throw new Error("Method not implemented."); + } + set(projectId: string, key: string, value: string): void { + throw new Error("Method not implemented."); + } + remove(projectId: string, key: string): void { + throw new Error("Method not implemented."); + } +} + +export const TestStorageService = new ABStorageService(); +export const FlagStorageService = new FFStorageService(); diff --git a/packages/nodejs/src/shared/helpers.ts b/packages/nodejs/src/shared/helpers.ts new file mode 100644 index 00000000..8a2a34bd --- /dev/null +++ b/packages/nodejs/src/shared/helpers.ts @@ -0,0 +1,24 @@ +import { Request } from "express"; +import { type FastifyRequest } from "fastify"; + +const fastify = true; + +/** + * helper function to parse express cookie + * @param req express Request | Fastify Request + */ + +// export function parseCookies(req: T) { + +export function parseCookies(req: Request | FastifyRequest) { + const cookies = req.headers.cookie; + const cookieMap = new Map(); + if (!cookies) { + return cookieMap; + } + cookies?.split(";").map((res, index) => { + const parsedCookie = res.trim().split("="); + cookieMap.set(parsedCookie[0], parsedCookie[1]); + }); + return cookieMap; +} diff --git a/packages/nodejs/src/tests/abby.test.ts b/packages/nodejs/src/tests/abby.test.ts new file mode 100644 index 00000000..9e8c7ea0 --- /dev/null +++ b/packages/nodejs/src/tests/abby.test.ts @@ -0,0 +1,57 @@ +import { expect, test, describe } from "vitest"; +import { createAbby } from "../abby/createAbby"; +import flushPromises from "flush-promises"; + +describe("it works", () => { + test("getFeatureFlagValue working", async () => { + const { getFeatureFlagValue } = createAbby({ + projectId: "123", + tests: {}, + flags: { + flag1: "Boolean", + flag2: "Boolean", + }, + }); + + //await abbyInstance initialisation + await flushPromises(); + + expect(await getFeatureFlagValue("flag1")).toBeTruthy(); + expect(await getFeatureFlagValue("flag2")).toBeFalsy(); + }); + + test("it returns a correct variant", async () => { + const variants = ["A", "B", "C", "D"]; + const { getABTestValue } = await createAbby({ + projectId: "123", + tests: { + test: { + variants, + }, + }, + }); + + const variant = getABTestValue("test"); + + expect(variant).toContain(variant); + }); + + test("it returns a correct variant with respect to the weights", async () => { + const variants = ["A", "B"]; + const { getABTestValue } = createAbby({ + projectId: "123", + tests: { + test2: { + variants, + }, + }, + }); + + //await abbyInstance initialisation + await flushPromises(); + + const variant = getABTestValue("test2"); + + expect(variant).toBe("A"); + }); +}); diff --git a/packages/nodejs/src/tests/abbyExpress.test.ts b/packages/nodejs/src/tests/abbyExpress.test.ts new file mode 100644 index 00000000..44552406 --- /dev/null +++ b/packages/nodejs/src/tests/abbyExpress.test.ts @@ -0,0 +1,79 @@ +import { expect, test, describe, beforeAll } from "vitest"; +import express from "express"; +import request from "supertest"; +import { abbyMiddlewareFactory } from "../express/abbyMiddlewareFactory"; + +describe("express middleware working", () => { + let app: express.Application; + + beforeAll(async () => { + const { allTestsMiddleWare, featureFlagMiddleware, getVariant } = await abbyMiddlewareFactory({ + abbyConfig: { + projectId: "123", + currentEnvironment: process.env.NODE_ENV, + tests: { + test: { + variants: ["A", "B", "C", "D"], + }, + test2: { + variants: ["A", "B"], + }, + }, + flags: { + flag1: "String", + flag2: "Boolean", + }, + }, + }); + + app = express(); + // Add any other middlewares or routes necessary for your test + app.use("/featureFlag/Enabled", (req, res, next) => + featureFlagMiddleware("flag1", req, res, next) + ); + app.use("/featureFlag/Disabled", (req, res, next) => + featureFlagMiddleware("flag2", req, res, next) + ); + app.get("/featureFlag/Enabled", (req, res) => res.send("")); + app.get("/featureFlag/Disabled", (req, res) => res.send("")); + + app.use("/cookie", (req, res, next) => allTestsMiddleWare(req, res, next)); + app.get("/cookie/notSet", (req, res) => { + const variant = getVariant("test2", { req, res }); + if (variant) { + res.send(variant); + return; + } + res.sendStatus(404); + }); + app.get("/cookie/Set", (req, res) => { + const variant = getVariant("test", { req, res }); + res.send(variant); + }); + }); + + // TODO for whatever reason middleware tests need to be executed first, else it does not work + test("featureFlag Middleware working", async () => { + //check if feature flag value is respected + + const succesFullResponse = await request(app).get("/featureFlag/Enabled"); + const forbiddenResponse = await request(app).get("/featureFlag/Disabled"); + expect(succesFullResponse.statusCode).toBe(200); + expect(forbiddenResponse.statusCode).toBe(403); + }); + test("abTestMiddleware respects the set cookie", async () => { + const cookieVariant = "D"; + //test cookie retrieval + const response = await request(app) + .get("/cookie/Set") + .set("Cookie", [`__abby__ab__123_test=${cookieVariant}`]); + + expect(response.text).toBe(cookieVariant); + }); + + test("abTestMiddleware sets the right cookie", async () => { + const res = await request(app).get("/cookie/notSet"); + const cookies = res.headers["set-cookie"]; //res headers is any so need to be carefull + expect(cookies[0]).toBe("__abby__ab__123_test2=A; Path=/"); + }); +}); diff --git a/packages/nodejs/src/tests/abbyFastify.test.ts b/packages/nodejs/src/tests/abbyFastify.test.ts new file mode 100644 index 00000000..1ba7dfd7 --- /dev/null +++ b/packages/nodejs/src/tests/abbyFastify.test.ts @@ -0,0 +1,71 @@ +import { expect, test, describe, beforeAll } from "vitest"; +import Fastify, { FastifyInstance } from "fastify"; +import { abbyFastifyFactory } from "../fastify/fastifyHookFactory"; +import request from "supertest"; +import fastifyCookie from "@fastify/cookie"; + +describe("fastify working", () => { + let fastify: FastifyInstance; + beforeAll(() => { + const { getTestValue, ABTestHook } = abbyFastifyFactory({ + abbyConfig: { + projectId: "123", + currentEnvironment: process.env.NODE_ENV, + tests: { + test: { + variants: ["A", "B", "C", "D"], + }, + test2: { + variants: ["A", "B"], + }, + }, + flags: { + flag1: "String", + flag2: "Boolean", + }, + }, + }); + + fastify = Fastify(); + + // Register the fastify-cookie plugin + fastify.register(fastifyCookie); + + fastify.addHook("onRequest", (request, reply, done) => { + ABTestHook(request, reply, done); + }); + + fastify.get("/fastify", function (request, reply) { + reply.send("Hello world!"); + }); + fastify.get("/cookie/Set", (request, reply) => { + const variant = getTestValue("test", { req: request, res: reply }); + reply.send(variant); + }); + fastify.get("/cookie/notSet", (request, reply) => { + const variant = getTestValue("test2", { req: request, res: reply }); + reply.send(variant); + }); + }); + + test("featureFlag middleware", async () => { + await fastify.ready(); + const res = await request(fastify.server).get("/fastify"); + }); + + test("abTestMiddleware respects the set cookie", async () => { + const cookieVariant = "D"; + //test cookie retrieval + const response = await request(fastify.server) + .get("/cookie/Set") + .set("Cookie", [`__abby__ab__123_test=${cookieVariant}`]); + + expect(response.text).toBe(cookieVariant); + }); + + test("abTestMiddleware sets the right cookie", async () => { + const res = await request(fastify.server).get("/cookie/notSet"); + const cookies = res.headers["set-cookie"]; //res headers is any so need to be carefull + expect(cookies[0]).toBe("__abby__ab__123_test2=A"); + }); +}); diff --git a/packages/nodejs/src/tests/mocks/handlers.ts b/packages/nodejs/src/tests/mocks/handlers.ts new file mode 100644 index 00000000..8c2bf207 --- /dev/null +++ b/packages/nodejs/src/tests/mocks/handlers.ts @@ -0,0 +1,58 @@ +import { rest } from "msw"; +import { type AbbyDataResponse, ABBY_BASE_URL } from "@tryabby/core"; + +export const handlers = [ + rest.get(`${ABBY_BASE_URL}api/v1/data/123`, (req, res, ctx) => { + return res( + ctx.json({ + tests: [ + { + name: "test", + weights: [1, 1, 1, 1], + }, + { + name: "test2", + weights: [1, 0], + }, + ], + flags: [ + { + name: "flag1", + value: true, + }, + { + name: "flag2", + value: false, + }, + ], + } as AbbyDataResponse) + ); + }), + + rest.get(`${ABBY_BASE_URL}api/dashboard/clfn3hs1t0002kx08x3kidi80/data`, (req, res, ctx) => { + return res( + ctx.json({ + tests: [ + { + name: "test", + weights: [1, 1, 1, 1], + }, + { + name: "test2", + weights: [1, 0], + }, + ], + flags: [ + { + name: "lol", + value: true, + }, + { + name: "test3", + value: false, + }, + ], + } as AbbyDataResponse) + ); + }), +]; diff --git a/packages/nodejs/src/tests/mocks/server.ts b/packages/nodejs/src/tests/mocks/server.ts new file mode 100644 index 00000000..e14370b2 --- /dev/null +++ b/packages/nodejs/src/tests/mocks/server.ts @@ -0,0 +1,5 @@ +import { setupServer } from 'msw/node'; +import { handlers } from './handlers.ts'; + +// This configures a request mocking server with the given request handlers. +export const server = setupServer(...handlers); diff --git a/packages/nodejs/src/tests/setup.ts b/packages/nodejs/src/tests/setup.ts new file mode 100644 index 00000000..7d98bb7e --- /dev/null +++ b/packages/nodejs/src/tests/setup.ts @@ -0,0 +1,27 @@ +import { expect, afterEach } from "vitest"; + +import { server } from "./mocks/server.ts"; +import fetch from "node-fetch"; + +/// @ts-ignore +global.fetch = fetch; + +// Establish API mocking before all tests. +beforeAll(() => + server.listen({ + onUnhandledRequest(req) { + //requests to express should not be intercepted and there should be no warning + const excludedRoutes = ["/cookie", "/featureFlag", "/fastify"]; + const routeIsExcluded = excludedRoutes.some((route) => req.url.pathname.includes(route)); + if (routeIsExcluded) { + return; + } + console.error("Found an unhandled %s request to %s", req.method, req.url.href); + }, + }) +); +// Reset any request handlers that we may add during the tests, +// so they don't affect other tests. +afterEach(() => server.resetHandlers()); +// Clean up after the tests are finished. +afterAll(() => server.close()); diff --git a/packages/nodejs/tsconfig.json b/packages/nodejs/tsconfig.json new file mode 100644 index 00000000..a4e4e1c8 --- /dev/null +++ b/packages/nodejs/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "tsconfig/react-library.json", + "compilerOptions": { + "module": "CommonJS", + "lib": ["ESNext", "DOM"], + "types": ["vitest/globals"], + "esModuleInterop": true, + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true, + "noEmit": true, + "allowImportingTsExtensions": true + }, + "ts-node": { + "esm": true + }, + "exclude": ["src/tests/**/*.ts"] +} diff --git a/packages/nodejs/tsup.config.ts b/packages/nodejs/tsup.config.ts new file mode 100644 index 00000000..f516547a --- /dev/null +++ b/packages/nodejs/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + dts: true, + clean: true, + sourcemap: true, + treeshake: true, + format: ["esm", "cjs"], +}); diff --git a/packages/nodejs/vite.config.ts b/packages/nodejs/vite.config.ts new file mode 100644 index 00000000..0e3c354c --- /dev/null +++ b/packages/nodejs/vite.config.ts @@ -0,0 +1,11 @@ +/// + +import { defineConfig } from 'vite'; + +export default defineConfig({ + test: { + globals: true, + environment: 'node', + setupFiles: './src/tests/setup.ts' + } +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index de02f2a1..2cde6202 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,10 +12,10 @@ importers: version: link:packages/eslint-config-custom prettier: specifier: latest - version: 2.8.8 + version: 3.0.0 turbo: specifier: latest - version: 1.9.3 + version: 1.10.2 apps/angular-example: dependencies: @@ -593,13 +593,13 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(typescript@4.9.5) + version: 6.7.0(ts-node@10.9.1)(typescript@5.0.4) typescript: specifier: ^4.9.3 version: 4.9.5 vite: specifier: ^3.2.5 - version: 3.2.7(@types/node@18.16.17) + version: 3.2.7 vitest: specifier: ^0.25.3 version: 0.25.8(jsdom@20.0.3) @@ -678,7 +678,7 @@ importers: version: 4.9.5 vite: specifier: ^4.2.0 - version: 4.3.9 + version: 4.3.9(@types/node@18.16.17) vite-plugin-dts: specifier: 2.3.0 version: 2.3.0(vite@4.3.9) @@ -696,7 +696,7 @@ importers: version: 8.8.0(eslint@7.32.0) eslint-config-turbo: specifier: latest - version: 1.9.3(eslint@7.32.0) + version: 1.10.2(eslint@7.32.0) eslint-plugin-react: specifier: 7.31.8 version: 7.31.8(eslint@7.32.0) @@ -764,17 +764,93 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(typescript@4.9.5) + version: 6.7.0(ts-node@10.9.1)(typescript@5.0.4) typescript: specifier: ^4.9.3 version: 4.9.5 vite: specifier: ^3.2.5 - version: 3.2.7(@types/node@18.16.17) + version: 3.2.7 vitest: specifier: ^0.25.3 version: 0.25.8(jsdom@20.0.3) + packages/nodejs: + dependencies: + '@fastify/cookie': + specifier: ^8.3.0 + version: 8.3.0 + '@tryabby/core': + specifier: workspace:^ + version: link:../core + cookie-parser: + specifier: ^1.4.6 + version: 1.4.6 + express: + specifier: ^4.18.2 + version: 4.18.2 + fastify: + specifier: ^4.19.2 + version: 4.19.2 + ts-toolbelt: + specifier: ^9.6.0 + version: 9.6.0 + devDependencies: + '@types/cookie-parser': + specifier: ^1.4.3 + version: 1.4.3 + '@types/express': + specifier: ^4.17.17 + version: 4.17.17 + '@types/jest': + specifier: ^29.5.1 + version: 29.5.2 + '@types/node': + specifier: ^20.2.5 + version: 20.3.0 + '@types/supertest': + specifier: ^2.0.12 + version: 2.0.12 + flush-promises: + specifier: ^1.0.2 + version: 1.0.2 + install: + specifier: ^0.13.0 + version: 0.13.0 + msw: + specifier: ^0.49.1 + version: 0.49.3(typescript@5.0.4) + node-fetch: + specifier: ^3.3.1 + version: 3.3.1 + nodemon: + specifier: ^2.0.22 + version: 2.0.22 + supertest: + specifier: ^6.3.3 + version: 6.3.3 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@20.3.0)(typescript@5.0.4) + ts-node-dev: + specifier: ^2.0.0 + version: 2.0.0(@types/node@20.3.0)(typescript@5.0.4) + tsconfig: + specifier: workspace:* + version: link:../tsconfig + tsup: + specifier: ^6.5.0 + version: 6.7.0(ts-node@10.9.1)(typescript@5.0.4) + typescript: + specifier: ^5.0.4 + version: 5.0.4 + vite: + specifier: ^4.3.9 + version: 4.3.9(@types/node@20.3.0) + vitest: + specifier: ^0.31.4 + version: 0.31.4 + packages/react: dependencies: '@tryabby/core': @@ -831,13 +907,13 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(typescript@4.9.5) + version: 6.7.0(ts-node@10.9.1)(typescript@5.0.4) typescript: specifier: ^4.9.3 version: 4.9.5 vite: specifier: ^3.2.5 - version: 3.2.7(@types/node@18.16.17) + version: 3.2.7 vitest: specifier: ^0.25.3 version: 0.25.8(jsdom@20.0.3) @@ -928,7 +1004,7 @@ importers: version: 4.9.5 vite: specifier: ^4.2.0 - version: 4.3.9 + version: 4.3.9(@types/node@18.16.17) vite-plugin-dts: specifier: 2.3.0 version: 2.3.0(vite@4.3.9) @@ -1294,7 +1370,6 @@ packages: /@angular/cli@15.2.8: resolution: {integrity: sha512-3VlTfm6DUZfFHBY43vQSAaqmFTxy3VtRd/iDBCHcEPhHwYLWBvNwReJuJfNja8O105QQ6DBiYVBExEBtPmjQ4w==} engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - hasBin: true dependencies: '@angular-devkit/architect': 0.1502.8(chokidar@3.5.3) '@angular-devkit/core': 15.2.8(chokidar@3.5.3) @@ -1464,7 +1539,6 @@ packages: /@aw-web-design/x-default-browser@1.4.88: resolution: {integrity: sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==} - hasBin: true dependencies: default-browser-id: 3.0.0 dev: true @@ -1991,7 +2065,6 @@ packages: /@babel/parser@7.21.9: resolution: {integrity: sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.21.5 dev: true @@ -1999,7 +2072,6 @@ packages: /@babel/parser@7.22.5: resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} engines: {node: '>=6.0.0'} - hasBin: true dependencies: '@babel/types': 7.22.5 @@ -4777,7 +4849,6 @@ packages: /@changesets/cli@2.26.1: resolution: {integrity: sha512-XnTa+b51vt057fyAudvDKGB0Sh72xutQZNAdXkCqPBKO2zvs2yYZx5hFZj1u9cbtpwM6Sxtcr02/FQJfZOzemQ==} - hasBin: true dependencies: '@babel/runtime': 7.22.5 '@changesets/apply-release-plan': 6.1.3 @@ -5488,6 +5559,35 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true + /@fastify/ajv-compiler@3.5.0: + resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-uri: 2.2.0 + dev: false + + /@fastify/cookie@8.3.0: + resolution: {integrity: sha512-P9hY9GO11L20TnZ33XN3i0bt+3x0zaT7S0ohAzWO950E9PB2xnNhLYzPFJIGFi5AVN0yr5+/iZhWxeYvR6KCzg==} + dependencies: + cookie: 0.5.0 + fastify-plugin: 4.5.0 + dev: false + + /@fastify/deepmerge@1.3.0: + resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} + dev: false + + /@fastify/error@3.3.0: + resolution: {integrity: sha512-dj7vjIn1Ar8sVXj2yAXiMNCJDmS9MQ9XMlIecX2dIzzhjSHCyKo4DdXjXMs7wKW2kj6yvVRSpuQjOZ3YLrh56w==} + dev: false + + /@fastify/fast-json-stringify-compiler@4.3.0: + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + dependencies: + fast-json-stringify: 5.7.0 + dev: false + /@floating-ui/core@1.3.1: resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} dev: false @@ -5852,7 +5952,6 @@ packages: /@microsoft/api-extractor@7.35.2: resolution: {integrity: sha512-f3aM4hJkv5W04eLh6wdJ9fzscAmb+GgnT6j+pMlGVyz+0p2yQDndymvgUseFO6a+HqFDSH4yZXmkqT8bP7lVWQ==} - hasBin: true dependencies: '@microsoft/api-extractor-model': 7.27.2 '@microsoft/tsdoc': 0.14.2 @@ -6382,14 +6481,14 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.3.8 + semver: 7.5.1 dev: true /@npmcli/fs@3.1.0: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.3.8 + semver: 7.5.1 /@npmcli/git@4.1.0: resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} @@ -6401,7 +6500,7 @@ packages: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.3.8 + semver: 7.5.1 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -6410,7 +6509,6 @@ packages: /@npmcli/installed-package-contents@2.0.2: resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true dependencies: npm-bundled: 3.0.0 npm-normalize-package-bin: 3.0.1 @@ -6419,7 +6517,6 @@ packages: /@npmcli/move-file@2.0.1: resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 @@ -8083,7 +8180,7 @@ packages: remark-slug: 6.1.0 rollup: 3.25.0 typescript: 4.9.5 - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) transitivePeerDependencies: - supports-color dev: true @@ -8114,7 +8211,6 @@ packages: /@storybook/cli@7.0.20: resolution: {integrity: sha512-ZYBJL1d7nWXQok7SriF18h0YPO38Eu1YxR8b1VHgOZYKZhuQmtvhmjMTSgpoGjnynNkEaV3fvm6+KYTjSqYcnw==} - hasBin: true dependencies: '@babel/core': 7.22.5 '@babel/preset-env': 7.22.5(@babel/core@7.22.5) @@ -8469,7 +8565,7 @@ packages: svelte: 3.59.1 sveltedoc-parser: 4.2.1 ts-dedent: 2.2.0 - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) transitivePeerDependencies: - '@preact/preset-vite' - supports-color @@ -8583,7 +8679,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) transitivePeerDependencies: - supports-color dev: true @@ -8615,7 +8711,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) transitivePeerDependencies: - supports-color dev: true @@ -8634,7 +8730,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -9241,6 +9337,12 @@ packages: dependencies: '@types/node': 18.16.17 + /@types/cookie-parser@1.4.3: + resolution: {integrity: sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==} + dependencies: + '@types/express': 4.17.17 + dev: true + /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} @@ -9248,6 +9350,10 @@ packages: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true + /@types/cookiejar@2.1.2: + resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} + dev: true + /@types/cors@2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: @@ -9556,7 +9662,6 @@ packages: /@types/sass@1.45.0: resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} - deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. dependencies: sass: 1.63.3 dev: true @@ -9604,10 +9709,31 @@ packages: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true + /@types/strip-bom@3.0.0: + resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} + dev: true + + /@types/strip-json-comments@0.0.30: + resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + dev: true + /@types/stripe-v3@3.1.28: resolution: {integrity: sha512-5poJyz1QFXpi1hE2bAWy7gFMdj5Fgofm94DNCaTK9V2LeWPdhCQIaP/6qUagZwgCcTURXzih1J7f3sjXH1cOsw==} dev: false + /@types/superagent@4.1.18: + resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} + dependencies: + '@types/cookiejar': 2.1.2 + '@types/node': 18.16.17 + dev: true + + /@types/supertest@2.0.12: + resolution: {integrity: sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==} + dependencies: + '@types/superagent': 4.1.18 + dev: true + /@types/testing-library__jest-dom@5.14.6: resolution: {integrity: sha512-FkHXCb+ikSoUP4Y4rOslzTdX5sqYwMxfefKh1GmZ8ce1GOkEHntSp6b5cGadmNfp5e4BMEWOMx+WSKd5/MqlDA==} dependencies: @@ -9857,7 +9983,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.5) magic-string: 0.26.7 react-refresh: 0.14.0 - vite: 3.2.7(@types/node@18.16.17) + vite: 3.2.7 transitivePeerDependencies: - supports-color dev: true @@ -9875,6 +10001,45 @@ packages: vitest: 0.25.8(jsdom@20.0.3) dev: true + /@vitest/expect@0.31.4: + resolution: {integrity: sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg==} + dependencies: + '@vitest/spy': 0.31.4 + '@vitest/utils': 0.31.4 + chai: 4.3.7 + dev: true + + /@vitest/runner@0.31.4: + resolution: {integrity: sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg==} + dependencies: + '@vitest/utils': 0.31.4 + concordance: 5.0.4 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.31.4: + resolution: {integrity: sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA==} + dependencies: + magic-string: 0.30.0 + pathe: 1.1.1 + pretty-format: 27.5.1 + dev: true + + /@vitest/spy@0.31.4: + resolution: {integrity: sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.31.4: + resolution: {integrity: sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ==} + dependencies: + concordance: 5.0.4 + loupe: 2.3.6 + pretty-format: 27.5.1 + dev: true + /@webassemblyjs/ast@1.11.1: resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} dependencies: @@ -9969,7 +10134,6 @@ packages: /@wessberg/ts-evaluator@0.0.27(typescript@4.9.5): resolution: {integrity: sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==} engines: {node: '>=10.1.0'} - deprecated: this package has been renamed to ts-evaluator. Please install ts-evaluator instead peerDependencies: typescript: '>=3.2.x || >= 4.x' dependencies: @@ -10022,6 +10186,17 @@ packages: /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -10039,15 +10214,15 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 - /acorn-import-assertions@1.9.0(acorn@8.8.2): + /acorn-import-assertions@1.9.0(acorn@8.10.0): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -10056,6 +10231,13 @@ packages: dependencies: acorn: 7.4.1 + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -10075,12 +10257,14 @@ packages: /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} - hasBin: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} - hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -10185,7 +10369,6 @@ packages: /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} - hasBin: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -10244,6 +10427,10 @@ packages: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} dev: false + /archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + dev: false + /are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} @@ -10352,6 +10539,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + /assert@2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} dependencies: @@ -10388,7 +10579,6 @@ packages: /astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} - hasBin: true dev: false /async-each-series@0.1.1: @@ -10413,6 +10603,11 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + /autoprefixer@10.4.13(postcss@8.4.21): resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} @@ -10448,6 +10643,16 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + /avvio@8.2.1: + resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} + dependencies: + archy: 1.0.0 + debug: 4.3.4 + fastq: 1.15.0 + transitivePeerDependencies: + - supports-color + dev: false + /axe-core@4.7.2: resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} engines: {node: '>=4'} @@ -10665,6 +10870,10 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 + /blueimp-md5@2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + dev: true + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -10797,7 +11006,6 @@ packages: /browser-sync@2.29.3: resolution: {integrity: sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==} engines: {node: '>= 8.0.0'} - hasBin: true dependencies: browser-sync-client: 2.29.3 browser-sync-ui: 2.29.3 @@ -10844,7 +11052,6 @@ packages: /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001499 electron-to-chromium: 1.4.427 @@ -10854,7 +11061,6 @@ packages: /browserslist@4.21.7: resolution: {integrity: sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true dependencies: caniuse-lite: 1.0.30001499 electron-to-chromium: 1.4.427 @@ -10892,6 +11098,13 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -10900,7 +11113,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.3.8 + semver: 7.5.1 dev: true /bundle-name@3.0.0: @@ -10942,7 +11155,6 @@ packages: /c8@7.14.0: resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} engines: {node: '>=10.12.0'} - hasBin: true dependencies: '@bcoe/v8-coverage': 0.2.3 '@istanbuljs/schema': 0.1.3 @@ -11307,7 +11519,6 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true dev: true /colorette@2.0.20: @@ -11365,6 +11576,10 @@ packages: /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + /component-emitter@1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -11402,6 +11617,20 @@ packages: typedarray: 0.0.6 dev: true + /concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.3.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + md5-hex: 3.0.1 + semver: 7.5.1 + well-known-symbols: 2.0.0 + dev: true + /condense-newlines@0.2.1: resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==} engines: {node: '>=0.10.0'} @@ -11476,9 +11705,22 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true + /cookie-parser@1.4.6: + resolution: {integrity: sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==} + engines: {node: '>= 0.8.0'} + dependencies: + cookie: 0.4.1 + cookie-signature: 1.0.6 + dev: false + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + /cookie@0.4.1: + resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} + engines: {node: '>= 0.6'} + dev: false + /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} @@ -11487,6 +11729,10 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + /cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: true + /copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} dependencies: @@ -11552,7 +11798,7 @@ packages: css-select: 4.3.0 parse5: 6.0.1 parse5-htmlparser2-tree-adapter: 6.0.1 - postcss: 8.4.21 + postcss: 8.4.24 pretty-bytes: 5.6.0 /cross-spawn@5.1.0: @@ -11581,14 +11827,14 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.21) - postcss: 8.4.21 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.21) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.21) - postcss-modules-scope: 3.0.0(postcss@8.4.21) - postcss-modules-values: 4.0.0(postcss@8.4.21) + icss-utils: 5.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.24) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.24) + postcss-modules-scope: 3.0.0(postcss@8.4.24) + postcss-modules-values: 4.0.0(postcss@8.4.24) postcss-value-parser: 4.2.0 - semver: 7.3.8 + semver: 7.5.1 webpack: 5.76.1(esbuild@0.17.8) /css-select@4.3.0: @@ -11611,7 +11857,6 @@ packages: /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} - hasBin: true /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -11694,6 +11939,13 @@ packages: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} engines: {node: '>=4.0'} + /date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + dependencies: + time-zone: 1.0.0 + dev: true + /dayjs@1.11.8: resolution: {integrity: sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==} dev: false @@ -11708,7 +11960,7 @@ packages: dependencies: ms: 2.0.0 - /debug@3.2.7: + /debug@3.2.7(supports-color@5.5.0): resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -11717,6 +11969,7 @@ packages: optional: true dependencies: ms: 2.1.3 + supports-color: 5.5.0 /debug@4.3.2: resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} @@ -11931,7 +12184,6 @@ packages: /detect-port@1.5.1: resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true dependencies: address: 1.2.2 debug: 4.3.4 @@ -11942,13 +12194,19 @@ packages: /dev-ip@1.0.1: resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==} engines: {node: '>= 0.8.0'} - hasBin: true dev: false /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: true + /dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + dev: true + /di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} @@ -12103,6 +12361,12 @@ packages: stream-shift: 1.0.1 dev: true + /dynamic-dedupe@0.3.0: + resolution: {integrity: sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==} + dependencies: + xtend: 4.0.2 + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true @@ -12129,7 +12393,6 @@ packages: /editorconfig@0.15.3: resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} - hasBin: true dependencies: commander: 2.20.3 lru-cache: 4.1.5 @@ -12143,7 +12406,6 @@ packages: /ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} - hasBin: true dependencies: jake: 10.8.7 dev: true @@ -12252,7 +12514,6 @@ packages: /envinfo@7.8.1: resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} engines: {node: '>=4'} - hasBin: true dev: true /err-code@2.0.3: @@ -12261,7 +12522,6 @@ packages: /errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true requiresBuild: true dependencies: prr: 1.0.1 @@ -12527,13 +12787,11 @@ packages: /esbuild-wasm@0.17.19: resolution: {integrity: sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==} engines: {node: '>=12'} - hasBin: true dev: true /esbuild-wasm@0.17.8: resolution: {integrity: sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ==} engines: {node: '>=12'} - hasBin: true /esbuild-windows-32@0.15.18: resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} @@ -12565,7 +12823,6 @@ packages: /esbuild@0.15.18: resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.15.18 @@ -12595,7 +12852,6 @@ packages: /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.17.19 @@ -12625,7 +12881,6 @@ packages: /esbuild@0.17.8: resolution: {integrity: sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==} engines: {node: '>=12'} - hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.17.8 @@ -12679,7 +12934,6 @@ packages: /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} - hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 @@ -12772,19 +13026,19 @@ packages: eslint: 7.32.0 dev: false - /eslint-config-turbo@1.9.3(eslint@7.32.0): - resolution: {integrity: sha512-QG6jxFQkrGSpQqlFKefPdtgUfr20EbU0s4tGGIuGFOcPuJEdsY6VYZpZUxNJvmMcTGqPgMyOPjAFBKhy/DPHLA==} + /eslint-config-turbo@1.10.2(eslint@7.32.0): + resolution: {integrity: sha512-BaCnpn2GM0rTFLuTVplqY8n+3ttWcu/vEmfjJ2BNBVmwX6ALZoJQfL26ZW6VucRk0psTUJALeo+aPrf3VKEJXA==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 7.32.0 - eslint-plugin-turbo: 1.9.3(eslint@7.32.0) + eslint-plugin-turbo: 1.10.2(eslint@7.32.0) dev: false /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) is-core-module: 2.12.1 resolve: 1.22.2 transitivePeerDependencies: @@ -12871,7 +13125,7 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 5.59.9(eslint@7.32.0)(typescript@4.9.5) - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) eslint: 7.32.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.27.5)(eslint@7.32.0) @@ -12900,7 +13154,7 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 5.59.9(eslint@8.29.0)(typescript@4.9.3) - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) eslint: 8.29.0 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.9)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.29.0) @@ -12922,7 +13176,7 @@ packages: array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) doctrine: 2.1.0 eslint: 7.32.0 eslint-import-resolver-node: 0.3.7 @@ -13113,8 +13367,8 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-turbo@1.9.3(eslint@7.32.0): - resolution: {integrity: sha512-ZsRtksdzk3v+z5/I/K4E50E4lfZ7oYmLX395gkrUMBz4/spJlYbr+GC8hP9oVNLj9s5Pvnm9rLv/zoj5PVYaVw==} + /eslint-plugin-turbo@1.10.2(eslint@7.32.0): + resolution: {integrity: sha512-Kxsy4zlKLrGkEqZgcAQtu16YqU/g0mV1vYa9/VweF+MSnWWQsEzsJ1qlzTfXV6N9VqGmkuLiyWOA84sRUklOOg==} peerDependencies: eslint: '>6.6.0' dependencies: @@ -13176,7 +13430,6 @@ packages: /eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} - hasBin: true dependencies: '@babel/code-frame': 7.12.11 '@eslint/eslintrc': 0.4.3 @@ -13224,7 +13477,6 @@ packages: /eslint@8.29.0: resolution: {integrity: sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint/eslintrc': 1.4.1 '@humanwhocodes/config-array': 0.11.10 @@ -13272,7 +13524,6 @@ packages: /eslint@8.4.1: resolution: {integrity: sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint/eslintrc': 1.4.1 '@humanwhocodes/config-array': 0.9.5 @@ -13319,7 +13570,6 @@ packages: /eslint@8.42.0: resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@eslint-community/regexpp': 4.5.1 @@ -13380,8 +13630,8 @@ packages: resolution: {integrity: sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.1 dev: true @@ -13396,7 +13646,6 @@ packages: /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} - hasBin: true /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -13476,6 +13725,11 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + /eventemitter-asyncresource@1.0.0: resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==} @@ -13601,7 +13855,6 @@ packages: /extract-zip@1.7.0: resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true dependencies: concat-stream: 1.6.2 debug: 2.6.9 @@ -13611,9 +13864,21 @@ packages: - supports-color dev: true + /fast-content-type-parse@1.0.0: + resolution: {integrity: sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==} + dev: false + + /fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: false + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -13627,9 +13892,66 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + /fast-json-stringify@5.7.0: + resolution: {integrity: sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==} + dependencies: + '@fastify/deepmerge': 1.3.0 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-deep-equal: 3.1.3 + fast-uri: 2.2.0 + rfdc: 1.3.0 + dev: false + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: false + + /fast-redact@3.2.0: + resolution: {integrity: sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==} + engines: {node: '>=6'} + dev: false + + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: true + + /fast-uri@2.2.0: + resolution: {integrity: sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==} + dev: false + + /fastify-plugin@4.5.0: + resolution: {integrity: sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==} + dev: false + + /fastify@4.19.2: + resolution: {integrity: sha512-2unheeIRWFf9/Jjcz7djOpKuXCTzZjlyFfiBwKqpldkHMN2rfTLu/f9pYTdwlhzC9Cdj0S2H12zlug0Kd5uZ1w==} + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.3.0 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.2.1 + fast-content-type-parse: 1.0.0 + fast-json-stringify: 5.7.0 + find-my-way: 7.6.2 + light-my-request: 5.10.0 + pino: 8.14.1 + process-warning: 2.2.0 + proxy-addr: 2.0.7 + rfdc: 1.3.0 + secure-json-parse: 2.7.0 + semver: 7.5.1 + tiny-lru: 11.0.1 + transitivePeerDependencies: + - supports-color + dev: false + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -13756,6 +14078,15 @@ packages: make-dir: 3.1.0 pkg-dir: 4.2.0 + /find-my-way@7.6.2: + resolution: {integrity: sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw==} + engines: {node: '>=14'} + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 2.0.0 + dev: false + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -13803,6 +14134,10 @@ packages: engines: {node: '>=0.4.0'} dev: true + /flush-promises@1.0.2: + resolution: {integrity: sha512-G0sYfLQERwKz4+4iOZYQEZVpOt9zQrlItIxQAAYAWpfby3gbHrx0osCHz5RLl/XoXevXk0xoN4hDFky/VV9TrA==} + dev: true + /focus-trap@7.4.3: resolution: {integrity: sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==} dependencies: @@ -13868,6 +14203,15 @@ packages: fetch-blob: 3.2.0 dev: true + /formidable@2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.11.2 + dev: true + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -14083,7 +14427,6 @@ packages: /giget@1.1.2: resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==} - hasBin: true dependencies: colorette: 2.0.20 defu: 6.1.2 @@ -14145,7 +14488,6 @@ packages: /glob@10.2.7: resolution: {integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==} engines: {node: '>=16 || 14 >=14.17'} - hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.2.1 @@ -14293,7 +14635,6 @@ packages: /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -14316,7 +14657,6 @@ packages: /handlebars@4.7.7: resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} engines: {node: '>=0.4.7'} - hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -14495,6 +14835,11 @@ packages: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} dev: true + /hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -14702,17 +15047,21 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.21): + /icss-utils@5.1.0(postcss@8.4.24): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.21 + postcss: 8.4.24 /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + /ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + dev: true + /ignore-walk@5.0.1: resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -14738,7 +15087,6 @@ packages: /image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} - hasBin: true requiresBuild: true optional: true @@ -14838,7 +15186,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-width: 3.0.0 external-editor: 3.1.0 @@ -14854,6 +15202,11 @@ packages: wrap-ansi: 7.0.0 dev: true + /install@0.13.0: + resolution: {integrity: sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==} + engines: {node: '>= 0.10'} + dev: true + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -14979,7 +15332,6 @@ packages: /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true dependencies: ci-info: 3.8.0 dev: true @@ -15006,12 +15358,10 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} - hasBin: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true dev: false /is-extendable@0.1.1: @@ -15059,7 +15409,6 @@ packages: /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} - hasBin: true dependencies: is-docker: 3.0.0 dev: false @@ -15366,7 +15715,6 @@ packages: /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} - hasBin: true dependencies: async: 3.2.4 chalk: 4.1.2 @@ -15482,7 +15830,6 @@ packages: /jiti@1.18.2: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} - hasBin: true /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -15500,7 +15847,6 @@ packages: /js-beautify@1.14.8: resolution: {integrity: sha512-4S7HFeI9YfRvRgKnEweohs0tgJj28InHVIj4Nl8Htf96Y6pHg3+tJrmo4ucAM9f7l4SHbFI3IvFAZ2a1eQPbyg==} engines: {node: '>=12'} - hasBin: true dependencies: config-chain: 1.1.13 editorconfig: 0.15.3 @@ -15522,19 +15868,22 @@ packages: resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} dev: false + /js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true dependencies: argparse: 2.0.1 @@ -15608,7 +15957,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 + acorn: 8.10.0 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -15691,7 +16040,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 + acorn: 8.10.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -15724,12 +16073,10 @@ packages: /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} - hasBin: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -15750,14 +16097,12 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true dependencies: minimist: 1.2.8 /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} - hasBin: true /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} @@ -15879,7 +16224,6 @@ packages: /karma@6.4.2: resolution: {integrity: sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==} engines: {node: '>= 10'} - hasBin: true dependencies: '@colors/colors': 1.5.0 body-parser: 1.20.2 @@ -15913,7 +16257,6 @@ packages: /katex@0.16.7: resolution: {integrity: sha512-Xk9C6oGKRwJTfqfIbtr0Kes9OSv6IFsuhFGc7tW4urlpMJtuh+7YhzU6YEG9n8gmWKcMAFzkp7nr+r69kV0zrA==} - hasBin: true dependencies: commander: 8.3.0 dev: false @@ -15981,7 +16324,6 @@ packages: /less@4.1.3: resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} engines: {node: '>=6'} - hasBin: true dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 @@ -16029,6 +16371,14 @@ packages: webpack: 5.76.1(esbuild@0.17.8) webpack-sources: 3.2.3 + /light-my-request@5.10.0: + resolution: {integrity: sha512-ZU2D9GmAcOUculTTdH9/zryej6n8TzT+fNGdNtm6SDp5MMMpHrJJkvAdE3c6d8d2chE9i+a//dS9CWZtisknqA==} + dependencies: + cookie: 0.5.0 + process-warning: 2.2.0 + set-cookie-parser: 2.6.0 + dev: false + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -16085,7 +16435,6 @@ packages: /localtunnel@2.0.2: resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==} engines: {node: '>=8.3.0'} - hasBin: true dependencies: axios: 0.21.4(debug@4.3.2) debug: 4.3.2 @@ -16199,7 +16548,6 @@ packages: /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true dependencies: js-tokens: 4.0.0 @@ -16250,7 +16598,6 @@ packages: /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true dev: true /magic-string@0.25.9: @@ -16376,7 +16723,6 @@ packages: /markdown-it@13.0.1: resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} - hasBin: true dependencies: argparse: 2.0.1 entities: 3.0.1 @@ -16405,6 +16751,13 @@ packages: remove-accents: 0.4.2 dev: false + /md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + dependencies: + blueimp-md5: 2.19.0 + dev: true + /mdast-util-definitions@4.0.0: resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} dependencies: @@ -16663,7 +17016,6 @@ packages: /micro@10.0.1: resolution: {integrity: sha512-9uwZSsUrqf6+4FLLpiPj5TRWQv5w5uJrJwsx1LR/TjqvQmKC1XnGQ9OHrFwR3cbZ46YqPqxO/XJCOpWnqMPw2Q==} engines: {node: '>= 16.0.0'} - hasBin: true dependencies: arg: 4.1.0 content-type: 1.0.4 @@ -16826,8 +17178,8 @@ packages: /micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -17035,29 +17387,24 @@ packages: /mime@1.4.1: resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==} - hasBin: true dev: false /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} - hasBin: true /mime@2.5.2: resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} engines: {node: '>=4.0.0'} - hasBin: true dev: true /mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} - hasBin: true /mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} - hasBin: true dev: true /mimic-fn@2.1.0: @@ -17085,7 +17432,6 @@ packages: /mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} - hasBin: true dev: true /minimalistic-assert@1.0.1: @@ -17224,19 +17570,25 @@ packages: /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true dependencies: minimist: 1.2.8 /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} - hasBin: true /mkdirp@2.1.6: resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} engines: {node: '>=10'} - hasBin: true + dev: true + + /mlly@1.4.0: + resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + dependencies: + acorn: 8.10.0 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 dev: true /monaco-editor@0.39.0: @@ -17305,9 +17657,44 @@ packages: - supports-color dev: true + /msw@0.49.3(typescript@5.0.4): + resolution: {integrity: sha512-kRCbDNbNnRq5LC1H/NUceZlrPAvSrMH6Or0mirIuH69NY84xwDruPn/hkXTovIK1KwDwbk+ZdoSyJlpiekLxEA==} + engines: {node: '>=14'} + hasBin: true + requiresBuild: true + peerDependencies: + typescript: '>= 4.4.x <= 4.9.x' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@mswjs/cookies': 0.2.2 + '@mswjs/interceptors': 0.17.9 + '@open-draft/until': 1.0.3 + '@types/cookie': 0.4.1 + '@types/js-levenshtein': 1.1.1 + chalk: 4.1.1 + chokidar: 3.5.3 + cookie: 0.4.2 + graphql: 16.6.0 + headers-polyfill: 3.1.2 + inquirer: 8.2.5 + is-node-process: 1.2.0 + js-levenshtein: 1.1.6 + node-fetch: 2.6.11 + outvariant: 1.4.0 + path-to-regexp: 6.2.1 + strict-event-emitter: 0.4.6 + type-fest: 2.19.0 + typescript: 5.0.4 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true dependencies: dns-packet: 5.6.0 thunky: 1.1.0 @@ -17325,12 +17712,10 @@ packages: /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true /nanoid@4.0.2: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} engines: {node: ^14 || ^16 || >=18} - hasBin: true dev: false /natural-compare-lite@1.4.0: @@ -17343,10 +17728,9 @@ packages: /needle@3.2.0: resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} engines: {node: '>= 4.4.x'} - hasBin: true requiresBuild: true dependencies: - debug: 3.2.7 + debug: 3.2.7(supports-color@5.5.0) iconv-lite: 0.6.3 sax: 1.2.4 transitivePeerDependencies: @@ -17705,13 +18089,11 @@ packages: /node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} - hasBin: true optional: true /node-gyp@9.3.1: resolution: {integrity: sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==} engines: {node: ^12.13 || ^14.13 || >=16} - hasBin: true dependencies: env-paths: 2.2.1 glob: 7.2.3 @@ -17720,7 +18102,7 @@ packages: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.3.8 + semver: 7.5.1 tar: 6.1.15 which: 2.0.2 transitivePeerDependencies: @@ -17740,10 +18122,31 @@ packages: engines: {node: '>=6.0.0'} dev: false + /nodemon@2.0.22: + resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} + engines: {node: '>=8.10.0'} + dependencies: + chokidar: 3.5.3 + debug: 3.2.7(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 5.7.1 + simple-update-notifier: 1.1.0 + supports-color: 5.5.0 + touch: 3.1.0 + undefsafe: 2.0.5 + dev: true + + /nopt@1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + dependencies: + abbrev: 1.1.1 + dev: true + /nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true dependencies: abbrev: 1.1.1 @@ -17762,7 +18165,7 @@ packages: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.12.1 - semver: 7.3.8 + semver: 7.5.1 validate-npm-package-license: 3.0.4 dev: true @@ -17792,7 +18195,7 @@ packages: resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.3.8 + semver: 7.5.1 dev: true /npm-normalize-package-bin@2.0.0: @@ -17818,7 +18221,6 @@ packages: /npm-packlist@5.1.3: resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true dependencies: glob: 8.1.0 ignore-walk: 5.0.1 @@ -18018,6 +18420,10 @@ packages: engines: {node: ^10.13.0 || >=12.0.0} dev: false + /on-exit-leak-free@2.1.0: + resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} + dev: false + /on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -18089,7 +18495,6 @@ packages: /opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true dev: true /openid-client@5.4.2: @@ -18188,6 +18593,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -18232,7 +18644,6 @@ packages: /pacote@15.1.0: resolution: {integrity: sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true dependencies: '@npmcli/git': 4.1.0 '@npmcli/installed-package-contents': 2.0.2 @@ -18455,6 +18866,33 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + /pino-abstract-transport@1.0.0: + resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} + dependencies: + readable-stream: 4.4.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + dev: false + + /pino@8.14.1: + resolution: {integrity: sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==} + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.2.0 + on-exit-leak-free: 2.1.0 + pino-abstract-transport: 1.0.0 + pino-std-serializers: 6.2.2 + process-warning: 2.2.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.3.0 + thread-stream: 2.3.0 + dev: false + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -18488,6 +18926,14 @@ packages: find-up: 5.0.0 dev: true + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.0 + pathe: 1.1.1 + dev: true + /polished@4.2.2: resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} engines: {node: '>=10'} @@ -18523,7 +18969,7 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.24 - /postcss-load-config@3.1.4: + /postcss-load-config@3.1.4(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -18536,6 +18982,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 + ts-node: 10.9.1(@types/node@20.3.0)(typescript@5.0.4) yaml: 1.10.2 dev: true @@ -18566,45 +19013,45 @@ packages: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.21 - semver: 7.3.8 + semver: 7.5.1 webpack: 5.76.1(esbuild@0.17.8) - /postcss-modules-extract-imports@3.0.0(postcss@8.4.21): + /postcss-modules-extract-imports@3.0.0(postcss@8.4.24): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.21 + postcss: 8.4.24 - /postcss-modules-local-by-default@4.0.3(postcss@8.4.21): + /postcss-modules-local-by-default@4.0.3(postcss@8.4.24): resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.21) - postcss: 8.4.21 + icss-utils: 5.1.0(postcss@8.4.24) + postcss: 8.4.24 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.0.0(postcss@8.4.21): + /postcss-modules-scope@3.0.0(postcss@8.4.24): resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.21 + postcss: 8.4.24 postcss-selector-parser: 6.0.13 - /postcss-modules-values@4.0.0(postcss@8.4.21): + /postcss-modules-values@4.0.0(postcss@8.4.24): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.21) - postcss: 8.4.21 + icss-utils: 5.1.0(postcss@8.4.24) + postcss: 8.4.24 /postcss-nested@6.0.1(postcss@8.4.24): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -18723,6 +19170,11 @@ packages: /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} + dev: true + + /prettier@3.0.0: + resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} + engines: {node: '>=14'} hasBin: true dev: true @@ -18769,7 +19221,6 @@ packages: /prisma@4.15.0: resolution: {integrity: sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA==} engines: {node: '>=14.17'} - hasBin: true requiresBuild: true dependencies: '@prisma/engines': 4.15.0 @@ -18782,10 +19233,13 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process-warning@2.2.0: + resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} + dev: false + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - dev: true /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} @@ -19001,10 +19455,13 @@ packages: /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + /pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + dev: true + /publint@0.1.12: resolution: {integrity: sha512-8LxkO430t/SOhUl0qXQWdXq34m6oyLcPhE4Kc8eXhOEnB82vCHcShPQ2kH53n/ksC7jWdRWDP7MPGxKJbntQfg==} engines: {node: '>=16'} - hasBin: true dependencies: npm-packlist: 5.1.3 picocolors: 1.0.0 @@ -19079,6 +19536,10 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -19356,6 +19817,17 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readable-stream@4.4.2: + resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -19366,6 +19838,11 @@ packages: resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} dev: false + /real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + /recast@0.21.5: resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} engines: {node: '>= 4'} @@ -19462,7 +19939,6 @@ packages: /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true dependencies: jsesc: 0.5.0 @@ -19601,7 +20077,7 @@ packages: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.21 + postcss: 8.4.24 source-map: 0.6.1 /resolve@1.19.0: @@ -19613,7 +20089,6 @@ packages: /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true dependencies: is-core-module: 2.12.1 path-parse: 1.0.7 @@ -19622,7 +20097,6 @@ packages: /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true dependencies: is-core-module: 2.12.1 path-parse: 1.0.7 @@ -19630,7 +20104,6 @@ packages: /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} - hasBin: true dependencies: is-core-module: 2.12.1 path-parse: 1.0.7 @@ -19653,6 +20126,11 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 + /ret@0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + dev: false + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -19671,28 +20149,24 @@ packages: /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true dependencies: glob: 7.2.3 /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} - hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true @@ -19700,7 +20174,6 @@ packages: /rollup@3.25.0: resolution: {integrity: sha512-FnJkNRst2jEZGw7f+v4hFo6UTzpDKrAKcHZWcEfm5/GJQ5CK7wgb4moNLNAe7npKUev7yQn1AY/YbZRIxOv6Qg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true @@ -19763,6 +20236,17 @@ packages: get-intrinsic: 1.2.1 is-regex: 1.1.4 + /safe-regex2@2.0.0: + resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} + dependencies: + ret: 0.2.2 + dev: false + + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -19802,7 +20286,6 @@ packages: /sass@1.58.1: resolution: {integrity: sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==} engines: {node: '>=12.0.0'} - hasBin: true dependencies: chokidar: 3.5.3 immutable: 4.3.0 @@ -19811,7 +20294,6 @@ packages: /sass@1.63.3: resolution: {integrity: sha512-ySdXN+DVpfwq49jG1+hmtDslYqpS7SkOR5GpF6o2bmb1RL/xS+wvPmegMvMywyfsmAV6p7TgwXYGrCZIFFbAHg==} engines: {node: '>=14.0.0'} - hasBin: true dependencies: chokidar: 3.5.3 immutable: 4.3.0 @@ -19871,6 +20353,10 @@ packages: kind-of: 6.0.3 dev: false + /secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + dev: false + /selderee@0.10.0: resolution: {integrity: sha512-DEL/RW/f4qLw/NrVg97xKaEBC8IpzIG2fvxnzCp3Z4yk4jQ3MXom+Imav9wApjxX2dfS3eW7x0DXafJr85i39A==} dependencies: @@ -19888,28 +20374,23 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true /semver@7.0.0: resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} - hasBin: true dev: true /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 /semver@7.5.1: resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} engines: {node: '>=10'} - hasBin: true dependencies: lru-cache: 6.0.0 @@ -20017,7 +20498,6 @@ packages: /set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: true /setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -20058,7 +20538,6 @@ packages: /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} - hasBin: true dependencies: glob: 7.2.3 interpret: 1.4.0 @@ -20097,6 +20576,10 @@ packages: get-intrinsic: 1.2.1 object-inspect: 1.12.3 + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /sigmund@1.0.1: resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==} dev: false @@ -20112,7 +20595,6 @@ packages: /sigstore@1.6.0: resolution: {integrity: sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true dependencies: '@sigstore/protobuf-specs': 0.1.0 '@sigstore/tuf': 1.0.0 @@ -20175,7 +20657,6 @@ packages: /smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} - hasBin: true dependencies: array.prototype.flat: 1.3.1 breakword: 1.0.6 @@ -20257,9 +20738,14 @@ packages: smart-buffer: 4.2.0 dev: true + /sonic-boom@3.3.0: + resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + /sorcery@0.10.0: resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} - hasBin: true dependencies: buffer-crc32: 0.2.13 minimist: 1.2.8 @@ -20312,7 +20798,6 @@ packages: /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead dev: true /space-separated-tokens@1.1.5: @@ -20376,6 +20861,11 @@ packages: transitivePeerDependencies: - supports-color + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -20399,6 +20889,10 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + /standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} dev: false @@ -20441,7 +20935,6 @@ packages: /storybook@7.0.20: resolution: {integrity: sha512-QxMdqeY7oigiwnVqVPp8550CUtfWW5fujkVXUhgyI1u4i9dpmJxkxWRvfSvhGKAvHf0n2BZ550SevZRPrCr+Tg==} - hasBin: true dependencies: '@storybook/cli': 7.0.20 transitivePeerDependencies: @@ -20458,7 +20951,6 @@ packages: /stream-throttle@0.1.3: resolution: {integrity: sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==} engines: {node: '>= 0.10.0'} - hasBin: true dependencies: commander: 2.20.3 limiter: 1.1.5 @@ -20610,6 +21102,11 @@ packages: min-indent: 1.0.1 dev: true + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -20654,7 +21151,6 @@ packages: /sucrase@3.32.0: resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} engines: {node: '>=8'} - hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 @@ -20664,6 +21160,24 @@ packages: pirates: 4.0.5 ts-interface-checker: 0.1.13 + /superagent@8.0.9: + resolution: {integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==} + engines: {node: '>=6.4.0 <13 || >=14'} + dependencies: + component-emitter: 1.3.0 + cookiejar: 2.1.4 + debug: 4.3.4 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.2 + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + dev: true + /superjson@1.9.1: resolution: {integrity: sha512-oT3HA2nPKlU1+5taFgz/HDy+GEaY+CWEbLzaRJVD4gZ7zMVVC4GDNFdgvAZt6/VuIk6D2R7RtPAiCHwmdzlMmg==} engines: {node: '>=10'} @@ -20671,6 +21185,16 @@ packages: copy-anything: 3.0.5 dev: false + /supertest@6.3.3: + resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} + engines: {node: '>=6.4.0'} + dependencies: + methods: 1.1.2 + superagent: 8.0.9 + transitivePeerDependencies: + - supports-color + dev: true + /supports-color@4.5.0: resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} engines: {node: '>=4'} @@ -20865,7 +21389,6 @@ packages: /tailwindcss@3.3.2(ts-node@10.9.1): resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} engines: {node: '>=14.0.0'} - hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -20989,20 +21512,18 @@ packages: /terser@5.16.3: resolution: {integrity: sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 /terser@5.17.7: resolution: {integrity: sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==} engines: {node: '>=10'} - hasBin: true dependencies: '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -21028,6 +21549,12 @@ packages: dependencies: any-promise: 1.3.0 + /thread-stream@2.3.0: + resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==} + dependencies: + real-require: 0.2.0 + dev: false + /throttle-debounce@3.0.1: resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} engines: {node: '>=10'} @@ -21046,6 +21573,11 @@ packages: /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + /time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + dev: true + /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -21053,6 +21585,11 @@ packages: globrex: 0.1.2 dev: true + /tiny-lru@11.0.1: + resolution: {integrity: sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==} + engines: {node: '>=12'} + dev: false + /tinybench@2.5.0: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} dev: true @@ -21062,11 +21599,21 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tinypool@0.5.0: + resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@1.1.1: resolution: {integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==} engines: {node: '>=14.0.0'} dev: true + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} + dev: true + /tippy.js@6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} dependencies: @@ -21075,7 +21622,6 @@ packages: /title@3.5.3: resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} - hasBin: true dependencies: arg: 1.0.0 chalk: 2.3.0 @@ -21138,6 +21684,12 @@ packages: engines: {node: '>=6'} dev: true + /touch@3.1.0: + resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} + dependencies: + nopt: 1.0.10 + dev: true + /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} @@ -21171,7 +21723,6 @@ packages: /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -21201,6 +21752,34 @@ packages: code-block-writer: 12.0.0 dev: true + /ts-node-dev@2.0.0(@types/node@20.3.0)(typescript@5.0.4): + resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} + engines: {node: '>=0.8.0'} + hasBin: true + peerDependencies: + node-notifier: '*' + typescript: '*' + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + chokidar: 3.5.3 + dynamic-dedupe: 0.3.0 + minimist: 1.2.8 + mkdirp: 1.0.4 + resolve: 1.22.2 + rimraf: 2.7.1 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + ts-node: 10.9.1(@types/node@20.3.0)(typescript@5.0.4) + tsconfig: 7.0.0 + typescript: 5.0.4 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + dev: true + /ts-node@10.9.1(@types/node@18.16.17)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -21231,6 +21810,37 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + /ts-node@10.9.1(@types/node@20.3.0)(typescript@5.0.4): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.3.0 + acorn: 8.8.2 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.0.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-pattern@4.3.0: resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} dev: false @@ -21255,6 +21865,15 @@ packages: strip-bom: 3.0.0 dev: true + /tsconfig@7.0.0: + resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==} + dependencies: + '@types/strip-bom': 3.0.0 + '@types/strip-json-comments': 0.0.30 + strip-bom: 3.0.0 + strip-json-comments: 2.0.1 + dev: true + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -21264,7 +21883,7 @@ packages: /tslib@2.5.3: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} - /tsup@6.7.0(typescript@4.9.5): + /tsup@6.7.0(ts-node@10.9.1)(typescript@5.0.4): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -21288,13 +21907,13 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4 + postcss-load-config: 3.1.4(ts-node@10.9.1) resolve-from: 5.0.0 rollup: 3.25.0 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 - typescript: 4.9.5 + typescript: 5.0.4 transitivePeerDependencies: - supports-color - ts-node @@ -21322,7 +21941,6 @@ packages: /tty-table@4.2.1: resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} engines: {node: '>=8.0.0'} - hasBin: true dependencies: chalk: 4.1.2 csv: 5.5.3 @@ -21344,65 +21962,65 @@ packages: - supports-color dev: true - /turbo-darwin-64@1.9.3: - resolution: {integrity: sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==} + /turbo-darwin-64@1.10.2: + resolution: {integrity: sha512-sVLpVVANByfMgqf7OYPcZM4KiDnjGu7ITvAzBSa9Iwe14yoWLn8utrNsWCRaQEB6kEqBGLPmvL7AKwkl8M2Gqg==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.9.3: - resolution: {integrity: sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==} + /turbo-darwin-arm64@1.10.2: + resolution: {integrity: sha512-TKG91DSoYQjsCft4XBx4lYycVT5n3UQB/nOKgv/WJCSfwshLWulya3yhP8JT5erv9rPF8gwgnx87lrCmT4EAVA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.9.3: - resolution: {integrity: sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==} + /turbo-linux-64@1.10.2: + resolution: {integrity: sha512-ZIzAkfrzjJFkSM/uEfxU6JjseCsT5PHRu0s0lmYce37ApQbv/HC7tI0cFhuosI30+O8109/mkyZykKE7AQfgqA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.9.3: - resolution: {integrity: sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==} + /turbo-linux-arm64@1.10.2: + resolution: {integrity: sha512-G4uZA+RBQ5S1X/oUxO5KoLL2NDMkrrBZF52+00jQv6UEb9lWDgwzqSwoAGjdXxeDCrqMW5rBVwb/IBIF2/yhwA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.9.3: - resolution: {integrity: sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==} + /turbo-windows-64@1.10.2: + resolution: {integrity: sha512-ObfQO37kGu1jBzFs/L+hybrCXBwdnimotJwzg7pCoSyGijKITlugrpJoPDKlg0eMr3/1Y6KUeHy26vZaDXrbuQ==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.9.3: - resolution: {integrity: sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==} + /turbo-windows-arm64@1.10.2: + resolution: {integrity: sha512-7S6dx4738R/FIT2cxbsunqgHN5LelXzuzkcaZgdkU33oswRf/6KOfOABzQLdTX7Uos59cBSdwayf6KQJxuOXUg==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.9.3: - resolution: {integrity: sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==} + /turbo@1.10.2: + resolution: {integrity: sha512-m9sR5XHhuzxUQACf0vI2qCG5OqDYAZiPTaAsTwECnwUF4/cXwEmcYddbLJnO+K9orNvcnjjent5oBNBVQ/o0ow==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.9.3 - turbo-darwin-arm64: 1.9.3 - turbo-linux-64: 1.9.3 - turbo-linux-arm64: 1.9.3 - turbo-windows-64: 1.9.3 - turbo-windows-arm64: 1.9.3 + turbo-darwin-64: 1.10.2 + turbo-darwin-arm64: 1.10.2 + turbo-linux-64: 1.10.2 + turbo-linux-arm64: 1.10.2 + turbo-windows-64: 1.10.2 + turbo-windows-arm64: 1.10.2 dev: true /type-check@0.3.2: @@ -21483,18 +22101,15 @@ packages: /typescript@4.9.3: resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} engines: {node: '>=4.2.0'} - hasBin: true dev: false /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} - hasBin: true /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} - hasBin: true dev: true /ua-parser-js@0.7.35: @@ -21508,10 +22123,13 @@ packages: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: false + /ufo@1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + dev: true + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} - hasBin: true requiresBuild: true dev: true optional: true @@ -21524,6 +22142,10 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + dev: true + /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} engines: {node: '>=14.0'} @@ -21729,7 +22351,7 @@ packages: /unplugin@0.10.2: resolution: {integrity: sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.6 @@ -21839,17 +22461,14 @@ packages: /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} - hasBin: true dev: true /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} - hasBin: true dependencies: dequal: 2.0.3 diff: 5.1.0 @@ -21926,6 +22545,26 @@ packages: vfile-message: 3.1.4 dev: false + /vite-node@0.31.4(@types/node@18.16.17): + resolution: {integrity: sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==} + engines: {node: '>=v14.18.0'} + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.3.9(@types/node@18.16.17) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite-plugin-dts@2.3.0(vite@4.3.9): resolution: {integrity: sha512-WbJgGtsStgQhdm3EosYmIdTGbag5YQpZ3HXWUAPCDyoXI5qN6EY0V7NXq0lAmnv9hVQsvh0htbYcg0Or5Db9JQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -21942,14 +22581,14 @@ packages: kolorist: 1.8.0 magic-string: 0.29.0 ts-morph: 18.0.0 - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) transitivePeerDependencies: - '@types/node' - rollup - supports-color dev: true - /vite@3.2.7(@types/node@18.16.17): + /vite@3.2.7: resolution: {integrity: sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -21974,7 +22613,6 @@ packages: terser: optional: true dependencies: - '@types/node': 18.16.17 esbuild: 0.15.18 postcss: 8.4.24 resolve: 1.22.2 @@ -21983,7 +22621,7 @@ packages: fsevents: 2.3.2 dev: true - /vite@4.3.9: + /vite@4.3.9(@types/node@18.16.17): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -22008,6 +22646,40 @@ packages: terser: optional: true dependencies: + '@types/node': 18.16.17 + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vite@4.3.9(@types/node@20.3.0): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.3.0 esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.0 @@ -22023,7 +22695,7 @@ packages: vite: optional: true dependencies: - vite: 4.3.9 + vite: 4.3.9(@types/node@18.16.17) dev: true /vitest@0.25.8(jsdom@20.0.3): @@ -22062,7 +22734,72 @@ packages: tinybench: 2.5.0 tinypool: 0.3.1 tinyspy: 1.1.1 - vite: 3.2.7(@types/node@18.16.17) + vite: 4.3.9(@types/node@18.16.17) + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vitest@0.31.4: + resolution: {integrity: sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 18.16.17 + '@vitest/expect': 0.31.4 + '@vitest/runner': 0.31.4 + '@vitest/snapshot': 0.31.4 + '@vitest/spy': 0.31.4 + '@vitest/utils': 0.31.4 + acorn: 8.8.2 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + concordance: 5.0.4 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.0 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 + tinypool: 0.5.0 + vite: 4.3.9(@types/node@18.16.17) + vite-node: 0.31.4(@types/node@18.16.17) + why-is-node-running: 2.2.2 transitivePeerDependencies: - less - sass @@ -22094,7 +22831,6 @@ packages: /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 dev: false @@ -22180,7 +22916,6 @@ packages: /webpack-bundle-analyzer@4.7.0: resolution: {integrity: sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==} engines: {node: '>= 10.13.0'} - hasBin: true dependencies: acorn: 8.8.2 acorn-walk: 8.2.0 @@ -22320,8 +23055,8 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.2 - acorn-import-assertions: 1.9.0(acorn@8.8.2) + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) browserslist: 4.21.5 chrome-trace-event: 1.0.3 enhanced-resolve: 5.14.1 @@ -22356,6 +23091,11 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} + /well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + dev: true + /whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: @@ -22452,25 +23192,30 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} - hasBin: true dependencies: isexe: 2.0.0 /which@3.0.1: resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true dependencies: isexe: 2.0.0 dev: true + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -22749,10 +23494,14 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} - hasBin: true dependencies: lodash.get: 4.4.2 lodash.isequal: 4.5.0