diff --git a/ts/.yarn/install-state.gz b/ts/.yarn/install-state.gz index 68ef70b..88999f3 100644 Binary files a/ts/.yarn/install-state.gz and b/ts/.yarn/install-state.gz differ diff --git a/ts/package.json b/ts/package.json index 49463b8..fd99e75 100644 --- a/ts/package.json +++ b/ts/package.json @@ -2,14 +2,24 @@ "name": "backend", "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728", "scripts": { - "barrels": "barrelsby -c barrelsby.json --delete" + "barrels": "barrelsby -c barrelsby.json --delete", + "test": "vitest", + "test:ui": "vitest --ui", + "test:coverage": "vitest --coverage", + "test:typecheck": "vitest typecheck", + "typecheck": "tsc --noEmit" }, "devDependencies": { + "@types/node": "^22.13.4", "@types/object-hash": "^3", + "@vitest/runner": "^3.2.3", + "@vitest/ui": "^3.2.3", "barrelsby": "^2.8.1", + "happy-dom": "^18.0.1", "knip": "^5.45.0", "rollup": "^4.34.8", - "typescript": "5.7.3" + "typescript": "5.7.3", + "vitest": "^3.2.3" }, "dependencies": { "@discordeno/types": "^21.0.0", @@ -21,7 +31,6 @@ "@temporalio/workflow": "^1.11.7", "@ts-rest/core": "https://gitpkg.vercel.app/aidant/ts-rest/libs/ts-rest/core?feat-standard-schema", "@ts-rest/fastify": "https://gitpkg.vercel.app/aidant/ts-rest/libs/ts-rest/fastify?feat-standard-schema", - "@types/node": "^22.13.4", "any-date-parser": "^2.0.3", "arktype": "2.1.1", "axios": "^1.7.9", diff --git a/ts/src/discord/botevent/command_parser.spec.ts b/ts/src/discord/botevent/command_parser.spec.ts new file mode 100644 index 0000000..e8cf821 --- /dev/null +++ b/ts/src/discord/botevent/command_parser.spec.ts @@ -0,0 +1,428 @@ +import { describe, it, expect, vi } from 'vitest' +import { ApplicationCommandOptionTypes, ApplicationCommandTypes, CreateApplicationCommand } from '@discordeno/types' +import { createCommandHandler, ExtractCommands } from './command_parser' +import type { InteractionData } from '..' + +// Test command definitions +const TEST_COMMANDS = [ + { + name: 'simple', + description: 'A simple command', + type: ApplicationCommandTypes.ChatInput, + options: [ + { + name: 'message', + description: 'A message to echo', + type: ApplicationCommandOptionTypes.String, + required: true, + }, + { + name: 'count', + description: 'Number of times', + type: ApplicationCommandOptionTypes.Integer, + required: false, + }, + ], + }, + { + name: 'complex', + description: 'A command with subcommands', + type: ApplicationCommandTypes.ChatInput, + options: [ + { + name: 'list', + description: 'List items', + type: ApplicationCommandOptionTypes.SubCommand, + options: [ + { + name: 'filter', + description: 'Filter string', + type: ApplicationCommandOptionTypes.String, + required: false, + }, + ], + }, + { + name: 'create', + description: 'Create item', + type: ApplicationCommandOptionTypes.SubCommand, + options: [ + { + name: 'name', + description: 'Item name', + type: ApplicationCommandOptionTypes.String, + required: true, + }, + { + name: 'enabled', + description: 'Is enabled', + type: ApplicationCommandOptionTypes.Boolean, + required: false, + }, + ], + }, + ], + }, +] as const satisfies CreateApplicationCommand[] + +describe('createCommandHandler', () => { + it('should handle a simple command with required string argument', async () => { + const simpleHandler = vi.fn() + const notFoundHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: simpleHandler, + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler, + }) + + const interactionData: InteractionData = { + name: 'simple', + options: [ + { name: 'message', type: ApplicationCommandOptionTypes.String, value: 'Hello world' }, + ], + } + + await handler(interactionData) + + expect(simpleHandler).toHaveBeenCalledWith({ message: 'Hello world' }) + expect(notFoundHandler).not.toHaveBeenCalled() + }) + + it('should handle a simple command with optional arguments', async () => { + const simpleHandler = vi.fn() + const notFoundHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: simpleHandler, + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler, + }) + + const interactionData: InteractionData = { + name: 'simple', + options: [ + { name: 'message', type: ApplicationCommandOptionTypes.String, value: 'Hello' }, + { name: 'count', type: ApplicationCommandOptionTypes.Integer, value: 5 }, + ], + } + + await handler(interactionData) + + expect(simpleHandler).toHaveBeenCalledWith({ message: 'Hello', count: 5 }) + }) + + it('should handle subcommands correctly', async () => { + const listHandler = vi.fn() + const createHandler = vi.fn() + const notFoundHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: vi.fn(), + complex: { + list: listHandler, + create: createHandler, + }, + }, + notFoundHandler, + }) + + const interactionData: InteractionData = { + name: 'complex', + options: [ + { + name: 'create', + type: ApplicationCommandOptionTypes.SubCommand, + options: [ + { name: 'name', type: ApplicationCommandOptionTypes.String, value: 'Test Item' }, + { name: 'enabled', type: ApplicationCommandOptionTypes.Boolean, value: true }, + ], + }, + ], + } + + await handler(interactionData) + + expect(createHandler).toHaveBeenCalledWith({ name: 'Test Item', enabled: true }) + expect(listHandler).not.toHaveBeenCalled() + expect(notFoundHandler).not.toHaveBeenCalled() + }) + + it('should call notFoundHandler for unknown commands', async () => { + const notFoundHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: vi.fn(), + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler, + }) + + const interactionData: InteractionData = { + name: 'unknown', + options: [], + } + + await handler(interactionData) + + expect(notFoundHandler).toHaveBeenCalledWith({}) + }) + + it('should call notFoundHandler for unknown subcommands', async () => { + const notFoundHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: vi.fn(), + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler, + }) + + const interactionData: InteractionData = { + name: 'complex', + options: [ + { + name: 'unknown', + type: ApplicationCommandOptionTypes.SubCommand, + options: [], + }, + ], + } + + await handler(interactionData) + + expect(notFoundHandler).toHaveBeenCalledWith({}) + }) + + it('should handle missing interaction data', async () => { + const notFoundHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: vi.fn(), + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler, + }) + + await handler(null as any) + expect(notFoundHandler).toHaveBeenCalledWith({}) + + await handler({} as any) + expect(notFoundHandler).toHaveBeenCalledTimes(2) + }) + + it('should handle commands without options', async () => { + const simpleHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: simpleHandler, + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler: vi.fn(), + }) + + const interactionData: InteractionData = { + name: 'simple', + // No options provided + } + + await handler(interactionData) + + expect(simpleHandler).toHaveBeenCalledWith({}) + }) + + it('should ignore subcommand options when parsing top-level args', async () => { + const simpleHandler = vi.fn() + + const handler = createCommandHandler({ + handler: { + simple: simpleHandler, + complex: { + list: vi.fn(), + create: vi.fn(), + }, + }, + notFoundHandler: vi.fn(), + }) + + const interactionData: InteractionData = { + name: 'simple', + options: [ + { name: 'message', type: ApplicationCommandOptionTypes.String, value: 'Hello' }, + // This should be ignored in parseOptions + { name: 'subcommand', type: ApplicationCommandOptionTypes.SubCommand, options: [] }, + ], + } + + await handler(interactionData) + + expect(simpleHandler).toHaveBeenCalledWith({ message: 'Hello' }) + }) +}) + +describe('ExtractCommands type utility', () => { + it('should correctly extract command types', () => { + // Type tests - these compile-time checks ensure the types work correctly + type TestHandlers = ExtractCommands + + // Test that the type structure is correct + const handlers: TestHandlers = { + simple: async (args) => { + // TypeScript should know that args has message as required string and count as optional number + const message: string = args.message + const count: number | undefined = args.count + expect(message).toBeDefined() + expect(count).toBeDefined() + }, + complex: { + list: async (args) => { + // TypeScript should know that args has filter as optional string + const filter: string | undefined = args.filter + expect(filter).toBeDefined() + }, + create: async (args) => { + // TypeScript should know that args has name as required string and enabled as optional boolean + const name: string = args.name + const enabled: boolean | undefined = args.enabled + expect(name).toBeDefined() + expect(enabled).toBeDefined() + }, + }, + } + + // This is just to satisfy TypeScript - the real test is that the above compiles + expect(handlers).toBeDefined() + }) + + it('should infer types correctly without manual typing', () => { + // This test verifies that args are inferred correctly without manual type annotations + const handler = createCommandHandler({ + notFoundHandler: async () => {}, + handler: { + simple: async (args) => { + // args should be automatically typed + // This would error if args.message wasn't a string + const upper = args.message.toUpperCase() + // This would error if args.count wasn't number | undefined + const doubled = args.count ? args.count * 2 : 0 + expect(upper).toBeDefined() + expect(doubled).toBeDefined() + }, + complex: { + list: async (args) => { + // This would error if args.filter wasn't string | undefined + const filtered = args.filter?.toLowerCase() + expect(filtered !== undefined).toBeDefined() + }, + create: async (args) => { + // This would error if types weren't correct + const nameLength = args.name.length + const isEnabled = args.enabled === true + expect(nameLength).toBeDefined() + expect(isEnabled).toBeDefined() + }, + }, + }, + }) + + expect(handler).toBeDefined() + }) + + it('should handle commands with no options', () => { + const EMPTY_COMMANDS = [ + { + name: 'ping', + description: 'Ping command', + type: ApplicationCommandTypes.ChatInput, + }, + ] as const satisfies CreateApplicationCommand[] + + type EmptyHandlers = ExtractCommands + + const handlers: EmptyHandlers = { + ping: async (args) => { + // args should be an empty object + expect(args).toEqual({}) + }, + } + + expect(handlers).toBeDefined() + }) + + it('should handle different option types', () => { + const TYPE_TEST_COMMANDS = [ + { + name: 'types', + description: 'Test different types', + type: ApplicationCommandTypes.ChatInput, + options: [ + { name: 'str', description: 'String param', type: ApplicationCommandOptionTypes.String, required: true }, + { name: 'int', description: 'Integer param', type: ApplicationCommandOptionTypes.Integer, required: true }, + { name: 'bool', description: 'Boolean param', type: ApplicationCommandOptionTypes.Boolean, required: true }, + { name: 'user', description: 'User param', type: ApplicationCommandOptionTypes.User, required: true }, + { name: 'channel', description: 'Channel param', type: ApplicationCommandOptionTypes.Channel, required: true }, + { name: 'role', description: 'Role param', type: ApplicationCommandOptionTypes.Role, required: true }, + { name: 'num', description: 'Number param', type: ApplicationCommandOptionTypes.Number, required: true }, + { name: 'mention', description: 'Mentionable param', type: ApplicationCommandOptionTypes.Mentionable, required: true }, + { name: 'attach', description: 'Attachment param', type: ApplicationCommandOptionTypes.Attachment, required: true }, + ], + }, + ] as const satisfies CreateApplicationCommand[] + + type TypeHandlers = ExtractCommands + + const handlers: TypeHandlers = { + types: async (args) => { + // Test that all types are correctly mapped + const str: string = args.str + const int: number = args.int + const bool: boolean = args.bool + const user: string = args.user + const channel: string = args.channel + const role: string = args.role + const num: number = args.num + const mention: string = args.mention + const attach: string = args.attach + + expect(str).toBeDefined() + expect(int).toBeDefined() + expect(bool).toBeDefined() + expect(user).toBeDefined() + expect(channel).toBeDefined() + expect(role).toBeDefined() + expect(num).toBeDefined() + expect(mention).toBeDefined() + expect(attach).toBeDefined() + }, + } + + expect(handlers).toBeDefined() + }) +}) \ No newline at end of file diff --git a/ts/src/discord/botevent/command_parser.ts b/ts/src/discord/botevent/command_parser.ts index 38cc16a..61f7765 100644 --- a/ts/src/discord/botevent/command_parser.ts +++ b/ts/src/discord/botevent/command_parser.ts @@ -15,51 +15,77 @@ type OptionTypeMap = { [ApplicationCommandOptionTypes.Attachment]: string; // attachment ID }; -// Extract the argument types from command options -type ExtractArgs = { - [K in Options[number] as K extends { name: infer N; type: infer T } - ? T extends keyof OptionTypeMap - ? N extends string - ? N - : never +// Helper type to get option by name +type GetOption = Options extends readonly any[] + ? Options[number] extends infer O + ? O extends { name: Name } + ? O : never - : never]: Options[number] extends { name: K; type: infer T; required?: infer R } - ? T extends keyof OptionTypeMap - ? R extends true - ? OptionTypeMap[T] - : OptionTypeMap[T] | undefined - : never - : never; + : never + : never; + +// Extract the argument types from command options +export type ExtractArgs = { + [K in Options[number]['name']]: GetOption extends { type: infer T; required?: infer R } + ? T extends keyof OptionTypeMap + ? R extends true + ? OptionTypeMap[T] + : OptionTypeMap[T] | undefined + : never + : never; }; // Handler function type that accepts typed arguments type HandlerFunction = (args: Args) => Promise | void; -// Helper types to extract command structure with proper argument types -type ExtractSubcommands = T extends { options: infer O } - ? O extends readonly any[] - ? { - [K in O[number] as K extends { name: infer N; type: ApplicationCommandOptionTypes.SubCommand | ApplicationCommandOptionTypes.SubCommandGroup } - ? N extends string - ? N - : never - : never]: O[number] extends { name: K; options?: infer SubO } - ? SubO extends readonly any[] - ? HandlerFunction> - : HandlerFunction<{}> - : HandlerFunction<{}> - } +// Get subcommand by name +type GetSubcommand = Options extends readonly any[] + ? Options[number] extends infer O + ? O extends { name: Name; type: ApplicationCommandOptionTypes.SubCommand } + ? O + : never : never : never; -type ExtractCommands = { - [K in T[number] as K['name']]: ExtractSubcommands extends never - ? T[number] extends { name: K; options?: infer O } - ? O extends readonly any[] - ? HandlerFunction> - : HandlerFunction<{}> +// Check if all options are subcommands +type HasOnlySubcommands = + Options[number] extends { type: ApplicationCommandOptionTypes.SubCommand } + ? true + : false; + +// Extract subcommand names from options +type SubcommandNames = + Options[number] extends { name: infer N; type: ApplicationCommandOptionTypes.SubCommand } + ? N extends string + ? N + : never + : never; + +// Type to extract subcommand handlers +export type SubcommandHandlers = { + [K in SubcommandNames]: GetSubcommand extends { options?: infer SubOpts } + ? SubOpts extends readonly any[] + ? HandlerFunction> : HandlerFunction<{}> - : ExtractSubcommands + : HandlerFunction<{}> +}; + +// Get command by name from array +type GetCommand = Commands[number] extends infer C + ? C extends { name: Name } + ? C + : never + : never; + +// Main type to extract command handlers from slash commands +export type ExtractCommands = { + [Name in T[number]['name']]: GetCommand extends { options?: infer Options } + ? Options extends readonly any[] + ? HasOnlySubcommands extends true + ? SubcommandHandlers + : HandlerFunction> + : HandlerFunction<{}> + : HandlerFunction<{}> }; // The actual command handler type based on SLASH_COMMANDS @@ -128,62 +154,8 @@ export function createCommandHandler)(args); } } } -// Function to validate that all commands are implemented -export function validateCommandImplementation(handlers: CommandHandlers): void { - for (const command of SLASH_COMMANDS) { - const commandName = command.name; - if (!(commandName in handlers)) { - throw new Error(`Command "${commandName}" is not implemented`); - } - - // Check subcommands if they exist - if (command.options) { - const subcommands = command.options.filter( - opt => opt.type === ApplicationCommandOptionTypes.SubCommand - ); - - if (subcommands.length > 0) { - const handlerObj = handlers[commandName as keyof CommandHandlers]; - if (typeof handlerObj === 'function') { - throw new Error(`Command "${commandName}" has subcommands but is implemented as a function`); - } - - for (const subcommand of subcommands) { - if (!(subcommand.name in handlerObj)) { - throw new Error(`Subcommand "${commandName}.${subcommand.name}" is not implemented`); - } - } - } - } - } -} - -// Helper function to create command handlers with type safety -export function createCommandHandlers(handlers: T): T { - return handlers; -} - -// Example usage showing the type-safe implementation -export const exampleHandlers = createCommandHandlers({ - guild: { - leaderboard: async (args: {}) => { - console.log("Guild leaderboard command"); - }, - info: async (args: {}) => { - console.log("Guild info command"); - }, - online: async (args: {}) => { - console.log("Guild online command"); - }, - }, - admin: { - set_wynn_guild: async (args: {}) => { - console.log("Admin set_wynn_guild command"); - }, - }, -}); diff --git a/ts/src/discord/botevent/slash_commands.ts b/ts/src/discord/botevent/slash_commands.ts index ec3c9d7..c7b8068 100644 --- a/ts/src/discord/botevent/slash_commands.ts +++ b/ts/src/discord/botevent/slash_commands.ts @@ -37,5 +37,24 @@ export const SLASH_COMMANDS = [ type: ApplicationCommandOptionTypes.SubCommand, }, ], + },{ + name: "player", + description: "player commands", + type: ApplicationCommandTypes.ChatInput, + options: [ + { + name: "lookup", + description: "view player information", + type: ApplicationCommandOptionTypes.SubCommand, + options: [ + { + name: "player", + description: "player name", + type: ApplicationCommandOptionTypes.String, + required: true, + }, + ], + } + ], } ] as const satisfies CreateApplicationCommand[] diff --git a/ts/src/workflows/discord.ts b/ts/src/workflows/discord.ts index 9d63dc3..b43e5d2 100644 --- a/ts/src/workflows/discord.ts +++ b/ts/src/workflows/discord.ts @@ -2,6 +2,7 @@ import { proxyActivities, startChild, workflowInfo } from '@temporalio/workflow' import type * as activities from '#/activities'; import { InteractionTypes } from '@discordeno/types'; import { handleCommandGuildInfo, handleCommandGuildOnline, handleCommandGuildLeaderboard } from './guild_messages'; +import { handleCommandPlayerLookup } from './player_messages'; import { createCommandHandler } from '#/discord/botevent/command_parser'; import { SLASH_COMMANDS } from '#/discord/botevent/slash_commands'; import { InteractionCreatePayload} from '#/discord'; @@ -34,9 +35,19 @@ const workflowHandleApplicationCommand = async ( notFoundHandler: async () => { await notFoundHandler(`command not found`); }, - handler:{ + handler: { + player: { + lookup: async (args) => { + const { workflowId } = workflowInfo(); + const handle = await startChild(handleCommandPlayerLookup, { + args: [{ ref, args }], + workflowId: `${workflowId}-player-lookup`, + }); + await handle.result(); + }, + }, guild: { - info: async (args: {}) => { + info: async (args) => { const { workflowId } = workflowInfo(); const handle = await startChild(handleCommandGuildInfo, { args: [{ ref }], @@ -44,7 +55,7 @@ const workflowHandleApplicationCommand = async ( }); await handle.result(); }, - online: async (args: {}) => { + online: async (args) => { const { workflowId } = workflowInfo(); const handle = await startChild(handleCommandGuildOnline, { args: [{ ref }], @@ -52,7 +63,7 @@ const workflowHandleApplicationCommand = async ( }); await handle.result(); }, - leaderboard: async (args: {}) => { + leaderboard: async (args) => { const { workflowId } = workflowInfo(); const handle = await startChild(handleCommandGuildLeaderboard, { args: [{ ref }], @@ -62,7 +73,7 @@ const workflowHandleApplicationCommand = async ( }, }, admin: { - set_wynn_guild: async (args: {}) => { + set_wynn_guild: async (args) => { await reply_to_interaction({ ref, type: 4, diff --git a/ts/src/workflows/index.ts b/ts/src/workflows/index.ts index c6a7c03..91e4a1d 100644 --- a/ts/src/workflows/index.ts +++ b/ts/src/workflows/index.ts @@ -6,4 +6,5 @@ export * from "./discord"; export * from "./guild_messages"; export * from "./guilds"; export * from "./items"; +export * from "./player_messages"; export * from "./players"; diff --git a/ts/src/workflows/player_messages.ts b/ts/src/workflows/player_messages.ts new file mode 100644 index 0000000..413bc4b --- /dev/null +++ b/ts/src/workflows/player_messages.ts @@ -0,0 +1,43 @@ +import { proxyActivities } from "@temporalio/workflow"; +import type * as activities from "#/activities"; +import { InteractionRef } from "#/discord"; + +const { + reply_to_interaction +} = proxyActivities({ + startToCloseTimeout: '30 seconds', +}); + +interface CommandPayload { + ref: InteractionRef; + args: { + player: string; + }; +} + +export async function handleCommandPlayerLookup(payload: CommandPayload): Promise { + const { ref, args } = payload; + const playerName = args.player; + + try { + // For now, we'll send a simple response + // In the future, we can fetch player stats from Wynncraft API + await reply_to_interaction({ + ref, + type: 4, + options: { + content: `Looking up player: **${playerName}**\n\n*Player lookup functionality coming soon!*`, + isPrivate: false, + }, + }); + } catch (error) { + await reply_to_interaction({ + ref, + type: 4, + options: { + content: `Error looking up player: ${playerName}`, + isPrivate: true, + }, + }); + } +} \ No newline at end of file diff --git a/ts/vitest.config.ts b/ts/vitest.config.ts new file mode 100644 index 0000000..32ff356 --- /dev/null +++ b/ts/vitest.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + globals: true, + include: ['**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + typecheck: { + enabled: true, + tsconfig: './tsconfig.json', + include: ['**/*.{test,spec}.{ts,tsx}'], + }, + }, + resolve: { + alias: { + '#': new URL('./src', import.meta.url).pathname, + }, + }, +}) diff --git a/ts/yarn.lock b/ts/yarn.lock index 65b5556..a0c7144 100644 --- a/ts/yarn.lock +++ b/ts/yarn.lock @@ -90,6 +90,181 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/aix-ppc64@npm:0.25.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-arm64@npm:0.25.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-arm@npm:0.25.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-x64@npm:0.25.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/darwin-arm64@npm:0.25.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/darwin-x64@npm:0.25.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/freebsd-arm64@npm:0.25.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/freebsd-x64@npm:0.25.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-arm64@npm:0.25.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-arm@npm:0.25.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-ia32@npm:0.25.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-loong64@npm:0.25.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-mips64el@npm:0.25.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-ppc64@npm:0.25.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-riscv64@npm:0.25.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-s390x@npm:0.25.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-x64@npm:0.25.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/netbsd-arm64@npm:0.25.5" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/netbsd-x64@npm:0.25.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/openbsd-arm64@npm:0.25.5" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/openbsd-x64@npm:0.25.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/sunos-x64@npm:0.25.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-arm64@npm:0.25.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-ia32@npm:0.25.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-x64@npm:0.25.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@grpc/grpc-js@npm:^1.10.7": version: 1.12.6 resolution: "@grpc/grpc-js@npm:1.12.6" @@ -179,7 +354,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 @@ -358,6 +533,13 @@ __metadata: languageName: node linkType: hard +"@polka/url@npm:^1.0.0-next.24": + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 10c0/0d58e081844095cb029d3c19a659bfefd09d5d51a2f791bc61eba7ea826f13d6ee204a8a448c2f5a855c17df07b37517373ff916dd05801063c0568ae9937684 + languageName: node + linkType: hard + "@poppinss/exception@npm:^1.2.0": version: 1.2.0 resolution: "@poppinss/exception@npm:1.2.0" @@ -482,6 +664,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.43.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-android-arm64@npm:4.34.8" @@ -489,6 +678,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-android-arm64@npm:4.43.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-darwin-arm64@npm:4.34.8" @@ -496,6 +692,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.43.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-darwin-x64@npm:4.34.8" @@ -503,6 +706,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.43.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-arm64@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-freebsd-arm64@npm:4.34.8" @@ -510,6 +720,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.43.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-x64@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-freebsd-x64@npm:4.34.8" @@ -517,6 +734,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-x64@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.43.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.8" @@ -524,6 +748,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.43.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.34.8" @@ -531,6 +762,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.43.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.34.8" @@ -538,6 +776,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.43.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.34.8" @@ -545,6 +790,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.43.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.8" @@ -552,6 +804,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-loongarch64-gnu@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.43.0" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.8" @@ -559,6 +818,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.43.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.34.8" @@ -566,6 +832,20 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.43.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.43.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.34.8" @@ -573,6 +853,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.43.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.34.8" @@ -580,6 +867,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.43.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-linux-x64-musl@npm:4.34.8" @@ -587,6 +881,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.43.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.34.8" @@ -594,6 +895,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.43.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.34.8" @@ -601,6 +909,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.43.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.34.8": version: 4.34.8 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.34.8" @@ -608,6 +923,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.43.0": + version: 4.43.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.43.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@snyk/github-codeowners@npm:1.1.0": version: 1.1.0 resolution: "@snyk/github-codeowners@npm:1.1.0" @@ -877,6 +1199,22 @@ __metadata: languageName: node linkType: hard +"@types/chai@npm:^5.2.2": + version: 5.2.2 + resolution: "@types/chai@npm:5.2.2" + dependencies: + "@types/deep-eql": "npm:*" + checksum: 10c0/49282bf0e8246800ebb36f17256f97bd3a8c4fb31f92ad3c0eaa7623518d7e87f1eaad4ad206960fcaf7175854bdff4cb167e4fe96811e0081b4ada83dd533ec + languageName: node + linkType: hard + +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + languageName: node + linkType: hard + "@types/eslint-scope@npm:^3.7.7": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" @@ -904,6 +1242,20 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.7": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -920,6 +1272,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^20.0.0": + version: 20.19.0 + resolution: "@types/node@npm:20.19.0" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/11979f5c4c626555351352fe1b30846700ca018747272a7ff425f883f102805b7f07737d5b7fa3c6deb0ddaeb94e367bb9a633a3d1e1d5c517de9a6283c6f21c + languageName: node + linkType: hard + "@types/object-hash@npm:^3": version: 3.0.6 resolution: "@types/object-hash@npm:3.0.6" @@ -934,6 +1295,13 @@ __metadata: languageName: node linkType: hard +"@types/whatwg-mimetype@npm:^3.0.2": + version: 3.0.2 + resolution: "@types/whatwg-mimetype@npm:3.0.2" + checksum: 10c0/dad39d1e4abe760a0a963c84bbdbd26b1df0eb68aff83bdf6ecbb50ad781ead777f6906d19a87007790b750f7500a12e5624d31fc6a1529d14bd19b5c3a316d1 + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -950,6 +1318,106 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:3.2.3": + version: 3.2.3 + resolution: "@vitest/expect@npm:3.2.3" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.3" + "@vitest/utils": "npm:3.2.3" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/5eb6278be8f5294779472d1276e150a1b573274441a68c2681c447179abd22af451813fdfbe87e04f5909ca7a0926700f9b79022f227c9816e5d0fa8e0229e15 + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.3": + version: 3.2.3 + resolution: "@vitest/mocker@npm:3.2.3" + dependencies: + "@vitest/spy": "npm:3.2.3" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/b670f229c3b1de5561de3cbbecb18f964d4888355d7f1cb8bbff4350b2cfbe477bef834cc2f66af7727ca7dc567540018885eb652f46e0be1cda4015491dc0a9 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.3, @vitest/pretty-format@npm:^3.2.3": + version: 3.2.3 + resolution: "@vitest/pretty-format@npm:3.2.3" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/e8fa7b97822c58404bef07d19fa9a49d5b7edb6797dd355584ad7246585bbbe9c55dd1fb05d0c3939b9c15fba05c3e134e2b96ea0cb64ca79a2b9dab60087a6a + languageName: node + linkType: hard + +"@vitest/runner@npm:3.2.3, @vitest/runner@npm:^3.2.3": + version: 3.2.3 + resolution: "@vitest/runner@npm:3.2.3" + dependencies: + "@vitest/utils": "npm:3.2.3" + pathe: "npm:^2.0.3" + strip-literal: "npm:^3.0.0" + checksum: 10c0/c20cb6e2ac4fdfb3d4f5136714ea65f9063562d3afaa1574dc82f53d061444bc01583f9915346768ca75f5ea0658f02fb594752e21abbca5ab50290f58732147 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.2.3": + version: 3.2.3 + resolution: "@vitest/snapshot@npm:3.2.3" + dependencies: + "@vitest/pretty-format": "npm:3.2.3" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/f6dd0248afb3f3cbcbbb9fd39c2c8273c4ec92176f65e6ba9d36a0c33552d3658013e3a02944e14c7637f51d6702a5c07963b59707ca459bd1ac31f39c81160c + languageName: node + linkType: hard + +"@vitest/spy@npm:3.2.3": + version: 3.2.3 + resolution: "@vitest/spy@npm:3.2.3" + dependencies: + tinyspy: "npm:^4.0.3" + checksum: 10c0/ce77d5934ac4741513993aad9d8ff44ff03ff5cf5a177e010c7ffcd8d3060087e56df1938c1100d49de712daf952cd2c72dd83e1684d043e698bd2afe0025f5e + languageName: node + linkType: hard + +"@vitest/ui@npm:^3.2.3": + version: 3.2.3 + resolution: "@vitest/ui@npm:3.2.3" + dependencies: + "@vitest/utils": "npm:3.2.3" + fflate: "npm:^0.8.2" + flatted: "npm:^3.3.3" + pathe: "npm:^2.0.3" + sirv: "npm:^3.0.1" + tinyglobby: "npm:^0.2.14" + tinyrainbow: "npm:^2.0.0" + peerDependencies: + vitest: 3.2.3 + checksum: 10c0/86802535d9eae28bfc407be42451e74d0ea238eddd8c69145338412682c2ba7ee3ee96192f45fcc98561aaecf5c845c2b0bb669c9e77b0c6b1d3e598be7064a9 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.2.3": + version: 3.2.3 + resolution: "@vitest/utils@npm:3.2.3" + dependencies: + "@vitest/pretty-format": "npm:3.2.3" + loupe: "npm:^3.1.3" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/c7a785a73bc0d7c0202ced0d9912639b9deb6f05dd6c25700a13d97e13320ccec57660f11ad1f9225419ac485339fdf7af28c8d77456bcb9558e6c7d73ad538a + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": version: 1.14.1 resolution: "@webassemblyjs/ast@npm:1.14.1" @@ -1264,6 +1732,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + "async-mutex@npm:^0.5.0": version: 0.5.0 resolution: "async-mutex@npm:0.5.0" @@ -1335,6 +1810,8 @@ __metadata: "@ts-rest/fastify": "https://gitpkg.vercel.app/aidant/ts-rest/libs/ts-rest/fastify?feat-standard-schema" "@types/node": "npm:^22.13.4" "@types/object-hash": "npm:^3" + "@vitest/runner": "npm:^3.2.3" + "@vitest/ui": "npm:^3.2.3" any-date-parser: "npm:^2.0.3" arktype: "npm:2.1.1" axios: "npm:^1.7.9" @@ -1346,6 +1823,7 @@ __metadata: cloudevents: "npm:^8.0.2" discordeno: "npm:^21.0.0" dotenv: "npm:^16.4.7" + happy-dom: "npm:^18.0.1" hash-wasm: "npm:^4.12.0" ioredis: "npm:^5.5.0" json-stable-stringify: "npm:^1.2.1" @@ -1359,6 +1837,7 @@ __metadata: superjson: "npm:^2.2.2" ts-markdown-builder: "npm:^0.4.0" typescript: "npm:5.7.3" + vitest: "npm:^3.2.3" why-is-node-running: "npm:^3.2.2" znv: "npm:^0.4.0" zod: "npm:^3.24.1" @@ -1487,6 +1966,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -1576,6 +2062,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.2.0": + version: 5.2.0 + resolution: "chai@npm:5.2.0" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/dfd1cb719c7cebb051b727672d382a35338af1470065cb12adb01f4ee451bbf528e0e0f9ab2016af5fc1eea4df6e7f4504dc8443f8f00bd8fb87ad32dc516f7d + languageName: node + linkType: hard + "chalk@npm:^2.3.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -1587,6 +2086,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e + languageName: node + linkType: hard + "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -1789,6 +2295,25 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.4.1": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + "defaults@npm:^1.0.3": version: 1.0.4 resolution: "defaults@npm:1.0.4" @@ -1967,6 +2492,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -1988,6 +2520,92 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.25.0": + version: 0.25.5 + resolution: "esbuild@npm:0.25.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.5" + "@esbuild/android-arm": "npm:0.25.5" + "@esbuild/android-arm64": "npm:0.25.5" + "@esbuild/android-x64": "npm:0.25.5" + "@esbuild/darwin-arm64": "npm:0.25.5" + "@esbuild/darwin-x64": "npm:0.25.5" + "@esbuild/freebsd-arm64": "npm:0.25.5" + "@esbuild/freebsd-x64": "npm:0.25.5" + "@esbuild/linux-arm": "npm:0.25.5" + "@esbuild/linux-arm64": "npm:0.25.5" + "@esbuild/linux-ia32": "npm:0.25.5" + "@esbuild/linux-loong64": "npm:0.25.5" + "@esbuild/linux-mips64el": "npm:0.25.5" + "@esbuild/linux-ppc64": "npm:0.25.5" + "@esbuild/linux-riscv64": "npm:0.25.5" + "@esbuild/linux-s390x": "npm:0.25.5" + "@esbuild/linux-x64": "npm:0.25.5" + "@esbuild/netbsd-arm64": "npm:0.25.5" + "@esbuild/netbsd-x64": "npm:0.25.5" + "@esbuild/openbsd-arm64": "npm:0.25.5" + "@esbuild/openbsd-x64": "npm:0.25.5" + "@esbuild/sunos-x64": "npm:0.25.5" + "@esbuild/win32-arm64": "npm:0.25.5" + "@esbuild/win32-ia32": "npm:0.25.5" + "@esbuild/win32-x64": "npm:0.25.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/aba8cbc11927fa77562722ed5e95541ce2853f67ad7bdc40382b558abc2e0ec57d92ffb820f082ba2047b4ef9f3bc3da068cdebe30dfd3850cfa3827a78d604e + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -2035,6 +2653,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + "event-target-shim@npm:^5.0.0": version: 5.0.1 resolution: "event-target-shim@npm:5.0.1" @@ -2049,6 +2676,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.1": + version: 1.2.1 + resolution: "expect-type@npm:1.2.1" + checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -2120,6 +2754,25 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.4, fdir@npm:^6.4.5": + version: 6.4.6 + resolution: "fdir@npm:6.4.6" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 + languageName: node + linkType: hard + +"fflate@npm:^0.8.2": + version: 0.8.2 + resolution: "fflate@npm:0.8.2" + checksum: 10c0/03448d630c0a583abea594835a9fdb2aaf7d67787055a761515bf4ed862913cfd693b4c4ffd5c3f3b355a70cf1e19033e9ae5aedcca103188aaff91b8bd6e293 + languageName: node + linkType: hard + "figures@npm:^2.0.0": version: 2.0.0 resolution: "figures@npm:2.0.0" @@ -2147,6 +2800,13 @@ __metadata: languageName: node linkType: hard +"flatted@npm:^3.3.3": + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 + languageName: node + linkType: hard + "flattie@npm:^1.1.1": version: 1.1.1 resolution: "flattie@npm:1.1.1" @@ -2211,7 +2871,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2": +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -2221,7 +2881,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -2325,6 +2985,17 @@ __metadata: languageName: node linkType: hard +"happy-dom@npm:^18.0.1": + version: 18.0.1 + resolution: "happy-dom@npm:18.0.1" + dependencies: + "@types/node": "npm:^20.0.0" + "@types/whatwg-mimetype": "npm:^3.0.2" + whatwg-mimetype: "npm:^3.0.0" + checksum: 10c0/10f2115f5001fdaf1aedcbda89c15248a1c2e43a25d7e774cb641a35bf6763cef9097b438ef3c2248ab59a0ef33b3e88cb94da096f2bb0fc109ba3f43f7c66d4 + languageName: node + linkType: hard + "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -2654,6 +3325,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -2821,6 +3499,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.3": + version: 3.1.3 + resolution: "loupe@npm:3.1.3" + checksum: 10c0/f5dab4144254677de83a35285be1b8aba58b3861439ce4ba65875d0d5f3445a4a496daef63100ccf02b2dbc25bf58c6db84c9cb0b96d6435331e9d0a33b48541 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -2835,6 +3520,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.17": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 + languageName: node + linkType: hard + "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -3015,6 +3709,13 @@ __metadata: languageName: node linkType: hard +"mrmime@npm:^2.0.0": + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 10c0/af05afd95af202fdd620422f976ad67dc18e6ee29beb03dd1ce950ea6ef664de378e44197246df4c7cdd73d47f2e7143a6e26e473084b9e4aa2095c0ad1e1761 + languageName: node + linkType: hard + "ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -3029,6 +3730,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + "negotiator@npm:^1.0.0": version: 1.0.0 resolution: "negotiator@npm:1.0.0" @@ -3214,6 +3924,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 + languageName: node + linkType: hard + "picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -3228,7 +3952,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.1": +"picomatch@npm:^4.0.1, picomatch@npm:^4.0.2": version: 4.0.2 resolution: "picomatch@npm:4.0.2" checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc @@ -3353,6 +4077,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.5.4": + version: 8.5.5 + resolution: "postcss@npm:8.5.5" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/6415873fab84de05c2d8fd18f72ea6654bca437bb4b9f02ca819c438501e4b3a450023e575e17587c6eaa5bedddaaa4dad3af210f5cf166e30cec09cac58baf8 + languageName: node + linkType: hard + "postgres@npm:^3.4.5": version: 3.4.5 resolution: "postgres@npm:3.4.5" @@ -3616,6 +4351,81 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.40.0": + version: 4.43.0 + resolution: "rollup@npm:4.43.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.43.0" + "@rollup/rollup-android-arm64": "npm:4.43.0" + "@rollup/rollup-darwin-arm64": "npm:4.43.0" + "@rollup/rollup-darwin-x64": "npm:4.43.0" + "@rollup/rollup-freebsd-arm64": "npm:4.43.0" + "@rollup/rollup-freebsd-x64": "npm:4.43.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.43.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.43.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.43.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.43.0" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.43.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.43.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.43.0" + "@rollup/rollup-linux-riscv64-musl": "npm:4.43.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.43.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.43.0" + "@rollup/rollup-linux-x64-musl": "npm:4.43.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.43.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.43.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.43.0" + "@types/estree": "npm:1.0.7" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/a14a16ee5433f9eddfe803ed1a3f4528e3e96f746e55bf88c5482f9a60a4ad61f507b59f46d5d9c8dc98bb7983483e0c94b760ae37c02157eba9da5665c1641b + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9, run-parallel@npm:^1.2.0": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -3740,6 +4550,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + "signal-exit@npm:^4.0.1": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -3758,6 +4575,17 @@ __metadata: languageName: node linkType: hard +"sirv@npm:^3.0.1": + version: 3.0.1 + resolution: "sirv@npm:3.0.1" + dependencies: + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10c0/7cf64b28daa69b15f77b38b0efdd02c007b72bb3ec5f107b208ebf59f01b174ef63a1db3aca16d2df925501831f4c209be6ece3302b98765919ef5088b45bf80 + languageName: node + linkType: hard + "slugify@npm:^1.6.6": version: 1.6.6 resolution: "slugify@npm:1.6.6" @@ -3818,7 +4646,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.0.2": +"source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf @@ -3893,6 +4721,13 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + "standard-as-callback@npm:^2.1.0": version: 2.1.0 resolution: "standard-as-callback@npm:2.1.0" @@ -3900,6 +4735,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.9.0": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -3970,6 +4812,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-literal@npm:3.0.0" + dependencies: + js-tokens: "npm:^9.0.1" + checksum: 10c0/d81657f84aba42d4bbaf2a677f7e7f34c1f3de5a6726db8bc1797f9c0b303ba54d4660383a74bde43df401cf37cce1dff2c842c55b077a4ceee11f9e31fba828 + languageName: node + linkType: hard + "summary@npm:2.1.0": version: 2.1.0 resolution: "summary@npm:2.1.0" @@ -4098,6 +4949,51 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.14": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 + languageName: node + linkType: hard + +"tinypool@npm:^1.1.0": + version: 1.1.0 + resolution: "tinypool@npm:1.1.0" + checksum: 10c0/deb6bde5e3d85d4ba043806c66f43fb5b649716312a47b52761a83668ffc71cd0ea4e24254c1b02a3702e5c27e02605f0189a1460f6284a5930a08bd0c06435c + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.3 + resolution: "tinyspy@npm:4.0.3" + checksum: 10c0/0a92a18b5350945cc8a1da3a22c9ad9f4e2945df80aaa0c43e1b3a3cfb64d8501e607ebf0305e048e3c3d3e0e7f8eb10cea27dc17c21effb73e66c4a3be36373 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -4107,6 +5003,13 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 10c0/4bb1fadb69c3edbef91c73ebef9d25b33bbf69afe1e37ce544d5f7d13854cda15e47132f3e0dc4cafe300ddb8578c77c50a65004d8b6e97e77934a69aa924863 + languageName: node + linkType: hard + "tree-dump@npm:^1.0.1": version: 1.0.2 resolution: "tree-dump@npm:1.0.2" @@ -4171,6 +5074,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + "unionfs@npm:^4.5.1": version: 4.5.4 resolution: "unionfs@npm:4.5.4" @@ -4243,6 +5153,132 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:3.2.3": + version: 3.2.3 + resolution: "vite-node@npm:3.2.3" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.1" + es-module-lexer: "npm:^1.7.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/b952b0d9e45662506ea7303ac87d08e02f1e3355777cf7d426f211292c4f87e8837aef589e552bb11404d1bc0a9bd18871ce6ba874b5f0bb171f8e010de20a11 + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": + version: 7.0.0-beta.1 + resolution: "vite@npm:7.0.0-beta.1" + dependencies: + esbuild: "npm:^0.25.0" + fdir: "npm:^6.4.5" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.2" + postcss: "npm:^8.5.4" + rollup: "npm:^4.40.0" + tinyglobby: "npm:^0.2.14" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/0ab20103182244b310fb2bb4a9f3fb21110a61328052e73accfebf3503270bddd1d19417c2d17bd93f1108125da5ffbc52a1f05c8bf3f564907919ffc64d3d78 + languageName: node + linkType: hard + +"vitest@npm:^3.2.3": + version: 3.2.3 + resolution: "vitest@npm:3.2.3" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/expect": "npm:3.2.3" + "@vitest/mocker": "npm:3.2.3" + "@vitest/pretty-format": "npm:^3.2.3" + "@vitest/runner": "npm:3.2.3" + "@vitest/snapshot": "npm:3.2.3" + "@vitest/spy": "npm:3.2.3" + "@vitest/utils": "npm:3.2.3" + chai: "npm:^5.2.0" + debug: "npm:^4.4.1" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.2" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.14" + tinypool: "npm:^1.1.0" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node: "npm:3.2.3" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.3 + "@vitest/ui": 3.2.3 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/1d853016622f32020e91cc72348d0dc642bde2ddcbd648655a9d33d420375c7cbd6f1a6f5c4398a5d4f59b8c2b120e62eba49fb37f8042e5d4c688b7e60148ef + languageName: node + linkType: hard + "watchpack@npm:^2.4.1": version: 2.4.2 resolution: "watchpack@npm:2.4.2" @@ -4305,6 +5341,13 @@ __metadata: languageName: node linkType: hard +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: 10c0/323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.2": version: 1.1.18 resolution: "which-typed-array@npm:1.1.18" @@ -4352,6 +5395,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + "why-is-node-running@npm:^3.2.2": version: 3.2.2 resolution: "why-is-node-running@npm:3.2.2"