From 59d08ef207c486ce1cf0aba267e6f862838e0dfb Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Mon, 13 Jan 2025 10:33:53 -0600 Subject: [PATCH] fix: remove rxjs (#376) * firstcommit * removerxjs * document-task * documentation+clean * fixregres * fix+regress * fix+regres+errorhandling --- package.json | 3 +- src/core/functions.ts | 17 +- src/core/ioc.ts | 2 +- src/core/modules.ts | 31 +- src/core/plugin.ts | 93 ++- src/handlers/event-utils.ts | 276 +------- src/handlers/interaction.ts | 78 +- src/handlers/message.ts | 56 +- src/handlers/presence.ts | 121 +++- src/handlers/ready.ts | 2 +- src/handlers/user-defined-events.ts | 64 +- src/index.ts | 2 +- src/sern.ts | 28 +- src/types/utility.ts | 10 +- test/core/presence.test.ts | 39 +- test/handlers.test.ts | 23 +- test/setup/setup-tests.ts | 8 + yarn.lock | 1019 ++++++++++++++------------- 18 files changed, 968 insertions(+), 904 deletions(-) diff --git a/package.json b/package.json index d9d8de32..6eace51a 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,7 @@ "@sern/ioc": "^1.1.0", "callsites": "^3.1.0", "cron": "^3.1.7", - "deepmerge": "^4.3.1", - "rxjs": "^7.8.0" + "deepmerge": "^4.3.1" }, "devDependencies": { "@faker-js/faker": "^8.0.1", diff --git a/src/core/functions.ts b/src/core/functions.ts index 1e65d385..da111917 100644 --- a/src/core/functions.ts +++ b/src/core/functions.ts @@ -11,7 +11,22 @@ import type { import { ApplicationCommandOptionType, InteractionType } from 'discord.js'; import { PluginType } from './structures/enums'; import assert from 'assert'; -import type { Payload } from '../types/utility'; +import type { Payload, UnpackedDependencies } from '../types/utility'; + +export const createSDT = (module: Module, deps: UnpackedDependencies, params: string|undefined) => { + return { + state: {}, + deps, + params, + type: module.type, + module: { + name: module.name, + description: module.description, + locals: module.locals, + meta: module.meta + } + } +} /** * Removes the first character(s) _[depending on prefix length]_ of the message diff --git a/src/core/ioc.ts b/src/core/ioc.ts index ebd4deaa..49d34e67 100644 --- a/src/core/ioc.ts +++ b/src/core/ioc.ts @@ -70,7 +70,7 @@ export async function makeDependencies (conf: ValidDependencyConfig) { } container.addSingleton('@sern/errors', new __Services.DefaultErrorHandling); container.addSingleton('@sern/modules', new Map); - container.addSingleton('@sern/emitter', new EventEmitter) + container.addSingleton('@sern/emitter', new EventEmitter({ captureRejections: true })) container.addSingleton('@sern/scheduler', new __Services.TaskScheduler) conf(dependencyBuilder(container)); await container.ready(); diff --git a/src/core/modules.ts b/src/core/modules.ts index 3aa93f66..1873cd69 100644 --- a/src/core/modules.ts +++ b/src/core/modules.ts @@ -102,5 +102,34 @@ export function discordEvent(mod: { return eventModule({ type: EventType.Discord, ...mod, }); } -export function scheduledTask(ism: ScheduledTask) { return ism } +/** + * Creates a scheduled task that can be executed at specified intervals using cron patterns + * + * @param {ScheduledTask} ism - The scheduled task configuration object + * @param {string} ism.trigger - A cron pattern that determines when the task should execute + * Format: "* * * * *" (minute hour day month day-of-week) + * @param {Function} ism.execute - The function to execute when the task is triggered + * @param {Object} ism.execute.context - The execution context passed to the task + * + * @returns {ScheduledTask} The configured scheduled task + * + * @example + * // Create a task that runs every minute + * export default scheduledTask({ + * trigger: "* * * * *", + * execute: (context) => { + * console.log("Task executed!"); + * } + * }); + * + * @remarks + * - Tasks must be placed in the 'tasks' directory specified in your config + * - The file name serves as a unique identifier for the task + * - Tasks can be cancelled using deps['@sern/scheduler'].kill(uuid) + * + * @see {@link https://crontab.guru/} for testing and creating cron patterns + */ +export function scheduledTask(ism: ScheduledTask): ScheduledTask { + return ism +} diff --git a/src/core/plugin.ts b/src/core/plugin.ts index 88c21db1..926204cf 100644 --- a/src/core/plugin.ts +++ b/src/core/plugin.ts @@ -15,16 +15,107 @@ export function makePlugin( export function EventInitPlugin(execute: (args: InitArgs) => PluginResult) { return makePlugin(PluginType.Init, execute); } + /** + * Creates an initialization plugin for command preprocessing and modification + * * @since 2.5.0 + * @template I - Extends CommandType to enforce type safety for command modules + * + * @param {function} execute - Function to execute during command initialization + * @param {InitArgs} execute.args - The initialization arguments + * @param {T} execute.args.module - The command module being initialized + * @param {string} execute.args.absPath - The absolute path to the module file + * @param {Dependencies} execute.args.deps - Dependency injection container + * + * @returns {Plugin} A plugin that runs during command initialization + * + * @example + * // Plugin to update command description + * export const updateDescription = (description: string) => { + * return CommandInitPlugin(({ deps }) => { + * if(description.length > 100) { + * deps.logger?.info({ message: "Invalid description" }) + * return controller.stop("From updateDescription: description is invalid"); + * } + * module.description = description; + * return controller.next(); + * }); + * }; + * + * @example + * // Plugin to store registration date in module locals + * export const dateRegistered = () => { + * return CommandInitPlugin(({ module }) => { + * module.locals.registered = Date.now() + * return controller.next(); + * }); + * }; + * + * @remarks + * - Init plugins can modify how commands are loaded and perform preprocessing + * - The module.locals object can be used to store custom plugin-specific data + * - Be careful when modifying module fields as multiple plugins may interact with them + * - Use controller.next() to continue to the next plugin + * - Use controller.stop(reason) to halt plugin execution */ export function CommandInitPlugin( execute: (args: InitArgs) => PluginResult -) { +): Plugin { return makePlugin(PluginType.Init, execute); } + /** + * Creates a control plugin for command preprocessing, filtering, and state management + * * @since 2.5.0 + * @template I - Extends CommandType to enforce type safety for command modules + * + * @param {function} execute - Function to execute during command control flow + * @param {CommandArgs} execute.args - The command arguments array + * @param {Context} execute.args[0] - The discord context (e.g., guild, channel, user info, interaction) + * @param {SDT} execute.args[1] - The State, Dependencies, Params, Module, and Type object + * + * @returns {Plugin} A plugin that runs during command execution flow + * + * @example + * // Plugin to restrict command to specific guild + * export const inGuild = (guildId: string) => { + * return CommandControlPlugin((ctx, sdt) => { + * if(ctx.guild.id !== guildId) { + * return controller.stop(); + * } + * return controller.next(); + * }); + * }; + * + * @example + * // Plugins passing state through the chain + * const plugin1 = CommandControlPlugin((ctx, sdt) => { + * return controller.next({ 'plugin1/data': 'from plugin1' }); + * }); + * + * const plugin2 = CommandControlPlugin((ctx, sdt) => { + * return controller.next({ 'plugin2/data': ctx.user.id }); + * }); + * + * export default commandModule({ + * type: CommandType.Slash, + * plugins: [plugin1, plugin2], + * execute: (ctx, sdt) => { + * console.log(sdt.state); // Access accumulated state + * } + * }); + * + * @remarks + * - Control plugins are executed in order when a discord.js event is emitted + * - Use controller.next() to continue to next plugin or controller.stop() to halt execution + * - State can be passed between plugins using controller.next({ key: value }) + * - State keys should be namespaced to avoid collisions (e.g., 'plugin-name/key') + * - Final accumulated state is passed to the command's execute function + * - All plugins must succeed for the command to execute + * - Plugins have access to dependencies through the sdt.deps object + * - Useful for implementing preconditions, filters, and command preprocessing */ export function CommandControlPlugin( execute: (...args: CommandArgs) => PluginResult, diff --git a/src/handlers/event-utils.ts b/src/handlers/event-utils.ts index 76a7f3fd..2c7c42cd 100644 --- a/src/handlers/event-utils.ts +++ b/src/handlers/event-utils.ts @@ -1,219 +1,18 @@ -import type { Interaction, Message, BaseInteraction } from 'discord.js'; -import util from 'node:util'; -import { - EMPTY, type Observable, concatMap, filter, - throwError, fromEvent, map, type OperatorFunction, - catchError, finalize, pipe, from, take, share, of, -} from 'rxjs'; -import * as Id from '../core/id' -import type { Emitter, ErrorHandling, Logging } from '../core/interfaces'; +import type { Emitter, Logging } from '../core/interfaces'; import { SernError } from '../core/structures/enums' -import { EMPTY_ERR, Err, Ok, Result, wrapAsync } from '../core/structures/result'; -import type { UnpackedDependencies } from '../types/utility'; -import type { CommandModule, Module, Processed } from '../types/core-modules'; -import * as assert from 'node:assert'; -import { Context } from '../core/structures/context'; -import { CommandType } from '../core/structures/enums' +import { Ok, wrapAsync} from '../core/structures/result'; +import type { Module } from '../types/core-modules'; import { inspect } from 'node:util' -import { disposeAll } from '../core/ioc'; -import { resultPayload, isAutocomplete, treeSearch, fmt } from '../core/functions' - +import { resultPayload } from '../core/functions' import merge from 'deepmerge' -function handleError(crashHandler: ErrorHandling, emitter: Emitter, logging?: Logging) { - return (pload: unknown, caught: Observable) => { - // This is done to fit the ErrorHandling contract - if(!emitter.emit('error', pload)) { - const err = pload instanceof Error ? pload : Error(util.inspect(pload, { colors: true })); - logging?.error({ message: util.inspect(pload) }); - crashHandler.updateAlive(err); - } - return caught; - }; -} -const arrayify= (src: T) => - Array.isArray(src) ? src : [src]; interface ExecutePayload { module: Module; args: unknown[]; - deps: Dependencies; - params?: string; [key: string]: unknown } -export const filterTap = (onErr: (e: R) => void): OperatorFunction, K> => - concatMap(result => { - if(result.ok){ - return of(result.value) - } - onErr(result.error); - return EMPTY; - }) - -export const sharedEventStream = (e: Emitter, eventName: string) => - (fromEvent(e, eventName) as Observable).pipe(share()); - -function intoPayload(module: Module, deps: Dependencies) { - return pipe(map(arrayify), - map(args => ({ module, args, deps })), - map(p => p.args)); -} -/** - * Creates an observable from { source } - * @param module - * @param source - */ -export function eventDispatcher(deps: Dependencies, module: Module, source: unknown) { - assert.ok(source && typeof source === 'object', - `${source} cannot be constructed into an event listener`); - const execute: OperatorFunction = - concatMap(async args => { - if(args) return Reflect.apply(module.execute, null, args); - }); - - //@ts-ignore - let ev = fromEvent(source ,module.name!); - //@ts-ignore - if(module['once']) { - ev = ev.pipe(take(1)) - } - return ev.pipe(intoPayload(module, deps), - execute); -} - -interface DispatchPayload { - module: Processed; - event: BaseInteraction; - defaultPrefix?: string; - deps: Dependencies; - params?: string -}; -export function createDispatcher({ module, event, defaultPrefix, deps, params }: DispatchPayload): ExecutePayload { - assert.ok(CommandType.Text !== module.type, - SernError.MismatchEvent + 'Found text command in interaction stream'); - - if(isAutocomplete(event)) { - assert.ok(module.type === CommandType.Slash - || module.type === CommandType.Both, "Autocomplete option on non command interaction"); - const option = treeSearch(event, module.options); - assert.ok(option, SernError.NotSupportedInteraction + ` There is no autocomplete tag for ` + inspect(module)); - const { command } = option; - return { module: command as Processed, //autocomplete is not a true "module" warning cast! - args: [event], - deps }; - } - switch (module.type) { - case CommandType.Slash: - case CommandType.Both: { - return { module, args: [Context.wrap(event, defaultPrefix)], deps }; - } - default: return { module, args: [event], deps, params }; - } -} -function createGenericHandler( - source: Observable, - makeModule: (event: Narrowed) => Promise, -) { - return (pred: (i: Source) => i is Narrowed) => - source.pipe( - filter(pred), // only handle this stream if it passes pred - concatMap(makeModule)); // create a payload, preparing to execute -} - - -/** - * - * Creates an RxJS observable that filters and maps incoming interactions to their respective modules. - * @param i An RxJS observable of interactions. - * @param mg The module manager instance used to retrieve the module path for each interaction. - * @returns A handler to create a RxJS observable of dispatchers that take incoming interactions and execute their corresponding modules. - */ -export function createInteractionHandler( - source: Observable, - deps: Dependencies, - defaultPrefix?: string -) { - const mg = deps['@sern/modules']; - return createGenericHandler, void>>( - source, - async event => { - const possibleIds = Id.reconstruct(event); - let modules = possibleIds - .map(({ id, params }) => ({ module: mg.get(id), params })) - .filter(({ module }) => module !== undefined); - if(modules.length == 0) { - return EMPTY_ERR; - } - const [{module, params}] = modules; - return Ok(createDispatcher({ - module: module as Processed, - event, defaultPrefix, deps, params - })); - }); -} - -export function createMessageHandler( - source: Observable, - defaultPrefix: string, - deps: Dependencies, -) { - const mg = deps['@sern/modules']; - return createGenericHandler(source, async event => { - const [prefix] = fmt(event.content, defaultPrefix); - let module= mg.get(`${prefix}_T`) ?? mg.get(`${prefix}_B`) as Module; - if(!module) { - return Err('Possibly undefined behavior: could not find a static id to resolve'); - } - return Ok({ args: [Context.wrap(event, defaultPrefix)], module, deps }) - }); -} - - -/** - * Wraps the task in a Result as a try / catch. - * if the task is ok, an event is emitted and the stream becomes empty - * if the task is an error, throw an error down the stream which will be handled by catchError - * thank u kingomes - * @param emitter reference to SernEmitter that will emit a successful execution of module - * @param module the module that will be executed with task - * @param task the deferred execution which will be called - */ -export function executeModule(emitter: Emitter, { module, args }: ExecutePayload) { - return from(wrapAsync(async () => module.execute(...args))) - .pipe(concatMap(result => { - if (result.ok){ - emitter.emit('module.activate', resultPayload('success', module)); - return EMPTY; - } - return throwError(() => resultPayload('failure', module, result.error)); - })) -}; - -/** - * A higher order function that - * - calls all control plugins. - * - any failures results to { config.onStop } being called - * - if all results are ok, the stream is converted to { config.onNext } - * config.onNext will be returned if everything is okay. - * @param config - * @returns function which calls all plugins and returns onNext or fail - */ -export function createResultResolver(config: { - onStop?: (module: Module, err?: string) => unknown; - onNext: (args: ExecutePayload, map: Record) => Output; -}) { - const { onStop, onNext } = config; - return async (payload: ExecutePayload) => { - const task = await callPlugins(payload); - if (!task) throw Error("Plugin did not return anything."); - if(!task.ok) { - onStop?.(payload.module, String(task.error)); - } else { - return onNext(payload, task.value) as Output; - } - }; -}; function isObject(item: unknown) { return (item && typeof item === 'object' && !Array.isArray(item)); @@ -238,20 +37,32 @@ export async function callInitPlugins(_module: Module, deps: Dependencies, emit? return module } -export async function callPlugins({ args, module, deps, params }: ExecutePayload) { +export function executeModule(emitter: Emitter, logger: Logging|undefined, { module, args } : ExecutePayload) { + + const moduleCalled = wrapAsync(async () => { + return module.execute(...args); + }) + moduleCalled + .then((res) => { + if(res.ok) { + emitter.emit('module.activate', resultPayload('success', module)) + } else { + if(!emitter.emit('error', resultPayload('failure', module, res.error))) { + // node crashes here. + logger?.error({ 'message': res.error }) + } + } + }) + .catch(err => { + throw err + }) +}; + + +export async function callPlugins({ args, module }: ExecutePayload) { let state = {}; for(const plugin of module.onEvent??[]) { - const executionContext = { - state, - deps, - params, - type: module.type, - module: { name: module.name, - description: module.description, - locals: module.locals, - meta: module.meta } - }; - const result = await plugin.execute(...args, executionContext); + const result = await plugin.execute(...args); if(!result.ok) { return result; } @@ -261,34 +72,3 @@ export async function callPlugins({ args, module, deps, params }: ExecutePayload } return Ok(state); } -/** - * Creates an executable task ( execute the command ) if all control plugins are successful - * this needs to go - * @param onStop emits a failure response to the SernEmitter - */ -export function intoTask(onStop: (m: Module) => unknown) { - const onNext = ({ args, module, deps, params }: ExecutePayload, state: Record) => { - - return { - module, - args: [...args, { state, - deps, - params, - type: module.type, - module: { name: module.name, - description: module.description, - locals: module.locals, - meta: module.meta } }], - deps - } - - }; - return createResultResolver({ onStop, onNext }); -} - -export const handleCrash = ({ "@sern/errors": err, '@sern/emitter': sem, '@sern/logger': log } : UnpackedDependencies, metadata: string) => - pipe(catchError(handleError(err, sem, log)), - finalize(() => { - log?.info({ message: 'A stream closed: ' + metadata }); - disposeAll(log); - })) diff --git a/src/handlers/interaction.ts b/src/handlers/interaction.ts index 6b57e415..2fba5cee 100644 --- a/src/handlers/interaction.ts +++ b/src/handlers/interaction.ts @@ -1,30 +1,58 @@ -import type { Interaction } from 'discord.js'; -import { mergeMap, merge, concatMap, EMPTY } from 'rxjs'; -import { createInteractionHandler, executeModule, intoTask, sharedEventStream, filterTap, handleCrash } from './event-utils'; +import type { Module } from '../types/core-modules' +import { callPlugins, executeModule } from './event-utils'; import { SernError } from '../core/structures/enums' -import { isAutocomplete, isCommand, isMessageComponent, isModal, resultPayload } from '../core/functions' -import { UnpackedDependencies } from '../types/utility'; +import { createSDT, isAutocomplete, isCommand, isMessageComponent, isModal, resultPayload, treeSearch } from '../core/functions' +import type { UnpackedDependencies } from '../types/utility'; +import * as Id from '../core/id' +import { Context } from '../core/structures/context'; -export default function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: string) { + + +export function interactionHandler(deps: UnpackedDependencies, defaultPrefix?: string) { //i wish javascript had clojure destructuring const { '@sern/client': client, - '@sern/emitter': emitter } = deps - const interactionStream$ = sharedEventStream(client, 'interactionCreate'); - const handle = createInteractionHandler(interactionStream$, deps, defaultPrefix); - - const interactionHandler$ = merge(handle(isMessageComponent), - handle(isAutocomplete), - handle(isCommand), - handle(isModal)); - return interactionHandler$ - .pipe(filterTap(e => emitter.emit('warning', resultPayload('warning', undefined, e))), - concatMap(intoTask(module => { - emitter.emit('module.activate', resultPayload('failure', module, SernError.PluginFailure)) - })), - mergeMap(payload => { - if(payload) - return executeModule(emitter, payload) - return EMPTY; - }), - handleCrash(deps, "interaction handling")); + '@sern/modules': moduleManager, + '@sern/logger': log, + '@sern/emitter': reporter } = deps + + client.on('interactionCreate', async (event) => { + + //returns array of possible ids + const possibleIds = Id.reconstruct(event); + + let modules = possibleIds + .map(({ id, params }) => ({ module: moduleManager.get(id)!, params })) + .filter(({ module }) => module !== undefined); + + if(modules.length == 0) { + return; + } + const { module, params } = modules.at(0)!; + let payload; + if(isAutocomplete(event)) { + //@ts-ignore stfu + const { command } = treeSearch(event, module.options); + payload= { module: command as Module, //autocomplete is not a true "module" warning cast! + args: [event, createSDT(command, deps, params)] }; + } else if(isCommand(event)) { + payload= { module, args: [Context.wrap(event, defaultPrefix), createSDT(module, deps, params)] }; + } else if (isModal(event) || isMessageComponent(event)) { + payload= { module, args: [event, createSDT(module, deps, params)] } + } else { + throw Error("Unknown interaction while handling in interactionCreate event " + event) + } + const result = await callPlugins(payload) + if(!result.ok) { + reporter.emit('module.activate', resultPayload('failure', module, result.error ?? SernError.PluginFailure)) + return + } + if(payload.args.length !== 2) { + throw Error ('Invalid payload') + } + //@ts-ignore assigning final state from plugin + payload.args[1].state = result.value + + // note: do not await this. will be blocking if long task (ie waiting for modal input) + executeModule(reporter, log, payload); + }); } diff --git a/src/handlers/message.ts b/src/handlers/message.ts index 4fac7d2e..306c4278 100644 --- a/src/handlers/message.ts +++ b/src/handlers/message.ts @@ -1,17 +1,17 @@ -import { EMPTY, mergeMap, concatMap } from 'rxjs'; import type { Message } from 'discord.js'; -import { createMessageHandler, executeModule, intoTask, sharedEventStream, filterTap, handleCrash} from './event-utils'; +import { callPlugins, executeModule } from './event-utils'; import { SernError } from '../core/structures/enums' -import { resultPayload } from '../core/functions' -import { UnpackedDependencies } from '../types/utility'; -import type { Emitter } from '../core/interfaces'; +import { createSDT, fmt, resultPayload } from '../core/functions' +import type { UnpackedDependencies } from '../types/utility'; +import type { Module } from '../types/core-modules'; +import { Context } from '../core/structures/context'; /** * Ignores messages from any person / bot except itself * @param prefix */ -function isNonBot(prefix: string) { - return (msg: Message): msg is Message => !msg.author.bot && hasPrefix(prefix, msg.content); +function isBotOrNoPrefix(msg: Message, prefix: string) { + return msg.author.bot || !hasPrefix(prefix, msg.content); } function hasPrefix(prefix: string, content: string) { @@ -19,32 +19,36 @@ function hasPrefix(prefix: string, content: string) { return prefixInContent.localeCompare(prefix, undefined, { sensitivity: 'accent' }) === 0; } -export default -function (deps: UnpackedDependencies, defaultPrefix?: string) { +export function messageHandler (deps: UnpackedDependencies, defaultPrefix?: string) { const {"@sern/emitter": emitter, '@sern/logger': log, + '@sern/modules': mg, '@sern/client': client} = deps if (!defaultPrefix) { log?.debug({ message: 'No prefix found. message handler shutting down' }); - return EMPTY; + return; } - const messageStream$ = sharedEventStream(client as unknown as Emitter, 'messageCreate'); - const handle = createMessageHandler(messageStream$, defaultPrefix, deps); + client.on('messageCreate', async message => { + if(isBotOrNoPrefix(message, defaultPrefix)) { + return + } + const [prefix] = fmt(message.content, defaultPrefix); + let module = mg.get(`${prefix}_T`) ?? mg.get(`${prefix}_B`) as Module; + if(!module) { + throw Error('Possibly undefined behavior: could not find a static id to resolve') + } + const payload = { module, args: [Context.wrap(message, defaultPrefix), createSDT(module, deps, undefined)] } + const result = await callPlugins(payload) + if (!result.ok) { + emitter.emit('module.activate', resultPayload('failure', module, result.error ?? SernError.PluginFailure)) + return + } - const msgCommands$ = handle(isNonBot(defaultPrefix)); + //@ts-ignore + payload.args[1].state = result.value - return msgCommands$.pipe( - filterTap(e => emitter.emit('warning', resultPayload('warning', undefined, e))), - concatMap(intoTask(module => { - const result = resultPayload('failure', module, SernError.PluginFailure); - emitter.emit('module.activate', result); - })), - mergeMap(payload => { - if(payload) - return executeModule(emitter, payload) - return EMPTY; - }), - handleCrash(deps, "message handling") - ) + executeModule(emitter, log, payload) + }) + } diff --git a/src/handlers/presence.ts b/src/handlers/presence.ts index e4646ab8..18f740eb 100644 --- a/src/handlers/presence.ts +++ b/src/handlers/presence.ts @@ -1,40 +1,99 @@ -import { concatMap, from, interval, of, map, startWith, fromEvent, take, mergeScan } from "rxjs" import { Presence } from "../core/presences"; import { Services } from "../core/ioc"; -import assert from "node:assert"; import * as Files from "../core/module-loading"; type SetPresence = (conf: Presence.Result) => Promise -const parseConfig = async (conf: Promise) => { - return conf.then(s => { - if('repeat' in s) { - const { onRepeat, repeat } = s; - assert(repeat !== undefined, "repeat option is undefined"); - assert(onRepeat !== undefined, "onRepeat callback is undefined, but repeat exists"); - const src$ = typeof repeat === 'number' - ? interval(repeat) - : fromEvent(...repeat); - return src$.pipe(mergeScan(async (args) => onRepeat(args), s), - startWith(s)); +const parseConfig = async (conf: Promise, setPresence: SetPresence) => { + const result = await conf; + + if ('repeat' in result) { + const { onRepeat, repeat } = result; + // Validate configuration + if (repeat === undefined) { + throw new Error("repeat option is undefined"); } - return of(s).pipe(take(1)); - }) + if (onRepeat === undefined) { + throw new Error("onRepeat callback is undefined, but repeat exists"); + } + // Initial state + let currentState = result; + const processState = async (state: typeof currentState) => { + try { + const result = onRepeat(state); + // If it's a promise, await it, otherwise use the value directly + return result instanceof Promise ? await result : result; + } catch (error) { + // TODO process error + //console.error(error); + return state; // Return previous state on error + } + }; + // Handle numeric interval + if (typeof repeat === 'number') { + // Return a promise that never resolves (or resolves on cleanup) + return new Promise((resolve) => { + // Immediately return initial state + processState(currentState); + + // Set up interval + let isProcessing = false; + const intervalId = setInterval(() => { + // Skip if previous operation is still running + if (isProcessing) return; + isProcessing = true; + + processState(currentState) + .then(newState => { + currentState = newState; + return setPresence(currentState) + }) + .catch(console.error) + .finally(() => { + isProcessing = false; + }); + }, repeat); + + // Optional: Return cleanup function + return () => clearInterval(intervalId); + }); + } + // Handle event-based repeat + else { + const handler = async () => { + currentState = await onRepeat(currentState); + await setPresence(currentState); + }; + let has_registered = false; + return new Promise((resolve) => { + const [target, eventName] = repeat; + + // Immediately return initial state + processState(currentState); + + // Set up event listener + if(!has_registered) { + target.addListener(eventName, handler); + has_registered=true; + } + // Optional: Return cleanup function + return () => target.removeListener(eventName, handler); + }); + } + } + + // No repeat configuration, just return the result + return setPresence(result); }; -export const presenceHandler = (path: string, setPresence: SetPresence) => { - const presence = Files - .importModule>(path) - .then(({ module }) => { - //fetch services with the order preserved, passing it to the execute fn - const fetchedServices = Services(...module.inject ?? []); - return async () => module.execute(...fetchedServices); - }) - const module$ = from(presence); - return module$.pipe( - //compose: - //call the execute function, passing that result into parseConfig. - //concatMap resolves the promise, and passes it to the next concatMap. - concatMap(fn => parseConfig(fn())), - // subscribe to the observable parseConfig yields, and set the presence. - concatMap(conf => conf.pipe(map(setPresence)))); +export const presenceHandler = async (path: string, setPresence: SetPresence) => { + const presence = await + Files.importModule>(path) + .then(({ module }) => { + //fetch services with the order preserved, passing it to the execute fn + const fetchedServices = Services(...module.inject ?? []); + return async () => module.execute(...fetchedServices); + }) + + return parseConfig(presence(), setPresence); + } diff --git a/src/handlers/ready.ts b/src/handlers/ready.ts index 662b1bd0..4ae4fc42 100644 --- a/src/handlers/ready.ts +++ b/src/handlers/ready.ts @@ -3,7 +3,7 @@ import { once } from 'node:events'; import { resultPayload } from '../core/functions'; import { CommandType } from '../core/structures/enums'; import { Module } from '../types/core-modules'; -import { UnpackedDependencies } from '../types/utility'; +import type { UnpackedDependencies } from '../types/utility'; import { callInitPlugins } from './event-utils'; export default async function(dir: string, deps : UnpackedDependencies) { diff --git a/src/handlers/user-defined-events.ts b/src/handlers/user-defined-events.ts index aea565a5..00b72cc7 100644 --- a/src/handlers/user-defined-events.ts +++ b/src/handlers/user-defined-events.ts @@ -1,33 +1,57 @@ import { EventType, SernError } from '../core/structures/enums'; -import { callInitPlugins, eventDispatcher, handleCrash } from './event-utils' +import { callInitPlugins } from './event-utils' import { EventModule, Module } from '../types/core-modules'; import * as Files from '../core/module-loading' import type { UnpackedDependencies } from '../types/utility'; -import { from, map, mergeAll } from 'rxjs'; +import type { Emitter } from '../core/interfaces'; +import { inspect } from 'util' +import { resultPayload } from '../core/functions'; +import type { Wrapper } from '../' + +export default async function(deps: UnpackedDependencies, wrapper: Wrapper) { + const eventModules: EventModule[] = []; + for await (const path of Files.readRecursive(wrapper.events!)) { + let { module } = await Files.importModule(path); + await callInitPlugins(module, deps) + eventModules.push(module as EventModule); + } + const logger = deps['@sern/logger'], report = deps['@sern/emitter']; + for (const module of eventModules) { + let source: Emitter; -const intoDispatcher = (deps: UnpackedDependencies) => - (module : EventModule) => { switch (module.type) { case EventType.Sern: - return eventDispatcher(deps, module, deps['@sern/emitter']); + source=deps['@sern/emitter']; + break case EventType.Discord: - return eventDispatcher(deps, module, deps['@sern/client']); + source=deps['@sern/client']; + break case EventType.External: - return eventDispatcher(deps, module, deps[module.emitter]); + source=deps[module.emitter] as Emitter; + break default: throw Error(SernError.InvalidModuleType + ' while creating event handler'); } -}; - -export default async function(deps: UnpackedDependencies, eventDir: string) { - const eventModules: EventModule[] = []; - for await (const path of Files.readRecursive(eventDir)) { - let { module } = await Files.importModule(path); - await callInitPlugins(module, deps) - eventModules.push(module as EventModule); + if(!source && typeof source !== 'object') { + throw Error(`${source} cannot be constructed into an event listener`) + } + + if(!('addListener' in source && 'removeListener' in source)) { + throw Error('source must implement Emitter') + } + const execute = async (...args: any[]) => { + try { + if(args) { + if('once' in module) { source.removeListener(String(module.name!), execute); } + await Reflect.apply(module.execute, null, args); + } + } catch(e) { + const err = e instanceof Error ? e : Error(inspect(e, { colors: true })); + if(!report.emit('error', resultPayload('failure', module, err))) { + logger?.error({ message: inspect(err) }); + } + } + } + source.addListener(String(module.name!), execute) } - from(eventModules) - .pipe(map(intoDispatcher(deps)), - mergeAll(), // all eventListeners are turned on - handleCrash(deps, "event modules")) - .subscribe(); } + diff --git a/src/index.ts b/src/index.ts index 7de8cdca..c0a01ef6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,7 +38,7 @@ export type { } from './types/core-plugin'; -export type { Payload, SernEventsMapping } from './types/utility'; +export type { Payload, SernEventsMapping, Wrapper } from './types/utility'; export { commandModule, diff --git a/src/sern.ts b/src/sern.ts index 4f8faf44..a9a461eb 100644 --- a/src/sern.ts +++ b/src/sern.ts @@ -1,24 +1,21 @@ //side effect: global container import { useContainerRaw } from '@sern/ioc/global'; +// set asynchronous capturing of errors +import events from 'node:events' +events.captureRejections = true; import callsites from 'callsites'; import * as Files from './core/module-loading'; -import { merge } from 'rxjs'; import eventsHandler from './handlers/user-defined-events'; import ready from './handlers/ready'; -import messageHandler from './handlers/message'; -import interactionHandler from './handlers/interaction'; +import { interactionHandler } from './handlers/interaction'; +import { messageHandler } from './handlers/message' import { presenceHandler } from './handlers/presence'; -import { UnpackedDependencies } from './types/utility'; +import { UnpackedDependencies, Wrapper } from './types/utility'; import type { Presence} from './core/presences'; import { registerTasks } from './handlers/tasks'; -interface Wrapper { - commands: string; - defaultPrefix?: string; - events?: string; - tasks?: string; -} + /** * @since 1.0.0 * @param maybeWrapper Options to pass into sern. @@ -37,7 +34,7 @@ export function init(maybeWrapper: Wrapper = { commands: "./dist/commands" }) { const deps = useContainerRaw().deps(); if (maybeWrapper.events !== undefined) { - eventsHandler(deps, maybeWrapper.events) + eventsHandler(deps, maybeWrapper) .then(() => { deps['@sern/logger']?.info({ message: "Events registered" }); }); @@ -56,7 +53,7 @@ export function init(maybeWrapper: Wrapper = { commands: "./dist/commands" }) { const setPresence = async (p: Presence.Result) => { return deps['@sern/client'].user?.setPresence(p); } - presenceHandler(presencePath.path, setPresence).subscribe(); + presenceHandler(presencePath.path, setPresence); } if(maybeWrapper.tasks) { registerTasks(maybeWrapper.tasks, deps); @@ -64,8 +61,9 @@ export function init(maybeWrapper: Wrapper = { commands: "./dist/commands" }) { }) .catch(err => { throw err }); - const messages$ = messageHandler(deps, maybeWrapper.defaultPrefix); - const interactions$ = interactionHandler(deps, maybeWrapper.defaultPrefix); + //const messages$ = messageHandler(deps, maybeWrapper.defaultPrefix); + interactionHandler(deps, maybeWrapper.defaultPrefix); + messageHandler(deps, maybeWrapper.defaultPrefix) // listening to the message stream and interaction stream - merge(messages$, interactions$).subscribe(); + //merge(messages$, interactions$).subscribe(); } diff --git a/src/types/utility.ts b/src/types/utility.ts index 595aa2de..681ade76 100644 --- a/src/types/utility.ts +++ b/src/types/utility.ts @@ -1,11 +1,9 @@ import type { InteractionReplyOptions, MessageReplyOptions } from 'discord.js'; import type { Module } from './core-modules'; -import type { Result } from '../core/structures/result'; export type Awaitable = PromiseLike | T; export type Dictionary = Record -export type VoidResult = Result; export type AnyFunction = (...args: any[]) => unknown; export interface SernEventsMapping { @@ -26,3 +24,11 @@ export type UnpackedDependencies = { [K in keyof Dependencies]: UnpackFunction } export type ReplyOptions = string | Omit | MessageReplyOptions; + + +export interface Wrapper { + commands: string; + defaultPrefix?: string; + events?: string; + tasks?: string; +} diff --git a/test/core/presence.test.ts b/test/core/presence.test.ts index f9a590b5..19f9d015 100644 --- a/test/core/presence.test.ts +++ b/test/core/presence.test.ts @@ -1,6 +1,7 @@ -import { describe, expect, it, vi } from 'vitest'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import { Presence } from '../../src'; - +import * as Files from '../../src/core/module-loading' +import { presenceHandler } from '../../src/handlers/presence' // Example test suite for the module function describe('module function', () => { @@ -54,4 +55,38 @@ describe('of function', () => { activities: [{ name: 'Another Test Activity' }], }); }); + + +}) + + +describe('Presence module execution', () => { + const mockExecuteResult = Presence.of({ + status: 'online', + }).once(); + + const mockModule = Presence.module({ + inject: [ '@sern/client'], + execute: vi.fn().mockReturnValue(mockExecuteResult) + }) + beforeEach(() => { + vi.clearAllMocks(); + // Mock Files.importModule + vi.spyOn(Files, 'importModule').mockResolvedValue({ + module: mockModule + }); + + + + }); + it('should set presence once.', async () => { + const setPresenceMock = vi.fn(); + const mockPath = '/path/to/presence/config'; + + await presenceHandler(mockPath, setPresenceMock); + + expect(Files.importModule).toHaveBeenCalledWith(mockPath); + expect(setPresenceMock).toHaveBeenCalledOnce(); + }) + }) diff --git a/test/handlers.test.ts b/test/handlers.test.ts index 33f1eb92..ec49c14e 100644 --- a/test/handlers.test.ts +++ b/test/handlers.test.ts @@ -1,13 +1,11 @@ //@ts-nocheck import { beforeEach, describe, expect, it, test } from 'vitest'; -import { callInitPlugins, eventDispatcher } from '../src/handlers/event-utils'; +import { callInitPlugins } from '../src/handlers/event-utils'; import { Client } from 'discord.js' import { faker } from '@faker-js/faker'; -import { Module } from '../src/types/core-modules'; -import { Processed } from '../src/types/core-modules'; import { EventEmitter } from 'events'; -import { CommandControlPlugin, CommandInitPlugin, CommandType, controller } from '../src'; +import { CommandControlPlugin, CommandType, controller } from '../src'; import { createRandomModule, createRandomInitPlugin } from './setup/util'; @@ -19,23 +17,6 @@ function mockDeps() { } } -describe('eventDispatcher standard', () => { - let m: Processed; - let ee: EventEmitter; - beforeEach(() => { - ee = new EventEmitter(); - m = createRandomModule(); - }); - - it('should throw', () => { - expect(() => eventDispatcher(mockDeps(), m, 'not event emitter')).toThrowError(); - }); - - it("Shouldn't throw", () => { - expect(() => eventDispatcher(mockDeps(), m, ee)).not.toThrowError(); - }); -}); - describe('calling init plugins', async () => { let deps; beforeEach(() => { diff --git a/test/setup/setup-tests.ts b/test/setup/setup-tests.ts index 7cb8684d..877ebb6d 100644 --- a/test/setup/setup-tests.ts +++ b/test/setup/setup-tests.ts @@ -1,4 +1,6 @@ import { vi } from 'vitest' +import { makeDependencies } from '../../src'; +import { Client } from 'discord.js'; vi.mock('discord.js', async (importOriginal) => { const mod = await importOriginal() @@ -44,3 +46,9 @@ vi.mock('discord.js', async (importOriginal) => { ChatInputCommandInteraction: vi.fn() }; }); + +await makeDependencies(({ add }) => { + add('@sern/client', { }) +}) + + diff --git a/yarn.lock b/yarn.lock index 67271e48..a2eae29a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,18 +5,18 @@ __metadata: version: 6 cacheKey: 8 -"@discordjs/builders@npm:^1.8.2": - version: 1.8.2 - resolution: "@discordjs/builders@npm:1.8.2" +"@discordjs/builders@npm:^1.10.0": + version: 1.10.0 + resolution: "@discordjs/builders@npm:1.10.0" dependencies: - "@discordjs/formatters": ^0.4.0 - "@discordjs/util": ^1.1.0 - "@sapphire/shapeshift": ^3.9.7 - discord-api-types: 0.37.83 + "@discordjs/formatters": ^0.6.0 + "@discordjs/util": ^1.1.1 + "@sapphire/shapeshift": ^4.0.0 + discord-api-types: ^0.37.114 fast-deep-equal: ^3.1.3 ts-mixer: ^6.0.4 - tslib: ^2.6.2 - checksum: 65c707f28fb40b2875ebc08d580b6902eaf988c0e70ad674e33893abfdde74b52fc491476336a312c4f18de2fc599e1299341af152265d84864c907a12749a8e + tslib: ^2.6.3 + checksum: 5087f9e32bb3c911216679fb9a6a38009f138eb1dec0aa2f5ebaec1eca4a6a63f0f51a89adf292e7a57ba9ea810b67b1e41628a4159a0bcbcf236a9a80cb7da6 languageName: node linkType: hard @@ -27,60 +27,60 @@ __metadata: languageName: node linkType: hard -"@discordjs/collection@npm:^2.1.0": - version: 2.1.0 - resolution: "@discordjs/collection@npm:2.1.0" - checksum: ebe1a32769296f14a38b2c718c7e0d00830e37e68e59a3683aa0f7c25adf9487ebaca3ac3f78fd60e2c89cf314b7891312cac36e3b0885cceb4d2a677ae7d19b +"@discordjs/collection@npm:^2.1.0, @discordjs/collection@npm:^2.1.1": + version: 2.1.1 + resolution: "@discordjs/collection@npm:2.1.1" + checksum: 8c4cd75061b378a35dfa50c4403828b8e6d5d32934047d1d26e5a4fcc2c1b8135ebf74a6dd9ec61afcb4ec030d596b85da5463dc28cad084635cd184eb69c453 languageName: node linkType: hard -"@discordjs/formatters@npm:^0.4.0": - version: 0.4.0 - resolution: "@discordjs/formatters@npm:0.4.0" +"@discordjs/formatters@npm:^0.6.0": + version: 0.6.0 + resolution: "@discordjs/formatters@npm:0.6.0" dependencies: - discord-api-types: 0.37.83 - checksum: 130ab7ba104635d7d0f92f4c3de67dbc60cdab004e9db605e0f2c7f410a9808df8776e4d5d45632597dc7257713dc77bb616ee25bb0827117247b6bebfe35921 + discord-api-types: ^0.37.114 + checksum: 4f95d42db6475ccc8e2802f8a5bc85b7b205900cd90a731cf8b8e52aedc143010c7208c2db80e8b56da58a5d2142945ee4453d9b8c6c7609d57576552dbde254 languageName: node linkType: hard -"@discordjs/rest@npm:^2.3.0": - version: 2.3.0 - resolution: "@discordjs/rest@npm:2.3.0" +"@discordjs/rest@npm:^2.4.1, @discordjs/rest@npm:^2.4.2": + version: 2.4.2 + resolution: "@discordjs/rest@npm:2.4.2" dependencies: - "@discordjs/collection": ^2.1.0 - "@discordjs/util": ^1.1.0 - "@sapphire/async-queue": ^1.5.2 + "@discordjs/collection": ^2.1.1 + "@discordjs/util": ^1.1.1 + "@sapphire/async-queue": ^1.5.3 "@sapphire/snowflake": ^3.5.3 - "@vladfrangu/async_event_emitter": ^2.2.4 - discord-api-types: 0.37.83 + "@vladfrangu/async_event_emitter": ^2.4.6 + discord-api-types: ^0.37.114 magic-bytes.js: ^1.10.0 - tslib: ^2.6.2 - undici: 6.13.0 - checksum: 01564bf108c359f5650318ccadc51bf762c99df56de865192b25adef4331c0729886e84b4ebd10dfc57818b97ff891f1857873811e7a2326d24fd0bf892a0201 + tslib: ^2.6.3 + undici: 6.19.8 + checksum: 99ef40388e8ec87e159d2c1e0b3ab3118ea1ec220482aea530417faf394bcd54bca71bcd9e2c1322f3283e233c1a72c16a12d4b362f0d5eea4d9863a7351c51d languageName: node linkType: hard -"@discordjs/util@npm:^1.1.0": - version: 1.1.0 - resolution: "@discordjs/util@npm:1.1.0" - checksum: b4db3fc6017986cd0e7fd6aa50e890e1259e79c6e0ff9c07685a86b2c22409a42f146f282d907885444f37ca596220c166d8be11851fab7f9e2c1ee932fd524e +"@discordjs/util@npm:^1.1.0, @discordjs/util@npm:^1.1.1": + version: 1.1.1 + resolution: "@discordjs/util@npm:1.1.1" + checksum: 13f25aa2917de732bdd90e9cee9322b69c8c0a173206e2ce308f1bb177d4ce20a138efdb5b0ec5029a10ebbbde71d4c12ba51354b09db4b488e8de429c393fd4 languageName: node linkType: hard -"@discordjs/ws@npm:^1.1.1": - version: 1.1.1 - resolution: "@discordjs/ws@npm:1.1.1" +"@discordjs/ws@npm:^1.2.0": + version: 1.2.0 + resolution: "@discordjs/ws@npm:1.2.0" dependencies: "@discordjs/collection": ^2.1.0 - "@discordjs/rest": ^2.3.0 + "@discordjs/rest": ^2.4.1 "@discordjs/util": ^1.1.0 "@sapphire/async-queue": ^1.5.2 "@types/ws": ^8.5.10 "@vladfrangu/async_event_emitter": ^2.2.4 - discord-api-types: 0.37.83 + discord-api-types: ^0.37.114 tslib: ^2.6.2 - ws: ^8.16.0 - checksum: 42ba6dad56d6d340b34e400144cb6cd0433c963b16c51e24496b43a1a23cc01c663cb24c492b9fc8c1f7dd528ce32f7d34e2ed379dbc57352468f5505fe21486 + ws: ^8.17.0 + checksum: e14a94dec373ff55ca370eb1dd1258cacf55e779de45f0ff5fa44334f763a27e673238f91da0649f45daf17c329195f2846643ead6c16ad02b3bfda0126f4eeb languageName: node linkType: hard @@ -246,20 +246,20 @@ __metadata: linkType: hard "@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.4.0 - resolution: "@eslint-community/eslint-utils@npm:4.4.0" + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" dependencies: - eslint-visitor-keys: ^3.3.0 + eslint-visitor-keys: ^3.4.3 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + checksum: a7ffc838eb6a9ef594cda348458ccf38f34439ac77dc090fa1c120024bcd4eb911dfd74d5ef44d42063e7949fa7c5123ce714a015c4abb917d4124be1bd32bfe languageName: node linkType: hard "@eslint-community/regexpp@npm:^4.4.0": - version: 4.11.0 - resolution: "@eslint-community/regexpp@npm:4.11.0" - checksum: 97d2fe46690b69417a551bd19a3dc53b6d9590d2295c43cc4c4e44e64131af541e2f4a44d5c12e87de990403654d3dae9d33600081f3a2f0386b368abc9111ec + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 0d628680e204bc316d545b4993d3658427ca404ae646ce541fcc65306b8c712c340e5e573e30fb9f85f4855c0c5f6dca9868931f2fcced06417fbe1a0c6cd2d6 languageName: node linkType: hard @@ -333,6 +333,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: ^7.0.4 + checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 + languageName: node + linkType: hard + "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -342,10 +351,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.15": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec languageName: node linkType: hard @@ -376,25 +385,25 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" dependencies: agent-base: ^7.1.0 http-proxy-agent: ^7.0.0 https-proxy-agent: ^7.0.1 lru-cache: ^10.0.1 socks-proxy-agent: ^8.0.3 - checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 + checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" dependencies: semver: ^7.3.5 - checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a languageName: node linkType: hard @@ -405,142 +414,170 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.18.0" +"@rollup/rollup-android-arm-eabi@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.30.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-android-arm64@npm:4.18.0" +"@rollup/rollup-android-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-android-arm64@npm:4.30.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.18.0" +"@rollup/rollup-darwin-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.30.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.18.0" +"@rollup/rollup-darwin-x64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.30.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0" +"@rollup/rollup-freebsd-arm64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.30.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.30.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.30.1" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.18.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.30.1" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.18.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.30.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.18.0" +"@rollup/rollup-linux-arm64-musl@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.30.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0" +"@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.30.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.30.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.18.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.30.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.18.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.30.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.18.0" +"@rollup/rollup-linux-x64-gnu@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.30.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.18.0" +"@rollup/rollup-linux-x64-musl@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.30.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.18.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.30.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.18.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.30.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.18.0": - version: 4.18.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.18.0" +"@rollup/rollup-win32-x64-msvc@npm:4.30.1": + version: 4.30.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.30.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@sapphire/async-queue@npm:^1.5.2": - version: 1.5.2 - resolution: "@sapphire/async-queue@npm:1.5.2" - checksum: 6252e72254f33c91da4887e324f17b59708b12c603216cc45f001460fd33265844301de47ab67c8caf8383ee280b39c8427ede242bd3b50b6ccdf13a386a5f1b +"@sapphire/async-queue@npm:^1.5.2, @sapphire/async-queue@npm:^1.5.3": + version: 1.5.5 + resolution: "@sapphire/async-queue@npm:1.5.5" + checksum: 87218b46599728ce83f3829d246f939e6f5857aa002b55ac9c416864b9af16d242e09d069eaf96547596c5e7b042705038cbc9c5eebb07d490ba17271a688e67 languageName: node linkType: hard -"@sapphire/shapeshift@npm:^3.9.7": - version: 3.9.7 - resolution: "@sapphire/shapeshift@npm:3.9.7" +"@sapphire/shapeshift@npm:^4.0.0": + version: 4.0.0 + resolution: "@sapphire/shapeshift@npm:4.0.0" dependencies: fast-deep-equal: ^3.1.3 lodash: ^4.17.21 - checksum: a36032ff8fc54056ea21e0cdbbea84c3d80c0c0fb19b2685e14e29111ab9c1172c9273e1e54d49e2a62ba5a393f18b3dab9330d34b97d3519d572e32dd64913d + checksum: d312dd529c3b3d221a8fcd58428d03de2a744a1568ad810f9f75e1f4d5a0387952285b436b37f29141a810f6bbbe310ed3c31882c57d260a744f39beb35649f0 languageName: node linkType: hard -"@sapphire/snowflake@npm:3.5.3, @sapphire/snowflake@npm:^3.5.3": +"@sapphire/snowflake@npm:3.5.3": version: 3.5.3 resolution: "@sapphire/snowflake@npm:3.5.3" checksum: 821add76877e2786ddb1b5cd3ee5de130610b82014972d91a99b4b7ce5475839b9a26f94de322f48a66f9ba2e2c578ffe46a60d06cbb9a36fd8fb96ef78be248 languageName: node linkType: hard +"@sapphire/snowflake@npm:^3.5.3": + version: 3.5.5 + resolution: "@sapphire/snowflake@npm:3.5.5" + checksum: 8f18a99fa2a9bcd7369851dd12abb337e4beaadeb294de50d638466690fe8d037a6e82628021ad5a971c75b6543501b20c72a859f9686ccabd0fd229fe45daed + languageName: node + linkType: hard + "@sern/handler@workspace:.": version: 0.0.0-use.local resolution: "@sern/handler@workspace:." @@ -556,7 +593,6 @@ __metadata: deepmerge: ^4.3.1 discord.js: ^14.15.3 eslint: 8.39.0 - rxjs: ^7.8.0 typescript: 5.0.2 vitest: ^1.6.0 languageName: unknown @@ -576,10 +612,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a +"@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 languageName: node linkType: hard @@ -604,12 +640,21 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^20.0.0": - version: 20.14.9 - resolution: "@types/node@npm:20.14.9" +"@types/node@npm:*": + version: 22.10.5 + resolution: "@types/node@npm:22.10.5" dependencies: - undici-types: ~5.26.4 - checksum: 5e9eda1ac8c6cc6bcd1063903ae195eaede9aad1bdad00408a919409cfbcdd2d6535aa3d50346f0d385528f9e03dafc7d1b3bad25aedb1dcd79a6ad39d06c35d + undici-types: ~6.20.0 + checksum: 3b0e966df4e130edac3ad034f1cddbe134e70f11556062468c9fbd749a3b07a44445a3a75a7eec68a104930bf05d4899f1a418c4ae48493d2c8c1544d8594bcc + languageName: node + linkType: hard + +"@types/node@npm:^20.0.0": + version: 20.17.12 + resolution: "@types/node@npm:20.17.12" + dependencies: + undici-types: ~6.19.2 + checksum: 0c0dbeb4e1480a23071ec38e97bb3d776e0ae9828174bf45f9edcf277caa955945cb10d31d84f7a73c66aaf92ae2e022be6331bd00a4bed1f2ad9639a411d17e languageName: node linkType: hard @@ -621,11 +666,11 @@ __metadata: linkType: hard "@types/ws@npm:^8.5.10": - version: 8.5.10 - resolution: "@types/ws@npm:8.5.10" + version: 8.5.13 + resolution: "@types/ws@npm:8.5.13" dependencies: "@types/node": "*" - checksum: 3ec416ea2be24042ebd677932a462cf16d2080393d8d7d0b1b3f5d6eaa4a7387aaf0eefb99193c0bfd29444857cf2e0c3ac89899e130550dc6c14ada8a46d25e + checksum: f17023ce7b89c6124249c90211803a4aaa02886e12bc2d0d2cd47fa665eeb058db4d871ce4397d8e423f6beea97dd56835dd3fdbb921030fe4d887601e37d609 languageName: node linkType: hard @@ -849,10 +894,10 @@ __metadata: languageName: node linkType: hard -"@vladfrangu/async_event_emitter@npm:^2.2.4": - version: 2.4.0 - resolution: "@vladfrangu/async_event_emitter@npm:2.4.0" - checksum: dc22762fb3a46cd96fc0062974abc08a6f457c64890dcb4c431f82e4ba9155d2c2745cd331763d7d652f69a167ea4f4e2faa5be5c7fa8e56b6e2deeea9850da8 +"@vladfrangu/async_event_emitter@npm:^2.2.4, @vladfrangu/async_event_emitter@npm:^2.4.6": + version: 2.4.6 + resolution: "@vladfrangu/async_event_emitter@npm:2.4.6" + checksum: 924e35d9adf8a045c9846c0c96618aa61c40c776b52b8d6ee510781367004ec5fda8949bf5f0d54d1896b041fccc0e5a71844c379c87b955b6412f5f18615cd9 languageName: node linkType: hard @@ -873,39 +918,27 @@ __metadata: linkType: hard "acorn-walk@npm:^8.3.2": - version: 8.3.3 - resolution: "acorn-walk@npm:8.3.3" + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" dependencies: acorn: ^8.11.0 - checksum: 0f09d351fc30b69b2b9982bf33dc30f3d35a34e030e5f1ed3c49fc4e3814a192bf3101e4c30912a0595410f5e91bb70ddba011ea73398b3ecbfe41c7334c6dd0 + checksum: 4ff03f42323e7cf90f1683e08606b0f460e1e6ac263d2730e3df91c7665b6f64e696db6ea27ee4bed18c2599569be61f28a8399fa170c611161a348c402ca19c languageName: node linkType: hard -"acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.9.0": - version: 8.12.0 - resolution: "acorn@npm:8.12.0" +"acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.9.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" bin: acorn: bin/acorn - checksum: ae142de8739ef15a5d936c550c1d267fc4dedcdbe62ad1aa2c0009afed1de84dd0a584684a5d200bb55d8db14f3e09a95c6e92a5303973c04b9a7413c36d1df0 - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: ^4.3.4 - checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 + checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 languageName: node linkType: hard -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753 languageName: node linkType: hard @@ -929,9 +962,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac languageName: node linkType: hard @@ -1021,11 +1054,11 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^18.0.0": - version: 18.0.3 - resolution: "cacache@npm:18.0.3" +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - "@npmcli/fs": ^3.1.0 + "@npmcli/fs": ^4.0.0 fs-minipass: ^3.0.0 glob: ^10.2.2 lru-cache: ^10.0.1 @@ -1033,11 +1066,11 @@ __metadata: minipass-collect: ^2.0.1 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f + p-map: ^7.0.2 + ssri: ^12.0.0 + tar: ^7.4.3 + unique-filename: ^4.0.0 + checksum: e95684717de6881b4cdaa949fa7574e3171946421cd8291769dd3d2417dbf7abf4aa557d1f968cca83dcbc95bed2a281072b09abfc977c942413146ef7ed4525 languageName: node linkType: hard @@ -1049,8 +1082,8 @@ __metadata: linkType: hard "chai@npm:^4.3.10": - version: 4.4.1 - resolution: "chai@npm:4.4.1" + version: 4.5.0 + resolution: "chai@npm:4.5.0" dependencies: assertion-error: ^1.1.0 check-error: ^1.0.3 @@ -1058,8 +1091,8 @@ __metadata: get-func-name: ^2.0.2 loupe: ^2.3.6 pathval: ^1.1.1 - type-detect: ^4.0.8 - checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e + type-detect: ^4.1.0 + checksum: 70e5a8418a39e577e66a441cc0ce4f71fd551a650a71de30dd4e3e31e75ed1f5aa7119cf4baf4a2cb5e85c0c6befdb4d8a05811fad8738c1a6f3aa6a23803821 languageName: node linkType: hard @@ -1082,17 +1115,10 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d languageName: node linkType: hard @@ -1119,43 +1145,43 @@ __metadata: languageName: node linkType: hard -"confbox@npm:^0.1.7": - version: 0.1.7 - resolution: "confbox@npm:0.1.7" - checksum: bde836c26f5154a348b0c0a757f8a0138929e5737e0553be3c4f07a056abca618b861aa63ac3b22d344789b56be99a1382928933e08cd500df00213bf4d8fb43 +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 5c7718ab22cf9e35a31c21ef124156076ae8c9dc65e6463d54961caf5a1d529284485a0fdf83fd23b27329f3b75b0c8c07d2e36c699f5151a2efe903343f976a languageName: node linkType: hard "cron@npm:^3.1.7": - version: 3.1.7 - resolution: "cron@npm:3.1.7" + version: 3.5.0 + resolution: "cron@npm:3.5.0" dependencies: "@types/luxon": ~3.4.0 - luxon: ~3.4.0 - checksum: d98ee5297543c138221d96dd49270bf6576db80134e6041f4ce4a3c0cb6060863d76910209b34fee66fbf134461449ec3bd283d6a76d1c50da220cde7fc10c65 + luxon: ~3.5.0 + checksum: 4fa321201ea7d9ee64411f12e18c1fe6d3fd7c83b33a97ccdcb81f6f2db8c0d3f3b2e23d2b4f70ee85ad30a915e86e05c31ee8ee8f2c385be26b877fce1abc5d languageName: node linkType: hard "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b languageName: node linkType: hard "debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": - version: 4.3.5 - resolution: "debug@npm:4.3.5" + version: 4.4.0 + resolution: "debug@npm:4.4.0" dependencies: - ms: 2.1.2 + ms: ^2.1.3 peerDependenciesMeta: supports-color: optional: true - checksum: 7c002b51e256257f936dda09eb37167df952758c57badf6bf44bdc40b89a4bcb8e5a0a2e4c7b53f97c69e2970dd5272d33a757378a12c8f8e64ea7bf99e8e86e + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 languageName: node linkType: hard @@ -1198,30 +1224,30 @@ __metadata: languageName: node linkType: hard -"discord-api-types@npm:0.37.83": - version: 0.37.83 - resolution: "discord-api-types@npm:0.37.83" - checksum: ab2a31188352d9c742f09a114a95322e7f7de90199cb9f5571f7f5ac25765e7abc9b83c15c14d513ffc5e1d63d9e3ea5ff088fa8a1c5d9c1e1f395b27027cef0 +"discord-api-types@npm:^0.37.114": + version: 0.37.115 + resolution: "discord-api-types@npm:0.37.115" + checksum: 5886d94992285bdd3936a92f8affa01b6703b5cb371b2fffe2a6450dd182922d3db651d5e022a24c903afd6af19e07bf20f17f7c095c1c0ff8dfbf7d97d93348 languageName: node linkType: hard "discord.js@npm:^14.15.3": - version: 14.15.3 - resolution: "discord.js@npm:14.15.3" + version: 14.17.3 + resolution: "discord.js@npm:14.17.3" dependencies: - "@discordjs/builders": ^1.8.2 + "@discordjs/builders": ^1.10.0 "@discordjs/collection": 1.5.3 - "@discordjs/formatters": ^0.4.0 - "@discordjs/rest": ^2.3.0 - "@discordjs/util": ^1.1.0 - "@discordjs/ws": ^1.1.1 + "@discordjs/formatters": ^0.6.0 + "@discordjs/rest": ^2.4.2 + "@discordjs/util": ^1.1.1 + "@discordjs/ws": ^1.2.0 "@sapphire/snowflake": 3.5.3 - discord-api-types: 0.37.83 + discord-api-types: ^0.37.114 fast-deep-equal: 3.1.3 lodash.snakecase: 4.1.1 - tslib: 2.6.2 - undici: 6.13.0 - checksum: 0b521caee9040c3a39200e6bf01b60230e9abd89b13e632054be2a2e08b74708b0776dd61ccf5e737968c33907e824c7fca9aeb62a293700cd5d517ce82f795d + tslib: ^2.6.3 + undici: 6.19.8 + checksum: 70b3ea6d2e0f91f6b934c7fd8d7202e8f3530ff25000d1004a890f5f1156f615f361ba1a751b7685f52b91f7834210e73a9f41e32f050a05cf02151bcff67466 languageName: node linkType: hard @@ -1385,7 +1411,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0, eslint-visitor-keys@npm:^3.4.1": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 @@ -1454,11 +1480,11 @@ __metadata: linkType: hard "esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -1533,15 +1559,15 @@ __metadata: linkType: hard "fast-glob@npm:^3.2.9": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + micromatch: ^4.0.8 + checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd languageName: node linkType: hard @@ -1560,11 +1586,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.18.0 + resolution: "fastq@npm:1.18.0" dependencies: reusify: ^1.0.4 - checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + checksum: fb8d94318c2e5545a1913c1647b35e8b7825caaba888a98ef9887085e57f5a82104aefbb05f26c81d4e220f02b2ea6f2c999132186d8c77e6c681d91870191ba languageName: node linkType: hard @@ -1608,28 +1634,19 @@ __metadata: linkType: hard "flatted@npm:^3.2.9": - version: 3.3.1 - resolution: "flatted@npm:3.3.1" - checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: ac3c159742e01d0e860a861164bcfd35bb567ccbebb8a0dd041e61cf3c64a435b917dd1e7ed1c380c2ebca85735fb16644485ec33665bc6aafc3b316aa1eed44 languageName: node linkType: hard "foreground-child@npm:^3.1.0": - version: 3.2.1 - resolution: "foreground-child@npm:3.2.1" + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" dependencies: cross-spawn: ^7.0.0 signal-exit: ^4.0.1 - checksum: 3e2e844d6003c96d70affe8ae98d7eaaba269a868c14d997620c088340a8775cd5d2d9043e6ceebae1928d8d9a874911c4d664b9a267e8995945df20337aebc0 - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 languageName: node linkType: hard @@ -1700,9 +1717,9 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.2 - resolution: "glob@npm:10.4.2" +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": + version: 10.4.5 + resolution: "glob@npm:10.4.5" dependencies: foreground-child: ^3.1.0 jackspeak: ^3.1.2 @@ -1712,7 +1729,7 @@ __metadata: path-scurry: ^1.11.1 bin: glob: dist/esm/bin.mjs - checksum: bd7c0e30701136e936f414e5f6f82c7f04503f01df77408f177aa584927412f0bde0338e6ec541618cd21eacc57dde33e7b3c6c0a779cc1c6e6a0e14f3d15d9b + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a languageName: node linkType: hard @@ -1792,12 +1809,12 @@ __metadata: linkType: hard "https-proxy-agent@npm:^7.0.1": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" dependencies: - agent-base: ^7.0.2 + agent-base: ^7.1.2 debug: 4 - checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857 + checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d languageName: node linkType: hard @@ -1818,9 +1835,9 @@ __metadata: linkType: hard "ignore@npm:^5.2.0": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be languageName: node linkType: hard @@ -1841,13 +1858,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -1898,13 +1908,6 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -1941,15 +1944,15 @@ __metadata: linkType: hard "jackspeak@npm:^3.1.2": - version: 3.4.0 - resolution: "jackspeak@npm:3.4.0" + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true - checksum: 350f6f311018bb175ffbe736b19c26ac0b134bb5a17a638169e89594eb0c24ab1c658ab3a2fda24ff63b3b19292e1a5ec19d2255bc526df704e8168d392bef85 + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 languageName: node linkType: hard @@ -1960,10 +1963,10 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^9.0.0": - version: 9.0.0 - resolution: "js-tokens@npm:9.0.0" - checksum: 427d0db681caab0c906cfc78a0235bbe7b41712cee83f3f14785c1de079a1b1a85693cc8f99a3f71685d0d76acaa5b9c8920850b67f93d3eeb7ef186987d186c +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 8b604020b1a550e575404bfdde4d12c11a7991ffe0c58a2cf3515b9a512992dc7010af788f0d8b7485e403d462d9e3d3b96c4ff03201550fdbb09e17c811e054 languageName: node linkType: hard @@ -2026,12 +2029,12 @@ __metadata: linkType: hard "local-pkg@npm:^0.5.0": - version: 0.5.0 - resolution: "local-pkg@npm:0.5.0" + version: 0.5.1 + resolution: "local-pkg@npm:0.5.1" dependencies: - mlly: ^1.4.2 - pkg-types: ^1.0.3 - checksum: b0a6931e588ad4f7bf4ab49faacf49e07fc4d05030f895aa055d46727a15b99300d39491cf2c3e3f05284aec65565fb760debb74c32e64109f4a101f9300d81a + mlly: ^1.7.3 + pkg-types: ^1.2.1 + checksum: 478effb440780d412bff78ed80d1593d707a504931a7e5899d6570d207da1e661a6128c3087286ff964696a55c607c2bbd2bbe98377401c7d395891c160fa6e1 languageName: node linkType: hard @@ -2075,16 +2078,16 @@ __metadata: linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.3.0 - resolution: "lru-cache@npm:10.3.0" - checksum: f2289639bd94cf3c87bfd8a77ac991f9afe3af004ddca3548c3dae63ead1c73bba449a60a4e270992e16cf3261b3d4130943234d52ca3a4d4de2fc074a3cc7b5 + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a languageName: node linkType: hard -"luxon@npm:~3.4.0": - version: 3.4.4 - resolution: "luxon@npm:3.4.4" - checksum: 36c1f99c4796ee4bfddf7dc94fa87815add43ebc44c8934c924946260a58512f0fd2743a629302885df7f35ccbd2d13f178c15df046d0e3b6eb71db178f1c60c +"luxon@npm:~3.5.0": + version: 3.5.0 + resolution: "luxon@npm:3.5.0" + checksum: f290fe5788c8e51e748744f05092160d4be12150dca70f9fadc0d233e53d60ce86acd82e7d909a114730a136a77e56f0d3ebac6141bbb82fd310969a4704825b languageName: node linkType: hard @@ -2096,31 +2099,30 @@ __metadata: linkType: hard "magic-string@npm:^0.30.5": - version: 0.30.10 - resolution: "magic-string@npm:0.30.10" + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" dependencies: - "@jridgewell/sourcemap-codec": ^1.4.15 - checksum: 456fd47c39b296c47dff967e1965121ace35417eab7f45a99e681e725b8661b48e1573c366ee67a27715025b3740773c46b088f115421c7365ea4ea6fa10d399 + "@jridgewell/sourcemap-codec": ^1.5.0 + checksum: f4b4ed17c5ada64f77fc98491847302ebad64894a905c417c943840c0384662118c9b37f9f68bb86add159fa4749ff6f118c4627d69a470121b46731f8debc6d languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" dependencies: - "@npmcli/agent": ^2.0.0 - cacache: ^18.0.0 + "@npmcli/agent": ^3.0.0 + cacache: ^19.0.1 http-cache-semantics: ^4.1.1 - is-lambda: ^1.0.1 minipass: ^7.0.2 - minipass-fetch: ^3.0.0 + minipass-fetch: ^4.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - proc-log: ^4.2.0 + negotiator: ^1.0.0 + proc-log: ^5.0.0 promise-retry: ^2.0.1 - ssri: ^10.0.0 - checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd + ssri: ^12.0.0 + checksum: 6fb2fee6da3d98f1953b03d315826b5c5a4ea1f908481afc113782d8027e19f080c85ae998454de4e5f27a681d3ec58d57278f0868d4e0b736f51d396b661691 languageName: node linkType: hard @@ -2138,13 +2140,13 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4": - version: 4.0.7 - resolution: "micromatch@npm:4.0.7" +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" dependencies: braces: ^3.0.3 picomatch: ^2.3.1 - checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 languageName: node linkType: hard @@ -2182,18 +2184,18 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" dependencies: encoding: ^0.1.13 minipass: ^7.0.3 minipass-sized: ^1.0.3 - minizlib: ^2.1.2 + minizlib: ^3.0.1 dependenciesMeta: encoding: optional: true - checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 + checksum: 7d59a31011ab9e4d1af6562dd4c4440e425b2baf4c5edbdd2e22fb25a88629e1cdceca39953ff209da504a46021df520f18fd9a519f36efae4750ff724ddadea languageName: node linkType: hard @@ -2233,64 +2235,57 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + minipass: ^7.0.4 + rimraf: ^5.0.5 + checksum: da0a53899252380475240c587e52c824f8998d9720982ba5c4693c68e89230718884a209858c156c6e08d51aad35700a3589987e540593c36f6713fe30cd7338 languageName: node linkType: hard -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d languageName: node linkType: hard -"mlly@npm:^1.4.2, mlly@npm:^1.7.0": - version: 1.7.1 - resolution: "mlly@npm:1.7.1" +"mlly@npm:^1.7.3": + version: 1.7.3 + resolution: "mlly@npm:1.7.3" dependencies: - acorn: ^8.11.3 + acorn: ^8.14.0 pathe: ^1.1.2 - pkg-types: ^1.1.1 - ufo: ^1.5.3 - checksum: 956a6d54119eef782f302580f63a9800654e588cd70015b4218a00069c6ef11b87984e8ffe140a4668b0100ad4022b11d1f9b11ac2c6dbafa4d8bc33ae3a08a8 + pkg-types: ^1.2.1 + ufo: ^1.5.4 + checksum: 60d309c7ce2ac162224a087fcd683a891260511f57011b2f436b54dfef146b8aae7473013958a58d5b6039f2a8692c32a2599c8390c5b307d1119ad0d917b414 languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard "nanoid@npm:^3.3.7": - version: 3.3.7 - resolution: "nanoid@npm:3.3.7" + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" bin: nanoid: bin/nanoid.cjs - checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 + checksum: dfe0adbc0c77e9655b550c333075f51bb28cfc7568afbf3237249904f9c86c9aaaed1f113f0fddddba75673ee31c758c30c43d4414f014a52a7a626efc5958c9 languageName: node linkType: hard @@ -2308,41 +2303,41 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb languageName: node linkType: hard "node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 glob: ^10.3.10 graceful-fs: ^4.2.6 - make-fetch-happen: ^13.0.0 - nopt: ^7.0.0 - proc-log: ^3.0.0 + make-fetch-happen: ^14.0.3 + nopt: ^8.0.0 + proc-log: ^5.0.0 semver: ^7.3.5 - tar: ^6.1.2 - which: ^4.0.0 + tar: ^7.4.3 + which: ^5.0.0 bin: node-gyp: bin/node-gyp.js - checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 + checksum: d7d5055ccc88177f721c7cd4f8f9440c29a0eb40e7b79dba89ef882ec957975dfc1dcb8225e79ab32481a02016eb13bbc051a913ea88d482d3cbdf2131156af4 languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" dependencies: abbrev: ^2.0.0 bin: nopt: bin/nopt.js - checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 + checksum: 2cfc65e7ee38af2e04aea98f054753b0230011c0eeca4ecf131bd7d25984cbbf6f214586e0ae5dfcc2e830bc0bffa5a7fb28ea8d0b306ffd4ae8ea2d814c1ab3 languageName: node linkType: hard @@ -2414,19 +2409,17 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 8c92d533acf82f0d12f7e196edccff773f384098bbb048acdd55a08778ce4fc8889d8f1bde72969487bd96f9c63212698d79744c20bedfce36c5b00b46d369f8 languageName: node linkType: hard "package-json-from-dist@npm:^1.0.0": - version: 1.0.0 - resolution: "package-json-from-dist@npm:1.0.0" - checksum: ac706ec856a5a03f5261e4e48fa974f24feb044d51f84f8332e2af0af04fbdbdd5bbbfb9cbbe354190409bc8307c83a9e38c6672c3c8855f709afb0006a009ea + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 languageName: node linkType: hard @@ -2498,10 +2491,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 languageName: node linkType: hard @@ -2512,25 +2505,25 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.1": - version: 1.1.1 - resolution: "pkg-types@npm:1.1.1" +"pkg-types@npm:^1.2.1": + version: 1.3.0 + resolution: "pkg-types@npm:1.3.0" dependencies: - confbox: ^0.1.7 - mlly: ^1.7.0 + confbox: ^0.1.8 + mlly: ^1.7.3 pathe: ^1.1.2 - checksum: 78ee49eea8c03802ffbdc79dfb6a741f905a4053453280cd2f1149850523fdaf46d39ecb88c2c2f757cceb9883f234bb0e56371084b5895632bdb00ef0f7298f + checksum: 9637de6bbaceb4cf7c99c098b9286de63382cdd916e9e02c243dcd9f8725650aba7025a80cd7ac085176054b71c07656045b558fe452fe4ed2445383b51d6e24 languageName: node linkType: hard -"postcss@npm:^8.4.38": - version: 8.4.39 - resolution: "postcss@npm:8.4.39" +"postcss@npm:^8.4.43": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" dependencies: nanoid: ^3.3.7 - picocolors: ^1.0.1 - source-map-js: ^1.2.0 - checksum: 14b130c90f165961772bdaf99c67f907f3d16494adf0868e57ef68baa67e0d1f6762db9d41ab0f4d09bab6fb7888588dba3596afd1a235fd5c2d43fba7006ac6 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: eb5d6cbdca24f50399aafa5d2bea489e4caee4c563ea1edd5a2485bc5f84e9ceef3febf170272bc83a99c31d23a316ad179213e853f34c2a7a8ffa534559d63a languageName: node linkType: hard @@ -2552,17 +2545,10 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 - languageName: node - linkType: hard - -"proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: c78b26ecef6d5cce4a7489a1e9923d7b4b1679028c8654aef0463b27f4a90b0946cd598f55799da602895c52feb085ec76381d007ab8dcceebd40b89c2f9dfe0 languageName: node linkType: hard @@ -2629,27 +2615,41 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.13.0": - version: 4.18.0 - resolution: "rollup@npm:4.18.0" - dependencies: - "@rollup/rollup-android-arm-eabi": 4.18.0 - "@rollup/rollup-android-arm64": 4.18.0 - "@rollup/rollup-darwin-arm64": 4.18.0 - "@rollup/rollup-darwin-x64": 4.18.0 - "@rollup/rollup-linux-arm-gnueabihf": 4.18.0 - "@rollup/rollup-linux-arm-musleabihf": 4.18.0 - "@rollup/rollup-linux-arm64-gnu": 4.18.0 - "@rollup/rollup-linux-arm64-musl": 4.18.0 - "@rollup/rollup-linux-powerpc64le-gnu": 4.18.0 - "@rollup/rollup-linux-riscv64-gnu": 4.18.0 - "@rollup/rollup-linux-s390x-gnu": 4.18.0 - "@rollup/rollup-linux-x64-gnu": 4.18.0 - "@rollup/rollup-linux-x64-musl": 4.18.0 - "@rollup/rollup-win32-arm64-msvc": 4.18.0 - "@rollup/rollup-win32-ia32-msvc": 4.18.0 - "@rollup/rollup-win32-x64-msvc": 4.18.0 - "@types/estree": 1.0.5 +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: ^10.3.7 + bin: + rimraf: dist/esm/bin.mjs + checksum: 50e27388dd2b3fa6677385fc1e2966e9157c89c86853b96d02e6915663a96b7ff4d590e14f6f70e90f9b554093aa5dbc05ac3012876be558c06a65437337bc05 + languageName: node + linkType: hard + +"rollup@npm:^4.20.0": + version: 4.30.1 + resolution: "rollup@npm:4.30.1" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.30.1 + "@rollup/rollup-android-arm64": 4.30.1 + "@rollup/rollup-darwin-arm64": 4.30.1 + "@rollup/rollup-darwin-x64": 4.30.1 + "@rollup/rollup-freebsd-arm64": 4.30.1 + "@rollup/rollup-freebsd-x64": 4.30.1 + "@rollup/rollup-linux-arm-gnueabihf": 4.30.1 + "@rollup/rollup-linux-arm-musleabihf": 4.30.1 + "@rollup/rollup-linux-arm64-gnu": 4.30.1 + "@rollup/rollup-linux-arm64-musl": 4.30.1 + "@rollup/rollup-linux-loongarch64-gnu": 4.30.1 + "@rollup/rollup-linux-powerpc64le-gnu": 4.30.1 + "@rollup/rollup-linux-riscv64-gnu": 4.30.1 + "@rollup/rollup-linux-s390x-gnu": 4.30.1 + "@rollup/rollup-linux-x64-gnu": 4.30.1 + "@rollup/rollup-linux-x64-musl": 4.30.1 + "@rollup/rollup-win32-arm64-msvc": 4.30.1 + "@rollup/rollup-win32-ia32-msvc": 4.30.1 + "@rollup/rollup-win32-x64-msvc": 4.30.1 + "@types/estree": 1.0.6 fsevents: ~2.3.2 dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -2660,6 +2660,10 @@ __metadata: 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": @@ -2668,6 +2672,8 @@ __metadata: 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": @@ -2688,7 +2694,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 54cde921e763017ce952ba76ec77d58dd9c01e3536c3be628d4af8c59d9b2f0e1e6a11b30fda44845c7b74098646cd972feb3bcd2f4a35d3293366f2eeb0a39e + checksum: 4a3df04dc639f36cb2d7746c829c4957a3df54b449171280a108c32c4f578677207f330e358c48637d7414ef30c1542964641c82bebc0643d5d5baee4044542e languageName: node linkType: hard @@ -2701,15 +2707,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.8.0": - version: 7.8.1 - resolution: "rxjs@npm:7.8.1" - dependencies: - tslib: ^2.1.0 - checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 - languageName: node - linkType: hard - "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -2718,11 +2715,11 @@ __metadata: linkType: hard "semver@npm:^7.3.5, semver@npm:^7.3.7": - version: 7.6.2 - resolution: "semver@npm:7.6.2" + version: 7.6.3 + resolution: "semver@npm:7.6.3" bin: semver: bin/semver.js - checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 languageName: node linkType: hard @@ -2771,13 +2768,13 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" dependencies: - agent-base: ^7.1.1 + agent-base: ^7.1.2 debug: ^4.3.4 socks: ^2.8.3 - checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67 + checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d languageName: node linkType: hard @@ -2791,10 +2788,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b languageName: node linkType: hard @@ -2805,12 +2802,12 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^10.0.0": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" dependencies: minipass: ^7.0.3 - checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + checksum: ef4b6b0ae47b4a69896f5f1c4375f953b9435388c053c36d27998bc3d73e046969ccde61ab659e679142971a0b08e50478a1228f62edb994105b280f17900c98 languageName: node linkType: hard @@ -2822,9 +2819,9 @@ __metadata: linkType: hard "std-env@npm:^3.5.0": - version: 3.7.0 - resolution: "std-env@npm:3.7.0" - checksum: 4f489d13ff2ab838c9acd4ed6b786b51aa52ecacdfeaefe9275fcb220ff2ac80c6e95674723508fd29850a694569563a8caaaea738eb82ca16429b3a0b50e510 + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: ad4554485c2d09138a1d0f03944245e169510e6f5200b7d30fcdd4536e27a2a9a2fd934caff7ef58ebbe21993fa0e2b9e5b1979f431743c925305863b7ff36d5 languageName: node linkType: hard @@ -2883,11 +2880,11 @@ __metadata: linkType: hard "strip-literal@npm:^2.0.0": - version: 2.1.0 - resolution: "strip-literal@npm:2.1.0" + version: 2.1.1 + resolution: "strip-literal@npm:2.1.1" dependencies: - js-tokens: ^9.0.0 - checksum: 37c2072634d2de11a3644fe1bcf4abd566d85e89f0d8e8b10d35d04e7bef962e7c112fbe5b805ce63e59dfacedc240356eeef57976351502966b7c64b742c6ac + js-tokens: ^9.0.1 + checksum: 781f2018b2aa9e8e149882dfa35f4d284c244424e7b66cc62259796dbc4bc6da9d40f9206949ba12fa839f5f643d6c62a309f7eec4ff6e76ced15f0730f04831 languageName: node linkType: hard @@ -2900,17 +2897,17 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.0.1 + mkdirp: ^3.0.1 + yallist: ^5.0.0 + checksum: 8485350c0688331c94493031f417df069b778aadb25598abdad51862e007c39d1dd5310702c7be4a6784731a174799d8885d2fde0484269aea205b724d7b2ffa languageName: node linkType: hard @@ -2922,9 +2919,9 @@ __metadata: linkType: hard "tinybench@npm:^2.5.1": - version: 2.8.0 - resolution: "tinybench@npm:2.8.0" - checksum: 024a307c6a71f6e2903e110952457ee3dfa606093b45d7f49efcfd01d452650e099474080677ff650b0fd76b49074425ac68ff2a70561699a78515a278bf0862 + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 1ab00d7dfe0d1f127cbf00822bacd9024f7a50a3ecd1f354a8168e0b7d2b53a639a24414e707c27879d1adc0f5153141d51d76ebd7b4d37fe245e742e5d91fe8 languageName: node linkType: hard @@ -2958,13 +2955,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.6.2": - version: 2.6.2 - resolution: "tslib@npm:2.6.2" - checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad - languageName: node - linkType: hard - "tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -2972,10 +2962,10 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.6.2": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 +"tslib@npm:^2.6.2, tslib@npm:^2.6.3": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a languageName: node linkType: hard @@ -2999,10 +2989,10 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 +"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 3b32f873cd02bc7001b00a61502b7ddc4b49278aabe68d652f732e1b5d768c072de0bc734b427abf59d0520a5f19a2e07309ab921ef02018fa1cb4af155cdb37 languageName: node linkType: hard @@ -3033,42 +3023,49 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.5.3": - version: 1.5.3 - resolution: "ufo@npm:1.5.3" - checksum: 2f54fa543b2e689cc4ab341fe2194937afe37c5ee43cd782e6ecc184e36859e84d4197a43ae4cd6e9a56f793ca7c5b950dfff3f16fadaeef9b6b88b05c88c8ef +"ufo@npm:^1.5.4": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: f244703b7d4f9f0df4f9af23921241ab73410b591f4e5b39c23e3147f3159b139a4b1fb5903189c306129f7a16b55995dac0008e0fbae88a37c3e58cbc34d833 languageName: node linkType: hard -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017 languageName: node linkType: hard -"undici@npm:6.13.0": - version: 6.13.0 - resolution: "undici@npm:6.13.0" - checksum: 47495e93aceeab18664678b6fb0ea2395b7c13a33d2ed4f7f36eb9be9ec5cd6f8e3a4ddaec18127da5e2012e5d7666ca824c7dc70af606dcfe6fdb8441ee3a7a +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: b7bc50f012dc6afbcce56c9fd62d7e86b20a62ff21f12b7b5cbf1973b9578d90f22a9c7fe50e638e96905d33893bf2f9f16d98929c4673c2480de05c6c96ea8b languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df +"undici@npm:6.19.8": + version: 6.19.8 + resolution: "undici@npm:6.19.8" + checksum: 2f812769992a187d9c55809b6943059c0bb1340687a0891f769de02101342dded0b9c8874cd5af4a49daaeba8284101d74a1fbda4de04c604ba7a5f6190b9ea2 languageName: node linkType: hard -"unique-slug@npm:^4.0.0": +"unique-filename@npm:^4.0.0": version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: ^5.0.0 + checksum: 6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + checksum: 222d0322bc7bbf6e45c08967863212398313ef73423f4125e075f893a02405a5ffdbaaf150f7dd1e99f8861348a486dd079186d27c5f2c60e465b7dcbb1d3e5b languageName: node linkType: hard @@ -3097,18 +3094,19 @@ __metadata: linkType: hard "vite@npm:^5.0.0": - version: 5.3.2 - resolution: "vite@npm:5.3.2" + version: 5.4.11 + resolution: "vite@npm:5.4.11" dependencies: esbuild: ^0.21.3 fsevents: ~2.3.3 - postcss: ^8.4.38 - rollup: ^4.13.0 + postcss: ^8.4.43 + rollup: ^4.20.0 peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 less: "*" lightningcss: ^1.21.0 sass: "*" + sass-embedded: "*" stylus: "*" sugarss: "*" terser: ^5.4.0 @@ -3124,6 +3122,8 @@ __metadata: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -3132,7 +3132,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: d6872cb72701ec4b8d8dbccc5deacb5af03c3f247df02750787d6dcf4e49e207effed7a06e4f103008a918188cdf0789ff7348db451ebd0d59ef1a22ae4a267d + checksum: 8c5b31d17487b69c40a30419dc0ade9f33360eb6893dbfa33a90980271bd74d35ae550b5cbb2a9e640f0df41ea36fd1bb4f222c98f6d02e607080f20832e69e8 languageName: node linkType: hard @@ -3197,26 +3197,26 @@ __metadata: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" dependencies: isexe: ^3.1.1 bin: node-which: bin/which.js - checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + checksum: 6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90 languageName: node linkType: hard "why-is-node-running@npm:^2.2.2": - version: 2.2.2 - resolution: "why-is-node-running@npm:2.2.2" + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" dependencies: siginfo: ^2.0.0 stackback: 0.0.2 bin: why-is-node-running: cli.js - checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + checksum: 58ebbf406e243ace97083027f0df7ff4c2108baf2595bb29317718ef207cc7a8104e41b711ff65d6fa354f25daa8756b67f2f04931a4fd6ba9d13ae8197496fb languageName: node linkType: hard @@ -3278,6 +3278,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0"