commit 0f8e912093aee70017cd8470ffaa13072123f671 Author: Badstagram Date: Mon Dec 9 12:01:58 2024 +0000 Initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96fab4f --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +node_modules +.pnp +.pnp.js + +# Local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..675ffc2 --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# Turborepo starter + +This is an official starter Turborepo. + +## Using this example + +Run the following command: + +```sh +npx create-turbo@latest +``` + +## What's inside? + +This Turborepo includes the following packages/apps: + +### Apps and Packages + +- `docs`: a [Next.js](https://nextjs.org/) app +- `web`: another [Next.js](https://nextjs.org/) app +- `@wyvern/ui`: a stub React component library shared by both `web` and `docs` applications +- `@wyvern/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@wyvern/typescript-config`: `tsconfig.json`s used throughout the monorepo + +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Utilities + +This Turborepo has some additional tools already setup for you: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting + +### Build + +To build all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm build +``` + +### Develop + +To develop all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm dev +``` + +### Remote Caching + +Turborepo can use a technique known as [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. + +By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup), then enter the following commands: + +``` +cd my-turborepo +npx turbo login +``` + +This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). + +Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: + +``` +npx turbo link +``` + +## Useful Links + +Learn more about the power of Turborepo: + +- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) +- [Caching](https://turbo.build/repo/docs/core-concepts/caching) +- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) +- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) +- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) +- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) diff --git a/apps/bot/.sapphire/templates/arguments/argument.ts b/apps/bot/.sapphire/templates/arguments/argument.ts new file mode 100644 index 0000000..5493fc0 --- /dev/null +++ b/apps/bot/.sapphire/templates/arguments/argument.ts @@ -0,0 +1,15 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Argument } from '@sapphire/framework'; + +@ApplyOptions({}) +export class UserArgument extends Argument { + public override run(parameter: string) { + return this.ok(parameter); + } +} + +declare module '@sapphire/framework' { + interface ArgType { + /*{{name}}*/: string; + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/commands/context-menu-command.ts b/apps/bot/.sapphire/templates/commands/context-menu-command.ts new file mode 100644 index 0000000..73e2e17 --- /dev/null +++ b/apps/bot/.sapphire/templates/commands/context-menu-command.ts @@ -0,0 +1,20 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { ApplicationCommandType } from 'discord.js'; + +@ApplyOptions({ + description: 'A basic contextMenu command' +}) +export class UserCommand extends Command { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerContextMenuCommand((builder) => + builder // + .setName(this.name) + .setType(ApplicationCommandType.Message) + ); + } + + public override async contextMenuRun(interaction: Command.ContextMenuCommandInteraction) { + return interaction.reply({ content: 'Hello world!' }); + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/commands/message-command.ts b/apps/bot/.sapphire/templates/commands/message-command.ts new file mode 100644 index 0000000..9e5f549 --- /dev/null +++ b/apps/bot/.sapphire/templates/commands/message-command.ts @@ -0,0 +1,12 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import type { Message } from 'discord.js'; + +@ApplyOptions({ + description: 'A basic command' +}) +export class UserCommand extends Command { + public override async messageRun(message: Message) { + return message.channel.send('Hello world!'); + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/commands/slash-command.ts b/apps/bot/.sapphire/templates/commands/slash-command.ts new file mode 100644 index 0000000..df1e49a --- /dev/null +++ b/apps/bot/.sapphire/templates/commands/slash-command.ts @@ -0,0 +1,19 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; + +@ApplyOptions({ + description: 'A basic slash command' +}) +export class UserCommand extends Command { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + ); + } + + public override async chatInputRun(interaction: Command.ChatInputCommandInteraction) { + return interaction.reply({ content: 'Hello world!' }); + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/interaction-handlers/autocomplete-interaction-handler.ts b/apps/bot/.sapphire/templates/interaction-handlers/autocomplete-interaction-handler.ts new file mode 100644 index 0000000..377f825 --- /dev/null +++ b/apps/bot/.sapphire/templates/interaction-handlers/autocomplete-interaction-handler.ts @@ -0,0 +1,30 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { InteractionHandler, InteractionHandlerTypes } from '@sapphire/framework'; +import { AutocompleteInteraction, type ApplicationCommandOptionChoiceData } from 'discord.js'; + +@ApplyOptions({ + interactionHandlerType: InteractionHandlerTypes.Autocomplete +}) +export class AutocompleteHandler extends InteractionHandler { + public override async run(interaction: AutocompleteInteraction, result: ApplicationCommandOptionChoiceData[]) { + return interaction.respond(result); + } + + public override async parse(interaction: AutocompleteInteraction) { + // Only run this interaction for the command with ID '1000000000000000000' + if (interaction.commandId !== '1000000000000000000') return this.none(); + // Get the focussed (current) option + const focusedOption = interaction.options.getFocused(true); + // Ensure that the option name is one that can be autocompleted, or return none if not. + switch (focusedOption.name) { + case 'search': { + // Search your API or similar. This is example code! + const searchResult = await myApi.searchForSomething(focusedOption.value); + // Map the search results to the structure required for Autocomplete + return this.some(searchResult.map((match) => ({ name: match.name, value: match.key }))); + } + default: + return this.none(); + } + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/interaction-handlers/button-interaction-handler.ts b/apps/bot/.sapphire/templates/interaction-handlers/button-interaction-handler.ts new file mode 100644 index 0000000..f98d51a --- /dev/null +++ b/apps/bot/.sapphire/templates/interaction-handlers/button-interaction-handler.ts @@ -0,0 +1,22 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { InteractionHandler, InteractionHandlerTypes } from '@sapphire/framework'; +import type { ButtonInteraction } from 'discord.js'; + +@ApplyOptions({ + interactionHandlerType: InteractionHandlerTypes.Button +}) +export class ButtonHandler extends InteractionHandler { + public async run(interaction: ButtonInteraction) { + await interaction.reply({ + content: 'Hello from a button interaction handler!', + // Let's make it so only the person who pressed the button can see this message! + ephemeral: true + }); + } + + public override parse(interaction: ButtonInteraction) { + if (interaction.customId !== 'my-awesome-button') return this.none(); + + return this.some(); + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/interaction-handlers/modal-interaction-handler.ts b/apps/bot/.sapphire/templates/interaction-handlers/modal-interaction-handler.ts new file mode 100644 index 0000000..7ba93ac --- /dev/null +++ b/apps/bot/.sapphire/templates/interaction-handlers/modal-interaction-handler.ts @@ -0,0 +1,21 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { InteractionHandler, InteractionHandlerTypes } from '@sapphire/framework'; +import type { ModalSubmitInteraction } from 'discord.js'; + +@ApplyOptions({ + interactionHandlerType: InteractionHandlerTypes.ModalSubmit +}) +export class ModalHandler extends InteractionHandler { + public async run(interaction: ModalSubmitInteraction) { + await interaction.reply({ + content: 'Thank you for submitting the form!', + ephemeral: true + }); + } + + public override parse(interaction: ModalSubmitInteraction) { + if (interaction.customId !== 'hello-popup') return this.none(); + + return this.some(); + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/interaction-handlers/select-menu-interaction-handler.ts b/apps/bot/.sapphire/templates/interaction-handlers/select-menu-interaction-handler.ts new file mode 100644 index 0000000..fe8359f --- /dev/null +++ b/apps/bot/.sapphire/templates/interaction-handlers/select-menu-interaction-handler.ts @@ -0,0 +1,21 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { InteractionHandler, InteractionHandlerTypes } from '@sapphire/framework'; +import type { StringSelectMenuInteraction } from 'discord.js'; + +@ApplyOptions({ + interactionHandlerType: InteractionHandlerTypes.SelectMenu +}) +export class MenuHandler extends InteractionHandler { + public override async run(interaction: StringSelectMenuInteraction) { + await interaction.reply({ + // Remember how we can have multiple values? Let's get the first one! + content: `You selected: ${interaction.values[0]}` + }); + } + + public override parse(interaction: StringSelectMenuInteraction) { + if (interaction.customId !== 'my-echo-select') return this.none(); + + return this.some(); + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/listeners/listener.ts b/apps/bot/.sapphire/templates/listeners/listener.ts new file mode 100644 index 0000000..93bcdc1 --- /dev/null +++ b/apps/bot/.sapphire/templates/listeners/listener.ts @@ -0,0 +1,7 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Listener } from '@sapphire/framework'; + +@ApplyOptions({}) +export class UserEvent extends Listener { + public override run() {} +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/preconditions/precondition.ts b/apps/bot/.sapphire/templates/preconditions/precondition.ts new file mode 100644 index 0000000..3c8b8fb --- /dev/null +++ b/apps/bot/.sapphire/templates/preconditions/precondition.ts @@ -0,0 +1,22 @@ +import { Precondition } from '@sapphire/framework'; +import type { ChatInputCommandInteraction, ContextMenuCommandInteraction, Message } from 'discord.js'; + +export class UserPrecondition extends Precondition { + public override messageRun(message: Message) { + return this.ok(); + } + + public override chatInputRun(interaction: ChatInputCommandInteraction) { + return this.ok(); + } + + public override contextMenuRun(interaction: ContextMenuCommandInteraction) { + return this.ok(); + } +} + +declare module '@sapphire/framework' { + interface Preconditions { + /*{{name}}*/: never; + } +} \ No newline at end of file diff --git a/apps/bot/.sapphire/templates/routes/route.ts b/apps/bot/.sapphire/templates/routes/route.ts new file mode 100644 index 0000000..cd932e9 --- /dev/null +++ b/apps/bot/.sapphire/templates/routes/route.ts @@ -0,0 +1,15 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { methods, Route, type ApiRequest, type ApiResponse } from '@sapphire/plugin-api'; + +@ApplyOptions({ + route: '/*{{name}}*/' +}) +export class UserRoute extends Route { + public [methods.GET](_request: ApiRequest, response: ApiResponse) { + response.json({ message: 'Hello World' }); + } + + public [methods.POST](_request: ApiRequest, response: ApiResponse) { + response.json({ message: 'Hello World' }); + } +} \ No newline at end of file diff --git a/apps/bot/README.md b/apps/bot/README.md new file mode 100644 index 0000000..73ffd03 --- /dev/null +++ b/apps/bot/README.md @@ -0,0 +1,32 @@ +# TypeScript Complete Sapphire Bot example + +This is a more complete setup of a Discord bot using the [sapphire framework][sapphire] written in TypeScript. + +It is similar to the [starter setup](../with-typescript-starter/), but adds more data structures and a more complete setup. + +## How to use it? + +### Prerequisite + +```sh +npm install +``` + +### Development + +This example can be run with `tsc-watch` to watch the files and automatically restart your bot. + +```sh +npm run watch:start +``` + +### Production + +You can also run the bot with `npm dev`, this will first build your code and then run `node ./dist/index.js`. But this is not the recommended way to run a bot in production. + +## License + +Dedicated to the public domain via the [Unlicense], courtesy of the Sapphire Community and its contributors. + +[sapphire]: https://github.com/sapphiredev/framework +[unlicense]: https://github.com/sapphiredev/examples/blob/main/LICENSE.md diff --git a/apps/bot/package.json b/apps/bot/package.json new file mode 100644 index 0000000..9d65d52 --- /dev/null +++ b/apps/bot/package.json @@ -0,0 +1,71 @@ +{ + "name": "@wyvern/bot", + "version": "1.0.0", + "main": "dist/index.js", + "author": "@sapphire", + "license": "UNLICENSE", + "type": "module", + "dependencies": { + "@wyvern/config": "*", + "@wyvern/database": "*", + "@wyvern/plugin-custom-logger": "*", + "@wyvern/urban-dictionary": "*", + "@wyvern/error-handler": "*", + "@sapphire/decorators": "^6.0.4", + "@sapphire/discord-utilities": "^3.2.2", + "@sapphire/discord.js-utilities": "7.1.6", + "@sapphire/fetch": "^3.0.2", + "@sapphire/framework": "^5.0.7", + "@sapphire/plugin-api": "^6.1.1", + "@sapphire/plugin-editable-commands": "^4.0.2", + "@sapphire/plugin-logger": "^4.0.2", + "@sapphire/plugin-subcommands": "^6.0.3", + "@sapphire/string-store": "^1.0.1", + "@sapphire/time-utilities": "^1.7.12", + "@sapphire/type": "^2.4.4", + "@sapphire/utilities": "^3.15.3", + "@skyra/env-utilities": "^1.3.0", + "colorette": "^2.0.20", + "discord.js": "^14.14.1" + }, + "devDependencies": { + "@sapphire/cli": "^1.9.3", + "@sapphire/prettier-config": "^2.0.0", + "@sapphire/ts-config": "^5.0.0", + "@types/node": "^20.11.5", + "@types/ws": "^8.5.10", + "npm-run-all2": "^6.1.1", + "prettier": "^3.2.4", + "tsc-watch": "^6.0.4", + "typescript": "~5.4.5", + "tsup": "latest" + }, + "scripts": { + "sapphire": "sapphire", + "generate": "sapphire generate", + "build": "tsup", + "watch": "tsup --watch", + "start": "node dist/index.js", + "dev": "tsup --watch --onSuccess \"node ./dist/index.js\"", + "watch:start": "tsc-watch --onSuccess \"node ./dist/index.js\"", + "format": "prettier --write \"src/**/*.ts\"", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "imports": { + "#lib/structures": "./dist/lib/structures/index.js", + "#lib/interfaces": "./dist/lib/interfaces/index.js", + "#lib/parsers": "./dist/lib/parsers/index.js", + "#lib/errors": "./dist/lib/errors/index.js", + "#lib/managers": "./dist/lib/managers/index.js", + "#lib/utils": "./dist/lib/utils.js", + "#lib/config": "./dist/lib/config.js", + "#lib/constants": "./dist/lib/constants.js", + "#lib/types": "./dist/lib/types.js", + "#lib/customIds": "./dist/lib/customIdTypes/index.js", + "#lib/markdown": "./dist/lib/markdown/index.js", + "#drizzle": "./dist/drizzle/schema.js", + "#prisma": "./dist/lib/prisma.js", + "#stringFormatters": "./dist/lib/stringFormatters/index.js" + }, + "prettier": "@sapphire/prettier-config" +} diff --git a/apps/bot/sapphire.toml b/apps/bot/sapphire.toml new file mode 100644 index 0000000..3c2d0e7 --- /dev/null +++ b/apps/bot/sapphire.toml @@ -0,0 +1,38 @@ +[project] +language = "ts" +module_system = "cjs" +base = "src" + +[variables] + +[categories] +arguments = { source_path = "arguments", target_path = "arguments" } +commands = { source_path = "commands", target_path = "commands" } +interaction-handlers = { source_path = "interaction-handlers", target_path = "interaction-handlers" } +listeners = { source_path = "listeners", target_path = "listeners" } +preconditions = { source_path = "preconditions", target_path = "preconditions" } +routes = { source_path = "routes", target_path = "routes" } + +[templates.arguments] +argument = { aliases = ["a", "arg"] } + +[templates.commands] +context-menu-command = { aliases = ["cmc", "context", "contextmenu", "contextmenucommand"] } +message-command = { aliases = ["mc", "message", "messagecommand"] } +slash-command = { aliases = ["sc", "command", "slash", "slashcommand"] } + +[templates.interaction-handlers] +autocomplete-interaction-handler = { aliases = ["aih", "auto", "autocomplete"] } +button-interaction-handler = { aliases = ["bih", "button"] } +modal-interaction-handler = { aliases = ["mih", "modal"] } +select-menu-interaction-handler = { aliases = ["smih", "select"] } + +[templates.listeners] +listener = { aliases = ["l"] } + +[templates.preconditions] +precondition = { aliases = ["p"] } + +[templates.routes] +route = { aliases = ["r"] } + diff --git a/apps/bot/src/commands/Admin/Admin.ts b/apps/bot/src/commands/Admin/Admin.ts new file mode 100644 index 0000000..3fde311 --- /dev/null +++ b/apps/bot/src/commands/Admin/Admin.ts @@ -0,0 +1,24 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { adminErrorTest, adminSyncDatabase } from './_index.js'; + +@ApplyOptions({ + description: 'Admin commands', + preconditions: ['OwnerOnly'], + subcommands: [ + { name: 'error_test', chatInputRun: adminErrorTest }, + { name: 'sync_database', chatInputRun: adminSyncDatabase } + ] +}) +export class UserCommand extends Subcommand { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + .addSubcommand((b) => b.setName('error_test').setDescription('Throw an error')) + .addSubcommand((b) => b.setName('sync_database').setDescription('Sync the database')) + ); + } +} diff --git a/apps/bot/src/commands/Admin/_adminErrorTest.ts b/apps/bot/src/commands/Admin/_adminErrorTest.ts new file mode 100644 index 0000000..89b0bc1 --- /dev/null +++ b/apps/bot/src/commands/Admin/_adminErrorTest.ts @@ -0,0 +1,7 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; + +export function adminErrorTest(_i: Subcommand.ChatInputCommandInteraction) { + const a: string = null!; + + a!.charAt(1); +} diff --git a/apps/bot/src/commands/Admin/_adminSyncDatabase.ts b/apps/bot/src/commands/Admin/_adminSyncDatabase.ts new file mode 100644 index 0000000..b85a131 --- /dev/null +++ b/apps/bot/src/commands/Admin/_adminSyncDatabase.ts @@ -0,0 +1,44 @@ +import { InternalError } from '#lib/errors'; +import { container, Result } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { prismaClient } from '@wyvern/database'; + +export async function adminSyncDatabase(i: Subcommand.ChatInputCommandInteraction) { + const res = await Result.fromAsync(container.client.guilds.fetch()); + const guildIds = res.match({ + ok: (x) => x.map((g) => g.id), + err: (e) => { + throw new InternalError(`${e}`); + } + }); + + const guildCreateManyArgs = guildIds.map((id) => { + return { guildId: id }; + }); + + const welcomeMessageCreateManyArgs = guildIds.map((id) => { + return { guildId: id }; + }); + + const leaveMessageCreateManyArgs = guildIds.map((id) => { + return { guildId: id }; + }); + + await prismaClient.guild.createMany({ + data: guildCreateManyArgs, + skipDuplicates: true + }); + + await prismaClient.guildWelcomeMessage.createMany({ + data: welcomeMessageCreateManyArgs + }); + + await prismaClient.guildLeaveMessage.createMany({ + data: leaveMessageCreateManyArgs + }); + + await i.reply({ + content: 'Synced database', + ephemeral: true + }); +} diff --git a/apps/bot/src/commands/Admin/_index.ts b/apps/bot/src/commands/Admin/_index.ts new file mode 100644 index 0000000..177a390 --- /dev/null +++ b/apps/bot/src/commands/Admin/_index.ts @@ -0,0 +1,2 @@ +export * from './_adminErrorTest.js'; +export * from './_adminSyncDatabase.js'; diff --git a/apps/bot/src/commands/Info/ping.ts b/apps/bot/src/commands/Info/ping.ts new file mode 100644 index 0000000..e093322 --- /dev/null +++ b/apps/bot/src/commands/Info/ping.ts @@ -0,0 +1,64 @@ +import { createEmbed } from '#lib/utils'; + +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { prismaClient } from '@wyvern/database'; +import { codeBlock, Status } from 'discord.js'; + +@ApplyOptions({ + description: 'ping pong' +}) +export class UserCommand extends Command { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand({ + name: this.name, + description: this.description + }); + } + + public override async chatInputRun(i: Command.ChatInputCommandInteraction) { + const { client } = this.container; + const dbTime = performance.now(); + await prismaClient.$queryRaw`SELECT 1`; + const dbTiming = performance.now() - dbTime; + + const waitEmbed = createEmbed(i.user).setDescription('🏓 Pong!...'); + const message = await i.reply({ embeds: [waitEmbed] }); + const thisServerShard = client.ws.shards.get(i.guild!.shardId); + + if (!thisServerShard) throw 'Unable to get server shard'; + + const pingMessage = createEmbed(i.user).addFields([ + { + name: 'Host Latency', + value: codeBlock('yaml', client.ws.ping > 0 ? `${Math.floor(client.ws.ping)}ms` : 'Calculating...'), + inline: true + }, + { + name: 'Client Latency', + value: codeBlock('yaml', `${Math.floor(message.createdTimestamp - i.createdTimestamp)}ms`), + inline: true + }, + { + name: 'Database Latency', + value: codeBlock('yaml', `${Math.floor(dbTiming)}ms`), + inline: true + }, + { + name: 'Websocket', + value: codeBlock('yaml', `${Status[thisServerShard.status]}`), + inline: true + }, + { + name: 'Shard', + value: codeBlock( + 'yaml', + `${thisServerShard.id}/${client.ws.shards.size} (${thisServerShard.ping > 0 ? `${Math.floor(thisServerShard.ping)}ms` : 'Calculating...'})` + ), + inline: true + } + ]); + + await message.edit({ embeds: [pingMessage] }); + } +} diff --git a/apps/bot/src/commands/Mod/Report.ts b/apps/bot/src/commands/Mod/Report.ts new file mode 100644 index 0000000..fda2027 --- /dev/null +++ b/apps/bot/src/commands/Mod/Report.ts @@ -0,0 +1,81 @@ +import { InternalError } from '#lib/errors'; +import { compressCustomId } from '#lib/utils'; +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; + +import { + ActionRowBuilder, + InteractionContextType, + Message, + MessageContextMenuCommandInteraction, + ModalBuilder, + TextInputBuilder, + User, + UserContextMenuCommandInteraction +} from 'discord.js'; +import { ReportMessageCustomIdParams, ReportUserCustomIdParams } from 'src/lib/customIdParams/report.js'; + +@ApplyOptions({ + description: 'Report', + preconditions: [{ name: 'RequiredSetting', context: { setting: 'reportChannel' } }] +}) +export class UserCommand extends Command { + public override registerApplicationCommands(registry: Command.Registry) { + // register user context menu + registry.registerContextMenuCommand((b) => + b // + .setName('Report User') + .setType(2) // User context menu - idk why i cant use ApplicationCommandType.User here + .setContexts(InteractionContextType.Guild) + ); + + // register message context menu + registry.registerContextMenuCommand((b) => + b // + .setName('Report Message') + .setType(3) // Message context menu - idk why i cant use ApplicationCommandType.Message here + .setContexts(InteractionContextType.Guild) + ); + } + + public override async contextMenuRun(i: Command.ContextMenuCommandInteraction) { + if (i.isMessageContextMenuCommand()) this._messageReport(i.targetMessage, i); + else if (i.isUserContextMenuCommand()) this._userReport(i.targetUser, i); + else throw new InternalError('Interaction was an unexpected type'); + } + + private async _messageReport(msg: Message, i: MessageContextMenuCommandInteraction) { + const row = new ActionRowBuilder().setComponents([ + new TextInputBuilder().setLabel('Reason').setPlaceholder('Why are you reporting this message').setRequired(true).setCustomId('reason') + ]); + + const idRes = compressCustomId({ + name: 'report-msg', + channelId: msg.channelId, + messageId: msg.id + }); + + if (idRes.isErr()) throw new InternalError(idRes.unwrapErr()); + + const modal = new ModalBuilder().setTitle('Report Message').setComponents(row).setCustomId(idRes.unwrap()); + + await i.showModal(modal); + } + + private async _userReport(user: User, i: UserContextMenuCommandInteraction) { + const row = new ActionRowBuilder().setComponents([ + new TextInputBuilder().setLabel('Reason').setPlaceholder('Why are you reporting this user').setRequired(true).setCustomId('reason') + ]); + + const idRes = compressCustomId({ + name: 'report-user', + userId: user.id + }); + + if (idRes.isErr()) throw new InternalError(idRes.unwrapErr()); + + const modal = new ModalBuilder().setTitle('Report User').setComponents(row).setCustomId(idRes.unwrap()); + + await i.showModal(modal); + } +} diff --git a/apps/bot/src/commands/Settings/Settings.ts b/apps/bot/src/commands/Settings/Settings.ts new file mode 100644 index 0000000..5811620 --- /dev/null +++ b/apps/bot/src/commands/Settings/Settings.ts @@ -0,0 +1,137 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { + autoRole_create, + autoRole_remove, + reportChannel_set, + reportChannel_unset, + welcomeMessage_disable, + welcomeMessage_enable, + welcomeMessage_preview, + welcomeMessage_setColor, + welcomeMessage_setMessage, + welcomeMessage_setTitle +} from './_index.js'; +import { ChannelType } from 'discord.js'; + +@ApplyOptions({ + description: 'Tag commands', + requiredUserPermissions: ['ManageGuild'], + subcommands: [ + { + name: 'auto_role', + type: 'group', + entries: [ + { name: 'create', chatInputRun: autoRole_create }, + { name: 'remove', chatInputRun: autoRole_remove } + ] + }, + { + name: 'report_channel', + type: 'group', + entries: [ + { name: 'set', chatInputRun: reportChannel_set }, + { name: 'unset', chatInputRun: reportChannel_unset } + ] + }, + { + name: 'welcome_message', + type: 'group', + entries: [ + { name: 'enable', chatInputRun: welcomeMessage_enable }, + { name: 'disable', chatInputRun: welcomeMessage_disable }, + { name: 'preview', chatInputRun: welcomeMessage_preview }, + + { name: 'set_title', chatInputRun: welcomeMessage_setTitle }, + { name: 'set_message', chatInputRun: welcomeMessage_setMessage }, + { name: 'set_color', chatInputRun: welcomeMessage_setColor } + ] + } + ] +}) +export class UserCommand extends Subcommand { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + .addSubcommandGroup((b) => + b // + .setName('auto_role') + .setDescription('Auto Role commands') + .addSubcommand((b) => + b // + .setName('create') + .setDescription('Create an auto role') + .addRoleOption((b) => b.setName('role').setDescription('The role to create').setRequired(true)) + ) + .addSubcommand((b) => + b // + .setName('remove') + .setDescription('Remove an auto role') + .addRoleOption((b) => b.setName('role').setDescription('The role to remove').setRequired(true)) + ) + ) + .addSubcommandGroup((b) => + b // + .setName('report_channel') + .setDescription('report channel commands') + .addSubcommand((b) => + b // + .setName('set') + .setDescription('Set the report channel') + .addChannelOption((b) => + b.setName('channel').setDescription('The channel to set').setRequired(true).addChannelTypes(ChannelType.GuildText) + ) + ) + .addSubcommand((b) => + b // + .setName('unset') + .setDescription('Unset the report channel') + ) + ) + .addSubcommandGroup((b) => + b // + .setName('welcome_message') + .setDescription('Welcome message commands') + .addSubcommand((b) => b.setName('enable').setDescription('Enable the welcome message')) + .addSubcommand((b) => b.setName('disable').setDescription('Disable the welcome message')) + .addSubcommand((b) => b.setName('preview').setDescription('Preview the welcome message')) + .addSubcommand((b) => + b // + .setName('set_title') + .setDescription('Set the title of the welcome message') + .addStringOption((b) => + b // + .setName('title') + .setDescription('The title') + .setRequired(true) + ) + ) + .addSubcommand((b) => + b // + .setName('set_message') + .setDescription('Set the message of the welcome message') + .addStringOption((b) => + b // + .setName('message') + .setDescription('The message') + .setRequired(true) + ) + ) + .addSubcommand((b) => + b // + .setName('set_color') + .setDescription('Set the color of the welcome message') + .addStringOption((b) => + b // + .setName('color') + .setDescription('The color') + .setRequired(true) + ) + ) + ) + ); + } +} diff --git a/apps/bot/src/commands/Settings/_index.ts b/apps/bot/src/commands/Settings/_index.ts new file mode 100644 index 0000000..8bcbf6e --- /dev/null +++ b/apps/bot/src/commands/Settings/_index.ts @@ -0,0 +1,12 @@ +export * from './autoRole/_create.js'; +export * from './autoRole/_remove.js'; + +export * from './reportChannel/_set.js'; +export * from './reportChannel/_unset.js'; + +export * from './welcomeMessage/_enable.js'; +export * from './welcomeMessage/_disable.js'; +export * from './welcomeMessage/_setTitle.js'; +export * from './welcomeMessage/_setMessage.js'; +export * from './welcomeMessage/_setColor.js'; +export * from './welcomeMessage/_preview.js'; diff --git a/apps/bot/src/commands/Settings/autoRole/_create.ts b/apps/bot/src/commands/Settings/autoRole/_create.ts new file mode 100644 index 0000000..ef42c26 --- /dev/null +++ b/apps/bot/src/commands/Settings/autoRole/_create.ts @@ -0,0 +1,27 @@ +import { CommandFailedError, InternalError } from '#lib/errors'; +import { createEmbed } from '#lib/utils'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { createAutoRole, getGuild, prismaClient } from '@wyvern/database'; +import { mention } from '@wyvern/markdown'; + +export async function autoRole_create(i: Subcommand.ChatInputCommandInteraction) { + const role = i.options.getRole('role', true); + + const guildRes = await getGuild(i.guild!.id); + + if (guildRes.isErr()) { + throw new InternalError(guildRes.unwrapErr().message); + } + + const { autoRoles: existingRoles } = guildRes.unwrap(); + + if (existingRoles.includes(role.id)) throw new CommandFailedError('That role already exists'); + + await prismaClient.$queryRawTyped(createAutoRole(role.id, i.guild!.id)); + + const embed = createEmbed(i.user) + .setTitle('Auto Role Created') + .setDescription(`${mention('role', role.id)} will now be given to new members!`); + + await i.reply({ embeds: [embed] }); +} diff --git a/apps/bot/src/commands/Settings/autoRole/_remove.ts b/apps/bot/src/commands/Settings/autoRole/_remove.ts new file mode 100644 index 0000000..61524cb --- /dev/null +++ b/apps/bot/src/commands/Settings/autoRole/_remove.ts @@ -0,0 +1,27 @@ +import { CommandFailedError, InternalError } from '#lib/errors'; +import { createEmbed } from '#lib/utils'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { removeAutoRole, getGuild, prismaClient } from '@wyvern/database'; +import { mention } from '@wyvern/markdown'; + +export async function autoRole_remove(i: Subcommand.ChatInputCommandInteraction) { + const role = i.options.getRole('role', true); + + const guildRes = await getGuild(i.guild!.id); + + if (guildRes.isErr()) { + throw new InternalError(guildRes.unwrapErr().message); + } + + const { autoRoles: existingRoles } = guildRes.unwrap(); + + if (!existingRoles.includes(role.id)) throw new CommandFailedError("That role isn't configured as an auto role"); + + await prismaClient.$queryRawTyped(removeAutoRole(role.id, i.guild!.id)); + + const embed = createEmbed(i.user, 'error') + .setTitle('Auto Role Removed') + .setDescription(`${mention('role', role.id)} will no longer be given to new members!`); + + await i.reply({ embeds: [embed] }); +} diff --git a/apps/bot/src/commands/Settings/reportChannel/_set.ts b/apps/bot/src/commands/Settings/reportChannel/_set.ts new file mode 100644 index 0000000..3ba740e --- /dev/null +++ b/apps/bot/src/commands/Settings/reportChannel/_set.ts @@ -0,0 +1,28 @@ +import { CommandFailedError } from '#lib/errors'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { prismaClient } from '@wyvern/database'; +import { TextChannel } from 'discord.js'; +import { mention } from '@wyvern/markdown'; + +export async function reportChannel_set(i: Subcommand.ChatInputCommandInteraction) { + const channel = i.options.getChannel('channel', true); + const guild = i.guild!; + + if (!(channel instanceof TextChannel)) throw new CommandFailedError('Channel is not a text channel'); + + const perms = channel.permissionsFor(guild.members.me!); + + if (!perms.any(['SendMessages', 'EmbedLinks'])) throw new CommandFailedError("I don't have the required permissions for that channel"); + + await prismaClient.guild.update({ + data: { + reportChannel: channel.id + }, + where: { id: guild.id } + }); + + await i.reply({ + content: `User reports will now be sent to ${mention('channel', channel.id)}`, + ephemeral: true + }); +} diff --git a/apps/bot/src/commands/Settings/reportChannel/_unset.ts b/apps/bot/src/commands/Settings/reportChannel/_unset.ts new file mode 100644 index 0000000..85ed87f --- /dev/null +++ b/apps/bot/src/commands/Settings/reportChannel/_unset.ts @@ -0,0 +1,16 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { prismaClient } from '@wyvern/database'; + +export async function reportChannel_unset(i: Subcommand.ChatInputCommandInteraction) { + await prismaClient.guild.update({ + data: { + reportChannel: null + }, + where: { id: i.guild!.id } + }); + + await i.reply({ + content: `User reports will no longer be sent`, + ephemeral: true + }); +} diff --git a/apps/bot/src/commands/Settings/welcomeMessage/_disable.ts b/apps/bot/src/commands/Settings/welcomeMessage/_disable.ts new file mode 100644 index 0000000..2f23825 --- /dev/null +++ b/apps/bot/src/commands/Settings/welcomeMessage/_disable.ts @@ -0,0 +1,2 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +export async function welcomeMessage_disable(i: Subcommand.ChatInputCommandInteraction) {} diff --git a/apps/bot/src/commands/Settings/welcomeMessage/_enable.ts b/apps/bot/src/commands/Settings/welcomeMessage/_enable.ts new file mode 100644 index 0000000..bff23c7 --- /dev/null +++ b/apps/bot/src/commands/Settings/welcomeMessage/_enable.ts @@ -0,0 +1,2 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +export async function welcomeMessage_enable(i: Subcommand.ChatInputCommandInteraction) {} diff --git a/apps/bot/src/commands/Settings/welcomeMessage/_preview.ts b/apps/bot/src/commands/Settings/welcomeMessage/_preview.ts new file mode 100644 index 0000000..2d8c329 --- /dev/null +++ b/apps/bot/src/commands/Settings/welcomeMessage/_preview.ts @@ -0,0 +1,26 @@ +import { InternalError } from '#lib/errors'; +import { createEmbed, formatWelcomeLeaveMessage } from '#lib/utils'; +import { Result } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { isNullish } from '@sapphire/utilities'; +import { getGuild, Prisma, prismaClient } from '@wyvern/database'; +import { ColorResolvable, GuildMember } from 'discord.js'; +export async function welcomeMessage_preview(i: Subcommand.ChatInputCommandInteraction) { + await i.deferReply({ ephemeral: true }); + + const res = await prismaClient.guild.findFirstOrThrow({ + where: { guildId: i.guild!.id }, + include: { guildWelcomeMessage: true } + }); + + const { title, description, embedColor } = res!.guildWelcomeMessage!; + + const embed = createEmbed(i.user) + .setTitle(formatWelcomeLeaveMessage(title, i.member as GuildMember, i.guild!)) + .setDescription(formatWelcomeLeaveMessage(description, i.member as GuildMember, i.guild!)) + .setColor(embedColor as ColorResolvable); + + await i.editReply({ + embeds: [embed] + }); +} diff --git a/apps/bot/src/commands/Settings/welcomeMessage/_setColor.ts b/apps/bot/src/commands/Settings/welcomeMessage/_setColor.ts new file mode 100644 index 0000000..1b93fda --- /dev/null +++ b/apps/bot/src/commands/Settings/welcomeMessage/_setColor.ts @@ -0,0 +1,2 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +export async function welcomeMessage_setColor(i: Subcommand.ChatInputCommandInteraction) {} diff --git a/apps/bot/src/commands/Settings/welcomeMessage/_setMessage.ts b/apps/bot/src/commands/Settings/welcomeMessage/_setMessage.ts new file mode 100644 index 0000000..8f4c1ee --- /dev/null +++ b/apps/bot/src/commands/Settings/welcomeMessage/_setMessage.ts @@ -0,0 +1,2 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +export async function welcomeMessage_setMessage(i: Subcommand.ChatInputCommandInteraction) {} diff --git a/apps/bot/src/commands/Settings/welcomeMessage/_setTitle.ts b/apps/bot/src/commands/Settings/welcomeMessage/_setTitle.ts new file mode 100644 index 0000000..13a9973 --- /dev/null +++ b/apps/bot/src/commands/Settings/welcomeMessage/_setTitle.ts @@ -0,0 +1,2 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +export async function welcomeMessage_setTitle(i: Subcommand.ChatInputCommandInteraction) {} diff --git a/apps/bot/src/commands/Tag/Tag.ts b/apps/bot/src/commands/Tag/Tag.ts new file mode 100644 index 0000000..e400c89 --- /dev/null +++ b/apps/bot/src/commands/Tag/Tag.ts @@ -0,0 +1,23 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { createTag } from './_index.js'; + +@ApplyOptions({ + description: 'Tag commands', + subcommands: [{ name: 'create', chatInputRun: createTag }] +}) +export class UserCommand extends Subcommand { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + .addSubcommand((b) => + b // + .setName('create') + .setDescription('Create a tag') + ) + ); + } +} diff --git a/apps/bot/src/commands/Tag/_createTag.ts b/apps/bot/src/commands/Tag/_createTag.ts new file mode 100644 index 0000000..95cee3a --- /dev/null +++ b/apps/bot/src/commands/Tag/_createTag.ts @@ -0,0 +1,44 @@ +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle } from 'discord.js'; + +export async function createTag(i: Subcommand.ChatInputCommandInteraction) { + const row1 = new ActionRowBuilder().setComponents([ + new TextInputBuilder() // + .setCustomId('name') + .setPlaceholder('The tag name') + .setLabel('Name') + .setMinLength(1) + .setMaxLength(255) + .setStyle(TextInputStyle.Short) + .setRequired(true) + ]); + + const row2 = new ActionRowBuilder().setComponents([ + new TextInputBuilder() // + .setCustomId('content') + .setLabel('Content') + .setPlaceholder('The tag content') + .setMinLength(1) + .setMaxLength(255) + .setStyle(TextInputStyle.Paragraph) + .setRequired(true) + ]); + + const row3 = new ActionRowBuilder().setComponents([ + new TextInputBuilder() // + .setCustomId('image') + .setLabel('Image') + .setPlaceholder('An image Url') + .setMinLength(1) + .setMaxLength(255) + .setStyle(TextInputStyle.Short) + .setRequired(false) + ]); + + const modal = new ModalBuilder() // + .setCustomId('create-tag') + .setTitle('Create Tag') + .setComponents([row1, row2, row3]); + + await i.showModal(modal); +} diff --git a/apps/bot/src/commands/Tag/_index.ts b/apps/bot/src/commands/Tag/_index.ts new file mode 100644 index 0000000..f5597bd --- /dev/null +++ b/apps/bot/src/commands/Tag/_index.ts @@ -0,0 +1 @@ +export * from './_createTag.js'; diff --git a/apps/bot/src/commands/Urban/Urban.ts b/apps/bot/src/commands/Urban/Urban.ts new file mode 100644 index 0000000..cc8969c --- /dev/null +++ b/apps/bot/src/commands/Urban/Urban.ts @@ -0,0 +1,29 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Command } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { urbanDefine, urbanRandom } from './_index.js'; + +@ApplyOptions({ + description: 'Tag commands', + nsfw: true, + subcommands: [ + { name: 'define', chatInputRun: urbanDefine }, + { name: 'random', chatInputRun: urbanRandom } + ] +}) +export class UserCommand extends Subcommand { + public override registerApplicationCommands(registry: Command.Registry) { + registry.registerChatInputCommand((builder) => + builder // + .setName(this.name) + .setDescription(this.description) + .addSubcommand((b) => + b // + .setName('define') + .setDescription('Define a term on Urban Dictionary') + .addStringOption((b) => b.setName('term').setDescription('The term').setRequired(true)) + ) + .addSubcommand((b) => b.setName('random').setDescription('Define a random term')) + ); + } +} diff --git a/apps/bot/src/commands/Urban/_define.ts b/apps/bot/src/commands/Urban/_define.ts new file mode 100644 index 0000000..3ba7bce --- /dev/null +++ b/apps/bot/src/commands/Urban/_define.ts @@ -0,0 +1,26 @@ +import { container } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { PaginatedMessage } from '@sapphire/discord.js-utilities'; +import { createEmbed } from '#lib/utils'; + +export async function urbanDefine(i: Subcommand.ChatInputCommandInteraction) { + const { urban } = container; + + const term = i.options.getString('term', true); + + const { list } = await urban.defineWord(term); + + const pMsg = new PaginatedMessage(); + + list.forEach(({ definition, word, written_on, thumbs_down, thumbs_up, author }) => { + pMsg.addPageEmbed( + createEmbed(i.user) + .setTimestamp(new Date(written_on)) + .setTitle(urban.removeBrackets(word)) + .setDescription(urban.removeBrackets(definition)) + .setFooter({ text: `👍 ${thumbs_up} | 👎 ${thumbs_down} | Written by ${author}` }) + ); + }); + + await pMsg.run(i); +} diff --git a/apps/bot/src/commands/Urban/_index.ts b/apps/bot/src/commands/Urban/_index.ts new file mode 100644 index 0000000..cc0ef80 --- /dev/null +++ b/apps/bot/src/commands/Urban/_index.ts @@ -0,0 +1,2 @@ +export * from './_define.js'; +export * from './_random.js'; diff --git a/apps/bot/src/commands/Urban/_random.ts b/apps/bot/src/commands/Urban/_random.ts new file mode 100644 index 0000000..e65d966 --- /dev/null +++ b/apps/bot/src/commands/Urban/_random.ts @@ -0,0 +1,24 @@ +import { createEmbed } from '#lib/utils'; +import { container } from '@sapphire/framework'; +import { Subcommand } from '@sapphire/plugin-subcommands'; +import { pickRandom } from '@sapphire/utilities'; + +export async function urbanRandom(i: Subcommand.ChatInputCommandInteraction) { + const { urban } = container; + + + + const { list } = await urban.randomDefinition(); + + + + const { definition, word, written_on, thumbs_down, thumbs_up, author } = pickRandom(list) + + const embed = createEmbed(i.user) + .setTimestamp(new Date(written_on)) + .setTitle(urban.removeBrackets(word)) + .setDescription(urban.removeBrackets(definition)) + .setFooter({ text: `👍 ${thumbs_up} | 👎 ${thumbs_down} | Written by ${author}` }) + + await i.reply({ embeds: [embed] }) +} \ No newline at end of file diff --git a/apps/bot/src/index.ts b/apps/bot/src/index.ts new file mode 100644 index 0000000..9c4edc5 --- /dev/null +++ b/apps/bot/src/index.ts @@ -0,0 +1,45 @@ +import { UrbanDictionary } from '@wyvern/urban-dictionary'; +import './lib/setup.js'; + +import { container, LogLevel, SapphireClient } from '@sapphire/framework'; +import { GatewayIntentBits, Partials } from 'discord.js'; + +const client = new SapphireClient({ + defaultPrefix: '!', + regexPrefix: /^(hey +)?bot[,! ]/i, + caseInsensitiveCommands: true, + logger: { + level: LogLevel.Debug + }, + shards: 'auto', + intents: [ + GatewayIntentBits.DirectMessageReactions, + GatewayIntentBits.DirectMessages, + GatewayIntentBits.GuildModeration, + GatewayIntentBits.GuildEmojisAndStickers, + GatewayIntentBits.GuildMembers, + GatewayIntentBits.GuildMessageReactions, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildVoiceStates, + GatewayIntentBits.MessageContent + ], + partials: [Partials.Channel], + loadMessageCommandListeners: true +}); + +const main = async () => { + try { + client.logger.info('Logging in'); + await client.login(); + client.logger.info('logged in'); + + container.urban = new UrbanDictionary(); + } catch (error) { + client.logger.fatal(error); + await client.destroy(); + process.exit(1); + } +}; + +void main(); diff --git a/apps/bot/src/interaction-handlers/modal/createTag.ts b/apps/bot/src/interaction-handlers/modal/createTag.ts new file mode 100644 index 0000000..6e9a9bb --- /dev/null +++ b/apps/bot/src/interaction-handlers/modal/createTag.ts @@ -0,0 +1,40 @@ +import { createEmbed, validateUrl } from '#lib/utils'; +import { createTag, prismaClient } from '@wyvern/database'; +import { ApplyOptions } from '@sapphire/decorators'; +import { InteractionHandler, InteractionHandlerTypes } from '@sapphire/framework'; +import { inlineCode, ModalSubmitInteraction } from 'discord.js'; +import { createId } from '@paralleldrive/cuid2'; + +@ApplyOptions({ + interactionHandlerType: InteractionHandlerTypes.ModalSubmit +}) +export class ModalHandler extends InteractionHandler { + override async run(i: ModalSubmitInteraction, { content, image, name }: InteractionHandler.ParseResult) { + const imageUrl = validateUrl(image).match({ + ok: (url) => url.href, + err: (_) => '' + }); + + await prismaClient.$queryRawTyped(createTag(content, imageUrl, name, i.guildId!, i.user.id, createId())); + + const embed = createEmbed(i.user) // + .setTitle('Tag Created') + .setDescription(`Created a tag with title ${inlineCode(name)}`); + + await i.reply({ + embeds: [embed] + }); + } + + override parse(i: ModalSubmitInteraction) { + if (i.customId !== 'create-tag') return this.none(); + + const fields = i.fields; + + const name = fields.getTextInputValue('name'); + const content = fields.getTextInputValue('content'); + const image = fields.getTextInputValue('image'); + + return this.some({ name, content, image }); + } +} diff --git a/apps/bot/src/lib/constants.ts b/apps/bot/src/lib/constants.ts new file mode 100644 index 0000000..71b4a77 --- /dev/null +++ b/apps/bot/src/lib/constants.ts @@ -0,0 +1,16 @@ +import { join } from 'path'; + +console.log(import.meta.dirname); + +const up = (count: number) => { + const foo: Array = []; + for (let i = 0; i < count; i++) { + foo.push('..'); + } + return foo; +}; + +export const rootDir = join(import.meta.dirname, ...up(4)); +export const srcDir = join(rootDir, 'src'); + +export const RandomLoadingMessage = ['Computing...', 'Thinking...', 'Cooking some food', 'Give me a moment', 'Loading...']; diff --git a/apps/bot/src/lib/customIdParams/baseCustomIdParams.ts b/apps/bot/src/lib/customIdParams/baseCustomIdParams.ts new file mode 100644 index 0000000..4350963 --- /dev/null +++ b/apps/bot/src/lib/customIdParams/baseCustomIdParams.ts @@ -0,0 +1,3 @@ +export interface BaseCustomIdParams { + name: string; +} diff --git a/apps/bot/src/lib/customIdParams/index.ts b/apps/bot/src/lib/customIdParams/index.ts new file mode 100644 index 0000000..eaffbce --- /dev/null +++ b/apps/bot/src/lib/customIdParams/index.ts @@ -0,0 +1,2 @@ +export * from './baseCustomIdParams.js'; +export * from './report.js'; diff --git a/apps/bot/src/lib/customIdParams/report.ts b/apps/bot/src/lib/customIdParams/report.ts new file mode 100644 index 0000000..e4da45f --- /dev/null +++ b/apps/bot/src/lib/customIdParams/report.ts @@ -0,0 +1,10 @@ +import { BaseCustomIdParams } from './index.js'; + +export interface ReportMessageCustomIdParams extends BaseCustomIdParams { + channelId: string; + messageId: string; +} + +export interface ReportUserCustomIdParams extends BaseCustomIdParams { + userId: string; +} diff --git a/apps/bot/src/lib/errors/CommandFailedError.ts b/apps/bot/src/lib/errors/CommandFailedError.ts new file mode 100644 index 0000000..66675cb --- /dev/null +++ b/apps/bot/src/lib/errors/CommandFailedError.ts @@ -0,0 +1,8 @@ +export class CommandFailedError extends Error { + /** + * + */ + constructor(msg: string) { + super(msg); + } +} diff --git a/apps/bot/src/lib/errors/InternalError.ts b/apps/bot/src/lib/errors/InternalError.ts new file mode 100644 index 0000000..fecab08 --- /dev/null +++ b/apps/bot/src/lib/errors/InternalError.ts @@ -0,0 +1,8 @@ +export class InternalError extends Error { + /** + * + */ + constructor(msg: string) { + super(msg); + } +} diff --git a/apps/bot/src/lib/errors/index.ts b/apps/bot/src/lib/errors/index.ts new file mode 100644 index 0000000..0a6dcae --- /dev/null +++ b/apps/bot/src/lib/errors/index.ts @@ -0,0 +1,2 @@ +export * from './CommandFailedError.js'; +export * from './InternalError.js'; diff --git a/apps/bot/src/lib/setup.ts b/apps/bot/src/lib/setup.ts new file mode 100644 index 0000000..ede5abd --- /dev/null +++ b/apps/bot/src/lib/setup.ts @@ -0,0 +1,46 @@ +// Unless explicitly defined, set NODE_ENV as development: +process.env.NODE_ENV ??= 'development'; + +import { ApplicationCommandRegistries, RegisterBehavior } from '@sapphire/framework'; +import '@sapphire/plugin-api/register'; +import '@sapphire/plugin-editable-commands/register'; +// import '@sapphire/plugin-logger/register'; + +import '@wyvern/plugin-custom-logger/register'; + +import '@sapphire/plugin-subcommands/register'; +import { setup, type ArrayString } from '@skyra/env-utilities'; +import * as colorette from 'colorette'; +import { join } from 'path'; +import { inspect } from 'util'; +import { rootDir } from './constants.js'; + +import { UrbanDictionary } from '@wyvern/urban-dictionary'; + +// Set default behavior to bulk overwrite +ApplicationCommandRegistries.setDefaultBehaviorWhenNotIdentical(RegisterBehavior.BulkOverwrite); + +ApplicationCommandRegistries.setDefaultGuildIds(['1072895701970858026', '739115569311383634']); + +// Read env var +console.log(join(rootDir, '.env')); + +setup({ path: join(rootDir, '.env') }); + +// Set default inspection depth +inspect.defaultOptions.depth = 1; + +// Enable colorette +colorette.createColors({ useColor: true }); + +declare module '@skyra/env-utilities' { + interface Env { + OWNERS: ArrayString; + } +} + +declare module '@sapphire/pieces' { + interface Container { + urban: UrbanDictionary; + } +} diff --git a/apps/bot/src/lib/utils.ts b/apps/bot/src/lib/utils.ts new file mode 100644 index 0000000..79ea669 --- /dev/null +++ b/apps/bot/src/lib/utils.ts @@ -0,0 +1,185 @@ +import { + ChatInputCommandSuccessPayload, + Command, + ContextMenuCommandSuccessPayload, + err, + MessageCommandSuccessPayload, + ok, + Result +} from '@sapphire/framework'; +import { container } from '@sapphire/framework'; +import { send } from '@sapphire/plugin-editable-commands'; +import { cyan } from 'colorette'; +import { + ChatInputCommandInteraction, + EmbedBuilder, + GuildMember, + Role, + RoleResolvable, + type APIUser, + type Guild, + type Message, + type User +} from 'discord.js'; +import { RandomLoadingMessage } from '#lib/constants'; +import { globalConfig } from '@wyvern/config'; + +import { isNullish } from '@sapphire/utilities'; +import { brotliCompressSync, brotliDecompressSync } from 'node:zlib'; +import { serialize, deserialize } from 'binarytf'; + +/** + * Picks a random item from an array + * @param array The array to pick a random item from + * @example + * const randomEntry = pickRandom([1, 2, 3, 4]) // 1 + */ +export function pickRandom(array: readonly T[]): T { + const { length } = array; + return array[Math.floor(Math.random() * length)]; +} + +/** + * Sends a loading message to the current channel + * @param message The message data for which to send the loading message + */ +export function sendLoadingMessage(message: Message): Promise { + return send(message, { embeds: [new EmbedBuilder().setDescription(pickRandom(RandomLoadingMessage)).setColor('#FF0000')] }); +} + +export function logSuccessCommand(payload: ContextMenuCommandSuccessPayload | ChatInputCommandSuccessPayload | MessageCommandSuccessPayload): void { + let successLoggerData: ReturnType; + + if ('interaction' in payload) { + successLoggerData = getSuccessLoggerData(payload.interaction.guild, payload.interaction.user, payload.command); + } else { + successLoggerData = getSuccessLoggerData(payload.message.guild, payload.message.author, payload.command); + } + + container.logger.debug(`${successLoggerData.shard} - ${successLoggerData.commandName} ${successLoggerData.author} ${successLoggerData.sentAt}`); +} + +export function getSuccessLoggerData(guild: Guild | null, user: User, command: Command) { + const shard = getShardInfo(guild?.shardId ?? 0); + const commandName = getCommandInfo(command); + const author = getAuthorInfo(user); + const sentAt = getGuildInfo(guild); + + return { shard, commandName, author, sentAt }; +} + +function getShardInfo(id: number) { + return `[${cyan(id.toString())}]`; +} + +function getCommandInfo(command: Command) { + return cyan(command.name); +} + +function getAuthorInfo(author: User | APIUser) { + return `${author.username}[${cyan(author.id)}]`; +} + +function getGuildInfo(guild: Guild | null) { + if (guild === null) return 'Direct Messages'; + return `${guild.name}[${cyan(guild.id)}]`; +} + +export function createEmbed(userOrMember: User | GuildMember, type: keyof typeof globalConfig.colors = 'success'): EmbedBuilder { + const color = globalConfig.colors[type]; + + const user = userOrMember instanceof GuildMember ? userOrMember.user : userOrMember; + + return new EmbedBuilder() // + .setAuthor({ + name: user.username, + iconURL: user.avatarURL({ forceStatic: false }) ?? '' + }) + .setColor(color) + .setTimestamp(new Date()); +} + +export function validateUrl(url: string): Result { + return Result.from(() => new URL(url)); +} + +export function getFullCommandName(i: ChatInputCommandInteraction) { + const opts = i.options; + + const baseName = i.commandName; + const subcommandGroup = opts.getSubcommandGroup(false); + const subcommand = opts.getSubcommand(false); + + const parts: string[] = [baseName]; + + if (!isNullish(subcommandGroup)) parts.push(subcommandGroup); + if (!isNullish(subcommand)) parts.push(subcommand); + + return parts.join(' '); +} + +export function isEmpty(arr: T[]) { + return arr.length > 0; +} + +export async function tryAddRole(role: RoleResolvable, member: GuildMember): Promise> { + const a = await member.roles + .add(role) + .then((r) => r) + .catch((e) => e as string); + + return a instanceof GuildMember ? ok(a) : err(a); +} + +export async function bulkAddRoles(roles: RoleResolvable[], member: GuildMember) { + const failed: string[] = []; + const successful: string[] = []; + + roles.forEach(async (role) => { + const res = await tryAddRole(role, member); + + res.match({ + ok: () => successful.push(role instanceof Role ? role.id : role), + err: () => failed.push(role instanceof Role ? role.id : role) + }); + }); + + return { failed, successful }; +} + +export function compressCustomId(params: T, customMessagePart?: string): Result { + const serializedId = brotliCompressSync(serialize(params)).toString('binary'); + + if (serializedId.length > 80) { + const resolvedCustomMessagePart = customMessagePart ?? ''; + return err( + `Due to Discord API limitations I was unable to resolve that request. ${resolvedCustomMessagePart}This issue will be fixed in the future.` + ); + } + + return ok(serializedId); +} + +export function decompressCustomId(content: string): Result { + const result = Result.from(() => + // + deserialize(brotliDecompressSync(Buffer.from(content, 'binary'))) + ); + + return result; +} + +export function formatWelcomeLeaveMessage(msg: string, member: GuildMember, guild: Guild) { + return msg // + .replaceAll(/{user}/g, member.user.username) + .replaceAll(/{guild}/g, guild.name); +} + +export function isJson(x: any): boolean { + try { + JSON.parse(x); + return true; + } catch (_) { + return false; + } +} diff --git a/apps/bot/src/listeners/commands/chatInputCommands/chatInputCommandDenied.ts b/apps/bot/src/listeners/commands/chatInputCommands/chatInputCommandDenied.ts new file mode 100644 index 0000000..f835357 --- /dev/null +++ b/apps/bot/src/listeners/commands/chatInputCommands/chatInputCommandDenied.ts @@ -0,0 +1,23 @@ +import type { ChatInputCommandDeniedPayload, Events } from '@sapphire/framework'; +import { Listener, UserError } from '@sapphire/framework'; + +export class UserEvent extends Listener { + public override async run({ context, message: content }: UserError, { interaction }: ChatInputCommandDeniedPayload) { + // `context: { silent: true }` should make UserError silent: + // Use cases for this are for example permissions error when running the `eval` command. + if (Reflect.get(Object(context), 'silent')) return; + + if (interaction.deferred || interaction.replied) { + return interaction.editReply({ + content, + allowedMentions: { users: [interaction.user.id], roles: [] } + }); + } + + return interaction.reply({ + content, + allowedMentions: { users: [interaction.user.id], roles: [] }, + ephemeral: true + }); + } +} diff --git a/apps/bot/src/listeners/commands/chatInputCommands/chatInputCommandSuccess.ts b/apps/bot/src/listeners/commands/chatInputCommands/chatInputCommandSuccess.ts new file mode 100644 index 0000000..2e88190 --- /dev/null +++ b/apps/bot/src/listeners/commands/chatInputCommands/chatInputCommandSuccess.ts @@ -0,0 +1,14 @@ +import { Listener, LogLevel, type ChatInputCommandSuccessPayload } from '@sapphire/framework'; +import type { Logger } from '@sapphire/plugin-logger'; +import { logSuccessCommand } from '#lib/utils'; + +export class UserListener extends Listener { + public override run(payload: ChatInputCommandSuccessPayload) { + logSuccessCommand(payload); + } + + public override onLoad() { + this.enabled = (this.container.logger as Logger).level <= LogLevel.Debug; + return super.onLoad(); + } +} diff --git a/apps/bot/src/listeners/commands/contextMenuCommands/contextMenuCommandDenied.ts b/apps/bot/src/listeners/commands/contextMenuCommands/contextMenuCommandDenied.ts new file mode 100644 index 0000000..c9741eb --- /dev/null +++ b/apps/bot/src/listeners/commands/contextMenuCommands/contextMenuCommandDenied.ts @@ -0,0 +1,23 @@ +import type { ContextMenuCommandDeniedPayload, Events } from '@sapphire/framework'; +import { Listener, UserError } from '@sapphire/framework'; + +export class UserEvent extends Listener { + public override async run({ context, message: content }: UserError, { interaction }: ContextMenuCommandDeniedPayload) { + // `context: { silent: true }` should make UserError silent: + // Use cases for this are for example permissions error when running the `eval` command. + if (Reflect.get(Object(context), 'silent')) return; + + if (interaction.deferred || interaction.replied) { + return interaction.editReply({ + content, + allowedMentions: { users: [interaction.user.id], roles: [] } + }); + } + + return interaction.reply({ + content, + allowedMentions: { users: [interaction.user.id], roles: [] }, + ephemeral: true + }); + } +} diff --git a/apps/bot/src/listeners/commands/contextMenuCommands/contextMenuCommandSuccess.ts b/apps/bot/src/listeners/commands/contextMenuCommands/contextMenuCommandSuccess.ts new file mode 100644 index 0000000..b7f386f --- /dev/null +++ b/apps/bot/src/listeners/commands/contextMenuCommands/contextMenuCommandSuccess.ts @@ -0,0 +1,14 @@ +import { Listener, LogLevel, type ContextMenuCommandSuccessPayload } from '@sapphire/framework'; +import type { Logger } from '@sapphire/plugin-logger'; +import { logSuccessCommand } from '#lib/utils'; + +export class UserListener extends Listener { + public override run(payload: ContextMenuCommandSuccessPayload) { + logSuccessCommand(payload); + } + + public override onLoad() { + this.enabled = (this.container.logger as Logger).level <= LogLevel.Debug; + return super.onLoad(); + } +} diff --git a/apps/bot/src/listeners/commands/messageCommands/messageCommandDenied.ts b/apps/bot/src/listeners/commands/messageCommands/messageCommandDenied.ts new file mode 100644 index 0000000..5fd15d0 --- /dev/null +++ b/apps/bot/src/listeners/commands/messageCommands/messageCommandDenied.ts @@ -0,0 +1,12 @@ +import type { Events, MessageCommandDeniedPayload } from '@sapphire/framework'; +import { Listener, type UserError } from '@sapphire/framework'; + +export class UserEvent extends Listener { + public override async run({ context, message: content }: UserError, { message }: MessageCommandDeniedPayload) { + // `context: { silent: true }` should make UserError silent: + // Use cases for this are for example permissions error when running the `eval` command. + if (Reflect.get(Object(context), 'silent')) return; + + return message.reply({ content, allowedMentions: { users: [message.author.id], roles: [] } }); + } +} diff --git a/apps/bot/src/listeners/commands/messageCommands/messageCommandSuccess.ts b/apps/bot/src/listeners/commands/messageCommands/messageCommandSuccess.ts new file mode 100644 index 0000000..c05e6f2 --- /dev/null +++ b/apps/bot/src/listeners/commands/messageCommands/messageCommandSuccess.ts @@ -0,0 +1,15 @@ +import type { MessageCommandSuccessPayload } from '@sapphire/framework'; +import { Listener, LogLevel } from '@sapphire/framework'; +import type { Logger } from '@sapphire/plugin-logger'; +import { logSuccessCommand } from '#lib/utils'; + +export class UserEvent extends Listener { + public override run(payload: MessageCommandSuccessPayload) { + logSuccessCommand(payload); + } + + public override onLoad() { + this.enabled = (this.container.logger as Logger).level <= LogLevel.Debug; + return super.onLoad(); + } +} diff --git a/apps/bot/src/listeners/commands/subcommands/subcommandError.ts b/apps/bot/src/listeners/commands/subcommands/subcommandError.ts new file mode 100644 index 0000000..c2b38c4 --- /dev/null +++ b/apps/bot/src/listeners/commands/subcommands/subcommandError.ts @@ -0,0 +1,59 @@ +import { ChatInputCommand, Listener } from '@sapphire/framework'; +import { createEmbed, getFullCommandName } from '#lib/utils'; +import { ApplyOptions } from '@sapphire/decorators'; +import { ChatInputSubcommandErrorPayload, SubcommandPluginEvents } from '@sapphire/plugin-subcommands'; +import { WyvernErrorHandler } from '@wyvern/error-handler'; +import { CommandFailedError } from '#lib/errors'; +import { codeblock } from '@wyvern/markdown'; + +@ApplyOptions({ + event: SubcommandPluginEvents.ChatInputSubcommandError +}) +export class UserListener extends Listener { + public override async run(error: Error, payload: ChatInputSubcommandErrorPayload) { + const { interaction, context } = payload; + + if (error instanceof CommandFailedError) { + await this.handleCommandFailedError(error, interaction); + return; + } + + if (error instanceof CommandFailedError) { + await this.handleCommandFailedError(error, interaction); + return; + } + + const handler = new WyvernErrorHandler(); + + handler.handleCommandError({ + error, + + commandId: context.commandId, + commandName: getFullCommandName(interaction), + + guildId: interaction.guildId!, + guildName: interaction.guild!.name!, + + userId: interaction.user.id, + username: interaction.user.username + }); + + const embed = createEmbed(interaction.user, 'error') // + .setTitle('This is embarrassing') + .setDescription(codeblock(error.message)); + + const method = interaction.deferred || interaction.replied ? 'editReply' : 'reply'; + + await interaction[method]({ embeds: [embed] }); + } + + private async handleCommandFailedError(error: CommandFailedError, interaction: ChatInputCommand.Interaction) { + const embed = createEmbed(interaction.user, 'error') // + .setTitle('Something went wrong') + .setDescription(error.message); + + const method = interaction.deferred || interaction.replied ? 'editReply' : 'reply'; + + await interaction[method]({ embeds: [embed] }); + } +} diff --git a/apps/bot/src/listeners/guildMemberJoin.ts b/apps/bot/src/listeners/guildMemberJoin.ts new file mode 100644 index 0000000..e25155a --- /dev/null +++ b/apps/bot/src/listeners/guildMemberJoin.ts @@ -0,0 +1,48 @@ +import { bulkAddRoles, createEmbed, formatWelcomeLeaveMessage } from '#lib/utils'; +import { ApplyOptions } from '@sapphire/decorators'; +import { Events } from '@sapphire/framework'; +import { Listener } from '@sapphire/framework'; +import { isNullish } from '@sapphire/utilities'; +import { getGuild, prismaClient } from '@wyvern/database'; +import type { ColorResolvable, GuildMember } from 'discord.js'; + +@ApplyOptions({ + event: Events.GuildMemberAdd +}) +export class UserEvent extends Listener { + public override async run(member: GuildMember) { + this.autoRole(member); + this.welcome(member); + } + + private async autoRole(member: GuildMember) { + const { autoRoles: roles } = await prismaClient.guild.findFirstOrThrow({ + where: { guildId: member.guild.id }, + select: { autoRoles: true } + }); + + await bulkAddRoles(roles, member); + } + + private async welcome(member: GuildMember) { + const res = await prismaClient.guild.findFirstOrThrow({ + where: { guildId: member.guild!.id }, + include: { guildWelcomeMessage: true } + }); + + const { title, description, embedColor, channelId } = res!.guildWelcomeMessage!; + + if (isNullish(channelId)) return; + + const channel = await member.guild.channels.fetch(channelId); + + if (isNullish(channel) || channel?.isTextBased() || !channel.isSendable()) return; + + const embed = createEmbed(member) + .setTitle(formatWelcomeLeaveMessage(title, member, member.guild)) + .setDescription(formatWelcomeLeaveMessage(description, member, member.guild)) + .setColor(embedColor as ColorResolvable); + + await channel.send({ embeds: [embed] }); + } +} diff --git a/apps/bot/src/listeners/message.ts b/apps/bot/src/listeners/message.ts new file mode 100644 index 0000000..45cb7bd --- /dev/null +++ b/apps/bot/src/listeners/message.ts @@ -0,0 +1,59 @@ +import { InternalError } from '#lib/errors'; +import { ApplyOptions } from '@sapphire/decorators'; +import { Events, Listener } from '@sapphire/framework'; +import { getGuild } from '@wyvern/database'; +import { Message } from 'discord.js'; +import { fetch, FetchResultTypes } from '@sapphire/fetch'; + +@ApplyOptions({ + event: Events.MessageCreate +}) +export class UserEvent extends Listener { + override async run(msg: Message) { + await this._autoCarbon(msg); + } + + private async _autoCarbon(msg: Message) { + const guild = await getGuild(msg.guild!.id); + + const autoCarbonEnabled = guild.match({ + ok: (g) => g.autoCarbon, + err: (e) => { + throw new InternalError(e.message); + } + }); + + if (!autoCarbonEnabled) return; + + const re = /^```(?\w+)?\n(?.+?)(?:\n)?```$/s; + + if (!re.test(msg.content)) return; + + const groups = re.exec(msg.content)!.groups!; + + const result = await fetch( + 'https://carbonara.aero.bot/api/cook', + { + body: JSON.stringify({ + code: groups.code, + language: 'auto', + theme: 'one-dark', + backgroundColor: 'rgb(54, 57, 63)', + fontFamily: 'JetBrains Mono', + paddingHorizontal: '20px', + paddingVertical: '20px', + windowControls: 'false', + dropShadowBlurRadius: '10px', + dropShadowOffsetY: '0px' + }), + method: 'POST', + headers: [['Content-Type', 'application/json']] + }, + FetchResultTypes.Buffer + ); + + const body = null; + + this.container.logger.debug(body); + } +} diff --git a/apps/bot/src/listeners/ready.ts b/apps/bot/src/listeners/ready.ts new file mode 100644 index 0000000..13c5673 --- /dev/null +++ b/apps/bot/src/listeners/ready.ts @@ -0,0 +1,53 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Listener } from '@sapphire/framework'; +import type { StoreRegistryValue } from '@sapphire/pieces'; + +import { blue, green, magenta, magentaBright, white } from 'colorette'; + +const dev = process.env.NODE_ENV !== 'production'; + +@ApplyOptions({ once: true }) +export class UserEvent extends Listener { + // private readonly style = dev ? yellow : blue; + + public override async run() { + this.printBanner(); + this.printStoreDebugInformation(); + } + + private printBanner() { + const success = green('+'); + + const llc = dev ? magentaBright : white; + const blc = dev ? magenta : blue; + + const line01 = llc(''); + const line02 = llc(''); + const line03 = llc(''); + + // Offset Pad + const pad = ' '.repeat(7); + + console.log( + String.raw` +${line01} ${pad}${blc('1.0.0')} +${line02} ${pad}[${success}] Gateway +${line03}${dev ? ` ${pad}${blc('<')}${llc('/')}${blc('>')} ${llc('DEVELOPMENT MODE')}` : ''} + `.trim() + ); + } + + private printStoreDebugInformation() { + const { client, logger } = this.container; + const stores = [...client.stores.values()]; + const last = stores.pop()!; + + for (const store of stores) logger.info(this.styleStore(store, false)); + logger.info(this.styleStore(last, true)); + } + + private styleStore(store: StoreRegistryValue, last: boolean) { + return `${last ? '└─' : '├─'} Loaded ${store.size.toString().padEnd(3, ' ')} ${store.name}.`; + // return gray(`${last ? '└─' : '├─'} Loaded ${this.style(store.size.toString().padEnd(3, ' '))} ${store.name}.`); + } +} diff --git a/apps/bot/src/preconditions/OwnerOnly.ts b/apps/bot/src/preconditions/OwnerOnly.ts new file mode 100644 index 0000000..f58fa70 --- /dev/null +++ b/apps/bot/src/preconditions/OwnerOnly.ts @@ -0,0 +1,30 @@ +import { AllFlowsPrecondition } from '@sapphire/framework'; +import type { CommandInteraction, ContextMenuCommandInteraction, Message, Snowflake } from 'discord.js'; + +const OWNERS = ['424239181296959507']; + +export class UserPrecondition extends AllFlowsPrecondition { + #message = 'This command can only be used by the owner.'; + + public override chatInputRun(interaction: CommandInteraction) { + return this.doOwnerCheck(interaction.user.id); + } + + public override contextMenuRun(interaction: ContextMenuCommandInteraction) { + return this.doOwnerCheck(interaction.user.id); + } + + public override messageRun(message: Message) { + return this.doOwnerCheck(message.author.id); + } + + private doOwnerCheck(userId: Snowflake) { + return OWNERS.includes(userId) ? this.ok() : this.error({ message: this.#message }); + } +} + +declare module '@sapphire/framework' { + interface Preconditions { + OwnerOnly: never; + } +} diff --git a/apps/bot/src/preconditions/RequiredSetting.ts b/apps/bot/src/preconditions/RequiredSetting.ts new file mode 100644 index 0000000..981f337 --- /dev/null +++ b/apps/bot/src/preconditions/RequiredSetting.ts @@ -0,0 +1,40 @@ +import { AllFlowsPrecondition, Command } from '@sapphire/framework'; +import { isNullish } from '@sapphire/utilities'; +import { getGuild, Guild } from '@wyvern/database'; +import type { ChatInputCommandInteraction, ContextMenuCommandInteraction, Message, Snowflake } from 'discord.js'; + +export interface RequiredSettingPreconditionContext extends AllFlowsPrecondition.Context { + setting: keyof Omit; +} + +export class UserPrecondition extends AllFlowsPrecondition { + public override chatInputRun(interaction: ChatInputCommandInteraction, _: Command, context: RequiredSettingPreconditionContext) { + return this.sharedRun(interaction.user.id, context); + } + + public override contextMenuRun(interaction: ContextMenuCommandInteraction, _: Command, context: RequiredSettingPreconditionContext) { + return this.sharedRun(interaction.user.id, context); + } + + public override messageRun(message: Message, _: Command, context: RequiredSettingPreconditionContext) { + return this.sharedRun(message.author.id, context); + } + + private async sharedRun(guildId: Snowflake, { setting }: RequiredSettingPreconditionContext) { + const guildRes = await getGuild(guildId); + + if (guildRes.isErr()) return this.error({ identifier: 'NO_SERVER_SETTING' }); + + const guild = guildRes.unwrap(); + + const value = guild[setting]; + + return isNullish(value) ? this.error({ message: 'A required server setting is unset', context: { setting } }) : this.ok(); + } +} + +declare module '@sapphire/framework' { + interface Preconditions { + RequiredSetting: RequiredSettingPreconditionContext; + } +} diff --git a/apps/bot/src/routes/hello-world.ts b/apps/bot/src/routes/hello-world.ts new file mode 100644 index 0000000..30b4acd --- /dev/null +++ b/apps/bot/src/routes/hello-world.ts @@ -0,0 +1,13 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Route, methods, type ApiRequest, type ApiResponse } from '@sapphire/plugin-api'; + +@ApplyOptions({ route: 'hello-world' }) +export class UserRoute extends Route { + public override [methods.GET](_request: ApiRequest, response: ApiResponse) { + response.json({ message: 'Hello World' }); + } + + public override [methods.POST](_request: ApiRequest, response: ApiResponse) { + response.json({ message: 'Hello World' }); + } +} diff --git a/apps/bot/src/routes/main.ts b/apps/bot/src/routes/main.ts new file mode 100644 index 0000000..e2e59ac --- /dev/null +++ b/apps/bot/src/routes/main.ts @@ -0,0 +1,13 @@ +import { ApplyOptions } from '@sapphire/decorators'; +import { Route, methods, type ApiRequest, type ApiResponse } from '@sapphire/plugin-api'; + +@ApplyOptions({ route: `` }) +export class UserRoute extends Route { + public override [methods.GET](_request: ApiRequest, response: ApiResponse) { + response.json({ message: 'Landing Page!' }); + } + + public override [methods.POST](_request: ApiRequest, response: ApiResponse) { + response.json({ message: 'Landing Page!' }); + } +} diff --git a/apps/bot/tsconfig.json b/apps/bot/tsconfig.json new file mode 100644 index 0000000..209205e --- /dev/null +++ b/apps/bot/tsconfig.json @@ -0,0 +1,63 @@ +{ + "extends": [ + "@sapphire/ts-config", + "@sapphire/ts-config/extra-strict", + "@sapphire/ts-config/decorators" + ], + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "baseUrl": ".", + "tsBuildInfoFile": "dist/.tsbuildinfo", + "allowJs": true, + "moduleDetection": "auto", + "esModuleInterop": true, + "paths": { + "#lib/structures": [ + "src/lib/structures/index.ts" + ], + "#lib/interfaces": [ + "src/lib/interfaces/index.ts" + ], + "#lib/parsers": [ + "src/lib/parsers/index.ts" + ], + "#lib/utils": [ + "src/lib/utils.ts" + ], + "#lib/config": [ + "src/lib/config.ts" + ], + "#lib/types": [ + "src/lib/types.ts" + ], + "#lib/constants": [ + "src/lib/constants.ts" + ], + "#lib/errors": [ + "src/lib/errors/index.ts" + ], + "#lib/managers": [ + "src/lib/managers/index.ts" + ], + "#lib/customIds": [ + "src/lib/customIdTypes/index.ts" + ], + "#lib/markdown": [ + "src/lib/markdown/index.ts" + ], + "#drizzle": [ + "src/drizzle/schema.ts" + ], + "#prisma": [ + "src/lib/prisma.ts" + ], + "#stringFormatters": [ + "src/lib/stringFormatters/index.ts" + ] + }, + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/apps/bot/tsup.config.ts b/apps/bot/tsup.config.ts new file mode 100644 index 0000000..ce0a0ba --- /dev/null +++ b/apps/bot/tsup.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + clean: true, + bundle: false, + dts: false, + entry: ['src/**/*.ts', '!src/**/*.d.ts'], + format: ['esm'], + minify: false, + tsconfig: 'tsconfig.json', + // target: 'es2020', + target: 'esnext', + splitting: false, + skipNodeModulesBundle: true, + sourcemap: true, + shims: false, + keepNames: true +}); diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000..4087f14 Binary files /dev/null and b/bun.lockb differ diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..8fd4aa0 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,46 @@ +services: + db: + image: postgres:latest + container_name: majoexe-db + restart: always + user: postgres + environment: + - POSTGRES_DB=majoexe + - POSTGRES_PASSWORD=0ce267bcae32edcb51e257d0f4439e7fb1e3df3c6577782468550d7cd5a531ea + volumes: + - database:/var/lib/postgresql/data + ports: + - "5432:5432" + networks: + - app_network + healthcheck: + test: ["CMD", "pg_isready"] + interval: 10s + timeout: 5s + retries: 5 + + seq: + image: datalust/seq:latest + container_name: seq + restart: always + networks: + - app_network + environment: + - ACCEPT_EULA=Y + - SEQ_FIRSTRUN_ADMINPASSWORDHASH=QJklU79+04hywc4hPkuRIDzsDzqhuVQ4aoVfA0IfP/LLEy8HwWWMfhA8YVnCo4gv18+igc70YaUWRnMdKZAzBc/Cms0hL/+hdXNBDYb4daWu + volumes: + - seq_data:/data + ports: + - 5341:80 + +networks: + app_network: + driver: bridge + +volumes: + database: + driver: local + cache: + driver: local + seq_data: + driver: local diff --git a/package.json b/package.json new file mode 100644 index 0000000..2cb9d75 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "@wyvern/monorepo", + "private": true, + "scripts": { + "build": "turbo build", + "dev": "turbo dev", + "lint": "turbo lint", + "format": "prettier --write \"**/*.{ts,tsx,md}\"", + "prisma:generate": "turbo run prisma:generate ", + "prisma:generateSql": "turbo run prisma:generateSql ", + "prisma:push": "turbo run prisma:push", + "prisma:migrate": "turbo run prisma:migrate", + "typecheck": "turbo run typecheck" + }, + "devDependencies": { + "@sapphire/framework": "^5.3.1", + "colorette": "^2.0.20", + "discord.js": "^14.16.3", + "prettier": "^3.2.5", + "turbo": "^2.2.3", + "typescript": "5.5.4" + }, + "engines": { + "node": ">=18" + }, + "packageManager": "bun@1.1.34", + "workspaces": [ + "apps/*", + "packages/*" + ], + "trustedDependencies": [ + "@prisma/client", + "@prisma/engines", + "@sapphire/type", + "core-js-pure", + "esbuild", + "prisma" + ], + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "binarytf": "^2.1.3" + } +} diff --git a/packages/config/package.json b/packages/config/package.json new file mode 100644 index 0000000..0c42f34 --- /dev/null +++ b/packages/config/package.json @@ -0,0 +1,29 @@ +{ + "name": "@wyvern/config", + "version": "0.0.0", + "type": "module", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "exports": { + ".": { + "default": "./dist/src/index.js", + "types": "./src/index.ts" + }, + "./debug": { + "default": "./dist/src/configs/debug.js", + "types": "./src/configs/debug.ts" + }, + "./global": { + "default": "./dist/src/configs/global.js", + "types": "./src/configs/global.ts" + } + } +} diff --git a/packages/config/src/configs/debug.ts b/packages/config/src/configs/debug.ts new file mode 100644 index 0000000..8c3618d --- /dev/null +++ b/packages/config/src/configs/debug.ts @@ -0,0 +1,11 @@ +export const debugConfig: DebugConfig = { + displayDatabaseLogs: false, + logLevel: "", +}; + +type LogLevel = ""; +interface DebugConfig { + displayDatabaseLogs: boolean; + + logLevel: LogLevel; +} diff --git a/packages/config/src/configs/global.ts b/packages/config/src/configs/global.ts new file mode 100644 index 0000000..42986be --- /dev/null +++ b/packages/config/src/configs/global.ts @@ -0,0 +1,20 @@ +export const globalConfig: GlobalConfig = { + guildIds: ["1072895701970858026", "739115569311383634"], + colors: { + success: "#f5c931", + warning: "#d7d1b5", + error: "#ffadad", + }, +}; + +interface GlobalConfig { + colors: Colors; + guildIds: string[]; +} + +type HexCode = `#${string}`; +interface Colors { + success: HexCode; + warning: HexCode; + error: HexCode; +} diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts new file mode 100644 index 0000000..7accd60 --- /dev/null +++ b/packages/config/src/index.ts @@ -0,0 +1,2 @@ +export * from "./configs/debug.js"; +export * from "./configs/global.js"; diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json new file mode 100644 index 0000000..52cc5a0 --- /dev/null +++ b/packages/config/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@wyvern/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/config/tsconfig.tsbuildinfo b/packages/config/tsconfig.tsbuildinfo new file mode 100644 index 0000000..1ed360d --- /dev/null +++ b/packages/config/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.string.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.object.d.ts","../../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/foo.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/ws/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5","impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true,"impliedFormat":1},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36bcced44876ff177efb79cc8662aafc1ae351077eee9e034fd7b036e9d33ab5","signature":"3dee7bbd2b685bdcb66cfc9b45605d6689ea42852231fa79cac9a40643c0fa22","impliedFormat":99},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"eb15edfcef078300657e1d5d678e1944b3518c2dd8f26792fdba2fe29f73d32b","impliedFormat":1}],"root":[72],"options":{"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"experimentalDecorators":true,"importHelpers":false,"module":100,"newLine":1,"noEmitHelpers":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","preserveConstEnums":true,"removeComments":false,"rootDir":"./src","sourceMap":true,"strict":true,"target":7,"useDefineForClassFields":true},"fileIdsList":[[81,123],[81,120,123],[81,122,123],[81,123,128,157],[81,123,124,129,135,136,143,154,165],[81,123,124,125,135,143],[76,77,78,81,123],[81,123,126,166],[81,123,127,128,136,144],[81,123,128,154,162],[81,123,129,131,135,143],[81,122,123,130],[81,123,131,132],[81,123,135],[81,123,133,135],[81,122,123,135],[81,123,135,136,137,154,165],[81,123,135,136,137,150,154,157],[81,118,123,170],[81,123,131,135,138,143,154,165],[81,123,135,136,138,139,143,154,162,165],[81,123,138,140,154,162,165],[81,123,135,141],[81,123,142,165,170],[81,123,131,135,143,154],[81,123,144],[81,123,145],[81,122,123,146],[81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,148],[81,123,149],[81,123,135,150,151],[81,123,150,152,166,168],[81,123,135,154,155,156,157],[81,123,154,156],[81,123,154,155],[81,123,157],[81,123,158],[81,120,123,154],[81,123,135,160,161],[81,123,160,161],[81,123,128,143,154,162],[81,123,163],[123],[79,80,81,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,143,164],[81,123,138,149,165],[81,123,128,166],[81,123,154,167],[81,123,142,168],[81,123,169],[81,123,128,135,137,146,154,165,168,170],[81,123,154,171],[81,123,174,213],[81,123,174,198,213],[81,123,213],[81,123,174],[81,123,174,199,213],[81,123,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],[81,123,199,213],[81,123,135,138,140,154,162,165,171,172],[81,90,94,123,165],[81,90,123,154,165],[81,85,123],[81,87,90,123,162,165],[81,123,143,162],[81,123,172],[81,85,123,172],[81,87,90,123,143,165],[81,82,83,86,89,123,135,154,165],[81,90,97,123],[81,82,88,123],[81,90,111,112,123],[81,86,90,123,157,165,172],[81,111,123,172],[81,84,85,123,172],[81,90,123],[81,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[81,90,105,123],[81,90,97,98,123],[81,88,90,98,99,123],[81,89,123],[81,82,85,90,123],[81,90,94,98,99,123],[81,94,123],[81,88,90,93,123,165],[81,82,87,90,97,123],[81,123,154],[81,85,90,111,123,170,172]],"referencedMap":[[73,1],[74,1],[75,1],[120,2],[121,2],[122,3],[123,4],[124,5],[125,6],[76,1],[79,7],[77,1],[78,1],[126,8],[127,9],[128,10],[129,11],[130,12],[131,13],[132,13],[134,14],[133,15],[135,16],[136,17],[137,18],[119,19],[138,20],[139,21],[140,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[81,44],[80,1],[172,45],[164,46],[165,47],[166,48],[167,49],[168,50],[169,51],[170,52],[171,53],[173,1],[198,54],[199,55],[174,56],[177,56],[196,54],[197,54],[187,54],[186,57],[184,54],[179,54],[192,54],[190,54],[194,54],[178,54],[191,54],[195,54],[180,54],[181,54],[193,54],[175,54],[182,54],[183,54],[185,54],[189,54],[200,58],[188,54],[176,54],[213,59],[212,1],[207,58],[209,60],[208,58],[201,58],[202,58],[204,58],[206,58],[210,60],[211,60],[203,60],[205,60],[214,61],[70,1],[71,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[51,1],[9,1],[52,1],[53,1],[54,1],[57,1],[55,1],[56,1],[58,1],[59,1],[10,1],[60,1],[1,1],[61,1],[62,1],[11,1],[67,1],[64,1],[63,1],[68,1],[66,1],[69,1],[65,1],[97,62],[107,63],[96,62],[117,64],[88,65],[87,66],[116,67],[110,68],[115,69],[90,70],[104,71],[89,72],[113,73],[85,74],[84,67],[114,75],[86,76],[91,77],[92,1],[95,77],[82,1],[118,78],[108,79],[99,80],[100,81],[102,82],[98,83],[101,84],[111,67],[93,85],[94,86],[103,87],[83,88],[106,79],[105,77],[109,1],[112,89],[72,1]]},"version":"5.5.4"} \ No newline at end of file diff --git a/packages/database/.gitignore b/packages/database/.gitignore new file mode 100644 index 0000000..11ddd8d --- /dev/null +++ b/packages/database/.gitignore @@ -0,0 +1,3 @@ +node_modules +# Keep environment variables out of version control +.env diff --git a/packages/database/package.json b/packages/database/package.json new file mode 100644 index 0000000..559e584 --- /dev/null +++ b/packages/database/package.json @@ -0,0 +1,37 @@ +{ + "name": "@wyvern/database", + "version": "0.0.0", + "type": "module", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "prisma:generate": "prisma generate", + "prisma:generateSql": "prisma generate --sql", + "prisma:push": "prisma db push", + "prisma:migrate": "prisma migrate dev", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "exports": { + ".": { + "default": "./dist/src/index.js", + "types": "./src/index.ts" + } + }, + "dependencies": { + "@prisma/client": "^5.22.0", + "@wyvern/config": "*", + "@wyvern/plugin-custom-logger": "*" + }, + "devDependencies": { + "client": "^0.0.1", + "prisma": "^5.22.0" + }, + "trustedDependencies": [ + "ws" + ] +} diff --git a/packages/database/prisma/migrations/20241130142822_initial/migration.sql b/packages/database/prisma/migrations/20241130142822_initial/migration.sql new file mode 100644 index 0000000..0eb5938 --- /dev/null +++ b/packages/database/prisma/migrations/20241130142822_initial/migration.sql @@ -0,0 +1,78 @@ +-- CreateTable +CREATE TABLE "user" ( + "id" TEXT NOT NULL, + + CONSTRAINT "user_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Guild" ( + "id" TEXT NOT NULL, + "guild_id" TEXT NOT NULL, + "auto_roles" TEXT[], + "report_channel" TEXT, + + CONSTRAINT "Guild_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "guild_welcome_message" ( + "id" TEXT NOT NULL, + "guild_id" TEXT NOT NULL, + "channel_id" TEXT NOT NULL, + "title" TEXT NOT NULL DEFAULT '🎉 Welcome to the server {user}!', + "description" TEXT NOT NULL DEFAULT '> Welcome to **{guild}** We hope you enjoy your stay here!', + "embed_color" TEXT NOT NULL DEFAULT '#5865F2', + "enabled" BOOLEAN NOT NULL DEFAULT false, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "guild_welcome_message_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "guild_leave_message" ( + "id" TEXT NOT NULL, + "guild_id" TEXT NOT NULL, + "channel_id" TEXT NOT NULL, + "title" TEXT NOT NULL DEFAULT '👋 Goodbye {user}!', + "description" TEXT NOT NULL DEFAULT '> We''re sorry to see you go!', + "embed_color" TEXT NOT NULL DEFAULT '#5865F2', + "enabled" BOOLEAN NOT NULL DEFAULT false, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "guild_leave_message_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Tag" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "content" TEXT NOT NULL, + "usages" INTEGER NOT NULL DEFAULT 0, + "image" TEXT, + "ownerId" TEXT NOT NULL, + "guildId" TEXT NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Guild_guild_id_key" ON "Guild"("guild_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "guild_welcome_message_guild_id_key" ON "guild_welcome_message"("guild_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "guild_leave_message_guild_id_key" ON "guild_leave_message"("guild_id"); + +-- AddForeignKey +ALTER TABLE "guild_welcome_message" ADD CONSTRAINT "guild_welcome_message_guild_id_fkey" FOREIGN KEY ("guild_id") REFERENCES "Guild"("guild_id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "guild_leave_message" ADD CONSTRAINT "guild_leave_message_guild_id_fkey" FOREIGN KEY ("guild_id") REFERENCES "Guild"("guild_id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Tag" ADD CONSTRAINT "Tag_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Tag" ADD CONSTRAINT "Tag_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "Guild"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/packages/database/prisma/migrations/20241130180637_make_welcome_channelid_nullable/migration.sql b/packages/database/prisma/migrations/20241130180637_make_welcome_channelid_nullable/migration.sql new file mode 100644 index 0000000..91eeab0 --- /dev/null +++ b/packages/database/prisma/migrations/20241130180637_make_welcome_channelid_nullable/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "guild_leave_message" ALTER COLUMN "channel_id" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "guild_welcome_message" ALTER COLUMN "channel_id" DROP NOT NULL; diff --git a/packages/database/prisma/migrations/20241208190233_auto_carbon/migration.sql b/packages/database/prisma/migrations/20241208190233_auto_carbon/migration.sql new file mode 100644 index 0000000..9206968 --- /dev/null +++ b/packages/database/prisma/migrations/20241208190233_auto_carbon/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Guild" ADD COLUMN "auto_carbon" BOOLEAN NOT NULL DEFAULT false; diff --git a/packages/database/prisma/migrations/migration_lock.toml b/packages/database/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/packages/database/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/packages/database/prisma/schema.prisma b/packages/database/prisma/schema.prisma new file mode 100644 index 0000000..cef0dc9 --- /dev/null +++ b/packages/database/prisma/schema.prisma @@ -0,0 +1,83 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client-js" + previewFeatures = ["typedSql"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model User { + id String @id + ownedTags Tag[] + + @@map("user") +} + +model Guild { + id String @id @default(cuid()) + guildId String @unique @map("guild_id") + + tags Tag[] + + // Settings + autoRoles String[] @map("auto_roles") + reportChannel String? @map("report_channel") + guildWelcomeMessage GuildWelcomeMessage? + guildLeaveMessage GuildLeaveMessage? + autoCarbon Boolean @default(false) @map("auto_carbon") +} + +// Guild welcome message +model GuildWelcomeMessage { + id String @id @default(cuid()) + guildId String @unique @map(name: "guild_id") + channelId String? @map(name: "channel_id") + + title String @default("🎉 Welcome to the server {user}!") + description String @default("> Welcome to **{guild}** We hope you enjoy your stay here!") + embedColor String @default("#5865F2") @map(name: "embed_color") + enabled Boolean @default(false) + createdAt DateTime @default(now()) @map(name: "created_at") + + guild Guild @relation(fields: [guildId], references: [guildId], onDelete: Cascade) + + @@map(name: "guild_welcome_message") +} + +// Guild leave message +model GuildLeaveMessage { + id String @id @default(cuid()) + guildId String @unique @map(name: "guild_id") + channelId String? @map(name: "channel_id") + title String @default("👋 Goodbye {user}!") + description String @default("> We're sorry to see you go!") + embedColor String @default("#5865F2") @map(name: "embed_color") + enabled Boolean @default(false) + createdAt DateTime @default(now()) @map(name: "created_at") + guild Guild @relation(fields: [guildId], references: [guildId], onDelete: Cascade) + + @@map(name: "guild_leave_message") +} + +model Tag { + id String @id @default(cuid()) + + owner User @relation(fields: [ownerId], references: [id]) + guild Guild @relation(fields: [guildId], references: [id]) + + name String + content String + usages Int @default(0) + image String? + + ownerId String + guildId String +} diff --git a/packages/database/prisma/sql/createAutoRole.sql b/packages/database/prisma/sql/createAutoRole.sql new file mode 100644 index 0000000..db25c8d --- /dev/null +++ b/packages/database/prisma/sql/createAutoRole.sql @@ -0,0 +1,8 @@ +-- @param {String} $1:role_id +-- @param {String} $2:guild_id +UPDATE + "public"."Guild" +SET + "AutoRoles" = array_append("AutoRoles", $1) +WHERE + "id" = $2; \ No newline at end of file diff --git a/packages/database/prisma/sql/createTag.sql b/packages/database/prisma/sql/createTag.sql new file mode 100644 index 0000000..248e0f0 --- /dev/null +++ b/packages/database/prisma/sql/createTag.sql @@ -0,0 +1,27 @@ + +-- @param {String} $1:content +-- @param {String} $2:image +-- @param {String} $3:name +-- @param {String} $4:guildId +-- @param {String} $5:ownerId +-- @param {String} $6:id +INSERT INTO + "Tag" ( + "Content", + "Image", + "Name", + + "guildId", + "ownerId", + + "Id" + ) +VALUES ( + $1, + $2, + $3, + + $4, + $5, + $6 +) \ No newline at end of file diff --git a/packages/database/prisma/sql/findTagByTitle.sql b/packages/database/prisma/sql/findTagByTitle.sql new file mode 100644 index 0000000..6b17d39 --- /dev/null +++ b/packages/database/prisma/sql/findTagByTitle.sql @@ -0,0 +1,11 @@ +-- @param {String} $1:guildId +-- @param {String} $2:name +SELECT + * +FROM + "Tag" +WHERE + "guildId" = $1 + AND "Name" = $2 +LIMIT + 1 \ No newline at end of file diff --git a/packages/database/prisma/sql/removeAutoRole.sql b/packages/database/prisma/sql/removeAutoRole.sql new file mode 100644 index 0000000..b0746da --- /dev/null +++ b/packages/database/prisma/sql/removeAutoRole.sql @@ -0,0 +1,8 @@ +-- @param {String} $1:role_id +-- @param {String} $2:guild_id +UPDATE + "public"."Guild" +SET + "AutoRoles" = array_remove("AutoRoles", $1) +WHERE + "id" = $2; \ No newline at end of file diff --git a/packages/database/src/helpers/getGuild.ts b/packages/database/src/helpers/getGuild.ts new file mode 100644 index 0000000..2e12bc8 --- /dev/null +++ b/packages/database/src/helpers/getGuild.ts @@ -0,0 +1,10 @@ +import { Guild, Prisma, prismaClient } from "../index.js"; +import { Result } from "@sapphire/framework"; + +export async function getGuild(id: string) { + return Result.fromAsync( + prismaClient.guild.findFirstOrThrow({ + where: { guildId: id }, + }) + ); +} diff --git a/packages/database/src/helpers/index.ts b/packages/database/src/helpers/index.ts new file mode 100644 index 0000000..96b3cce --- /dev/null +++ b/packages/database/src/helpers/index.ts @@ -0,0 +1 @@ +export * from "./getGuild.js"; diff --git a/packages/database/src/index.ts b/packages/database/src/index.ts new file mode 100644 index 0000000..da48b91 --- /dev/null +++ b/packages/database/src/index.ts @@ -0,0 +1,53 @@ +import { PrismaClient } from "@prisma/client"; +import { wyvernLogger } from "@wyvern/plugin-custom-logger"; +import { debugConfig } from "@wyvern/config/debug"; + +const log = wyvernLogger.child({ activity: "database" }); + +const pris = new PrismaClient({ + log: [ + { emit: "event", level: "query" }, + { emit: "event", level: "warn" }, + { emit: "event", level: "error" }, + ], +}); + +const prismaClientWrapper = (): PrismaClient => { + if (debugConfig.displayDatabaseLogs) { + pris.$on("query", ({ duration, query }) => { + log.info("Query: %s", query); + log.info("Duration: %dms", duration); + }); + + pris.$on("warn", ({ message }) => { + wyvernLogger.warn(`Prisma Warning: %s`, message); + }); + + pris.$on("error", ({ message }) => { + wyvernLogger.warn(`Prisma Error: %s`, message); + }); + } + + return pris; +}; + +const prismaClientSingleton = () => { + return prismaClientWrapper(); +}; + +declare const globalThis: { + prismaGlobal: ReturnType; +} & typeof global; + +// const prisma: PrismaClient = globalThis.prismaGlobal ?? prismaClientSingleton(); + +export const prismaClient = globalThis.prismaGlobal ?? prismaClientSingleton(); + +if (process.env.NODE_ENV !== "production") globalThis.prismaGlobal = pris; + +// also export types +export * from "@prisma/client"; +export * from "@prisma/client/sql"; + +// export helper funcs +export * from "./helpers/index.js"; diff --git a/packages/database/tsconfig.json b/packages/database/tsconfig.json new file mode 100644 index 0000000..52cc5a0 --- /dev/null +++ b/packages/database/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@wyvern/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/error-handler/package.json b/packages/error-handler/package.json new file mode 100644 index 0000000..3d9e272 --- /dev/null +++ b/packages/error-handler/package.json @@ -0,0 +1,21 @@ +{ + "name": "@wyvern/error-handler", + "version": "0.0.0", + "type": "module", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "exports": { + ".": { + "default": "./dist/src/index.js", + "types": "./src/index.ts" + } + } +} diff --git a/packages/error-handler/src/WyvernErrorHandler.ts b/packages/error-handler/src/WyvernErrorHandler.ts new file mode 100644 index 0000000..2654630 --- /dev/null +++ b/packages/error-handler/src/WyvernErrorHandler.ts @@ -0,0 +1,53 @@ +import * as Sentry from "@sentry/node"; + +export class WyvernErrorHandler { + constructor() { + const dsn = process.env.SENTRY_DSN; + + if (dsn == undefined) { + throw new Error("process.env.SENTRY_DSN is undefined"); + } + + if (!Sentry.isInitialized()) { + Sentry.init({ + dsn, + }); + } + } + + public async handleCommandError(options: CommandErrorOptions) { + if (process.env.NODE_ENV != "production") return; + + Sentry.captureException(options.error, (scope) => { + scope.setContext("Command", { + commandName: options.commandName, + commandId: options.commandId, + }); + + scope.setContext("Guild", { + commandName: options.guildName, + commandId: options.guildId, + }); + + scope.setUser({ + username: options.username, + id: options.userId, + }); + + return scope; + }); + } +} + +interface CommandErrorOptions { + error: Error; + + commandName: string; + commandId: string; + + username: string; + userId: string; + + guildName: string; + guildId: string; +} diff --git a/packages/error-handler/src/index.ts b/packages/error-handler/src/index.ts new file mode 100644 index 0000000..c37f56f --- /dev/null +++ b/packages/error-handler/src/index.ts @@ -0,0 +1 @@ +export * from "./WyvernErrorHandler.js"; diff --git a/packages/error-handler/tsconfig.json b/packages/error-handler/tsconfig.json new file mode 100644 index 0000000..52cc5a0 --- /dev/null +++ b/packages/error-handler/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@wyvern/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/error-handler/tsconfig.tsbuildinfo b/packages/error-handler/tsconfig.tsbuildinfo new file mode 100644 index 0000000..1ed360d --- /dev/null +++ b/packages/error-handler/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.string.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.object.d.ts","../../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/foo.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/ws/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5","impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true,"impliedFormat":1},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36bcced44876ff177efb79cc8662aafc1ae351077eee9e034fd7b036e9d33ab5","signature":"3dee7bbd2b685bdcb66cfc9b45605d6689ea42852231fa79cac9a40643c0fa22","impliedFormat":99},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"eb15edfcef078300657e1d5d678e1944b3518c2dd8f26792fdba2fe29f73d32b","impliedFormat":1}],"root":[72],"options":{"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"experimentalDecorators":true,"importHelpers":false,"module":100,"newLine":1,"noEmitHelpers":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","preserveConstEnums":true,"removeComments":false,"rootDir":"./src","sourceMap":true,"strict":true,"target":7,"useDefineForClassFields":true},"fileIdsList":[[81,123],[81,120,123],[81,122,123],[81,123,128,157],[81,123,124,129,135,136,143,154,165],[81,123,124,125,135,143],[76,77,78,81,123],[81,123,126,166],[81,123,127,128,136,144],[81,123,128,154,162],[81,123,129,131,135,143],[81,122,123,130],[81,123,131,132],[81,123,135],[81,123,133,135],[81,122,123,135],[81,123,135,136,137,154,165],[81,123,135,136,137,150,154,157],[81,118,123,170],[81,123,131,135,138,143,154,165],[81,123,135,136,138,139,143,154,162,165],[81,123,138,140,154,162,165],[81,123,135,141],[81,123,142,165,170],[81,123,131,135,143,154],[81,123,144],[81,123,145],[81,122,123,146],[81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,148],[81,123,149],[81,123,135,150,151],[81,123,150,152,166,168],[81,123,135,154,155,156,157],[81,123,154,156],[81,123,154,155],[81,123,157],[81,123,158],[81,120,123,154],[81,123,135,160,161],[81,123,160,161],[81,123,128,143,154,162],[81,123,163],[123],[79,80,81,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,143,164],[81,123,138,149,165],[81,123,128,166],[81,123,154,167],[81,123,142,168],[81,123,169],[81,123,128,135,137,146,154,165,168,170],[81,123,154,171],[81,123,174,213],[81,123,174,198,213],[81,123,213],[81,123,174],[81,123,174,199,213],[81,123,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],[81,123,199,213],[81,123,135,138,140,154,162,165,171,172],[81,90,94,123,165],[81,90,123,154,165],[81,85,123],[81,87,90,123,162,165],[81,123,143,162],[81,123,172],[81,85,123,172],[81,87,90,123,143,165],[81,82,83,86,89,123,135,154,165],[81,90,97,123],[81,82,88,123],[81,90,111,112,123],[81,86,90,123,157,165,172],[81,111,123,172],[81,84,85,123,172],[81,90,123],[81,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[81,90,105,123],[81,90,97,98,123],[81,88,90,98,99,123],[81,89,123],[81,82,85,90,123],[81,90,94,98,99,123],[81,94,123],[81,88,90,93,123,165],[81,82,87,90,97,123],[81,123,154],[81,85,90,111,123,170,172]],"referencedMap":[[73,1],[74,1],[75,1],[120,2],[121,2],[122,3],[123,4],[124,5],[125,6],[76,1],[79,7],[77,1],[78,1],[126,8],[127,9],[128,10],[129,11],[130,12],[131,13],[132,13],[134,14],[133,15],[135,16],[136,17],[137,18],[119,19],[138,20],[139,21],[140,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[81,44],[80,1],[172,45],[164,46],[165,47],[166,48],[167,49],[168,50],[169,51],[170,52],[171,53],[173,1],[198,54],[199,55],[174,56],[177,56],[196,54],[197,54],[187,54],[186,57],[184,54],[179,54],[192,54],[190,54],[194,54],[178,54],[191,54],[195,54],[180,54],[181,54],[193,54],[175,54],[182,54],[183,54],[185,54],[189,54],[200,58],[188,54],[176,54],[213,59],[212,1],[207,58],[209,60],[208,58],[201,58],[202,58],[204,58],[206,58],[210,60],[211,60],[203,60],[205,60],[214,61],[70,1],[71,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[51,1],[9,1],[52,1],[53,1],[54,1],[57,1],[55,1],[56,1],[58,1],[59,1],[10,1],[60,1],[1,1],[61,1],[62,1],[11,1],[67,1],[64,1],[63,1],[68,1],[66,1],[69,1],[65,1],[97,62],[107,63],[96,62],[117,64],[88,65],[87,66],[116,67],[110,68],[115,69],[90,70],[104,71],[89,72],[113,73],[85,74],[84,67],[114,75],[86,76],[91,77],[92,1],[95,77],[82,1],[118,78],[108,79],[99,80],[100,81],[102,82],[98,83],[101,84],[111,67],[93,85],[94,86],[103,87],[83,88],[106,79],[105,77],[109,1],[112,89],[72,1]]},"version":"5.5.4"} \ No newline at end of file diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md new file mode 100644 index 0000000..8b42d90 --- /dev/null +++ b/packages/eslint-config/README.md @@ -0,0 +1,3 @@ +# `@turbo/eslint-config` + +Collection of internal eslint configurations. diff --git a/packages/eslint-config/library.js b/packages/eslint-config/library.js new file mode 100644 index 0000000..9b59cc0 --- /dev/null +++ b/packages/eslint-config/library.js @@ -0,0 +1,34 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ["eslint:recommended", "prettier", "turbo"], + plugins: ["only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + { + files: ["*.js?(x)", "*.ts?(x)"], + }, + ], +}; diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js new file mode 100644 index 0000000..88445be --- /dev/null +++ b/packages/eslint-config/next.js @@ -0,0 +1,35 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: [ + "eslint:recommended", + "prettier", + require.resolve("@vercel/style-guide/eslint/next"), + "turbo", + ], + globals: { + React: true, + JSX: true, + }, + env: { + node: true, + browser: true, + }, + plugins: ["only-warn"], + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + ], + overrides: [{ files: ["*.js?(x)", "*.ts?(x)"] }], +}; diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json new file mode 100644 index 0000000..65874ab --- /dev/null +++ b/packages/eslint-config/package.json @@ -0,0 +1,19 @@ +{ + "name": "@wyvern/eslint-config", + "version": "0.0.0", + "private": true, + "files": [ + "library.js", + "next.js", + "react-internal.js" + ], + "devDependencies": { + "@vercel/style-guide": "^5.2.0", + "eslint-config-turbo": "^2.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-only-warn": "^1.1.0", + "@typescript-eslint/parser": "^7.1.0", + "@typescript-eslint/eslint-plugin": "^7.1.0", + "typescript": "5.5.4" + } +} diff --git a/packages/eslint-config/react-internal.js b/packages/eslint-config/react-internal.js new file mode 100644 index 0000000..bf0a208 --- /dev/null +++ b/packages/eslint-config/react-internal.js @@ -0,0 +1,39 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/* + * This is a custom ESLint configuration for use with + * internal (bundled by their consumer) libraries + * that utilize React. + */ + +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ["eslint:recommended", "prettier", "turbo"], + plugins: ["only-warn"], + globals: { + React: true, + JSX: true, + }, + env: { + browser: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + }, + }, + ignorePatterns: [ + // Ignore dotfiles + ".*.js", + "node_modules/", + "dist/", + ], + overrides: [ + // Force ESLint to detect .tsx files + { files: ["*.js?(x)", "*.ts?(x)"] }, + ], +}; diff --git a/packages/markdown/jest.config.js b/packages/markdown/jest.config.js new file mode 100644 index 0000000..afa4723 --- /dev/null +++ b/packages/markdown/jest.config.js @@ -0,0 +1,7 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} **/ +export default { + testEnvironment: "node", + transform: { + "^.+.tsx?$": ["ts-jest",{}], + }, +}; \ No newline at end of file diff --git a/packages/markdown/package.json b/packages/markdown/package.json new file mode 100644 index 0000000..0676120 --- /dev/null +++ b/packages/markdown/package.json @@ -0,0 +1,29 @@ +{ + "name": "@wyvern/markdown", + "version": "0.0.0", + "type": "module", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "test": "vitest", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "exports": { + ".": { + "default": "./dist/src/index.js", + "types": "./src/index.ts" + } + }, + "devDependencies": { + "@jest/globals": "^29.7.0", + "@types/jest": "^29.5.14", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", + "vitest": "^2.1.6" + } +} diff --git a/packages/markdown/src/formatters/bold.ts b/packages/markdown/src/formatters/bold.ts new file mode 100644 index 0000000..7381df0 --- /dev/null +++ b/packages/markdown/src/formatters/bold.ts @@ -0,0 +1,5 @@ +type Bold = `**${Text}**`; + +export function bold(text: Text): Bold { + return `**${text}**`; +} diff --git a/packages/markdown/src/formatters/codeblock.ts b/packages/markdown/src/formatters/codeblock.ts new file mode 100644 index 0000000..39add23 --- /dev/null +++ b/packages/markdown/src/formatters/codeblock.ts @@ -0,0 +1,12 @@ +type CodeBlock< + Text extends string, + Lang extends string | undefined = "", +> = `\`\`\`${Lang}\n${Text}\n\`\`\``; + +export function codeblock< + Text extends string, + Lang extends string | undefined = "", +>(text: Text, lang?: Lang): CodeBlock { + lang ??= "" as Lang; + return `\`\`\`${lang}\n${text}\n\`\`\``; +} diff --git a/packages/markdown/src/formatters/heading.ts b/packages/markdown/src/formatters/heading.ts new file mode 100644 index 0000000..89825d6 --- /dev/null +++ b/packages/markdown/src/formatters/heading.ts @@ -0,0 +1,15 @@ +type H1 = `# ${Text}`; +type H2 = `## ${Text}`; +type H3 = `### ${Text}`; + +export function h1(text: Text): H1 { + return `# ${text}`; +} + +export function h2(text: Text): H2 { + return `## ${text}`; +} + +export function h3(text: Text): H3 { + return `### ${text}`; +} diff --git a/packages/markdown/src/formatters/italic.ts b/packages/markdown/src/formatters/italic.ts new file mode 100644 index 0000000..d8bad5f --- /dev/null +++ b/packages/markdown/src/formatters/italic.ts @@ -0,0 +1,5 @@ +type Itaic = `_${Text}_`; + +export function italic(text: Text): Itaic { + return `_${text}_`; +} diff --git a/packages/markdown/src/formatters/mention.ts b/packages/markdown/src/formatters/mention.ts new file mode 100644 index 0000000..b25a3df --- /dev/null +++ b/packages/markdown/src/formatters/mention.ts @@ -0,0 +1,27 @@ +type Mentionable = "user" | "channel" | "role"; + +// prettier-ignore +type Mention = + Type extends "user" + ? `<@${Id}>` + : Type extends "channel" + ? `<#${Id}>` + : Type extends "role" + ? `<@&${Id}>` + : never; + +export function mention( + type: Type, + id: Id +): Mention { + switch (type) { + case "channel": + return `<#${id}>` as Mention; + case "role": + return `<@&${id}>` as Mention; + case "user": + return `<@${id}>` as Mention; + default: + throw `Invalid mentionable type: ${type}`; + } +} diff --git a/packages/markdown/src/formatters/quote.ts b/packages/markdown/src/formatters/quote.ts new file mode 100644 index 0000000..3bf454f --- /dev/null +++ b/packages/markdown/src/formatters/quote.ts @@ -0,0 +1,10 @@ +type Quote = `> ${Text}`; +type BlockQuote = `>>> ${Text}`; + +export function quote(text: Text): Quote { + return `> ${text}`; +} + +export function blockQuote(text: Text): BlockQuote { + return `>>> ${text}`; +} diff --git a/packages/markdown/src/formatters/spoiler.ts b/packages/markdown/src/formatters/spoiler.ts new file mode 100644 index 0000000..d8ab696 --- /dev/null +++ b/packages/markdown/src/formatters/spoiler.ts @@ -0,0 +1,5 @@ +type Spoiler = `||${Text}||`; + +export function spoiler(text: Text): Spoiler { + return `||${text}||`; +} diff --git a/packages/markdown/src/formatters/strikethrough.ts b/packages/markdown/src/formatters/strikethrough.ts new file mode 100644 index 0000000..0bb6a29 --- /dev/null +++ b/packages/markdown/src/formatters/strikethrough.ts @@ -0,0 +1,7 @@ +type Underline = `~~${Text}~~`; + +export function strikethrough( + text: Text +): Underline { + return `~~${text}~~`; +} diff --git a/packages/markdown/src/formatters/underline.ts b/packages/markdown/src/formatters/underline.ts new file mode 100644 index 0000000..91ebcea --- /dev/null +++ b/packages/markdown/src/formatters/underline.ts @@ -0,0 +1,5 @@ +type Underline = `__${Text}__`; + +export function underline(text: Text): Underline { + return `__${text}__`; +} diff --git a/packages/markdown/src/index.ts b/packages/markdown/src/index.ts new file mode 100644 index 0000000..cb8da8e --- /dev/null +++ b/packages/markdown/src/index.ts @@ -0,0 +1,10 @@ +export * from "./formatters/bold.js"; +export * from "./formatters/codeblock.js"; +export * from "./formatters/heading.js"; +export * from "./formatters/italic.js"; +export * from "./formatters/quote.js"; +export * from "./formatters/spoiler.js"; +export * from "./formatters/strikethrough.js"; +export * from "./formatters/underline.js"; + +export * from "./formatters/mention.js"; diff --git a/packages/markdown/tests/markdown.test.ts b/packages/markdown/tests/markdown.test.ts new file mode 100644 index 0000000..51f17f6 --- /dev/null +++ b/packages/markdown/tests/markdown.test.ts @@ -0,0 +1,44 @@ +import { expect, test } from "vitest"; +import * as md from "@wyvern/markdown"; + +test("Bold", () => { + expect(md.bold("foo")).toEqual("**foo**"); +}); + +test("Codeblock", () => { + expect(md.codeblock("foo")).toEqual("```\nfoo\n```"); + expect(md.codeblock("foo", "js")).toEqual("```js\nfoo\n```"); +}); + +test("Heading", () => { + expect(md.h1("foo")).toEqual("# foo"); + expect(md.h2("foo")).toEqual("## foo"); + expect(md.h3("foo")).toEqual("### foo"); +}); + +test("Italic", () => { + expect(md.italic("foo")).toEqual("_foo_"); +}); + +test("Mention", () => { + expect(md.mention("channel", "123")).toEqual("<#123>"); + expect(md.mention("role", "123")).toEqual("<@&123>"); + expect(md.mention("user", "123")).toEqual("<@123>"); +}); + +test("Quote", () => { + expect(md.quote("foo")).toEqual("> foo"); + expect(md.blockQuote("foo")).toEqual(">>> foo"); +}); + +test("Spoiler", () => { + expect(md.spoiler("foo")).toEqual("||foo||"); +}); + +test("Strikethrough", () => { + expect(md.strikethrough("foo")).toEqual("~~foo~~"); +}); + +test("Underline", () => { + expect(md.strikethrough("foo")).toEqual("~~foo~~"); +}); diff --git a/packages/markdown/tsconfig.json b/packages/markdown/tsconfig.json new file mode 100644 index 0000000..52cc5a0 --- /dev/null +++ b/packages/markdown/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@wyvern/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/markdown/tsconfig.tsbuildinfo b/packages/markdown/tsconfig.tsbuildinfo new file mode 100644 index 0000000..1ed360d --- /dev/null +++ b/packages/markdown/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.string.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.object.d.ts","../../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/foo.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/ws/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5","impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true,"impliedFormat":1},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36bcced44876ff177efb79cc8662aafc1ae351077eee9e034fd7b036e9d33ab5","signature":"3dee7bbd2b685bdcb66cfc9b45605d6689ea42852231fa79cac9a40643c0fa22","impliedFormat":99},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"eb15edfcef078300657e1d5d678e1944b3518c2dd8f26792fdba2fe29f73d32b","impliedFormat":1}],"root":[72],"options":{"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"experimentalDecorators":true,"importHelpers":false,"module":100,"newLine":1,"noEmitHelpers":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","preserveConstEnums":true,"removeComments":false,"rootDir":"./src","sourceMap":true,"strict":true,"target":7,"useDefineForClassFields":true},"fileIdsList":[[81,123],[81,120,123],[81,122,123],[81,123,128,157],[81,123,124,129,135,136,143,154,165],[81,123,124,125,135,143],[76,77,78,81,123],[81,123,126,166],[81,123,127,128,136,144],[81,123,128,154,162],[81,123,129,131,135,143],[81,122,123,130],[81,123,131,132],[81,123,135],[81,123,133,135],[81,122,123,135],[81,123,135,136,137,154,165],[81,123,135,136,137,150,154,157],[81,118,123,170],[81,123,131,135,138,143,154,165],[81,123,135,136,138,139,143,154,162,165],[81,123,138,140,154,162,165],[81,123,135,141],[81,123,142,165,170],[81,123,131,135,143,154],[81,123,144],[81,123,145],[81,122,123,146],[81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,148],[81,123,149],[81,123,135,150,151],[81,123,150,152,166,168],[81,123,135,154,155,156,157],[81,123,154,156],[81,123,154,155],[81,123,157],[81,123,158],[81,120,123,154],[81,123,135,160,161],[81,123,160,161],[81,123,128,143,154,162],[81,123,163],[123],[79,80,81,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,143,164],[81,123,138,149,165],[81,123,128,166],[81,123,154,167],[81,123,142,168],[81,123,169],[81,123,128,135,137,146,154,165,168,170],[81,123,154,171],[81,123,174,213],[81,123,174,198,213],[81,123,213],[81,123,174],[81,123,174,199,213],[81,123,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],[81,123,199,213],[81,123,135,138,140,154,162,165,171,172],[81,90,94,123,165],[81,90,123,154,165],[81,85,123],[81,87,90,123,162,165],[81,123,143,162],[81,123,172],[81,85,123,172],[81,87,90,123,143,165],[81,82,83,86,89,123,135,154,165],[81,90,97,123],[81,82,88,123],[81,90,111,112,123],[81,86,90,123,157,165,172],[81,111,123,172],[81,84,85,123,172],[81,90,123],[81,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[81,90,105,123],[81,90,97,98,123],[81,88,90,98,99,123],[81,89,123],[81,82,85,90,123],[81,90,94,98,99,123],[81,94,123],[81,88,90,93,123,165],[81,82,87,90,97,123],[81,123,154],[81,85,90,111,123,170,172]],"referencedMap":[[73,1],[74,1],[75,1],[120,2],[121,2],[122,3],[123,4],[124,5],[125,6],[76,1],[79,7],[77,1],[78,1],[126,8],[127,9],[128,10],[129,11],[130,12],[131,13],[132,13],[134,14],[133,15],[135,16],[136,17],[137,18],[119,19],[138,20],[139,21],[140,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[81,44],[80,1],[172,45],[164,46],[165,47],[166,48],[167,49],[168,50],[169,51],[170,52],[171,53],[173,1],[198,54],[199,55],[174,56],[177,56],[196,54],[197,54],[187,54],[186,57],[184,54],[179,54],[192,54],[190,54],[194,54],[178,54],[191,54],[195,54],[180,54],[181,54],[193,54],[175,54],[182,54],[183,54],[185,54],[189,54],[200,58],[188,54],[176,54],[213,59],[212,1],[207,58],[209,60],[208,58],[201,58],[202,58],[204,58],[206,58],[210,60],[211,60],[203,60],[205,60],[214,61],[70,1],[71,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[51,1],[9,1],[52,1],[53,1],[54,1],[57,1],[55,1],[56,1],[58,1],[59,1],[10,1],[60,1],[1,1],[61,1],[62,1],[11,1],[67,1],[64,1],[63,1],[68,1],[66,1],[69,1],[65,1],[97,62],[107,63],[96,62],[117,64],[88,65],[87,66],[116,67],[110,68],[115,69],[90,70],[104,71],[89,72],[113,73],[85,74],[84,67],[114,75],[86,76],[91,77],[92,1],[95,77],[82,1],[118,78],[108,79],[99,80],[100,81],[102,82],[98,83],[101,84],[111,67],[93,85],[94,86],[103,87],[83,88],[106,79],[105,77],[109,1],[112,89],[72,1]]},"version":"5.5.4"} \ No newline at end of file diff --git a/packages/plugin-custom-logger/package.json b/packages/plugin-custom-logger/package.json new file mode 100644 index 0000000..95ccc07 --- /dev/null +++ b/packages/plugin-custom-logger/package.json @@ -0,0 +1,31 @@ +{ + "name": "@wyvern/plugin-custom-logger", + "version": "0.0.0", + "type": "module", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "exports": { + ".": { + "default": "./dist/src/index.js", + "types": "./src/index.ts" + }, + "./register": { + "default": "./dist/src/register.js", + "types": "./src/register.ts" + } + }, + "dependencies": { + "@datalust/winston-seq": "^2.0.0", + "@wyvern/config": "*", + "winston": "^3.17.0", + "winston-transport-sentry-node": "^3.0.0" + } +} diff --git a/packages/plugin-custom-logger/src/foo.ts b/packages/plugin-custom-logger/src/foo.ts new file mode 100644 index 0000000..73e0ebd --- /dev/null +++ b/packages/plugin-custom-logger/src/foo.ts @@ -0,0 +1,3 @@ +export function foo() { + return "bar" +} \ No newline at end of file diff --git a/packages/plugin-custom-logger/src/index.ts b/packages/plugin-custom-logger/src/index.ts new file mode 100644 index 0000000..eaac632 --- /dev/null +++ b/packages/plugin-custom-logger/src/index.ts @@ -0,0 +1,12 @@ +import { Logger, type LoggerOptions } from "./lib/Logger.js"; + +export * from "./lib/Logger.js"; +export * from "./lib/LoggerLevel.js"; +export * from "./lib/LoggerStyle.js"; +export * from "./lib/LoggerTimestamp.js"; + +export const wyvernLogger = new Logger().logger; + +declare module "@sapphire/framework" { + export interface ClientLoggerOptions extends LoggerOptions {} +} diff --git a/packages/plugin-custom-logger/src/lib/Logger.ts b/packages/plugin-custom-logger/src/lib/Logger.ts new file mode 100644 index 0000000..3e99968 --- /dev/null +++ b/packages/plugin-custom-logger/src/lib/Logger.ts @@ -0,0 +1,243 @@ +import { + Logger as BuiltinLogger, + LogLevel, + type LogMethods, +} from "@sapphire/framework"; +import { + bgRed, + cyan, + gray, + isColorSupported, + magenta, + red, + white, + yellow, + type Color, +} from "colorette"; +import { Console } from "console"; +import { inspect, type InspectOptions } from "util"; +import { LoggerLevel, type LoggerLevelOptions } from "./LoggerLevel.js"; +import { debugConfig } from "@wyvern/config"; +import * as winston from "winston"; +import { SeqTransport } from "@datalust/winston-seq"; + +const { printf, combine, timestamp, colorize, splat } = winston.format; + +export class Logger extends BuiltinLogger { + public readonly console: Console; + + public readonly formats: Map; + + public readonly join: string; + + public readonly depth: number; + + public readonly logger: winston.Logger; + + public constructor(options: LoggerOptions = {}) { + super(options.level ?? LogLevel.Info); + + this.console = new Console( + options.stdout ?? process.stdout, + options.stderr ?? process.stderr + ); + this.formats = Logger.createFormatMap( + options.format, + options.defaultFormat + ); + this.join = options.join ?? " "; + this.depth = options.depth ?? 0; + + const myFormat = printf(({ level, message, timestamp }) => { + return `${timestamp} ${level} - ${message}`; + }); + + const consoleFormat = combine( + splat(), + colorize({ + colors: { + verbose: "bgGrey", + debug: "bgMagenta", + info: "bgCyan", + warn: "bgYellow", + error: "bgRed", + fatal: "bgRed", + }, + level: true, + }), + timestamp({ format: "D/MM/YYYY HH:mm:ss" }), + myFormat + ); + + const transports: winston.transport[] = [ + new winston.transports.Console({ format: consoleFormat }), + ]; + + if (process.env.SEQ_URL && process.env.SEQ_API_KEY) { + transports.push( + new SeqTransport({ + apiKey: process.env.SEQ_URL, + serverUrl: process.env.SEQ_URL, + onError: (e) => console.error(e), + level: "info", + }) + ); + } + + // const SentryTransport = Sentry.default.default // what the fuck + // if (process.env.SENTRY_DSN) { + // transports.push(new SentryTransport({ + // sentry: { dsn: process.env.SENTRY_DSN }, + // level: 'error' + // })) + // } + + this.logger = winston.createLogger({ + level: debugConfig.logLevel, + transports, + }); + } + + // @ts-ignore + public override write(level: LogLevel, ...values: readonly unknown[]): void { + if (level < this.level) return; + + // @ts-ignore + const method = this.levels.get(level) ?? "log"; + + // @ts-ignore + const formatter = + this.formats.get(level) ?? this.formats.get(LogLevel.None)!; + + // const msg = formatter.run(this.preprocess(values)); + const msg = this.preprocess(values); + + switch (level) { + case LogLevel.Trace: + this.logger.verbose(msg); + break; + case LogLevel.Debug: + this.logger.debug(msg); + break; + case LogLevel.Info: + this.logger.info(msg); + break; + case LogLevel.Warn: + this.logger.warn(msg); + break; + case LogLevel.Error: + this.logger.error(msg); + break; + case LogLevel.Fatal: + this.logger.error(msg); + break; + case LogLevel.None: + break; + } + } + + protected preprocess(values: readonly unknown[]) { + const inspectOptions: InspectOptions = { + colors: isColorSupported, + depth: this.depth, + }; + return values + .map((value) => + typeof value === "string" ? value : inspect(value, inspectOptions) + ) + .join(this.join); + } + + private get levels() { + return Reflect.get(BuiltinLogger, "levels") as Map; + } + + public static get stylize() { + return isColorSupported; + } + + private static createFormatMap( + options: LoggerFormatOptions = {}, + defaults: LoggerLevelOptions = options.none ?? {} + ) { + return new Map([ + [ + LogLevel.Trace, + Logger.ensureDefaultLevel(options.trace, defaults, gray, "TRA"), + ], + [ + LogLevel.Debug, + Logger.ensureDefaultLevel(options.debug, defaults, magenta, "DBG"), + ], + [ + LogLevel.Info, + Logger.ensureDefaultLevel(options.info, defaults, cyan, "INF"), + ], + [ + LogLevel.Warn, + Logger.ensureDefaultLevel(options.warn, defaults, yellow, "WRN"), + ], + [ + LogLevel.Error, + Logger.ensureDefaultLevel(options.error, defaults, red, "ERR"), + ], + [ + LogLevel.Fatal, + Logger.ensureDefaultLevel(options.fatal, defaults, bgRed, "FTL"), + ], + [ + LogLevel.None, + Logger.ensureDefaultLevel(options.none, defaults, white, ""), + ], + ]); + } + + private static ensureDefaultLevel( + options: LoggerLevelOptions | undefined, + defaults: LoggerLevelOptions, + color: Color, + name: string + ) { + if (options) return new LoggerLevel(options); + return new LoggerLevel({ + ...defaults, + timestamp: + defaults.timestamp === null + ? null + : { ...(defaults.timestamp ?? {}), color }, + infix: name.length ? `${color(name.padEnd(3, " "))} - ` : "", + }); + } +} + +export interface LoggerOptions { + stdout?: NodeJS.WritableStream; + + stderr?: NodeJS.WritableStream; + + defaultFormat?: LoggerLevelOptions; + + format?: LoggerFormatOptions; + + level?: LogLevel; + + join?: string; + + depth?: number; +} + +export interface LoggerFormatOptions { + trace?: LoggerLevelOptions; + + debug?: LoggerLevelOptions; + + info?: LoggerLevelOptions; + + warn?: LoggerLevelOptions; + + error?: LoggerLevelOptions; + + fatal?: LoggerLevelOptions; + + none?: LoggerLevelOptions; +} diff --git a/packages/plugin-custom-logger/src/lib/LoggerLevel.ts b/packages/plugin-custom-logger/src/lib/LoggerLevel.ts new file mode 100644 index 0000000..58acd6d --- /dev/null +++ b/packages/plugin-custom-logger/src/lib/LoggerLevel.ts @@ -0,0 +1,72 @@ +import { LoggerStyle, type LoggerStyleResolvable } from './LoggerStyle.js'; +import { LoggerTimestamp, type LoggerTimestampOptions } from './LoggerTimestamp.js'; + +/** + * Logger utility that stores and applies a full style into the message. + * @since 1.0.0 + */ +export class LoggerLevel { + /** + * The timestamp formatter. + * @since 1.0.0 + */ + public timestamp: LoggerTimestamp | null; + + /** + * The infix, added between the timestamp and the message. + * @since 1.0.0 + */ + public infix: string; + + /** + * The style formatter for the message. + * @since 1.0.0 + */ + public message: LoggerStyle | null; + + public constructor(options: LoggerLevelOptions = {}) { + this.timestamp = options.timestamp === null ? null : new LoggerTimestamp(options.timestamp); + this.infix = options.infix ?? ''; + this.message = options.message === null ? null : new LoggerStyle(options.message); + } + + public run(content: string) { + const prefix = (this.timestamp?.run() ?? '') + this.infix; + + if (prefix.length) { + const formatter = this.message // + ? (line: string) => prefix + this.message!.run(line) + : (line: string) => prefix + line; + return content.split('\n').map(formatter).join('\n'); + } + + return this.message ? this.message.run(content) : content; + } +} + +/** + * The options for {@link LoggerLevel}. + * @since 1.0.0 + */ +export interface LoggerLevelOptions { + /** + * The timestamp options. Set to `null` to disable timestamp parsing. + * @since 1.0.0 + * @default {} + */ + timestamp?: LoggerTimestampOptions | null; + + /** + * The infix to be included between the timestamp and the message. + * @since 1.0.0 + * @default '' + */ + infix?: string; + + /** + * The style options for the message. + * @since 1.0.0 + * @default colorette.clear + */ + message?: LoggerStyleResolvable | null; +} \ No newline at end of file diff --git a/packages/plugin-custom-logger/src/lib/LoggerStyle.ts b/packages/plugin-custom-logger/src/lib/LoggerStyle.ts new file mode 100644 index 0000000..c7699d5 --- /dev/null +++ b/packages/plugin-custom-logger/src/lib/LoggerStyle.ts @@ -0,0 +1,128 @@ +import * as Colorette from 'colorette'; + +/** + * Logger utility that applies a style to a string. + * @since 1.0.0 + */ +export class LoggerStyle { + public readonly style: Colorette.Color; + + public constructor(resolvable: LoggerStyleResolvable = {}) { + if (typeof resolvable === 'function') { + this.style = resolvable; + } else { + const styles: Colorette.Color[] = []; + if (resolvable.effects) styles.push(...resolvable.effects.map((text) => Colorette[text])); + if (resolvable.text) styles.push(Colorette[resolvable.text]); + if (resolvable.background) styles.push(Colorette[resolvable.background]); + + this.style = styles.length + ? styles.length === 1 + ? styles[0] + : (string) => styles.reduce((out, style) => style(out), string) as string + : Colorette.reset; + } + } + + /** + * Applies the style to a string. + * @since 1.0.0 + * @param string The value to apply the style to. + */ + public run(string: string | number) { + return this.style(string); + } +} + +/** + * The options for {@link LoggerStyle}. + * @since 1.0.0 + */ +export interface LoggerStyleOptions { + /** + * The text effects, e.g. `italic`, `strikethrough`, etc. + * @since 1.0.0 + */ + effects?: LoggerStyleEffect[]; + + /** + * The text color, e.g. `red` or `yellow`. + * @since 1.0.0 + */ + text?: LoggerStyleText; + + /** + * The background color, e.g. `magenta` or `red`. + * @since 1.0.0 + */ + background?: LoggerStyleBackground; +} + +/** + * The value accepted by {@link LoggerStyle}'s constructor. Read `colorette`'s documentation for more information. + * @since 1.0.0 + * @seealso https://www.npmjs.com/package/colorette + */ +export type LoggerStyleResolvable = Colorette.Color | LoggerStyleOptions; + +/** + * The text styles. + * @since 1.0.0 + */ +export enum LoggerStyleEffect { + Reset = 'reset', + Bold = 'bold', + Dim = 'dim', + Italic = 'italic', + Underline = 'underline', + Inverse = 'inverse', + Hidden = 'hidden', + Strikethrough = 'strikethrough' +} + +/** + * The text colors. + * @since 1.0.0 + */ +export enum LoggerStyleText { + Black = 'black', + Red = 'red', + Green = 'green', + Yellow = 'yellow', + Blue = 'blue', + Magenta = 'magenta', + Cyan = 'cyan', + White = 'white', + Gray = 'gray', + BlackBright = 'blackBright', + RedBright = 'redBright', + GreenBright = 'greenBright', + YellowBright = 'yellowBright', + BlueBright = 'blueBright', + MagentaBright = 'magentaBright', + CyanBright = 'cyanBright', + WhiteBright = 'whiteBright' +} + +/** + * The background colors. + * @since 1.0.0 + */ +export enum LoggerStyleBackground { + Black = 'bgBlack', + Red = 'bgRed', + Green = 'bgGreen', + Yellow = 'bgYellow', + Blue = 'bgBlue', + Magenta = 'bgMagenta', + Cyan = 'bgCyan', + White = 'bgWhite', + BlackBright = 'bgBlackBright', + RedBright = 'bgRedBright', + GreenBright = 'bgGreenBright', + YellowBright = 'bgYellowBright', + BlueBright = 'bgBlueBright', + MagentaBright = 'bgMagentaBright', + CyanBright = 'bgCyanBright', + WhiteBright = 'bgWhiteBright' +} \ No newline at end of file diff --git a/packages/plugin-custom-logger/src/lib/LoggerTimestamp.ts b/packages/plugin-custom-logger/src/lib/LoggerTimestamp.ts new file mode 100644 index 0000000..8e4ec5c --- /dev/null +++ b/packages/plugin-custom-logger/src/lib/LoggerTimestamp.ts @@ -0,0 +1,100 @@ +import { Timestamp } from '@sapphire/timestamp'; +import { LoggerStyle, type LoggerStyleResolvable } from './LoggerStyle.js'; + +/** + * Logger utility that formats a timestamp. + * @since 1.0.0 + */ +export class LoggerTimestamp { + /** + * The timestamp used to format the current date. + * @since 1.0.0 + */ + public timestamp: Timestamp; + + /** + * Whether or not the logger will show a timestamp in UTC. + * @since 1.0.0 + */ + public utc: boolean; + + /** + * The logger style to apply the color to the timestamp. + * @since 1.0.0 + */ + public color: LoggerStyle | null; + + /** + * The final formatter. + * @since 1.0.0 + */ + public formatter: LoggerTimestampFormatter; + + public constructor(options: LoggerTimestampOptions = {}) { + this.timestamp = new Timestamp(options.pattern ?? 'YYYY-MM-DD HH:mm:ss'); + this.utc = options.utc ?? false; + this.color = options.color === null ? null : new LoggerStyle(options.color); + this.formatter = options.formatter ?? ((timestamp) => `${timestamp} - `); + } + + /** + * Formats the current time. + * @since 1.0.0 + */ + public run() { + const date = new Date(); + const result = this.utc ? this.timestamp.displayUTC(date) : this.timestamp.display(date); + return this.formatter(this.color ? this.color.run(result) : result); + } +} + +/** + * The options for {@link LoggerTimestamp}. + * @since 1.0.0 + */ +export interface LoggerTimestampOptions { + /** + * The {@link Timestamp} pattern. + * @since 1.0.0 + * @default 'YYYY-MM-DD HH:mm:ss' + * @example + * ```typescript + * 'YYYY-MM-DD HH:mm:ss' + * // 2020-12-23 22:01:10 + * ``` + */ + pattern?: string; + + /** + * Whether or not the date should be UTC. + * @since 1.0.0 + * @default false + */ + utc?: boolean; + + /** + * The color to use. + * @since 1.0.0 + * @default colorette.reset + */ + color?: LoggerStyleResolvable | null; + + /** + * The formatter. See {@link LoggerTimestampFormatter} for more information. + * @since 1.0.0 + * @default (value) => `${value} - ` + */ + formatter?: LoggerTimestampFormatter; +} + +/** + * The formatter used for {@link LoggerTimestampOptions}. This will be run **after** applying the color to the formatter. + * @since 1.0.0 + */ +export interface LoggerTimestampFormatter { + /** + * @param timestamp The output of {@link LoggerStyle.run} on {@link Timestamp.display}/{@link Timestamp.displayUTC}. + * @since 1.0.0 + */ + (timestamp: string): string; +} \ No newline at end of file diff --git a/packages/plugin-custom-logger/src/register.ts b/packages/plugin-custom-logger/src/register.ts new file mode 100644 index 0000000..6c9687c --- /dev/null +++ b/packages/plugin-custom-logger/src/register.ts @@ -0,0 +1,13 @@ +import './index.js' +import {Plugin, preGenericsInitialization, SapphireClient} from '@sapphire/framework' +import {ClientOptions} from 'discord.js' +import {Logger} from './index.js' + +export class CustomLoggerPlugin extends Plugin { + public static [preGenericsInitialization](this: SapphireClient, options: ClientOptions): void { + options.logger ??= {} + options.logger.instance = new Logger(options.logger) + } +} + +SapphireClient.plugins.registerPreGenericsInitializationHook(CustomLoggerPlugin[preGenericsInitialization], 'CustomLogger-PreGenericsInitialization') \ No newline at end of file diff --git a/packages/plugin-custom-logger/tsconfig.json b/packages/plugin-custom-logger/tsconfig.json new file mode 100644 index 0000000..52cc5a0 --- /dev/null +++ b/packages/plugin-custom-logger/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@wyvern/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/plugin-custom-logger/tsconfig.tsbuildinfo b/packages/plugin-custom-logger/tsconfig.tsbuildinfo new file mode 100644 index 0000000..1ed360d --- /dev/null +++ b/packages/plugin-custom-logger/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.string.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.object.d.ts","../../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/foo.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/ws/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5","impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true,"impliedFormat":1},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36bcced44876ff177efb79cc8662aafc1ae351077eee9e034fd7b036e9d33ab5","signature":"3dee7bbd2b685bdcb66cfc9b45605d6689ea42852231fa79cac9a40643c0fa22","impliedFormat":99},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"eb15edfcef078300657e1d5d678e1944b3518c2dd8f26792fdba2fe29f73d32b","impliedFormat":1}],"root":[72],"options":{"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"experimentalDecorators":true,"importHelpers":false,"module":100,"newLine":1,"noEmitHelpers":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","preserveConstEnums":true,"removeComments":false,"rootDir":"./src","sourceMap":true,"strict":true,"target":7,"useDefineForClassFields":true},"fileIdsList":[[81,123],[81,120,123],[81,122,123],[81,123,128,157],[81,123,124,129,135,136,143,154,165],[81,123,124,125,135,143],[76,77,78,81,123],[81,123,126,166],[81,123,127,128,136,144],[81,123,128,154,162],[81,123,129,131,135,143],[81,122,123,130],[81,123,131,132],[81,123,135],[81,123,133,135],[81,122,123,135],[81,123,135,136,137,154,165],[81,123,135,136,137,150,154,157],[81,118,123,170],[81,123,131,135,138,143,154,165],[81,123,135,136,138,139,143,154,162,165],[81,123,138,140,154,162,165],[81,123,135,141],[81,123,142,165,170],[81,123,131,135,143,154],[81,123,144],[81,123,145],[81,122,123,146],[81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,148],[81,123,149],[81,123,135,150,151],[81,123,150,152,166,168],[81,123,135,154,155,156,157],[81,123,154,156],[81,123,154,155],[81,123,157],[81,123,158],[81,120,123,154],[81,123,135,160,161],[81,123,160,161],[81,123,128,143,154,162],[81,123,163],[123],[79,80,81,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,143,164],[81,123,138,149,165],[81,123,128,166],[81,123,154,167],[81,123,142,168],[81,123,169],[81,123,128,135,137,146,154,165,168,170],[81,123,154,171],[81,123,174,213],[81,123,174,198,213],[81,123,213],[81,123,174],[81,123,174,199,213],[81,123,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],[81,123,199,213],[81,123,135,138,140,154,162,165,171,172],[81,90,94,123,165],[81,90,123,154,165],[81,85,123],[81,87,90,123,162,165],[81,123,143,162],[81,123,172],[81,85,123,172],[81,87,90,123,143,165],[81,82,83,86,89,123,135,154,165],[81,90,97,123],[81,82,88,123],[81,90,111,112,123],[81,86,90,123,157,165,172],[81,111,123,172],[81,84,85,123,172],[81,90,123],[81,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[81,90,105,123],[81,90,97,98,123],[81,88,90,98,99,123],[81,89,123],[81,82,85,90,123],[81,90,94,98,99,123],[81,94,123],[81,88,90,93,123,165],[81,82,87,90,97,123],[81,123,154],[81,85,90,111,123,170,172]],"referencedMap":[[73,1],[74,1],[75,1],[120,2],[121,2],[122,3],[123,4],[124,5],[125,6],[76,1],[79,7],[77,1],[78,1],[126,8],[127,9],[128,10],[129,11],[130,12],[131,13],[132,13],[134,14],[133,15],[135,16],[136,17],[137,18],[119,19],[138,20],[139,21],[140,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[81,44],[80,1],[172,45],[164,46],[165,47],[166,48],[167,49],[168,50],[169,51],[170,52],[171,53],[173,1],[198,54],[199,55],[174,56],[177,56],[196,54],[197,54],[187,54],[186,57],[184,54],[179,54],[192,54],[190,54],[194,54],[178,54],[191,54],[195,54],[180,54],[181,54],[193,54],[175,54],[182,54],[183,54],[185,54],[189,54],[200,58],[188,54],[176,54],[213,59],[212,1],[207,58],[209,60],[208,58],[201,58],[202,58],[204,58],[206,58],[210,60],[211,60],[203,60],[205,60],[214,61],[70,1],[71,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[51,1],[9,1],[52,1],[53,1],[54,1],[57,1],[55,1],[56,1],[58,1],[59,1],[10,1],[60,1],[1,1],[61,1],[62,1],[11,1],[67,1],[64,1],[63,1],[68,1],[66,1],[69,1],[65,1],[97,62],[107,63],[96,62],[117,64],[88,65],[87,66],[116,67],[110,68],[115,69],[90,70],[104,71],[89,72],[113,73],[85,74],[84,67],[114,75],[86,76],[91,77],[92,1],[95,77],[82,1],[118,78],[108,79],[99,80],[100,81],[102,82],[98,83],[101,84],[111,67],[93,85],[94,86],[103,87],[83,88],[106,79],[105,77],[109,1],[112,89],[72,1]]},"version":"5.5.4"} \ No newline at end of file diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json new file mode 100644 index 0000000..a91ae54 --- /dev/null +++ b/packages/typescript-config/base.json @@ -0,0 +1,7 @@ +{ + "extends": [ + "@sapphire/ts-config", + "@sapphire/ts-config/extra-strict", + "@sapphire/ts-config/decorators" + ] +} \ No newline at end of file diff --git a/packages/typescript-config/nextjs.json b/packages/typescript-config/nextjs.json new file mode 100644 index 0000000..e6defa4 --- /dev/null +++ b/packages/typescript-config/nextjs.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "plugins": [{ "name": "next" }], + "module": "ESNext", + "moduleResolution": "Bundler", + "allowJs": true, + "jsx": "preserve", + "noEmit": true + } +} diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json new file mode 100644 index 0000000..a944c77 --- /dev/null +++ b/packages/typescript-config/package.json @@ -0,0 +1,9 @@ +{ + "name": "@wyvern/typescript-config", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/typescript-config/react-library.json b/packages/typescript-config/react-library.json new file mode 100644 index 0000000..c3a1b26 --- /dev/null +++ b/packages/typescript-config/react-library.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "jsx": "react-jsx" + } +} diff --git a/packages/urban-dictionary/package.json b/packages/urban-dictionary/package.json new file mode 100644 index 0000000..fc199a4 --- /dev/null +++ b/packages/urban-dictionary/package.json @@ -0,0 +1,21 @@ +{ + "name": "@wyvern/urban-dictionary", + "version": "0.0.0", + "type": "module", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "exports": { + ".": { + "default": "./dist/src/index.js", + "types": "./src/index.ts" + } + } +} diff --git a/packages/urban-dictionary/src/UrbanDictionary.ts b/packages/urban-dictionary/src/UrbanDictionary.ts new file mode 100644 index 0000000..6483ae2 --- /dev/null +++ b/packages/urban-dictionary/src/UrbanDictionary.ts @@ -0,0 +1,42 @@ +export class UrbanDictionary { + private readonly BASE_URL: string; + + constructor() { + this.BASE_URL = "http://api.urbandictionary.com/v0"; + } + + public removeBrackets(str: string): string { + return str.replaceAll(/[\[\]]/gmi, '') + } + + public async defineWord(word: string): Promise { + const res = await fetch(`${this.BASE_URL}/define?term=${word}`); + const json = await res.json(); + + return json as UrbanDefinition; + } + + public async randomDefinition() { + const res = await fetch(`${this.BASE_URL}/random`); + const json = await res.json(); + + return json as UrbanDefinition; + } +} + +interface UrbanDefinition { + list: List[]; +} + +interface List { + definition: string; + permalink: string; + thumbs_up: number; + author: string; + word: string; + defid: number; + current_vote: string; + written_on: Date; + example: string; + thumbs_down: number; +} diff --git a/packages/urban-dictionary/src/index.ts b/packages/urban-dictionary/src/index.ts new file mode 100644 index 0000000..8562e73 --- /dev/null +++ b/packages/urban-dictionary/src/index.ts @@ -0,0 +1 @@ +export * from "./UrbanDictionary.js"; diff --git a/packages/urban-dictionary/tsconfig.json b/packages/urban-dictionary/tsconfig.json new file mode 100644 index 0000000..52cc5a0 --- /dev/null +++ b/packages/urban-dictionary/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@wyvern/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "." + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/urban-dictionary/tsconfig.tsbuildinfo b/packages/urban-dictionary/tsconfig.tsbuildinfo new file mode 100644 index 0000000..1ed360d --- /dev/null +++ b/packages/urban-dictionary/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.string.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.object.d.ts","../../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/foo.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/json5/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/@types/normalize-package-data/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/ws/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5","impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true,"impliedFormat":1},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"36bcced44876ff177efb79cc8662aafc1ae351077eee9e034fd7b036e9d33ab5","signature":"3dee7bbd2b685bdcb66cfc9b45605d6689ea42852231fa79cac9a40643c0fa22","impliedFormat":99},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"ca6d304b929748ea15c33f28c1f159df18a94470b424ab78c52d68d40a41e1e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"a72ffc815104fb5c075106ebca459b2d55d07862a773768fce89efc621b3964b","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"d674383111e06b6741c4ad2db962131b5b0fa4d0294b998566c635e86195a453","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"f77d9188e41291acf14f476e931972460a303e1952538f9546e7b370cb8d0d20","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"4d7da7075068195f8f127f41c61e304cdca5aafb1be2d0f4fb67c6b4c3e98d50","affectsGlobalScope":true,"impliedFormat":1},{"version":"a4bdde4e601e9554a844e1e0d0ccfa05e183ef9d82ab3ac25f17c1709033d360","impliedFormat":1},{"version":"ad23fd126ff06e72728dd7bfc84326a8ca8cec2b9d2dac0193d42a777df0e7d8","impliedFormat":1},{"version":"9dd9f50652a176469e85fb65aa081d2e7eb807e2c476f378233de4f1f6604962","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"7edec695cdb707c7146ac34c44ca364469c7ea504344b3206c686e79f61b61a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a20f1e119615bf7632729fd89b6c0b5ffdc2df3b512d6304146294528e3ebe19","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"235bfb54b4869c26f7e98e3d1f68dbfc85acf4cf5c38a4444a006fbf74a8a43d","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"bb715efb4857eb94539eafb420352105a0cff40746837c5140bf6b035dd220ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"fdedf82878e4c744bc2a1c1e802ae407d63474da51f14a54babe039018e53d8f","affectsGlobalScope":true,"impliedFormat":1},{"version":"08353b04a3501d84fc8d7b49de99f6c1cc26026e6d9d697a18315f3bfe92ed03","affectsGlobalScope":true,"impliedFormat":1},{"version":"578d8bb6dcb2a1c03c4c3f8eb71abc9677e1a5c788b7f24848e3138ce17f3400","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"efeedd8bbc5c0d53e760d8b120a010470722982e6ae14de8d1bcff66ebc2ae71","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"9091e564b81e7b4c382a33c62de704a699e10508190547d4f7c1c3e039d2db2b","impliedFormat":1},{"version":"22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"eb15edfcef078300657e1d5d678e1944b3518c2dd8f26792fdba2fe29f73d32b","impliedFormat":1}],"root":[72],"options":{"allowSyntheticDefaultImports":true,"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":true,"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"experimentalDecorators":true,"importHelpers":false,"module":100,"newLine":1,"noEmitHelpers":false,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./dist","preserveConstEnums":true,"removeComments":false,"rootDir":"./src","sourceMap":true,"strict":true,"target":7,"useDefineForClassFields":true},"fileIdsList":[[81,123],[81,120,123],[81,122,123],[81,123,128,157],[81,123,124,129,135,136,143,154,165],[81,123,124,125,135,143],[76,77,78,81,123],[81,123,126,166],[81,123,127,128,136,144],[81,123,128,154,162],[81,123,129,131,135,143],[81,122,123,130],[81,123,131,132],[81,123,135],[81,123,133,135],[81,122,123,135],[81,123,135,136,137,154,165],[81,123,135,136,137,150,154,157],[81,118,123,170],[81,123,131,135,138,143,154,165],[81,123,135,136,138,139,143,154,162,165],[81,123,138,140,154,162,165],[81,123,135,141],[81,123,142,165,170],[81,123,131,135,143,154],[81,123,144],[81,123,145],[81,122,123,146],[81,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,148],[81,123,149],[81,123,135,150,151],[81,123,150,152,166,168],[81,123,135,154,155,156,157],[81,123,154,156],[81,123,154,155],[81,123,157],[81,123,158],[81,120,123,154],[81,123,135,160,161],[81,123,160,161],[81,123,128,143,154,162],[81,123,163],[123],[79,80,81,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[81,123,143,164],[81,123,138,149,165],[81,123,128,166],[81,123,154,167],[81,123,142,168],[81,123,169],[81,123,128,135,137,146,154,165,168,170],[81,123,154,171],[81,123,174,213],[81,123,174,198,213],[81,123,213],[81,123,174],[81,123,174,199,213],[81,123,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],[81,123,199,213],[81,123,135,138,140,154,162,165,171,172],[81,90,94,123,165],[81,90,123,154,165],[81,85,123],[81,87,90,123,162,165],[81,123,143,162],[81,123,172],[81,85,123,172],[81,87,90,123,143,165],[81,82,83,86,89,123,135,154,165],[81,90,97,123],[81,82,88,123],[81,90,111,112,123],[81,86,90,123,157,165,172],[81,111,123,172],[81,84,85,123,172],[81,90,123],[81,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[81,90,105,123],[81,90,97,98,123],[81,88,90,98,99,123],[81,89,123],[81,82,85,90,123],[81,90,94,98,99,123],[81,94,123],[81,88,90,93,123,165],[81,82,87,90,97,123],[81,123,154],[81,85,90,111,123,170,172]],"referencedMap":[[73,1],[74,1],[75,1],[120,2],[121,2],[122,3],[123,4],[124,5],[125,6],[76,1],[79,7],[77,1],[78,1],[126,8],[127,9],[128,10],[129,11],[130,12],[131,13],[132,13],[134,14],[133,15],[135,16],[136,17],[137,18],[119,19],[138,20],[139,21],[140,22],[141,23],[142,24],[143,25],[144,26],[145,27],[146,28],[147,29],[148,30],[149,31],[150,32],[151,32],[152,33],[153,1],[154,34],[156,35],[155,36],[157,37],[158,38],[159,39],[160,40],[161,41],[162,42],[163,43],[81,44],[80,1],[172,45],[164,46],[165,47],[166,48],[167,49],[168,50],[169,51],[170,52],[171,53],[173,1],[198,54],[199,55],[174,56],[177,56],[196,54],[197,54],[187,54],[186,57],[184,54],[179,54],[192,54],[190,54],[194,54],[178,54],[191,54],[195,54],[180,54],[181,54],[193,54],[175,54],[182,54],[183,54],[185,54],[189,54],[200,58],[188,54],[176,54],[213,59],[212,1],[207,58],[209,60],[208,58],[201,58],[202,58],[204,58],[206,58],[210,60],[211,60],[203,60],[205,60],[214,61],[70,1],[71,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[4,1],[23,1],[27,1],[24,1],[25,1],[26,1],[28,1],[29,1],[30,1],[5,1],[31,1],[32,1],[33,1],[34,1],[6,1],[38,1],[35,1],[36,1],[37,1],[39,1],[7,1],[40,1],[45,1],[46,1],[41,1],[42,1],[43,1],[44,1],[8,1],[50,1],[47,1],[48,1],[49,1],[51,1],[9,1],[52,1],[53,1],[54,1],[57,1],[55,1],[56,1],[58,1],[59,1],[10,1],[60,1],[1,1],[61,1],[62,1],[11,1],[67,1],[64,1],[63,1],[68,1],[66,1],[69,1],[65,1],[97,62],[107,63],[96,62],[117,64],[88,65],[87,66],[116,67],[110,68],[115,69],[90,70],[104,71],[89,72],[113,73],[85,74],[84,67],[114,75],[86,76],[91,77],[92,1],[95,77],[82,1],[118,78],[108,79],[99,80],[100,81],[102,82],[98,83],[101,84],[111,67],[93,85],[94,86],[103,87],[83,88],[106,79],[105,77],[109,1],[112,89],[72,1]]},"version":"5.5.4"} \ No newline at end of file diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..70e73ce --- /dev/null +++ b/turbo.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://turbo.build/schema.json", + "ui": "tui", + "tasks": { + "build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**", "dist/**"] + }, + "lint": { + "dependsOn": ["^typecheck"] + }, + + "dev": { + "cache": false, + "persistent": true, + "interruptible": true, + "dependsOn": ["prisma:generate", "^typecheck"] + }, + + "prisma:generate": { + "cache": false, + "outputs": ["prisma/schema.prisma"], + "env": ["DATABASE_URL", "DATABASE_URL_UNPOOLED"] + }, + + "prisma:generateSql": { + "cache": false, + "outputs": ["prisma/schema.prisma"], + "env": ["DATABASE_URL", "DATABASE_URL_UNPOOLED"] + }, + + "prisma:push": { + "cache": false, + "dependsOn": ["prisma:generate"], + "env": ["DATABASE_URL", "DATABASE_URL_UNPOOLED"] + }, + + "prisma:migrate": { + "cache": false, + "persistent": true, + "interactive": true, + "dependsOn": ["prisma:generate"], + "env": ["DATABASE_URL", "DATABASE_URL_UNPOOLED"] + }, + + "typecheck": { + "cache": false + } + } +}