├── .eslintignore ├── src ├── server │ ├── helpers │ │ ├── index.ts │ │ └── array.ts │ ├── discord │ │ ├── user.ts │ │ ├── dm.ts │ │ ├── index.ts │ │ ├── message.ts │ │ ├── client.ts │ │ ├── target-guild.ts │ │ └── events.ts │ ├── firebase │ │ └── index.ts │ ├── models │ │ ├── index.ts │ │ ├── user-service.ts │ │ └── user.ts │ ├── index.ts │ ├── views │ │ ├── responses │ │ │ ├── submit-post.ts │ │ │ ├── show-following-users.ts │ │ │ ├── unfollow.ts │ │ │ ├── register-user.ts │ │ │ └── follow.ts │ │ ├── post │ │ │ ├── timeline.ts │ │ │ ├── follower.ts │ │ │ └── index.ts │ │ └── system-message.ts │ ├── controllers │ │ ├── actions │ │ │ ├── unfollow.ts │ │ │ ├── follow.ts │ │ │ ├── show-following-users.ts │ │ │ ├── check-register-user.ts │ │ │ └── submit-post.ts │ │ └── index.ts │ └── settings.ts └── setup │ └── index.ts ├── .gitignore ├── .env.example ├── .prettierrc ├── tsconfig.json ├── webpack.config.js ├── .eslintrc.json ├── readme.md ├── package.json ├── .github └── workflows │ └── ci.yml └── pnpm-lock.yaml /.eslintignore: -------------------------------------------------------------------------------- 1 | ./webpack.config.js 2 | -------------------------------------------------------------------------------- /src/server/helpers/index.ts: -------------------------------------------------------------------------------- 1 | import "./array"; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /dist 3 | /keys 4 | .env 5 | config.json 6 | -------------------------------------------------------------------------------- /src/server/discord/user.ts: -------------------------------------------------------------------------------- 1 | export function getUserReference(id: string): string { 2 | return `<@${id}>`; 3 | } 4 | -------------------------------------------------------------------------------- /src/server/firebase/index.ts: -------------------------------------------------------------------------------- 1 | import * as admin from "firebase-admin"; 2 | 3 | admin.initializeApp(); 4 | export const db = admin.firestore(); 5 | -------------------------------------------------------------------------------- /src/server/models/index.ts: -------------------------------------------------------------------------------- 1 | import { UserService } from "src/server/models/user-service"; 2 | 3 | export const userService = new UserService(); 4 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | DISCORD_TOKEN= 2 | TARGET_GUILD_ID= 3 | TIMELINE_CHANNEL_ID= 4 | MAIN_CHANNEL_ID= 5 | CLIENT_ID= 6 | COMMAND_SITE= 7 | 8 | GOOGLE_APPLICATION_CREDENTIALS= 9 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "singleQuote": false, 6 | "semi": true, 7 | "trailingComma": "none", 8 | "bracketSpacing": true, 9 | "endOfLine": "lf" 10 | } 11 | -------------------------------------------------------------------------------- /src/server/discord/dm.ts: -------------------------------------------------------------------------------- 1 | import { DMChannel, User as DiscordUser } from "discord.js"; 2 | 3 | export async function getDMChannel(user: DiscordUser): Promise { 4 | return user.dmChannel ? user.dmChannel : await user.createDM(); 5 | } 6 | -------------------------------------------------------------------------------- /src/server/index.ts: -------------------------------------------------------------------------------- 1 | import "./helpers"; 2 | import "./firebase"; 3 | import { clientManager } from "src/server/discord"; 4 | import { settingsManager } from "./settings"; 5 | import "./controllers"; 6 | 7 | console.log("LIMITIMES BOT STARTED!"); 8 | settingsManager.load(); 9 | void clientManager.initialize(); 10 | -------------------------------------------------------------------------------- /src/server/discord/index.ts: -------------------------------------------------------------------------------- 1 | import "./message"; 2 | import { ClientManager } from "src/server/discord/client"; 3 | import { TargetGuildManager } from "src/server/discord/target-guild"; 4 | 5 | export const clientManager = new ClientManager(); 6 | export const targetGuildManager = new TargetGuildManager(clientManager.client); 7 | -------------------------------------------------------------------------------- /src/server/discord/message.ts: -------------------------------------------------------------------------------- 1 | import { Message } from "discord.js"; 2 | 3 | declare module "discord.js" { 4 | interface Message { 5 | getImagesURL(): string[]; 6 | } 7 | } 8 | 9 | Message.prototype.getImagesURL = function (this: Message): string[] { 10 | return this.attachments.map((attachment) => attachment.url); 11 | }; 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true, 4 | "module": "ESNext", 5 | "target": "ES6", 6 | "sourceMap": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "moduleResolution": "node", 10 | "resolveJsonModule": true, 11 | "isolatedModules": true, 12 | "esModuleInterop": true, 13 | "baseUrl": "src", 14 | "paths": { 15 | "src/*": ["./*"] 16 | } 17 | }, 18 | "include": [ 19 | "src/**/*.ts" 20 | ], 21 | "exclude": [ 22 | "node_modules" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /src/server/views/responses/submit-post.ts: -------------------------------------------------------------------------------- 1 | import { ReplyMessageOptions } from "discord.js"; 2 | import { PostForFollowerProps } from "src/server/views/post/follower"; 3 | import { getPostForTimelineEmbed } from "src/server/views/post"; 4 | 5 | export function failedToSendToTimeline(): ReplyMessageOptions { 6 | const message = "⛔投稿に失敗しました。"; 7 | return { content: message }; 8 | } 9 | 10 | export function succeed(props: PostForFollowerProps): ReplyMessageOptions { 11 | const message = "✅投稿しました!"; 12 | return { 13 | content: message, 14 | embeds: [getPostForTimelineEmbed(props)] 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const nodeExternals = require("webpack-node-externals"); 3 | 4 | module.exports = { 5 | mode: "development", 6 | entry: { 7 | "server": path.resolve(__dirname, "src/server/index.ts"), 8 | "setup": path.resolve(__dirname, "src/setup/index.ts") 9 | }, 10 | target: "node", 11 | externals: [nodeExternals()], 12 | devtool: false, 13 | module: { 14 | rules: [ 15 | { 16 | test: /\.ts$/, 17 | exclude: /node_modules/, 18 | use: "ts-loader" 19 | } 20 | ] 21 | }, 22 | resolve: { 23 | alias: { 24 | "src": path.resolve(__dirname, "src") 25 | }, 26 | extensions: [".ts", ".js"] 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /src/server/discord/client.ts: -------------------------------------------------------------------------------- 1 | import { Client, Intents } from "discord.js"; 2 | import { settingsManager } from "src/server/settings"; 3 | 4 | export class ClientManager { 5 | private readonly _client = new Client({ 6 | partials: ["CHANNEL"], 7 | intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.DIRECT_MESSAGES] 8 | }); 9 | 10 | public constructor() { 11 | this._client.on("ready", () => { 12 | if (!this._client.user) return; 13 | console.log(`Logged in as ${this._client.user.tag}!`); 14 | }); 15 | } 16 | 17 | public async initialize() { 18 | await this._client.login(settingsManager.values.discordToken); 19 | } 20 | 21 | get client(): Client { 22 | return this._client; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/server/views/responses/show-following-users.ts: -------------------------------------------------------------------------------- 1 | import { getSystemMessageEmbed } from "src/server/views/system-message"; 2 | import { InteractionReplyOptions } from "discord.js"; 3 | 4 | export function failed(): InteractionReplyOptions { 5 | const message = "フォロー中のユーザー一覧を取得することに失敗しました。"; 6 | return { 7 | ephemeral: true, 8 | embeds: [getSystemMessageEmbed({ type: "error" }).setDescription(message)] 9 | }; 10 | } 11 | 12 | export function succeed({ followingsName }: { followingsName: string[] }): InteractionReplyOptions { 13 | return { 14 | ephemeral: true, 15 | embeds: [ 16 | getSystemMessageEmbed({ type: "succeed" }) 17 | .setTitle("フォロー中") 18 | .setDescription(followingsName.join("\n")) 19 | .setFooter(`合計 ${followingsName.length}人`) 20 | ] 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /src/server/models/user-service.ts: -------------------------------------------------------------------------------- 1 | import { User } from "src/server/models/user"; 2 | import { db } from "src/server/firebase"; 3 | 4 | type CreateUserProps = Pick; 5 | 6 | export class UserService { 7 | public readonly users = db.collection("users"); 8 | 9 | public get(id: string): User { 10 | return new User({ 11 | id, 12 | service: this 13 | }); 14 | } 15 | 16 | public async registerIfNotExist(props: CreateUserProps): Promise { 17 | return await db.runTransaction(async (transaction) => { 18 | const ref = this.users.doc(props.id); 19 | const doc = await transaction.get(ref); 20 | if (doc.exists) return null; 21 | transaction.set(ref, { followings: [] }); 22 | return new User({ id: props.id, service: this }); 23 | }); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/server/views/post/timeline.ts: -------------------------------------------------------------------------------- 1 | import { MessageEmbed } from "discord.js"; 2 | import { getUserReference } from "src/server/discord/user"; 3 | import { getPostEmbedBase, PostProps } from "src/server/views/post/index"; 4 | 5 | type AdditionalData = Pick; 6 | function getAdditionalDataView({ userId, favoriteCount, shareCount }: AdditionalData): string { 7 | return `❤ \`${favoriteCount}\` 🔁 \`${shareCount}\` 👤 ${getUserReference(userId)}`; 8 | } 9 | 10 | export type PostForTimelineProps = Omit; 11 | export function getPostForTimelineEmbed({ 12 | userId, 13 | shareCount, 14 | favoriteCount, 15 | ...props 16 | }: PostForTimelineProps): MessageEmbed { 17 | return getPostEmbedBase(props).addField("about", getAdditionalDataView({ userId, shareCount, favoriteCount })); 18 | } 19 | -------------------------------------------------------------------------------- /src/server/helpers/array.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | 3 | declare global { 4 | interface Array { 5 | removeNone(): Array; 6 | throwNone(): Array; 7 | toStringElements(): Array; 8 | } 9 | } 10 | 11 | Array.prototype.removeNone = function (this: Array): Array { 12 | return this.filter((element) => element) as T[]; 13 | }; 14 | 15 | Array.prototype.throwNone = function (this: Array): Array { 16 | if (this.filter((element) => !element).length > 0) throw TypeError("Some elements didn't has value"); 17 | return this as T[]; 18 | }; 19 | 20 | Array.prototype.toStringElements = function (this: Array): Array { 21 | return this.map((element) => element as U); 22 | }; 23 | -------------------------------------------------------------------------------- /src/server/views/responses/unfollow.ts: -------------------------------------------------------------------------------- 1 | import { getSystemMessageEmbed } from "src/server/views/system-message"; 2 | import { InteractionReplyOptions } from "discord.js"; 3 | 4 | export function targetIsNotFollowed(): InteractionReplyOptions { 5 | const message = "あなたはその人をフォローしていません。"; 6 | return { 7 | ephemeral: true, 8 | embeds: [getSystemMessageEmbed({ type: "invalid" }).setDescription(message)] 9 | }; 10 | } 11 | 12 | export function failed(): InteractionReplyOptions { 13 | const message = "フォローの解除に失敗しました。"; 14 | return { 15 | ephemeral: true, 16 | embeds: [getSystemMessageEmbed({ type: "error" }).setDescription(message)] 17 | }; 18 | } 19 | 20 | export function succeed({ targetName }: { targetName: string }): InteractionReplyOptions { 21 | const message = `${targetName}のフォローを解除しました。`; 22 | return { 23 | ephemeral: true, 24 | embeds: [getSystemMessageEmbed({ type: "succeed" }).setDescription(message)] 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/server/views/post/follower.ts: -------------------------------------------------------------------------------- 1 | import { getUserReference } from "src/server/discord/user"; 2 | import { getPostEmbedBase, PostProps } from "src/server/views/post/index"; 3 | 4 | type AdditionalData = Pick; 5 | function getAdditionalDataView({ userId, favoriteCount, shareCount, upstreamURL }: AdditionalData): string { 6 | const upstreamURLView = upstreamURL === undefined ? "🤫 シークレット" : `🔎 [here](${upstreamURL})`; 7 | return `❤ \`${favoriteCount}\` 🔁 \`${shareCount}\` ${upstreamURLView} 👤 ${getUserReference(userId)}`; 8 | } 9 | 10 | export type PostForFollowerProps = PostProps; 11 | export function getPostForFollowerEmbed({ 12 | userId, 13 | shareCount, 14 | favoriteCount, 15 | upstreamURL, 16 | ...props 17 | }: PostForFollowerProps) { 18 | return getPostEmbedBase(props).addField( 19 | "about", 20 | getAdditionalDataView({ userId, shareCount, favoriteCount, upstreamURL }) 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint:recommended", 4 | "plugin:@typescript-eslint/recommended", 5 | "plugin:@typescript-eslint/recommended-requiring-type-checking", 6 | "plugin:prettier/recommended" 7 | ], 8 | "plugins": ["@typescript-eslint", "import"], 9 | "env": { 10 | "node": true, 11 | "es6": true, 12 | "es2021": true 13 | }, 14 | "parserOptions": { 15 | "ecmaVersion": 12, 16 | "sourceType": "module", 17 | "project": "./tsconfig.json" 18 | }, 19 | "parser": "@typescript-eslint/parser", 20 | "settings": { 21 | "import/parsers": { 22 | "@typescript-eslint/parser": [".ts", ".tsx"] 23 | }, 24 | "import/resolver": { 25 | "node": { 26 | "extensions": [".js", ".ts", ".json"] 27 | }, 28 | "typescript": { 29 | "config": "tsconfig.json", 30 | "alwaysTryTypes": true, 31 | "project": ["./tsconfig.json"] 32 | } 33 | } 34 | }, 35 | "rules": { 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/server/views/post/index.ts: -------------------------------------------------------------------------------- 1 | import { MessageEmbed } from "discord.js"; 2 | 3 | export type PostProps = { 4 | content: string; 5 | imagesURL: string[]; 6 | userName: string; 7 | userAvatarURL?: string; 8 | userId: string; 9 | createdAt: Date; 10 | upstreamURL?: string; 11 | favoriteCount: number; 12 | shareCount: number; 13 | }; 14 | 15 | export type PostEmbedBaseProps = Pick; 16 | export function getPostEmbedBase({ 17 | content, 18 | imagesURL, 19 | userName, 20 | userAvatarURL, 21 | createdAt 22 | }: PostEmbedBaseProps): MessageEmbed { 23 | const embed = new MessageEmbed() 24 | .setColor("AQUA") 25 | .setDescription(content) 26 | .setAuthor(userName, userAvatarURL) 27 | .setTimestamp(createdAt); 28 | imagesURL.forEach((url) => embed.setImage(url)); 29 | return embed; 30 | } 31 | 32 | export { getPostForTimelineEmbed } from "./timeline"; 33 | export { getPostForFollowerEmbed } from "./follower"; 34 | -------------------------------------------------------------------------------- /src/server/views/responses/register-user.ts: -------------------------------------------------------------------------------- 1 | import { getSystemMessageEmbed } from "src/server/views/system-message"; 2 | import { InteractionReplyOptions } from "discord.js"; 3 | 4 | export function userIsBot({ userName }: { userName: string }): InteractionReplyOptions { 5 | const message = `ごめんなさい。当システムはbotお断りなんです。\n${userName}`; 6 | return { 7 | ephemeral: true, 8 | embeds: [getSystemMessageEmbed({ type: "invalid" }).setDescription(message)] 9 | }; 10 | } 11 | 12 | export function userIsNotJoinedToTargetGuild({ userName }: { userName: string }): InteractionReplyOptions { 13 | const message = `当システムを利用するには、当システムを利用しているサーバーに参加する必要があります。\n${userName}`; 14 | return { 15 | ephemeral: true, 16 | embeds: [getSystemMessageEmbed({ type: "invalid" }).setDescription(message)] 17 | }; 18 | } 19 | 20 | export function failed({ userName }: { userName: string }): InteractionReplyOptions { 21 | const message = `ユーザーの登録に失敗しました。\n${userName}`; 22 | return { 23 | ephemeral: true, 24 | embeds: [getSystemMessageEmbed({ type: "error" }).setDescription(message)] 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/server/views/system-message.ts: -------------------------------------------------------------------------------- 1 | import { MessageEmbed } from "discord.js"; 2 | 3 | /* 4 | succeed : 処理に成功したとき 5 | info : 追加の情報があるとき 6 | invalid : ユーザーによる操作が誤ったものだったとき 7 | failed : ユーザーの操作は誤ってないが、処理が想定内の失敗をしたとき 8 | warning : 処理は失敗していないが、好ましくない結果となったとき 9 | error : 処理が失敗したうえ、想定外の失敗だったとき 10 | */ 11 | export type SystemMessageType = "succeed" | "info" | "invalid" | "failed" | "warning" | "error"; 12 | 13 | const generators: { [type in SystemMessageType]: () => MessageEmbed } = { 14 | succeed: () => new MessageEmbed().setTitle("✅成功").setColor("GREEN"), 15 | info: () => new MessageEmbed().setTitle("ℹ情報").setColor("GREY"), 16 | invalid: () => new MessageEmbed().setTitle("⛔拒否").setColor("DARK_GOLD"), 17 | failed: () => new MessageEmbed().setTitle("❌失敗").setColor("DARK_RED"), 18 | warning: () => new MessageEmbed().setTitle("⚠警告").setColor("YELLOW"), 19 | error: () => new MessageEmbed().setTitle("‼エラー").setColor("RED") 20 | }; 21 | 22 | export type SystemMessageProps = { 23 | type: SystemMessageType; 24 | }; 25 | 26 | export function getSystemMessageEmbed({ type }: SystemMessageProps): MessageEmbed { 27 | return generators[type](); 28 | } 29 | -------------------------------------------------------------------------------- /src/server/controllers/actions/unfollow.ts: -------------------------------------------------------------------------------- 1 | import { GuildMember } from "discord.js"; 2 | import { UnfollowTargetNotFoundError } from "src/server/models/user"; 3 | import { failed, targetIsNotFollowed, succeed } from "src/server/views/responses/unfollow"; 4 | import { checkRegisterUser } from "src/server/controllers/actions/check-register-user"; 5 | import { userService } from "src/server/models"; 6 | 7 | export type UnfollowContext = { 8 | requester: GuildMember; 9 | target: GuildMember; 10 | }; 11 | 12 | export async function unfollow(ctx: UnfollowContext) { 13 | const response = 14 | (await checkRegisterUser({ member: ctx.requester })) ?? (await checkRegisterUser({ member: ctx.target })); 15 | if (response) return response; 16 | 17 | const requester = userService.get(ctx.requester.id); 18 | const target = userService.get(ctx.target.id); 19 | 20 | try { 21 | await requester.unfollow(target); 22 | return succeed({ targetName: ctx.target.toString() }); 23 | } catch (error) { 24 | if (error instanceof UnfollowTargetNotFoundError) return targetIsNotFollowed(); 25 | console.error(error); 26 | return failed(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/server/views/responses/follow.ts: -------------------------------------------------------------------------------- 1 | import { getSystemMessageEmbed } from "src/server/views/system-message"; 2 | import { InteractionReplyOptions } from "discord.js"; 3 | 4 | export function followingSelf(): InteractionReplyOptions { 5 | const message = "自分をフォローする気ですか?鏡ならばお風呂場にありますよ。"; 6 | return { 7 | ephemeral: true, 8 | embeds: [getSystemMessageEmbed({ type: "invalid" }).setDescription(message)] 9 | }; 10 | } 11 | 12 | export function alreadyFollowed(): InteractionReplyOptions { 13 | const message = 14 | "あなたがその人を愛してやまない気持ちはわかりますが、フォローしている相手をフォローすることはできません。"; 15 | return { 16 | ephemeral: true, 17 | embeds: [getSystemMessageEmbed({ type: "invalid" }).setDescription(message)] 18 | }; 19 | } 20 | 21 | export function failed(): InteractionReplyOptions { 22 | const message = "フォローに失敗しました。"; 23 | return { 24 | ephemeral: true, 25 | embeds: [getSystemMessageEmbed({ type: "error" }).setDescription(message)] 26 | }; 27 | } 28 | 29 | export function succeed({ targetName }: { targetName: string }): InteractionReplyOptions { 30 | const message = `${targetName}をフォローしました!`; 31 | return { 32 | ephemeral: true, 33 | embeds: [getSystemMessageEmbed({ type: "succeed" }).setDescription(message)] 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /src/server/settings.ts: -------------------------------------------------------------------------------- 1 | import * as dotenv from "dotenv"; 2 | 3 | export type ApplicationSettings = { 4 | discordToken: string; 5 | targetGuildId: string; 6 | timelineChannelId: string; 7 | mainChannelId: string; 8 | }; 9 | 10 | class SettingsManager { 11 | private _isLoaded = false; 12 | private _values: ApplicationSettings = { 13 | discordToken: "", 14 | targetGuildId: "", 15 | timelineChannelId: "", 16 | mainChannelId: "" 17 | }; 18 | 19 | get values(): ApplicationSettings { 20 | if (!this._isLoaded) this.load(); 21 | return this._values; 22 | } 23 | 24 | public load() { 25 | dotenv.config(); 26 | this._values = { 27 | discordToken: SettingsManager.getEnvironmentVariable("DISCORD_TOKEN"), 28 | targetGuildId: SettingsManager.getEnvironmentVariable("TARGET_GUILD_ID"), 29 | timelineChannelId: SettingsManager.getEnvironmentVariable("TIMELINE_CHANNEL_ID"), 30 | mainChannelId: SettingsManager.getEnvironmentVariable("MAIN_CHANNEL_ID") 31 | }; 32 | } 33 | 34 | private static getEnvironmentVariable(name: string): string { 35 | const value = process.env[name]; 36 | if (!value) return ""; 37 | return value; 38 | } 39 | } 40 | 41 | export const settingsManager = new SettingsManager(); 42 | -------------------------------------------------------------------------------- /src/server/controllers/actions/follow.ts: -------------------------------------------------------------------------------- 1 | import { GuildMember, InteractionReplyOptions } from "discord.js"; 2 | import { AlreadyFollowedError, FollowingSelfError } from "src/server/models/user"; 3 | import { alreadyFollowed, failed, followingSelf, succeed } from "src/server/views/responses/follow"; 4 | import { checkRegisterUser } from "src/server/controllers/actions/check-register-user"; 5 | import { userService } from "src/server/models"; 6 | 7 | export type FollowContext = { 8 | requester: GuildMember; 9 | target: GuildMember; 10 | }; 11 | 12 | export async function follow(ctx: FollowContext): Promise { 13 | const response = 14 | (await checkRegisterUser({ member: ctx.requester })) ?? (await checkRegisterUser({ member: ctx.target })); 15 | if (response) return response; 16 | 17 | const requester = userService.get(ctx.requester.id); 18 | const target = userService.get(ctx.target.id); 19 | 20 | try { 21 | await requester.follow(target); 22 | return succeed({ targetName: ctx.target.toString() }); 23 | } catch (error) { 24 | if (error instanceof FollowingSelfError) return followingSelf(); 25 | if (error instanceof AlreadyFollowedError) return alreadyFollowed(); 26 | console.error(error); 27 | return failed(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Limitimes 2 | [![CI](https://github.com/watano1168/limitimes/actions/workflows/ci.yml/badge.svg)](https://github.com/watano1168/limitimes/actions/workflows/ci.yml) 3 | 4 | discordサーバー内で、独り言を呟けるようにするプロジェクトです。 5 | 6 | 7 | 8 | ## 使用方法 9 | 10 | 当botの各機能は、対象のサーバーに参加していない状態では利用することができません。 11 | 12 | 1. limitimes botとのDMにメッセージを送信すると、タイムラインチャンネルにメッセージの内容が送信されます。タイムラインチャンネルには、すべてのユーザーの投稿が送信されます。 13 | ![image](https://user-images.githubusercontent.com/45062199/141269049-bf7064e5-a0c4-43a4-b761-8ad4040eecb5.png) 14 | ![image](https://user-images.githubusercontent.com/45062199/141269203-3b49dd8e-fa80-4aca-b9c3-e5ea73fb692e.png) 15 | 16 | 2. `「対象のサーバーに参加しているユーザー」を右クリック`>`「アプリ」`>`「follow」` でユーザーをフォローすることができます。 17 | フォローしたユーザーの投稿は、あなたとlimitimes botとのDMに表示されるようになります。 18 | ![image](https://user-images.githubusercontent.com/45062199/141269291-ea924759-cfd8-4d97-806c-d959c57fa833.png) 19 | ![image](https://user-images.githubusercontent.com/45062199/141269490-ec96e020-0fad-4c5a-92d3-4efe582cde58.png) 20 | 21 | 3. `/times show-following-users` のslash commandを送信すると、現在あなたがフォローしているユーザーの一覧を見ることができます。 22 | ![image](https://user-images.githubusercontent.com/45062199/141269411-fc4859bc-feb7-455b-a8d0-88e68dfac2ae.png) 23 | 24 | 4. `「対象のサーバーに参加しているユーザー」を右クリック`>`「アプリ」`>`「unfollow」` でユーザーのフォローを解除することができます。 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "limitimes", 3 | "version": "1.0.0", 4 | "private": "true", 5 | "scripts": { 6 | "build": "webpack", 7 | "start": "node ./dist/server.js", 8 | "dev": "pnpm build && pnpm start", 9 | "setup": "node ./dist/setup.js", 10 | "eslint": "eslint --ignore-path .gitignore \"src/**/*.{js,ts}\"", 11 | "eslint:fix": "eslint --ignore-path .gitignore \"src/**/*.{js,ts}\" --fix", 12 | "format": "prettier --write \"./**/*.ts\"" 13 | }, 14 | "devDependencies": { 15 | "@typescript-eslint/eslint-plugin": "^5.2.0", 16 | "@typescript-eslint/parser": "^5.2.0", 17 | "eslint": "^8.1.0", 18 | "eslint-config-prettier": "^8.3.0", 19 | "eslint-import-resolver-typescript": "^2.5.0", 20 | "eslint-plugin-import": "^2.25.2", 21 | "eslint-plugin-prettier": "^4.0.0", 22 | "firebase-admin": "10.0.0", 23 | "prettier": "^2.4.1", 24 | "ts-loader": "^9.2.6", 25 | "ts-node": "^10.4.0", 26 | "tsconfig-paths": "^3.11.0", 27 | "typescript": "^4.4.4", 28 | "webpack": "^5.61.0", 29 | "webpack-cli": "^4.9.1", 30 | "webpack-node-externals": "^3.0.0" 31 | }, 32 | "dependencies": { 33 | "@discordjs/rest": "^0.1.0-canary.0", 34 | "dayjs": "^1.10.7", 35 | "discord-api-types": "^0.24.0", 36 | "discord.js": "^13.2.0", 37 | "dotenv": "^10.0.0" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/server/controllers/actions/show-following-users.ts: -------------------------------------------------------------------------------- 1 | import { CommandInteraction, GuildMember, InteractionReplyOptions } from "discord.js"; 2 | import { User } from "src/server/models/user"; 3 | import { checkRegisterUser } from "src/server/controllers/actions/check-register-user"; 4 | import { failed, succeed } from "src/server/views/responses/show-following-users"; 5 | import { targetGuildManager } from "src/server/discord"; 6 | import { userService } from "src/server/models"; 7 | 8 | export type ShowFollowingUsersContext = { 9 | interaction: CommandInteraction; 10 | requester: GuildMember; 11 | }; 12 | 13 | async function fetchFollowings(user: User): Promise { 14 | const followings = await user.getFollowings(); 15 | const followingsId = followings.map((user) => user.id); 16 | return await targetGuildManager.getMembers(followingsId); 17 | } 18 | 19 | export async function showFollowingUsers(ctx: ShowFollowingUsersContext): Promise { 20 | const response = await checkRegisterUser({ member: ctx.requester }); 21 | if (response) return response; 22 | 23 | const requestUser = userService.get(ctx.requester.id); 24 | 25 | try { 26 | const followings = await fetchFollowings(requestUser); 27 | return succeed({ followingsName: followings.map((user) => user.toString()) }); 28 | } catch (error) { 29 | console.error(error); 30 | return failed(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/server/controllers/index.ts: -------------------------------------------------------------------------------- 1 | import { follow } from "src/server/controllers/actions/follow"; 2 | import { unfollow } from "src/server/controllers/actions/unfollow"; 3 | import { onDirectMessageReceived, onSlashCommandReceived, onUserMenuSelected } from "src/server/discord/events"; 4 | import { showFollowingUsers } from "src/server/controllers/actions/show-following-users"; 5 | import { requestSubmitPost } from "src/server/controllers/actions/submit-post"; 6 | 7 | onUserMenuSelected("follow", async ({ interaction, requester, target }) => { 8 | const response = await follow({ requester, target }); 9 | if (response) await interaction.reply(response); 10 | }); 11 | 12 | onUserMenuSelected("unfollow", async ({ interaction, requester, target }) => { 13 | const response = await unfollow({ requester, target }); 14 | if (response) await interaction.reply(response); 15 | }); 16 | 17 | onSlashCommandReceived( 18 | { 19 | commandName: "times", 20 | subCommandName: "show-following-users" 21 | }, 22 | async ({ interaction, requester }) => { 23 | const response = await showFollowingUsers({ interaction, requester }); 24 | if (response) await interaction.reply(response); 25 | } 26 | ); 27 | 28 | onDirectMessageReceived(async ({ message, author }) => { 29 | const response = await requestSubmitPost({ message, requester: author }); 30 | if (response.postResult === "succeed") await message.react(response.secret ? "🤫" : "✅"); 31 | }); 32 | -------------------------------------------------------------------------------- /src/server/controllers/actions/check-register-user.ts: -------------------------------------------------------------------------------- 1 | import { InteractionReplyOptions, GuildMember } from "discord.js"; 2 | import { userIsBot, userIsNotJoinedToTargetGuild, failed } from "src/server/views/responses/register-user"; 3 | import { targetGuildManager } from "src/server/discord"; 4 | import { userService } from "src/server/models"; 5 | 6 | export type CheckRegisterUserContext = { 7 | member: GuildMember; 8 | }; 9 | 10 | export class BotCanNotRegisteredError extends Error {} 11 | export class UserIsNotJoinedToTargetGuildError extends Error {} 12 | 13 | export async function registerUserIfNotExist({ member }: CheckRegisterUserContext) { 14 | if (member.user.bot) throw new BotCanNotRegisteredError(); 15 | if (!(await targetGuildManager.getMember(member.id))) throw new UserIsNotJoinedToTargetGuildError(); 16 | await userService.registerIfNotExist({ id: member.id }); 17 | } 18 | 19 | export async function checkRegisterUser(ctx: CheckRegisterUserContext): Promise { 20 | try { 21 | await registerUserIfNotExist(ctx); 22 | return null; 23 | } catch (error) { 24 | if (error instanceof BotCanNotRegisteredError) return userIsBot({ userName: ctx.member.toString() }); 25 | if (error instanceof UserIsNotJoinedToTargetGuildError) 26 | return userIsNotJoinedToTargetGuild({ userName: ctx.member.toString() }); 27 | console.error(error); 28 | return failed({ userName: ctx.member.toString() }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/server/discord/target-guild.ts: -------------------------------------------------------------------------------- 1 | import { Client, Guild, GuildMember, TextChannel } from "discord.js"; 2 | import { settingsManager } from "src/server/settings"; 3 | 4 | export class TargetGuildManager { 5 | private readonly client: Client; 6 | private targetGuild?: Guild; 7 | private timelineChannel?: TextChannel; 8 | 9 | constructor(client: Client) { 10 | this.client = client; 11 | } 12 | 13 | public async getTargetGuild(): Promise { 14 | if (!this.targetGuild) { 15 | this.targetGuild = await this.client.guilds.fetch(settingsManager.values.targetGuildId); 16 | } 17 | return this.targetGuild; 18 | } 19 | 20 | public async getTimelineChannel(): Promise { 21 | if (!this.timelineChannel) { 22 | const guild = await this.getTargetGuild(); 23 | const channel = await guild.channels.fetch(settingsManager.values.timelineChannelId); 24 | if (!channel || !(channel instanceof TextChannel)) { 25 | throw Error("Timeline channel is not found or not text channel."); 26 | } 27 | this.timelineChannel = channel; 28 | } 29 | return this.timelineChannel; 30 | } 31 | 32 | public async getMember(id: string): Promise { 33 | const guild = await this.getTargetGuild(); 34 | 35 | try { 36 | return await guild.members.fetch(id); 37 | } catch (error) { 38 | return null; 39 | } 40 | } 41 | 42 | public async getMembers(id: string[]): Promise { 43 | const guild = await this.getTargetGuild(); 44 | const result = await guild.members.fetch({ user: id }); 45 | return Array.from(result.values()); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/setup/index.ts: -------------------------------------------------------------------------------- 1 | import * as dotenv from "dotenv"; 2 | import { REST } from "@discordjs/rest"; 3 | import { Routes } from "discord-api-types/v9"; 4 | 5 | dotenv.config(); 6 | const token = getEnvironmentVariable("DISCORD_TOKEN"); 7 | const clientId = getEnvironmentVariable("CLIENT_ID"); 8 | const guildId = getEnvironmentVariable("TARGET_GUILD_ID"); 9 | const isGlobal = getEnvironmentVariable("COMMAND_SITE") === "GLOBAL"; 10 | const rest = new REST({ version: "9" }).setToken(token); 11 | 12 | function getEnvironmentVariable(name: string): string { 13 | const value = process.env[name]; 14 | if (!value) return ""; 15 | return value; 16 | } 17 | 18 | function getCommands(): object[] { 19 | return [ 20 | { 21 | name: "follow", 22 | type: 2 // ユーザーを右クリックして実行できるコマンド 23 | }, 24 | { 25 | name: "unfollow", 26 | type: 2 // ユーザーを右クリックして実行できるコマンド 27 | }, 28 | { 29 | name: "times", 30 | description: "limitimesのコマンド群", 31 | options: [ 32 | { 33 | type: 1, 34 | name: "show-following-users", 35 | description: "あなたがフォローしているユーザーの一覧を表示する" 36 | } 37 | ] 38 | } 39 | ]; 40 | } 41 | 42 | void (async () => { 43 | try { 44 | console.log("Started refreshing application (/) commands."); 45 | 46 | if (isGlobal) { 47 | await rest.put(Routes.applicationCommands(clientId), { body: getCommands() }); 48 | await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: [] }); 49 | } else { 50 | await rest.put(Routes.applicationCommands(clientId), { body: [] }); 51 | await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: getCommands() }); 52 | } 53 | 54 | console.log("Successfully reloaded application (/) commands."); 55 | } catch (error) { 56 | console.error(JSON.stringify(error)); 57 | } 58 | })(); 59 | -------------------------------------------------------------------------------- /src/server/discord/events.ts: -------------------------------------------------------------------------------- 1 | import { Awaitable, CommandInteraction, ContextMenuInteraction, GuildMember, Message } from "discord.js"; 2 | import { clientManager, targetGuildManager } from "src/server/discord"; 3 | 4 | export function onUserMenuSelected( 5 | name: string, 6 | listener: (ctx: { 7 | interaction: ContextMenuInteraction; 8 | requester: GuildMember; 9 | target: GuildMember; 10 | }) => Awaitable 11 | ) { 12 | clientManager.client.on("interactionCreate", async (interaction) => { 13 | if (!interaction.isContextMenu() || interaction.commandName !== name) return; 14 | const requester = await targetGuildManager.getMember(interaction.user.id); 15 | const target = await targetGuildManager.getMember(interaction.targetId); 16 | if (!requester || !target) return; 17 | await listener({ interaction, requester, target }); 18 | }); 19 | } 20 | 21 | export function onDirectMessageReceived(listener: (ctx: { message: Message; author: GuildMember }) => Awaitable) { 22 | clientManager.client.on("messageCreate", async (message) => { 23 | if (message.author.bot || message.channel.type !== "DM") return; 24 | const author = await targetGuildManager.getMember(message.author.id); 25 | if (!author) return; 26 | await listener({ message, author }); 27 | }); 28 | } 29 | 30 | export function onSlashCommandReceived( 31 | { 32 | commandName, 33 | subCommandName 34 | }: { 35 | commandName: string; 36 | subCommandName: string; 37 | }, 38 | listener: (ctx: { interaction: CommandInteraction; requester: GuildMember }) => Awaitable 39 | ) { 40 | clientManager.client.on("interactionCreate", async (interaction) => { 41 | if ( 42 | !interaction.isCommand() || 43 | interaction.commandName !== commandName || 44 | interaction.options.getSubcommand() !== subCommandName || 45 | !interaction.channel || 46 | !interaction.channel.isText() 47 | ) 48 | return; 49 | const requester = await targetGuildManager.getMember(interaction.user.id); 50 | if (!requester) return; 51 | await listener({ interaction, requester }); 52 | }); 53 | } 54 | -------------------------------------------------------------------------------- /src/server/models/user.ts: -------------------------------------------------------------------------------- 1 | import { UserService } from "src/server/models/user-service"; 2 | import { db } from "src/server/firebase"; 3 | import { firestore } from "firebase-admin"; 4 | import FieldValue = firestore.FieldValue; 5 | import Transaction = firestore.Transaction; 6 | 7 | export type UserDocument = { 8 | readonly followings: string[]; 9 | }; 10 | 11 | export class FollowingSelfError extends Error {} 12 | export class NotFoundError extends Error {} 13 | export class AlreadyFollowedError extends Error {} 14 | export class UnfollowTargetNotFoundError extends Error {} 15 | 16 | export class User { 17 | public readonly service: UserService; 18 | public readonly id: string; 19 | public readonly ref; 20 | 21 | constructor(props: Pick) { 22 | this.service = props.service; 23 | this.id = props.id; 24 | this.ref = this.service.users.doc(this.id); 25 | } 26 | 27 | public async exists(): Promise { 28 | const doc = await this.ref.get(); 29 | return doc.exists; 30 | } 31 | 32 | protected async getDocument(): Promise { 33 | const doc = await this.ref.get(); 34 | const data = doc.data(); 35 | if (!doc.exists || !data) throw new NotFoundError(); 36 | return data as UserDocument; 37 | } 38 | 39 | protected async transaction(process: (transaction: Transaction, user: UserDocument) => T): Promise { 40 | return db.runTransaction(async (transaction) => { 41 | const doc = await transaction.get(this.ref); 42 | const data = doc.data(); 43 | if (!doc.exists || !data) throw new NotFoundError(); 44 | return process(transaction, data as UserDocument); 45 | }); 46 | } 47 | 48 | public isSame(target: User): boolean { 49 | return this.id === target.id; 50 | } 51 | 52 | public async follow(target: User) { 53 | if (this.isSame(target)) throw new FollowingSelfError(); 54 | await this.transaction((transaction, user) => { 55 | if (user.followings.includes(target.id)) throw new AlreadyFollowedError(); 56 | transaction.update(this.ref, { followings: FieldValue.arrayUnion(target.id) }); 57 | }); 58 | } 59 | 60 | public async unfollow(target: User) { 61 | await this.transaction((transaction, user) => { 62 | if (!user.followings.includes(target.id)) throw new UnfollowTargetNotFoundError(); 63 | transaction.update(this.ref, { followings: FieldValue.arrayRemove(target.id) }); 64 | }); 65 | } 66 | 67 | public async getFollowings(): Promise { 68 | const user = await this.getDocument(); 69 | return user.followings.map((userId) => this.service.get(userId)); 70 | } 71 | 72 | public async getFollowers(): Promise { 73 | const snapshot = await this.service.users.where("followings", "array-contains", this.id).get(); 74 | const followers: User[] = []; 75 | snapshot.forEach((doc) => followers.push(this.service.get(doc.id))); 76 | return followers; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | cache-pnpm: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: actions/cache@v2 15 | with: 16 | path: ~/.pnpm-store 17 | key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} 18 | restore-keys: ${{ runner.os }}- 19 | - uses: pnpm/action-setup@v2.0.1 20 | with: 21 | version: 6 22 | run_install: | 23 | - recursive: true 24 | args: [--frozen-lockfile, --prefer-offline] 25 | 26 | lint: 27 | needs: [cache-pnpm] 28 | runs-on: ubuntu-latest 29 | steps: 30 | - uses: actions/checkout@v2 31 | - uses: actions/setup-node@v2 32 | with: 33 | node-version: 16 34 | - uses: actions/cache@v2 35 | with: 36 | path: ~/.pnpm-store 37 | key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} 38 | restore-keys: ${{ runner.os }}- 39 | - uses: pnpm/action-setup@v2.0.1 40 | with: 41 | version: 6 42 | run_install: | 43 | - recursive: true 44 | args: [--frozen-lockfile, --prefer-offline] 45 | - name: Run lint 46 | run: pnpm eslint 47 | 48 | build: 49 | needs: [cache-pnpm] 50 | runs-on: ubuntu-latest 51 | steps: 52 | - uses: actions/checkout@v2 53 | - uses: actions/setup-node@v2 54 | with: 55 | node-version: 16 56 | - uses: actions/cache@v2 57 | with: 58 | path: ~/.pnpm-store 59 | key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} 60 | restore-keys: ${{ runner.os }}- 61 | - uses: pnpm/action-setup@v2.0.1 62 | with: 63 | version: 6 64 | run_install: | 65 | - recursive: true 66 | args: [--frozen-lockfile, --prefer-offline] 67 | - name: Run build 68 | run: pnpm build 69 | - name: Upload artifact 70 | uses: actions/upload-artifact@v2 71 | with: 72 | name: build-scripts 73 | path: dist 74 | 75 | deploy: 76 | needs: [lint, build] 77 | runs-on: ubuntu-latest 78 | if: ${{ github.event_name == 'push' }} 79 | steps: 80 | - uses: actions/checkout@v2 81 | - uses: actions/download-artifact@v2 82 | with: 83 | name: build-scripts 84 | path: dist 85 | - name: Deploy with SCP 86 | uses: appleboy/scp-action@master 87 | with: 88 | key: ${{ secrets.SSH_KEY }} 89 | host: ${{ secrets.SSH_HOST }} 90 | username: ${{ secrets.SSH_USERNAME }} 91 | port: ${{ secrets.SSH_PORT }} 92 | passphrase: ${{ secrets.SSH_PASSPHRASE }} 93 | source: "dist/*,package.json,pnpm-lock.yaml" 94 | target: ${{ secrets.SSH_PATH }} 95 | - name: Restart the service 96 | uses: appleboy/ssh-action@master 97 | with: 98 | key: ${{ secrets.SSH_KEY }} 99 | host: ${{ secrets.SSH_HOST }} 100 | username: ${{ secrets.SSH_USERNAME }} 101 | port: ${{ secrets.SSH_PORT }} 102 | passphrase: ${{ secrets.SSH_PASSPHRASE }} 103 | script: ${{ secrets.SSH_COMMAND }} 104 | -------------------------------------------------------------------------------- /src/server/controllers/actions/submit-post.ts: -------------------------------------------------------------------------------- 1 | import { DiscordAPIError, Message, ReplyMessageOptions, GuildMember } from "discord.js"; 2 | import { User } from "src/server/models/user"; 3 | import { getPostForFollowerEmbed, getPostForTimelineEmbed } from "src/server/views/post"; 4 | import { getDMChannel } from "src/server/discord/dm"; 5 | import { checkRegisterUser } from "src/server/controllers/actions/check-register-user"; 6 | import { failedToSendToTimeline } from "src/server/views/responses/submit-post"; 7 | import { targetGuildManager } from "src/server/discord"; 8 | import { PostForTimelineProps } from "src/server/views/post/timeline"; 9 | import { userService } from "src/server/models"; 10 | 11 | type RequestSubmitPostContext = { 12 | message: Message; 13 | requester: GuildMember; 14 | }; 15 | 16 | type RequestSubmitPostResponse = 17 | | { 18 | postResult: "failed"; 19 | replyOptions: ReplyMessageOptions; 20 | } 21 | | { 22 | postResult: "succeed"; 23 | secret: boolean; 24 | }; 25 | 26 | const secretPostMarkRegex = /^!/; 27 | 28 | async function fetchFollowers(user: User): Promise { 29 | const followers = await user.getFollowers(); 30 | const followersId = followers.map((user) => user.id); 31 | return await targetGuildManager.getMembers(followersId); 32 | } 33 | 34 | function isSecret(content: string): boolean { 35 | return secretPostMarkRegex.test(content); 36 | } 37 | 38 | function removeSecretMark(content: string): string { 39 | return content.replace(secretPostMarkRegex, ""); 40 | } 41 | 42 | function getPostProps(message: Message): PostForTimelineProps { 43 | return { 44 | content: removeSecretMark(message.content), 45 | imagesURL: message.getImagesURL(), 46 | userName: message.author.username, 47 | userAvatarURL: message.author.displayAvatarURL(), 48 | userId: message.author.id, 49 | createdAt: message.createdAt, 50 | favoriteCount: 0, 51 | shareCount: 0 52 | }; 53 | } 54 | 55 | async function sendPostToTimelineChannel(message: Message): Promise { 56 | const timelineChannel = await targetGuildManager.getTimelineChannel(); 57 | const embed = getPostForTimelineEmbed(getPostProps(message)); 58 | return await timelineChannel.send({ embeds: [embed] }); 59 | } 60 | 61 | async function sendPostToFollowersDMChannel(message: Message, upstreamURL?: string) { 62 | const requester = userService.get(message.author.id); 63 | const members = await fetchFollowers(requester); 64 | 65 | for (const member of members) { 66 | const dmChannel = await getDMChannel(member.user); 67 | const embed = getPostForFollowerEmbed({ 68 | upstreamURL, 69 | ...getPostProps(message) 70 | }); 71 | 72 | try { 73 | await dmChannel.send({ embeds: [embed] }); 74 | } catch (error) { 75 | if (!(error instanceof DiscordAPIError)) { 76 | console.error(error); 77 | } 78 | } 79 | } 80 | } 81 | 82 | export async function requestSubmitPost(ctx: RequestSubmitPostContext): Promise { 83 | const response = await checkRegisterUser({ member: ctx.requester }); 84 | if (response) return { postResult: "failed", replyOptions: response }; 85 | 86 | const secret = isSecret(ctx.message.content); 87 | let upstreamURL: string | undefined; 88 | if (!secret) { 89 | try { 90 | const upstreamMessage = await sendPostToTimelineChannel(ctx.message); 91 | upstreamURL = upstreamMessage.url; 92 | } catch (error) { 93 | console.error(error); 94 | return { postResult: "failed", replyOptions: failedToSendToTimeline() }; 95 | } 96 | } 97 | 98 | await sendPostToFollowersDMChannel(ctx.message, upstreamURL); 99 | return { postResult: "succeed", secret }; 100 | } 101 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@discordjs/rest': ^0.1.0-canary.0 5 | '@typescript-eslint/eslint-plugin': ^5.2.0 6 | '@typescript-eslint/parser': ^5.2.0 7 | dayjs: ^1.10.7 8 | discord-api-types: ^0.24.0 9 | discord.js: ^13.2.0 10 | dotenv: ^10.0.0 11 | eslint: ^8.1.0 12 | eslint-config-prettier: ^8.3.0 13 | eslint-import-resolver-typescript: ^2.5.0 14 | eslint-plugin-import: ^2.25.2 15 | eslint-plugin-prettier: ^4.0.0 16 | firebase-admin: 10.0.0 17 | prettier: ^2.4.1 18 | ts-loader: ^9.2.6 19 | ts-node: ^10.4.0 20 | tsconfig-paths: ^3.11.0 21 | typescript: ^4.4.4 22 | webpack: ^5.61.0 23 | webpack-cli: ^4.9.1 24 | webpack-node-externals: ^3.0.0 25 | 26 | dependencies: 27 | '@discordjs/rest': 0.1.0-canary.0 28 | dayjs: 1.10.7 29 | discord-api-types: 0.24.0 30 | discord.js: 13.3.0 31 | dotenv: 10.0.0 32 | 33 | devDependencies: 34 | '@typescript-eslint/eslint-plugin': 5.2.0_9a56ca1c5fc1d82b3da3317a5c6f9ab1 35 | '@typescript-eslint/parser': 5.2.0_eslint@8.1.0+typescript@4.4.4 36 | eslint: 8.1.0 37 | eslint-config-prettier: 8.3.0_eslint@8.1.0 38 | eslint-import-resolver-typescript: 2.5.0_f3fc3a8f1727ab01eb417b5ed5016c22 39 | eslint-plugin-import: 2.25.2_eslint@8.1.0 40 | eslint-plugin-prettier: 4.0.0_850528f9ec3c0797b9b19a94a36b5ba3 41 | firebase-admin: 10.0.0 42 | prettier: 2.4.1 43 | ts-loader: 9.2.6_typescript@4.4.4+webpack@5.61.0 44 | ts-node: 10.4.0_typescript@4.4.4 45 | tsconfig-paths: 3.11.0 46 | typescript: 4.4.4 47 | webpack: 5.61.0_webpack-cli@4.9.1 48 | webpack-cli: 4.9.1_webpack@5.61.0 49 | webpack-node-externals: 3.0.0 50 | 51 | packages: 52 | 53 | /@cspotcode/source-map-consumer/0.8.0: 54 | resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==} 55 | engines: {node: '>= 12'} 56 | dev: true 57 | 58 | /@cspotcode/source-map-support/0.7.0: 59 | resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==} 60 | engines: {node: '>=12'} 61 | dependencies: 62 | '@cspotcode/source-map-consumer': 0.8.0 63 | dev: true 64 | 65 | /@discordjs/builders/0.8.2: 66 | resolution: {integrity: sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==} 67 | engines: {node: '>=16.0.0', npm: '>=7.0.0'} 68 | dependencies: 69 | '@sindresorhus/is': 4.2.0 70 | discord-api-types: 0.24.0 71 | ow: 0.27.0 72 | ts-mixer: 6.0.0 73 | tslib: 2.3.1 74 | dev: false 75 | 76 | /@discordjs/collection/0.1.6: 77 | resolution: {integrity: sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==} 78 | dev: false 79 | 80 | /@discordjs/collection/0.3.2: 81 | resolution: {integrity: sha512-dMjLl60b2DMqObbH1MQZKePgWhsNe49XkKBZ0W5Acl5uVV43SN414i2QfZwRI7dXAqIn8pEWD2+XXQFn9KWxqg==} 82 | engines: {node: '>=16.0.0', npm: '>=7.0.0'} 83 | dev: false 84 | 85 | /@discordjs/form-data/3.0.1: 86 | resolution: {integrity: sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==} 87 | engines: {node: '>= 6'} 88 | dependencies: 89 | asynckit: 0.4.0 90 | combined-stream: 1.0.8 91 | mime-types: 2.1.33 92 | dev: false 93 | 94 | /@discordjs/rest/0.1.0-canary.0: 95 | resolution: {integrity: sha512-d+s//ISYVV+e0w/926wMEeO7vju+Pn11x1JM4tcmVMCHSDgpi6pnFCNAXF1TEdnDcy7xf9tq5cf2pQkb/7ySTQ==} 96 | engines: {node: '>=16.0.0'} 97 | dependencies: 98 | '@discordjs/collection': 0.1.6 99 | '@sapphire/async-queue': 1.1.8 100 | '@sapphire/snowflake': 1.3.6 101 | abort-controller: 3.0.0 102 | discord-api-types: 0.18.1 103 | form-data: 4.0.0 104 | node-fetch: 2.6.5 105 | tslib: 2.3.1 106 | dev: false 107 | 108 | /@discoveryjs/json-ext/0.5.5: 109 | resolution: {integrity: sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==} 110 | engines: {node: '>=10.0.0'} 111 | dev: true 112 | 113 | /@eslint/eslintrc/1.0.3: 114 | resolution: {integrity: sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==} 115 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 116 | dependencies: 117 | ajv: 6.12.6 118 | debug: 4.3.2 119 | espree: 9.0.0 120 | globals: 13.12.0 121 | ignore: 4.0.6 122 | import-fresh: 3.3.0 123 | js-yaml: 3.14.1 124 | minimatch: 3.0.4 125 | strip-json-comments: 3.1.1 126 | transitivePeerDependencies: 127 | - supports-color 128 | dev: true 129 | 130 | /@firebase/app-types/0.6.3: 131 | resolution: {integrity: sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw==} 132 | dev: true 133 | 134 | /@firebase/app-types/0.7.0: 135 | resolution: {integrity: sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==} 136 | dev: true 137 | 138 | /@firebase/auth-interop-types/0.1.6_@firebase+util@1.4.1: 139 | resolution: {integrity: sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==} 140 | peerDependencies: 141 | '@firebase/app-types': 0.x 142 | '@firebase/util': 1.x 143 | dependencies: 144 | '@firebase/util': 1.4.1 145 | dev: true 146 | 147 | /@firebase/component/0.5.8: 148 | resolution: {integrity: sha512-td705iXrumVoZbpxFg1kuD+/NtYMQwAK37DITJNmVEe5E0gUHAGeBptXNL4KPCHOd8+/7EB4JfaUOZDxylp2+g==} 149 | dependencies: 150 | '@firebase/util': 1.4.1 151 | tslib: 2.3.1 152 | dev: true 153 | 154 | /@firebase/database-compat/0.1.3: 155 | resolution: {integrity: sha512-Y6di+XLM3UyntenjxWcmcesOfFjHOoaDqOStyryILSHNtyWeOCLDnuatJ/RNSNC2LDFFlKDqOj8C+LHGaubhNg==} 156 | peerDependencies: 157 | '@firebase/app-compat': 0.x 158 | dependencies: 159 | '@firebase/component': 0.5.8 160 | '@firebase/database': 0.12.3 161 | '@firebase/database-types': 0.9.2 162 | '@firebase/logger': 0.3.1 163 | '@firebase/util': 1.4.1 164 | tslib: 2.3.1 165 | transitivePeerDependencies: 166 | - '@firebase/app-types' 167 | dev: true 168 | 169 | /@firebase/database-types/0.7.3: 170 | resolution: {integrity: sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A==} 171 | dependencies: 172 | '@firebase/app-types': 0.6.3 173 | dev: true 174 | 175 | /@firebase/database-types/0.9.2: 176 | resolution: {integrity: sha512-arIcrtyuca171NhaQNzyXd/+s8xemxnMpQb3hboW9UFbctOpa0fqmqMBg26rmIVOBzJ1APTw7GmXu7ch6JLoxA==} 177 | dependencies: 178 | '@firebase/app-types': 0.7.0 179 | '@firebase/util': 1.4.1 180 | dev: true 181 | 182 | /@firebase/database/0.12.3: 183 | resolution: {integrity: sha512-L2f1jgmQgrTL5l4rh4/JBw3+stVHaOSvd6sJ0aMJ3WifLLSYeW7TcqxrSqOqCqE8f2NlM2ugl9uF2/kJKk8V5A==} 184 | dependencies: 185 | '@firebase/auth-interop-types': 0.1.6_@firebase+util@1.4.1 186 | '@firebase/component': 0.5.8 187 | '@firebase/logger': 0.3.1 188 | '@firebase/util': 1.4.1 189 | faye-websocket: 0.11.4 190 | tslib: 2.3.1 191 | transitivePeerDependencies: 192 | - '@firebase/app-types' 193 | dev: true 194 | 195 | /@firebase/logger/0.3.1: 196 | resolution: {integrity: sha512-RlqTPGWQSFESVbcA9IsNi8hRcp+8SV7HHHAU7YrcmdXTD1RNlz50sCIq4EcXaXgBphdc7yb3Xtvle0QuFETUlg==} 197 | dependencies: 198 | tslib: 2.3.1 199 | dev: true 200 | 201 | /@firebase/util/1.4.1: 202 | resolution: {integrity: sha512-6GM+R1MQaLmzVOX/keb1oTWUYG0jqvA5dTsh/rsCNR1ndPCtDKiMTcH5XKHEzyog1+NLSVTSMsN/AqTmm2rGCw==} 203 | dependencies: 204 | tslib: 2.3.1 205 | dev: true 206 | 207 | /@google-cloud/common/3.8.1: 208 | resolution: {integrity: sha512-FOs3NFU6bDt5mXE7IFpwIeqzLwRZNu9lJYl+bHVNkwmxX/w4VyDZAiGjQHhpV1Ek+muNKlX8HPchxaIxNTuOhw==} 209 | engines: {node: '>=10'} 210 | dependencies: 211 | '@google-cloud/projectify': 2.1.1 212 | '@google-cloud/promisify': 2.0.4 213 | arrify: 2.0.1 214 | duplexify: 4.1.2 215 | ent: 2.2.0 216 | extend: 3.0.2 217 | google-auth-library: 7.10.2 218 | retry-request: 4.2.2 219 | teeny-request: 7.1.3 220 | transitivePeerDependencies: 221 | - supports-color 222 | dev: true 223 | optional: true 224 | 225 | /@google-cloud/firestore/4.15.1: 226 | resolution: {integrity: sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==} 227 | engines: {node: '>=10.10.0'} 228 | requiresBuild: true 229 | dependencies: 230 | fast-deep-equal: 3.1.3 231 | functional-red-black-tree: 1.0.1 232 | google-gax: 2.28.0 233 | protobufjs: 6.11.2 234 | transitivePeerDependencies: 235 | - supports-color 236 | dev: true 237 | optional: true 238 | 239 | /@google-cloud/paginator/3.0.6: 240 | resolution: {integrity: sha512-XCTm/GfQIlc1ZxpNtTSs/mnZxC2cePNhxU3X8EzHXKIJ2JFncmJj2Fcd2IP+gbmZaSZnY0juFxbUCkIeuu/2eQ==} 241 | engines: {node: '>=10'} 242 | dependencies: 243 | arrify: 2.0.1 244 | extend: 3.0.2 245 | dev: true 246 | optional: true 247 | 248 | /@google-cloud/projectify/2.1.1: 249 | resolution: {integrity: sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==} 250 | engines: {node: '>=10'} 251 | dev: true 252 | optional: true 253 | 254 | /@google-cloud/promisify/2.0.4: 255 | resolution: {integrity: sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==} 256 | engines: {node: '>=10'} 257 | dev: true 258 | optional: true 259 | 260 | /@google-cloud/storage/5.15.5: 261 | resolution: {integrity: sha512-UmTM32Cmoyk9c9u8fvKl8tA954GnM4eZpH9Ji0fyjMGBSwuOLR4SgU/E71hCFRcD6+12l5YTmbowIvb0k6uXEA==} 262 | engines: {node: '>=10'} 263 | requiresBuild: true 264 | dependencies: 265 | '@google-cloud/common': 3.8.1 266 | '@google-cloud/paginator': 3.0.6 267 | '@google-cloud/promisify': 2.0.4 268 | arrify: 2.0.1 269 | async-retry: 1.3.3 270 | compressible: 2.0.18 271 | date-and-time: 2.0.1 272 | duplexify: 4.1.2 273 | extend: 3.0.2 274 | gcs-resumable-upload: 3.5.1 275 | get-stream: 6.0.1 276 | hash-stream-validation: 0.2.4 277 | mime: 3.0.0 278 | mime-types: 2.1.33 279 | p-limit: 3.1.0 280 | pumpify: 2.0.1 281 | snakeize: 0.1.0 282 | stream-events: 1.0.5 283 | xdg-basedir: 4.0.0 284 | transitivePeerDependencies: 285 | - supports-color 286 | dev: true 287 | optional: true 288 | 289 | /@grpc/grpc-js/1.4.3: 290 | resolution: {integrity: sha512-SVt7zp7OjNp/t5p0dGjP+O6FdWnbkq80sVTvW4dYRQaXV261wzTvjEt8wrW0KQ+X0vC/kvzQJWvHcIU9wej3uQ==} 291 | engines: {node: ^8.13.0 || >=10.10.0} 292 | dependencies: 293 | '@grpc/proto-loader': 0.6.6 294 | '@types/node': 16.11.6 295 | dev: true 296 | optional: true 297 | 298 | /@grpc/proto-loader/0.6.6: 299 | resolution: {integrity: sha512-cdMaPZ8AiFz6ua6PUbP+LKbhwJbFXnrQ/mlnKGUyzDUZ3wp7vPLksnmLCBX6SHgSmjX7CbNVNLFYD5GmmjO4GQ==} 300 | engines: {node: '>=6'} 301 | hasBin: true 302 | dependencies: 303 | '@types/long': 4.0.1 304 | lodash.camelcase: 4.3.0 305 | long: 4.0.0 306 | protobufjs: 6.11.2 307 | yargs: 16.2.0 308 | dev: true 309 | optional: true 310 | 311 | /@humanwhocodes/config-array/0.6.0: 312 | resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} 313 | engines: {node: '>=10.10.0'} 314 | dependencies: 315 | '@humanwhocodes/object-schema': 1.2.0 316 | debug: 4.3.2 317 | minimatch: 3.0.4 318 | transitivePeerDependencies: 319 | - supports-color 320 | dev: true 321 | 322 | /@humanwhocodes/object-schema/1.2.0: 323 | resolution: {integrity: sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==} 324 | dev: true 325 | 326 | /@nodelib/fs.scandir/2.1.5: 327 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 328 | engines: {node: '>= 8'} 329 | dependencies: 330 | '@nodelib/fs.stat': 2.0.5 331 | run-parallel: 1.2.0 332 | dev: true 333 | 334 | /@nodelib/fs.stat/2.0.5: 335 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 336 | engines: {node: '>= 8'} 337 | dev: true 338 | 339 | /@nodelib/fs.walk/1.2.8: 340 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 341 | engines: {node: '>= 8'} 342 | dependencies: 343 | '@nodelib/fs.scandir': 2.1.5 344 | fastq: 1.13.0 345 | dev: true 346 | 347 | /@panva/asn1.js/1.0.0: 348 | resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==} 349 | engines: {node: '>=10.13.0'} 350 | dev: true 351 | 352 | /@protobufjs/aspromise/1.1.2: 353 | resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} 354 | dev: true 355 | optional: true 356 | 357 | /@protobufjs/base64/1.1.2: 358 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 359 | dev: true 360 | optional: true 361 | 362 | /@protobufjs/codegen/2.0.4: 363 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 364 | dev: true 365 | optional: true 366 | 367 | /@protobufjs/eventemitter/1.1.0: 368 | resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=} 369 | dev: true 370 | optional: true 371 | 372 | /@protobufjs/fetch/1.1.0: 373 | resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=} 374 | dependencies: 375 | '@protobufjs/aspromise': 1.1.2 376 | '@protobufjs/inquire': 1.1.0 377 | dev: true 378 | optional: true 379 | 380 | /@protobufjs/float/1.0.2: 381 | resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=} 382 | dev: true 383 | optional: true 384 | 385 | /@protobufjs/inquire/1.1.0: 386 | resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=} 387 | dev: true 388 | optional: true 389 | 390 | /@protobufjs/path/1.1.2: 391 | resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=} 392 | dev: true 393 | optional: true 394 | 395 | /@protobufjs/pool/1.1.0: 396 | resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=} 397 | dev: true 398 | optional: true 399 | 400 | /@protobufjs/utf8/1.1.0: 401 | resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=} 402 | dev: true 403 | optional: true 404 | 405 | /@sapphire/async-queue/1.1.8: 406 | resolution: {integrity: sha512-Oi4EEi8vOne8RM1tCdQ3kYAtl/J6ztak3Th6wwGFqA2SVNJtedw196LjsLX0bK8Li8cwaljbFf08N+0zeqhkWQ==} 407 | engines: {node: '>=v14.0.0', npm: '>=7.0.0'} 408 | dev: false 409 | 410 | /@sapphire/snowflake/1.3.6: 411 | resolution: {integrity: sha512-QnzuLp+p9D7agynVub/zqlDVriDza9y3STArBhNiNBUgIX8+GL5FpQxstRfw1jDr5jkZUjcuKYAHxjIuXKdJAg==} 412 | engines: {node: '>=12', npm: '>=6'} 413 | deprecated: This version has been automatically deprecated by @favware/npm-deprecate. Please use a newer version. 414 | dev: false 415 | 416 | /@sindresorhus/is/4.2.0: 417 | resolution: {integrity: sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==} 418 | engines: {node: '>=10'} 419 | dev: false 420 | 421 | /@tootallnate/once/2.0.0: 422 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} 423 | engines: {node: '>= 10'} 424 | dev: true 425 | optional: true 426 | 427 | /@tsconfig/node10/1.0.8: 428 | resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} 429 | dev: true 430 | 431 | /@tsconfig/node12/1.0.9: 432 | resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==} 433 | dev: true 434 | 435 | /@tsconfig/node14/1.0.1: 436 | resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} 437 | dev: true 438 | 439 | /@tsconfig/node16/1.0.2: 440 | resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} 441 | dev: true 442 | 443 | /@types/body-parser/1.19.1: 444 | resolution: {integrity: sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==} 445 | dependencies: 446 | '@types/connect': 3.4.35 447 | '@types/node': 16.11.6 448 | dev: true 449 | 450 | /@types/connect/3.4.35: 451 | resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} 452 | dependencies: 453 | '@types/node': 16.11.6 454 | dev: true 455 | 456 | /@types/eslint-scope/3.7.1: 457 | resolution: {integrity: sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==} 458 | dependencies: 459 | '@types/eslint': 7.28.2 460 | '@types/estree': 0.0.50 461 | dev: true 462 | 463 | /@types/eslint/7.28.2: 464 | resolution: {integrity: sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==} 465 | dependencies: 466 | '@types/estree': 0.0.50 467 | '@types/json-schema': 7.0.9 468 | dev: true 469 | 470 | /@types/estree/0.0.50: 471 | resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} 472 | dev: true 473 | 474 | /@types/express-jwt/0.0.42: 475 | resolution: {integrity: sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==} 476 | dependencies: 477 | '@types/express': 4.17.13 478 | '@types/express-unless': 0.5.2 479 | dev: true 480 | 481 | /@types/express-serve-static-core/4.17.24: 482 | resolution: {integrity: sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==} 483 | dependencies: 484 | '@types/node': 16.11.6 485 | '@types/qs': 6.9.7 486 | '@types/range-parser': 1.2.4 487 | dev: true 488 | 489 | /@types/express-unless/0.5.2: 490 | resolution: {integrity: sha512-Q74UyYRX/zIgl1HSp9tUX2PlG8glkVm+59r7aK4KGKzC5jqKIOX6rrVLRQrzpZUQ84VukHtRoeAuon2nIssHPQ==} 491 | dependencies: 492 | '@types/express': 4.17.13 493 | dev: true 494 | 495 | /@types/express/4.17.13: 496 | resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} 497 | dependencies: 498 | '@types/body-parser': 1.19.1 499 | '@types/express-serve-static-core': 4.17.24 500 | '@types/qs': 6.9.7 501 | '@types/serve-static': 1.13.10 502 | dev: true 503 | 504 | /@types/json-schema/7.0.9: 505 | resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} 506 | dev: true 507 | 508 | /@types/json5/0.0.29: 509 | resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} 510 | dev: true 511 | 512 | /@types/long/4.0.1: 513 | resolution: {integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==} 514 | dev: true 515 | optional: true 516 | 517 | /@types/mime/1.3.2: 518 | resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} 519 | dev: true 520 | 521 | /@types/node-fetch/2.5.12: 522 | resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==} 523 | dependencies: 524 | '@types/node': 16.11.6 525 | form-data: 3.0.1 526 | dev: false 527 | 528 | /@types/node/16.11.6: 529 | resolution: {integrity: sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==} 530 | 531 | /@types/qs/6.9.7: 532 | resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} 533 | dev: true 534 | 535 | /@types/range-parser/1.2.4: 536 | resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} 537 | dev: true 538 | 539 | /@types/serve-static/1.13.10: 540 | resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} 541 | dependencies: 542 | '@types/mime': 1.3.2 543 | '@types/node': 16.11.6 544 | dev: true 545 | 546 | /@types/ws/8.2.0: 547 | resolution: {integrity: sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==} 548 | dependencies: 549 | '@types/node': 16.11.6 550 | dev: false 551 | 552 | /@typescript-eslint/eslint-plugin/5.2.0_9a56ca1c5fc1d82b3da3317a5c6f9ab1: 553 | resolution: {integrity: sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==} 554 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 555 | peerDependencies: 556 | '@typescript-eslint/parser': ^5.0.0 557 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 558 | typescript: '*' 559 | peerDependenciesMeta: 560 | typescript: 561 | optional: true 562 | dependencies: 563 | '@typescript-eslint/experimental-utils': 5.2.0_eslint@8.1.0+typescript@4.4.4 564 | '@typescript-eslint/parser': 5.2.0_eslint@8.1.0+typescript@4.4.4 565 | '@typescript-eslint/scope-manager': 5.2.0 566 | debug: 4.3.2 567 | eslint: 8.1.0 568 | functional-red-black-tree: 1.0.1 569 | ignore: 5.1.8 570 | regexpp: 3.2.0 571 | semver: 7.3.5 572 | tsutils: 3.21.0_typescript@4.4.4 573 | typescript: 4.4.4 574 | transitivePeerDependencies: 575 | - supports-color 576 | dev: true 577 | 578 | /@typescript-eslint/experimental-utils/5.2.0_eslint@8.1.0+typescript@4.4.4: 579 | resolution: {integrity: sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==} 580 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 581 | peerDependencies: 582 | eslint: '*' 583 | dependencies: 584 | '@types/json-schema': 7.0.9 585 | '@typescript-eslint/scope-manager': 5.2.0 586 | '@typescript-eslint/types': 5.2.0 587 | '@typescript-eslint/typescript-estree': 5.2.0_typescript@4.4.4 588 | eslint: 8.1.0 589 | eslint-scope: 5.1.1 590 | eslint-utils: 3.0.0_eslint@8.1.0 591 | transitivePeerDependencies: 592 | - supports-color 593 | - typescript 594 | dev: true 595 | 596 | /@typescript-eslint/parser/5.2.0_eslint@8.1.0+typescript@4.4.4: 597 | resolution: {integrity: sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==} 598 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 599 | peerDependencies: 600 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 601 | typescript: '*' 602 | peerDependenciesMeta: 603 | typescript: 604 | optional: true 605 | dependencies: 606 | '@typescript-eslint/scope-manager': 5.2.0 607 | '@typescript-eslint/types': 5.2.0 608 | '@typescript-eslint/typescript-estree': 5.2.0_typescript@4.4.4 609 | debug: 4.3.2 610 | eslint: 8.1.0 611 | typescript: 4.4.4 612 | transitivePeerDependencies: 613 | - supports-color 614 | dev: true 615 | 616 | /@typescript-eslint/scope-manager/5.2.0: 617 | resolution: {integrity: sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==} 618 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 619 | dependencies: 620 | '@typescript-eslint/types': 5.2.0 621 | '@typescript-eslint/visitor-keys': 5.2.0 622 | dev: true 623 | 624 | /@typescript-eslint/types/5.2.0: 625 | resolution: {integrity: sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==} 626 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 627 | dev: true 628 | 629 | /@typescript-eslint/typescript-estree/5.2.0_typescript@4.4.4: 630 | resolution: {integrity: sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==} 631 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 632 | peerDependencies: 633 | typescript: '*' 634 | peerDependenciesMeta: 635 | typescript: 636 | optional: true 637 | dependencies: 638 | '@typescript-eslint/types': 5.2.0 639 | '@typescript-eslint/visitor-keys': 5.2.0 640 | debug: 4.3.2 641 | globby: 11.0.4 642 | is-glob: 4.0.3 643 | semver: 7.3.5 644 | tsutils: 3.21.0_typescript@4.4.4 645 | typescript: 4.4.4 646 | transitivePeerDependencies: 647 | - supports-color 648 | dev: true 649 | 650 | /@typescript-eslint/visitor-keys/5.2.0: 651 | resolution: {integrity: sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==} 652 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 653 | dependencies: 654 | '@typescript-eslint/types': 5.2.0 655 | eslint-visitor-keys: 3.0.0 656 | dev: true 657 | 658 | /@webassemblyjs/ast/1.11.1: 659 | resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} 660 | dependencies: 661 | '@webassemblyjs/helper-numbers': 1.11.1 662 | '@webassemblyjs/helper-wasm-bytecode': 1.11.1 663 | dev: true 664 | 665 | /@webassemblyjs/floating-point-hex-parser/1.11.1: 666 | resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} 667 | dev: true 668 | 669 | /@webassemblyjs/helper-api-error/1.11.1: 670 | resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} 671 | dev: true 672 | 673 | /@webassemblyjs/helper-buffer/1.11.1: 674 | resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} 675 | dev: true 676 | 677 | /@webassemblyjs/helper-numbers/1.11.1: 678 | resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} 679 | dependencies: 680 | '@webassemblyjs/floating-point-hex-parser': 1.11.1 681 | '@webassemblyjs/helper-api-error': 1.11.1 682 | '@xtuc/long': 4.2.2 683 | dev: true 684 | 685 | /@webassemblyjs/helper-wasm-bytecode/1.11.1: 686 | resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} 687 | dev: true 688 | 689 | /@webassemblyjs/helper-wasm-section/1.11.1: 690 | resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} 691 | dependencies: 692 | '@webassemblyjs/ast': 1.11.1 693 | '@webassemblyjs/helper-buffer': 1.11.1 694 | '@webassemblyjs/helper-wasm-bytecode': 1.11.1 695 | '@webassemblyjs/wasm-gen': 1.11.1 696 | dev: true 697 | 698 | /@webassemblyjs/ieee754/1.11.1: 699 | resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} 700 | dependencies: 701 | '@xtuc/ieee754': 1.2.0 702 | dev: true 703 | 704 | /@webassemblyjs/leb128/1.11.1: 705 | resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} 706 | dependencies: 707 | '@xtuc/long': 4.2.2 708 | dev: true 709 | 710 | /@webassemblyjs/utf8/1.11.1: 711 | resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} 712 | dev: true 713 | 714 | /@webassemblyjs/wasm-edit/1.11.1: 715 | resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} 716 | dependencies: 717 | '@webassemblyjs/ast': 1.11.1 718 | '@webassemblyjs/helper-buffer': 1.11.1 719 | '@webassemblyjs/helper-wasm-bytecode': 1.11.1 720 | '@webassemblyjs/helper-wasm-section': 1.11.1 721 | '@webassemblyjs/wasm-gen': 1.11.1 722 | '@webassemblyjs/wasm-opt': 1.11.1 723 | '@webassemblyjs/wasm-parser': 1.11.1 724 | '@webassemblyjs/wast-printer': 1.11.1 725 | dev: true 726 | 727 | /@webassemblyjs/wasm-gen/1.11.1: 728 | resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} 729 | dependencies: 730 | '@webassemblyjs/ast': 1.11.1 731 | '@webassemblyjs/helper-wasm-bytecode': 1.11.1 732 | '@webassemblyjs/ieee754': 1.11.1 733 | '@webassemblyjs/leb128': 1.11.1 734 | '@webassemblyjs/utf8': 1.11.1 735 | dev: true 736 | 737 | /@webassemblyjs/wasm-opt/1.11.1: 738 | resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} 739 | dependencies: 740 | '@webassemblyjs/ast': 1.11.1 741 | '@webassemblyjs/helper-buffer': 1.11.1 742 | '@webassemblyjs/wasm-gen': 1.11.1 743 | '@webassemblyjs/wasm-parser': 1.11.1 744 | dev: true 745 | 746 | /@webassemblyjs/wasm-parser/1.11.1: 747 | resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} 748 | dependencies: 749 | '@webassemblyjs/ast': 1.11.1 750 | '@webassemblyjs/helper-api-error': 1.11.1 751 | '@webassemblyjs/helper-wasm-bytecode': 1.11.1 752 | '@webassemblyjs/ieee754': 1.11.1 753 | '@webassemblyjs/leb128': 1.11.1 754 | '@webassemblyjs/utf8': 1.11.1 755 | dev: true 756 | 757 | /@webassemblyjs/wast-printer/1.11.1: 758 | resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} 759 | dependencies: 760 | '@webassemblyjs/ast': 1.11.1 761 | '@xtuc/long': 4.2.2 762 | dev: true 763 | 764 | /@webpack-cli/configtest/1.1.0_webpack-cli@4.9.1+webpack@5.61.0: 765 | resolution: {integrity: sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==} 766 | peerDependencies: 767 | webpack: 4.x.x || 5.x.x 768 | webpack-cli: 4.x.x 769 | dependencies: 770 | webpack: 5.61.0_webpack-cli@4.9.1 771 | webpack-cli: 4.9.1_webpack@5.61.0 772 | dev: true 773 | 774 | /@webpack-cli/info/1.4.0_webpack-cli@4.9.1: 775 | resolution: {integrity: sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==} 776 | peerDependencies: 777 | webpack-cli: 4.x.x 778 | dependencies: 779 | envinfo: 7.8.1 780 | webpack-cli: 4.9.1_webpack@5.61.0 781 | dev: true 782 | 783 | /@webpack-cli/serve/1.6.0_webpack-cli@4.9.1: 784 | resolution: {integrity: sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==} 785 | peerDependencies: 786 | webpack-cli: 4.x.x 787 | webpack-dev-server: '*' 788 | peerDependenciesMeta: 789 | webpack-dev-server: 790 | optional: true 791 | dependencies: 792 | webpack-cli: 4.9.1_webpack@5.61.0 793 | dev: true 794 | 795 | /@xtuc/ieee754/1.2.0: 796 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} 797 | dev: true 798 | 799 | /@xtuc/long/4.2.2: 800 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} 801 | dev: true 802 | 803 | /abort-controller/3.0.0: 804 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 805 | engines: {node: '>=6.5'} 806 | dependencies: 807 | event-target-shim: 5.0.1 808 | 809 | /acorn-import-assertions/1.8.0_acorn@8.5.0: 810 | resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} 811 | peerDependencies: 812 | acorn: ^8 813 | dependencies: 814 | acorn: 8.5.0 815 | dev: true 816 | 817 | /acorn-jsx/5.3.2_acorn@8.5.0: 818 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 819 | peerDependencies: 820 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 821 | dependencies: 822 | acorn: 8.5.0 823 | dev: true 824 | 825 | /acorn-walk/8.2.0: 826 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 827 | engines: {node: '>=0.4.0'} 828 | dev: true 829 | 830 | /acorn/8.5.0: 831 | resolution: {integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==} 832 | engines: {node: '>=0.4.0'} 833 | hasBin: true 834 | dev: true 835 | 836 | /agent-base/6.0.2: 837 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 838 | engines: {node: '>= 6.0.0'} 839 | dependencies: 840 | debug: 4.3.2 841 | transitivePeerDependencies: 842 | - supports-color 843 | dev: true 844 | optional: true 845 | 846 | /ajv-keywords/3.5.2_ajv@6.12.6: 847 | resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} 848 | peerDependencies: 849 | ajv: ^6.9.1 850 | dependencies: 851 | ajv: 6.12.6 852 | dev: true 853 | 854 | /ajv/6.12.6: 855 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 856 | dependencies: 857 | fast-deep-equal: 3.1.3 858 | fast-json-stable-stringify: 2.1.0 859 | json-schema-traverse: 0.4.1 860 | uri-js: 4.4.1 861 | dev: true 862 | 863 | /ansi-colors/4.1.1: 864 | resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} 865 | engines: {node: '>=6'} 866 | dev: true 867 | 868 | /ansi-regex/5.0.1: 869 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 870 | engines: {node: '>=8'} 871 | dev: true 872 | 873 | /ansi-styles/4.3.0: 874 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 875 | engines: {node: '>=8'} 876 | dependencies: 877 | color-convert: 2.0.1 878 | dev: true 879 | 880 | /arg/4.1.3: 881 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 882 | dev: true 883 | 884 | /argparse/1.0.10: 885 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 886 | dependencies: 887 | sprintf-js: 1.0.3 888 | dev: true 889 | 890 | /argparse/2.0.1: 891 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 892 | dev: true 893 | 894 | /array-includes/3.1.4: 895 | resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} 896 | engines: {node: '>= 0.4'} 897 | dependencies: 898 | call-bind: 1.0.2 899 | define-properties: 1.1.3 900 | es-abstract: 1.19.1 901 | get-intrinsic: 1.1.1 902 | is-string: 1.0.7 903 | dev: true 904 | 905 | /array-union/2.1.0: 906 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 907 | engines: {node: '>=8'} 908 | dev: true 909 | 910 | /array.prototype.flat/1.2.5: 911 | resolution: {integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==} 912 | engines: {node: '>= 0.4'} 913 | dependencies: 914 | call-bind: 1.0.2 915 | define-properties: 1.1.3 916 | es-abstract: 1.19.1 917 | dev: true 918 | 919 | /arrify/2.0.1: 920 | resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} 921 | engines: {node: '>=8'} 922 | dev: true 923 | optional: true 924 | 925 | /async-retry/1.3.3: 926 | resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} 927 | dependencies: 928 | retry: 0.13.1 929 | dev: true 930 | optional: true 931 | 932 | /asynckit/0.4.0: 933 | resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} 934 | dev: false 935 | 936 | /balanced-match/1.0.2: 937 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 938 | dev: true 939 | 940 | /base64-js/1.5.1: 941 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 942 | dev: true 943 | optional: true 944 | 945 | /bignumber.js/9.0.1: 946 | resolution: {integrity: sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==} 947 | dev: true 948 | optional: true 949 | 950 | /brace-expansion/1.1.11: 951 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 952 | dependencies: 953 | balanced-match: 1.0.2 954 | concat-map: 0.0.1 955 | dev: true 956 | 957 | /braces/3.0.2: 958 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 959 | engines: {node: '>=8'} 960 | dependencies: 961 | fill-range: 7.0.1 962 | dev: true 963 | 964 | /browserslist/4.17.6: 965 | resolution: {integrity: sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==} 966 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 967 | hasBin: true 968 | dependencies: 969 | caniuse-lite: 1.0.30001274 970 | electron-to-chromium: 1.3.887 971 | escalade: 3.1.1 972 | node-releases: 2.0.1 973 | picocolors: 1.0.0 974 | dev: true 975 | 976 | /buffer-equal-constant-time/1.0.1: 977 | resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} 978 | dev: true 979 | 980 | /buffer-from/1.1.2: 981 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 982 | dev: true 983 | 984 | /call-bind/1.0.2: 985 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 986 | dependencies: 987 | function-bind: 1.1.1 988 | get-intrinsic: 1.1.1 989 | dev: true 990 | 991 | /callsites/3.1.0: 992 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 993 | engines: {node: '>=6'} 994 | 995 | /caniuse-lite/1.0.30001274: 996 | resolution: {integrity: sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==} 997 | dev: true 998 | 999 | /chalk/4.1.2: 1000 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1001 | engines: {node: '>=10'} 1002 | dependencies: 1003 | ansi-styles: 4.3.0 1004 | supports-color: 7.2.0 1005 | dev: true 1006 | 1007 | /chrome-trace-event/1.0.3: 1008 | resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} 1009 | engines: {node: '>=6.0'} 1010 | dev: true 1011 | 1012 | /cliui/7.0.4: 1013 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1014 | dependencies: 1015 | string-width: 4.2.3 1016 | strip-ansi: 6.0.1 1017 | wrap-ansi: 7.0.0 1018 | dev: true 1019 | optional: true 1020 | 1021 | /clone-deep/4.0.1: 1022 | resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} 1023 | engines: {node: '>=6'} 1024 | dependencies: 1025 | is-plain-object: 2.0.4 1026 | kind-of: 6.0.3 1027 | shallow-clone: 3.0.1 1028 | dev: true 1029 | 1030 | /color-convert/2.0.1: 1031 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1032 | engines: {node: '>=7.0.0'} 1033 | dependencies: 1034 | color-name: 1.1.4 1035 | dev: true 1036 | 1037 | /color-name/1.1.4: 1038 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1039 | dev: true 1040 | 1041 | /colorette/2.0.16: 1042 | resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} 1043 | dev: true 1044 | 1045 | /combined-stream/1.0.8: 1046 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1047 | engines: {node: '>= 0.8'} 1048 | dependencies: 1049 | delayed-stream: 1.0.0 1050 | dev: false 1051 | 1052 | /commander/2.20.3: 1053 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 1054 | dev: true 1055 | 1056 | /commander/7.2.0: 1057 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 1058 | engines: {node: '>= 10'} 1059 | dev: true 1060 | 1061 | /compressible/2.0.18: 1062 | resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} 1063 | engines: {node: '>= 0.6'} 1064 | dependencies: 1065 | mime-db: 1.50.0 1066 | dev: true 1067 | optional: true 1068 | 1069 | /concat-map/0.0.1: 1070 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 1071 | dev: true 1072 | 1073 | /configstore/5.0.1: 1074 | resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} 1075 | engines: {node: '>=8'} 1076 | dependencies: 1077 | dot-prop: 5.3.0 1078 | graceful-fs: 4.2.8 1079 | make-dir: 3.1.0 1080 | unique-string: 2.0.0 1081 | write-file-atomic: 3.0.3 1082 | xdg-basedir: 4.0.0 1083 | dev: true 1084 | optional: true 1085 | 1086 | /create-require/1.1.1: 1087 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 1088 | dev: true 1089 | 1090 | /cross-spawn/7.0.3: 1091 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1092 | engines: {node: '>= 8'} 1093 | dependencies: 1094 | path-key: 3.1.1 1095 | shebang-command: 2.0.0 1096 | which: 2.0.2 1097 | dev: true 1098 | 1099 | /crypto-random-string/2.0.0: 1100 | resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} 1101 | engines: {node: '>=8'} 1102 | dev: true 1103 | optional: true 1104 | 1105 | /date-and-time/2.0.1: 1106 | resolution: {integrity: sha512-O7Xe5dLaqvY/aF/MFWArsAM1J4j7w1CSZlPCX9uHgmb+6SbkPd8Q4YOvfvH/cZGvFlJFfHOZKxQtmMUOoZhc/w==} 1107 | dev: true 1108 | optional: true 1109 | 1110 | /dayjs/1.10.7: 1111 | resolution: {integrity: sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==} 1112 | dev: false 1113 | 1114 | /debug/2.6.9: 1115 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1116 | dependencies: 1117 | ms: 2.0.0 1118 | dev: true 1119 | 1120 | /debug/3.2.7: 1121 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1122 | dependencies: 1123 | ms: 2.1.2 1124 | dev: true 1125 | 1126 | /debug/4.3.2: 1127 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} 1128 | engines: {node: '>=6.0'} 1129 | peerDependencies: 1130 | supports-color: '*' 1131 | peerDependenciesMeta: 1132 | supports-color: 1133 | optional: true 1134 | dependencies: 1135 | ms: 2.1.2 1136 | dev: true 1137 | 1138 | /deep-is/0.1.4: 1139 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1140 | dev: true 1141 | 1142 | /define-properties/1.1.3: 1143 | resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} 1144 | engines: {node: '>= 0.4'} 1145 | dependencies: 1146 | object-keys: 1.1.1 1147 | dev: true 1148 | 1149 | /delayed-stream/1.0.0: 1150 | resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} 1151 | engines: {node: '>=0.4.0'} 1152 | dev: false 1153 | 1154 | /dicer/0.3.0: 1155 | resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} 1156 | engines: {node: '>=4.5.0'} 1157 | dependencies: 1158 | streamsearch: 0.1.2 1159 | dev: true 1160 | 1161 | /diff/4.0.2: 1162 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 1163 | engines: {node: '>=0.3.1'} 1164 | dev: true 1165 | 1166 | /dir-glob/3.0.1: 1167 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1168 | engines: {node: '>=8'} 1169 | dependencies: 1170 | path-type: 4.0.0 1171 | dev: true 1172 | 1173 | /discord-api-types/0.18.1: 1174 | resolution: {integrity: sha512-hNC38R9ZF4uaujaZQtQfm5CdQO58uhdkoHQAVvMfIL0LgOSZeW575W8H6upngQOuoxWd8tiRII3LLJm9zuQKYg==} 1175 | engines: {node: '>=12'} 1176 | deprecated: No longer supported. Install the latest release (0.20.2) 1177 | dev: false 1178 | 1179 | /discord-api-types/0.24.0: 1180 | resolution: {integrity: sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==} 1181 | engines: {node: '>=12'} 1182 | dev: false 1183 | 1184 | /discord.js/13.3.0: 1185 | resolution: {integrity: sha512-kZcDVrQRTuzjRx99/Xl9HF1Kt7xNkiN4Gwvk1hNmLRAn+7Syzw9XTkQZdOPXLpijhbTNsZcdAaMxgvTmtyNdyA==} 1186 | engines: {node: '>=16.6.0', npm: '>=7.0.0'} 1187 | dependencies: 1188 | '@discordjs/builders': 0.8.2 1189 | '@discordjs/collection': 0.3.2 1190 | '@discordjs/form-data': 3.0.1 1191 | '@sapphire/async-queue': 1.1.8 1192 | '@types/node-fetch': 2.5.12 1193 | '@types/ws': 8.2.0 1194 | discord-api-types: 0.24.0 1195 | node-fetch: 2.6.5 1196 | ws: 8.2.3 1197 | transitivePeerDependencies: 1198 | - bufferutil 1199 | - utf-8-validate 1200 | dev: false 1201 | 1202 | /doctrine/2.1.0: 1203 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 1204 | engines: {node: '>=0.10.0'} 1205 | dependencies: 1206 | esutils: 2.0.3 1207 | dev: true 1208 | 1209 | /doctrine/3.0.0: 1210 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1211 | engines: {node: '>=6.0.0'} 1212 | dependencies: 1213 | esutils: 2.0.3 1214 | dev: true 1215 | 1216 | /dot-prop/5.3.0: 1217 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 1218 | engines: {node: '>=8'} 1219 | dependencies: 1220 | is-obj: 2.0.0 1221 | dev: true 1222 | optional: true 1223 | 1224 | /dot-prop/6.0.1: 1225 | resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} 1226 | engines: {node: '>=10'} 1227 | dependencies: 1228 | is-obj: 2.0.0 1229 | dev: false 1230 | 1231 | /dotenv/10.0.0: 1232 | resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} 1233 | engines: {node: '>=10'} 1234 | dev: false 1235 | 1236 | /duplexify/4.1.2: 1237 | resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} 1238 | dependencies: 1239 | end-of-stream: 1.4.4 1240 | inherits: 2.0.4 1241 | readable-stream: 3.6.0 1242 | stream-shift: 1.0.1 1243 | dev: true 1244 | optional: true 1245 | 1246 | /ecdsa-sig-formatter/1.0.11: 1247 | resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} 1248 | dependencies: 1249 | safe-buffer: 5.2.1 1250 | dev: true 1251 | 1252 | /electron-to-chromium/1.3.887: 1253 | resolution: {integrity: sha512-QQUumrEjFDKSVYVdaeBmFdyQGoaV+fCSMyWHvfx/u22bRHSTeBQYt6P4jMY+gFd4kgKB9nqk7RMtWkDB49OYPA==} 1254 | dev: true 1255 | 1256 | /emoji-regex/8.0.0: 1257 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1258 | dev: true 1259 | optional: true 1260 | 1261 | /end-of-stream/1.4.4: 1262 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 1263 | dependencies: 1264 | once: 1.4.0 1265 | dev: true 1266 | optional: true 1267 | 1268 | /enhanced-resolve/5.8.3: 1269 | resolution: {integrity: sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==} 1270 | engines: {node: '>=10.13.0'} 1271 | dependencies: 1272 | graceful-fs: 4.2.8 1273 | tapable: 2.2.1 1274 | dev: true 1275 | 1276 | /enquirer/2.3.6: 1277 | resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} 1278 | engines: {node: '>=8.6'} 1279 | dependencies: 1280 | ansi-colors: 4.1.1 1281 | dev: true 1282 | 1283 | /ent/2.2.0: 1284 | resolution: {integrity: sha1-6WQhkyWiHQX0RGai9obtbOX13R0=} 1285 | dev: true 1286 | optional: true 1287 | 1288 | /envinfo/7.8.1: 1289 | resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} 1290 | engines: {node: '>=4'} 1291 | hasBin: true 1292 | dev: true 1293 | 1294 | /es-abstract/1.19.1: 1295 | resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} 1296 | engines: {node: '>= 0.4'} 1297 | dependencies: 1298 | call-bind: 1.0.2 1299 | es-to-primitive: 1.2.1 1300 | function-bind: 1.1.1 1301 | get-intrinsic: 1.1.1 1302 | get-symbol-description: 1.0.0 1303 | has: 1.0.3 1304 | has-symbols: 1.0.2 1305 | internal-slot: 1.0.3 1306 | is-callable: 1.2.4 1307 | is-negative-zero: 2.0.1 1308 | is-regex: 1.1.4 1309 | is-shared-array-buffer: 1.0.1 1310 | is-string: 1.0.7 1311 | is-weakref: 1.0.1 1312 | object-inspect: 1.11.0 1313 | object-keys: 1.1.1 1314 | object.assign: 4.1.2 1315 | string.prototype.trimend: 1.0.4 1316 | string.prototype.trimstart: 1.0.4 1317 | unbox-primitive: 1.0.1 1318 | dev: true 1319 | 1320 | /es-module-lexer/0.9.3: 1321 | resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} 1322 | dev: true 1323 | 1324 | /es-to-primitive/1.2.1: 1325 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1326 | engines: {node: '>= 0.4'} 1327 | dependencies: 1328 | is-callable: 1.2.4 1329 | is-date-object: 1.0.5 1330 | is-symbol: 1.0.4 1331 | dev: true 1332 | 1333 | /escalade/3.1.1: 1334 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1335 | engines: {node: '>=6'} 1336 | dev: true 1337 | 1338 | /escape-string-regexp/4.0.0: 1339 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1340 | engines: {node: '>=10'} 1341 | dev: true 1342 | 1343 | /eslint-config-prettier/8.3.0_eslint@8.1.0: 1344 | resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} 1345 | hasBin: true 1346 | peerDependencies: 1347 | eslint: '>=7.0.0' 1348 | dependencies: 1349 | eslint: 8.1.0 1350 | dev: true 1351 | 1352 | /eslint-import-resolver-node/0.3.6: 1353 | resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} 1354 | dependencies: 1355 | debug: 3.2.7 1356 | resolve: 1.20.0 1357 | dev: true 1358 | 1359 | /eslint-import-resolver-typescript/2.5.0_f3fc3a8f1727ab01eb417b5ed5016c22: 1360 | resolution: {integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==} 1361 | engines: {node: '>=4'} 1362 | peerDependencies: 1363 | eslint: '*' 1364 | eslint-plugin-import: '*' 1365 | dependencies: 1366 | debug: 4.3.2 1367 | eslint: 8.1.0 1368 | eslint-plugin-import: 2.25.2_eslint@8.1.0 1369 | glob: 7.2.0 1370 | is-glob: 4.0.3 1371 | resolve: 1.20.0 1372 | tsconfig-paths: 3.11.0 1373 | transitivePeerDependencies: 1374 | - supports-color 1375 | dev: true 1376 | 1377 | /eslint-module-utils/2.7.1: 1378 | resolution: {integrity: sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==} 1379 | engines: {node: '>=4'} 1380 | dependencies: 1381 | debug: 3.2.7 1382 | find-up: 2.1.0 1383 | pkg-dir: 2.0.0 1384 | dev: true 1385 | 1386 | /eslint-plugin-import/2.25.2_eslint@8.1.0: 1387 | resolution: {integrity: sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==} 1388 | engines: {node: '>=4'} 1389 | peerDependencies: 1390 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1391 | dependencies: 1392 | array-includes: 3.1.4 1393 | array.prototype.flat: 1.2.5 1394 | debug: 2.6.9 1395 | doctrine: 2.1.0 1396 | eslint: 8.1.0 1397 | eslint-import-resolver-node: 0.3.6 1398 | eslint-module-utils: 2.7.1 1399 | has: 1.0.3 1400 | is-core-module: 2.8.0 1401 | is-glob: 4.0.3 1402 | minimatch: 3.0.4 1403 | object.values: 1.1.5 1404 | resolve: 1.20.0 1405 | tsconfig-paths: 3.11.0 1406 | dev: true 1407 | 1408 | /eslint-plugin-prettier/4.0.0_850528f9ec3c0797b9b19a94a36b5ba3: 1409 | resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} 1410 | engines: {node: '>=6.0.0'} 1411 | peerDependencies: 1412 | eslint: '>=7.28.0' 1413 | eslint-config-prettier: '*' 1414 | prettier: '>=2.0.0' 1415 | peerDependenciesMeta: 1416 | eslint-config-prettier: 1417 | optional: true 1418 | dependencies: 1419 | eslint: 8.1.0 1420 | eslint-config-prettier: 8.3.0_eslint@8.1.0 1421 | prettier: 2.4.1 1422 | prettier-linter-helpers: 1.0.0 1423 | dev: true 1424 | 1425 | /eslint-scope/5.1.1: 1426 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1427 | engines: {node: '>=8.0.0'} 1428 | dependencies: 1429 | esrecurse: 4.3.0 1430 | estraverse: 4.3.0 1431 | dev: true 1432 | 1433 | /eslint-scope/6.0.0: 1434 | resolution: {integrity: sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==} 1435 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1436 | dependencies: 1437 | esrecurse: 4.3.0 1438 | estraverse: 5.3.0 1439 | dev: true 1440 | 1441 | /eslint-utils/3.0.0_eslint@8.1.0: 1442 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 1443 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 1444 | peerDependencies: 1445 | eslint: '>=5' 1446 | dependencies: 1447 | eslint: 8.1.0 1448 | eslint-visitor-keys: 2.1.0 1449 | dev: true 1450 | 1451 | /eslint-visitor-keys/2.1.0: 1452 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1453 | engines: {node: '>=10'} 1454 | dev: true 1455 | 1456 | /eslint-visitor-keys/3.0.0: 1457 | resolution: {integrity: sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==} 1458 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1459 | dev: true 1460 | 1461 | /eslint/8.1.0: 1462 | resolution: {integrity: sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==} 1463 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1464 | hasBin: true 1465 | dependencies: 1466 | '@eslint/eslintrc': 1.0.3 1467 | '@humanwhocodes/config-array': 0.6.0 1468 | ajv: 6.12.6 1469 | chalk: 4.1.2 1470 | cross-spawn: 7.0.3 1471 | debug: 4.3.2 1472 | doctrine: 3.0.0 1473 | enquirer: 2.3.6 1474 | escape-string-regexp: 4.0.0 1475 | eslint-scope: 6.0.0 1476 | eslint-utils: 3.0.0_eslint@8.1.0 1477 | eslint-visitor-keys: 3.0.0 1478 | espree: 9.0.0 1479 | esquery: 1.4.0 1480 | esutils: 2.0.3 1481 | fast-deep-equal: 3.1.3 1482 | file-entry-cache: 6.0.1 1483 | functional-red-black-tree: 1.0.1 1484 | glob-parent: 6.0.2 1485 | globals: 13.12.0 1486 | ignore: 4.0.6 1487 | import-fresh: 3.3.0 1488 | imurmurhash: 0.1.4 1489 | is-glob: 4.0.3 1490 | js-yaml: 4.1.0 1491 | json-stable-stringify-without-jsonify: 1.0.1 1492 | levn: 0.4.1 1493 | lodash.merge: 4.6.2 1494 | minimatch: 3.0.4 1495 | natural-compare: 1.4.0 1496 | optionator: 0.9.1 1497 | progress: 2.0.3 1498 | regexpp: 3.2.0 1499 | semver: 7.3.5 1500 | strip-ansi: 6.0.1 1501 | strip-json-comments: 3.1.1 1502 | text-table: 0.2.0 1503 | v8-compile-cache: 2.3.0 1504 | transitivePeerDependencies: 1505 | - supports-color 1506 | dev: true 1507 | 1508 | /espree/9.0.0: 1509 | resolution: {integrity: sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==} 1510 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1511 | dependencies: 1512 | acorn: 8.5.0 1513 | acorn-jsx: 5.3.2_acorn@8.5.0 1514 | eslint-visitor-keys: 3.0.0 1515 | dev: true 1516 | 1517 | /esprima/4.0.1: 1518 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1519 | engines: {node: '>=4'} 1520 | hasBin: true 1521 | dev: true 1522 | 1523 | /esquery/1.4.0: 1524 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 1525 | engines: {node: '>=0.10'} 1526 | dependencies: 1527 | estraverse: 5.3.0 1528 | dev: true 1529 | 1530 | /esrecurse/4.3.0: 1531 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1532 | engines: {node: '>=4.0'} 1533 | dependencies: 1534 | estraverse: 5.3.0 1535 | dev: true 1536 | 1537 | /estraverse/4.3.0: 1538 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1539 | engines: {node: '>=4.0'} 1540 | dev: true 1541 | 1542 | /estraverse/5.3.0: 1543 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1544 | engines: {node: '>=4.0'} 1545 | dev: true 1546 | 1547 | /esutils/2.0.3: 1548 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1549 | engines: {node: '>=0.10.0'} 1550 | dev: true 1551 | 1552 | /event-target-shim/5.0.1: 1553 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 1554 | engines: {node: '>=6'} 1555 | 1556 | /events/3.3.0: 1557 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 1558 | engines: {node: '>=0.8.x'} 1559 | dev: true 1560 | 1561 | /execa/5.1.1: 1562 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1563 | engines: {node: '>=10'} 1564 | dependencies: 1565 | cross-spawn: 7.0.3 1566 | get-stream: 6.0.1 1567 | human-signals: 2.1.0 1568 | is-stream: 2.0.1 1569 | merge-stream: 2.0.0 1570 | npm-run-path: 4.0.1 1571 | onetime: 5.1.2 1572 | signal-exit: 3.0.5 1573 | strip-final-newline: 2.0.0 1574 | dev: true 1575 | 1576 | /extend/3.0.2: 1577 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 1578 | dev: true 1579 | optional: true 1580 | 1581 | /fast-deep-equal/3.1.3: 1582 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1583 | dev: true 1584 | 1585 | /fast-diff/1.2.0: 1586 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 1587 | dev: true 1588 | 1589 | /fast-glob/3.2.7: 1590 | resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} 1591 | engines: {node: '>=8'} 1592 | dependencies: 1593 | '@nodelib/fs.stat': 2.0.5 1594 | '@nodelib/fs.walk': 1.2.8 1595 | glob-parent: 5.1.2 1596 | merge2: 1.4.1 1597 | micromatch: 4.0.4 1598 | dev: true 1599 | 1600 | /fast-json-stable-stringify/2.1.0: 1601 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1602 | dev: true 1603 | 1604 | /fast-levenshtein/2.0.6: 1605 | resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} 1606 | dev: true 1607 | 1608 | /fast-text-encoding/1.0.3: 1609 | resolution: {integrity: sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==} 1610 | dev: true 1611 | optional: true 1612 | 1613 | /fastest-levenshtein/1.0.12: 1614 | resolution: {integrity: sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==} 1615 | dev: true 1616 | 1617 | /fastq/1.13.0: 1618 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 1619 | dependencies: 1620 | reusify: 1.0.4 1621 | dev: true 1622 | 1623 | /faye-websocket/0.11.4: 1624 | resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} 1625 | engines: {node: '>=0.8.0'} 1626 | dependencies: 1627 | websocket-driver: 0.7.4 1628 | dev: true 1629 | 1630 | /file-entry-cache/6.0.1: 1631 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1632 | engines: {node: ^10.12.0 || >=12.0.0} 1633 | dependencies: 1634 | flat-cache: 3.0.4 1635 | dev: true 1636 | 1637 | /fill-range/7.0.1: 1638 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1639 | engines: {node: '>=8'} 1640 | dependencies: 1641 | to-regex-range: 5.0.1 1642 | dev: true 1643 | 1644 | /find-up/2.1.0: 1645 | resolution: {integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=} 1646 | engines: {node: '>=4'} 1647 | dependencies: 1648 | locate-path: 2.0.0 1649 | dev: true 1650 | 1651 | /find-up/4.1.0: 1652 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1653 | engines: {node: '>=8'} 1654 | dependencies: 1655 | locate-path: 5.0.0 1656 | path-exists: 4.0.0 1657 | dev: true 1658 | 1659 | /firebase-admin/10.0.0: 1660 | resolution: {integrity: sha512-EOAk5ZaqXhBBvx9ZyXd28kw8glMTt3xl0g3BepGRCy0RSSUPGOzfAqjGhc65guSKgFOpT5mAUycYcJbqullKUQ==} 1661 | engines: {node: '>=12.7.0'} 1662 | dependencies: 1663 | '@firebase/database-compat': 0.1.3 1664 | '@firebase/database-types': 0.7.3 1665 | '@types/node': 16.11.6 1666 | dicer: 0.3.0 1667 | jsonwebtoken: 8.5.1 1668 | jwks-rsa: 2.0.5 1669 | node-forge: 0.10.0 1670 | optionalDependencies: 1671 | '@google-cloud/firestore': 4.15.1 1672 | '@google-cloud/storage': 5.15.5 1673 | transitivePeerDependencies: 1674 | - '@firebase/app-compat' 1675 | - '@firebase/app-types' 1676 | - supports-color 1677 | dev: true 1678 | 1679 | /flat-cache/3.0.4: 1680 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1681 | engines: {node: ^10.12.0 || >=12.0.0} 1682 | dependencies: 1683 | flatted: 3.2.2 1684 | rimraf: 3.0.2 1685 | dev: true 1686 | 1687 | /flatted/3.2.2: 1688 | resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} 1689 | dev: true 1690 | 1691 | /form-data/3.0.1: 1692 | resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} 1693 | engines: {node: '>= 6'} 1694 | dependencies: 1695 | asynckit: 0.4.0 1696 | combined-stream: 1.0.8 1697 | mime-types: 2.1.33 1698 | dev: false 1699 | 1700 | /form-data/4.0.0: 1701 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1702 | engines: {node: '>= 6'} 1703 | dependencies: 1704 | asynckit: 0.4.0 1705 | combined-stream: 1.0.8 1706 | mime-types: 2.1.33 1707 | dev: false 1708 | 1709 | /fs.realpath/1.0.0: 1710 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 1711 | dev: true 1712 | 1713 | /function-bind/1.1.1: 1714 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1715 | dev: true 1716 | 1717 | /functional-red-black-tree/1.0.1: 1718 | resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} 1719 | dev: true 1720 | 1721 | /gaxios/4.3.2: 1722 | resolution: {integrity: sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==} 1723 | engines: {node: '>=10'} 1724 | dependencies: 1725 | abort-controller: 3.0.0 1726 | extend: 3.0.2 1727 | https-proxy-agent: 5.0.0 1728 | is-stream: 2.0.1 1729 | node-fetch: 2.6.6 1730 | transitivePeerDependencies: 1731 | - supports-color 1732 | dev: true 1733 | optional: true 1734 | 1735 | /gcp-metadata/4.3.1: 1736 | resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} 1737 | engines: {node: '>=10'} 1738 | dependencies: 1739 | gaxios: 4.3.2 1740 | json-bigint: 1.0.0 1741 | transitivePeerDependencies: 1742 | - supports-color 1743 | dev: true 1744 | optional: true 1745 | 1746 | /gcs-resumable-upload/3.5.1: 1747 | resolution: {integrity: sha512-yq8h+z2zx9pUUdho07ORfNkrzlXNZTXi1fnqf0K1oh8VwleQjRq/2zgkN88MYDpXlaykvzvqbWJGq/78nufuJg==} 1748 | engines: {node: '>=10'} 1749 | hasBin: true 1750 | dependencies: 1751 | abort-controller: 3.0.0 1752 | async-retry: 1.3.3 1753 | configstore: 5.0.1 1754 | extend: 3.0.2 1755 | gaxios: 4.3.2 1756 | google-auth-library: 7.10.2 1757 | pumpify: 2.0.1 1758 | stream-events: 1.0.5 1759 | transitivePeerDependencies: 1760 | - supports-color 1761 | dev: true 1762 | optional: true 1763 | 1764 | /get-caller-file/2.0.5: 1765 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1766 | engines: {node: 6.* || 8.* || >= 10.*} 1767 | dev: true 1768 | optional: true 1769 | 1770 | /get-intrinsic/1.1.1: 1771 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} 1772 | dependencies: 1773 | function-bind: 1.1.1 1774 | has: 1.0.3 1775 | has-symbols: 1.0.2 1776 | dev: true 1777 | 1778 | /get-stream/6.0.1: 1779 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1780 | engines: {node: '>=10'} 1781 | dev: true 1782 | 1783 | /get-symbol-description/1.0.0: 1784 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1785 | engines: {node: '>= 0.4'} 1786 | dependencies: 1787 | call-bind: 1.0.2 1788 | get-intrinsic: 1.1.1 1789 | dev: true 1790 | 1791 | /glob-parent/5.1.2: 1792 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1793 | engines: {node: '>= 6'} 1794 | dependencies: 1795 | is-glob: 4.0.3 1796 | dev: true 1797 | 1798 | /glob-parent/6.0.2: 1799 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1800 | engines: {node: '>=10.13.0'} 1801 | dependencies: 1802 | is-glob: 4.0.3 1803 | dev: true 1804 | 1805 | /glob-to-regexp/0.4.1: 1806 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1807 | dev: true 1808 | 1809 | /glob/7.2.0: 1810 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1811 | dependencies: 1812 | fs.realpath: 1.0.0 1813 | inflight: 1.0.6 1814 | inherits: 2.0.4 1815 | minimatch: 3.0.4 1816 | once: 1.4.0 1817 | path-is-absolute: 1.0.1 1818 | dev: true 1819 | 1820 | /globals/13.12.0: 1821 | resolution: {integrity: sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==} 1822 | engines: {node: '>=8'} 1823 | dependencies: 1824 | type-fest: 0.20.2 1825 | dev: true 1826 | 1827 | /globby/11.0.4: 1828 | resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} 1829 | engines: {node: '>=10'} 1830 | dependencies: 1831 | array-union: 2.1.0 1832 | dir-glob: 3.0.1 1833 | fast-glob: 3.2.7 1834 | ignore: 5.1.8 1835 | merge2: 1.4.1 1836 | slash: 3.0.0 1837 | dev: true 1838 | 1839 | /google-auth-library/7.10.2: 1840 | resolution: {integrity: sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==} 1841 | engines: {node: '>=10'} 1842 | dependencies: 1843 | arrify: 2.0.1 1844 | base64-js: 1.5.1 1845 | ecdsa-sig-formatter: 1.0.11 1846 | fast-text-encoding: 1.0.3 1847 | gaxios: 4.3.2 1848 | gcp-metadata: 4.3.1 1849 | gtoken: 5.3.1 1850 | jws: 4.0.0 1851 | lru-cache: 6.0.0 1852 | transitivePeerDependencies: 1853 | - supports-color 1854 | dev: true 1855 | optional: true 1856 | 1857 | /google-gax/2.28.0: 1858 | resolution: {integrity: sha512-kuqc8a4+CTCMBcF3tlOL7Sa74JWkTzcZxatAQTCVK35WToXkHnJ0qncFOJuegUv3EbV9IQY4j/+NZdFLv+lbTA==} 1859 | engines: {node: '>=10'} 1860 | hasBin: true 1861 | dependencies: 1862 | '@grpc/grpc-js': 1.4.3 1863 | '@grpc/proto-loader': 0.6.6 1864 | '@types/long': 4.0.1 1865 | abort-controller: 3.0.0 1866 | duplexify: 4.1.2 1867 | fast-text-encoding: 1.0.3 1868 | google-auth-library: 7.10.2 1869 | is-stream-ended: 0.1.4 1870 | node-fetch: 2.6.6 1871 | object-hash: 2.2.0 1872 | proto3-json-serializer: 0.1.5 1873 | protobufjs: 6.11.2 1874 | retry-request: 4.2.2 1875 | transitivePeerDependencies: 1876 | - supports-color 1877 | dev: true 1878 | optional: true 1879 | 1880 | /google-p12-pem/3.1.2: 1881 | resolution: {integrity: sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==} 1882 | engines: {node: '>=10'} 1883 | hasBin: true 1884 | dependencies: 1885 | node-forge: 0.10.0 1886 | dev: true 1887 | optional: true 1888 | 1889 | /graceful-fs/4.2.8: 1890 | resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} 1891 | dev: true 1892 | 1893 | /gtoken/5.3.1: 1894 | resolution: {integrity: sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==} 1895 | engines: {node: '>=10'} 1896 | dependencies: 1897 | gaxios: 4.3.2 1898 | google-p12-pem: 3.1.2 1899 | jws: 4.0.0 1900 | transitivePeerDependencies: 1901 | - supports-color 1902 | dev: true 1903 | optional: true 1904 | 1905 | /has-bigints/1.0.1: 1906 | resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} 1907 | dev: true 1908 | 1909 | /has-flag/4.0.0: 1910 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1911 | engines: {node: '>=8'} 1912 | dev: true 1913 | 1914 | /has-symbols/1.0.2: 1915 | resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} 1916 | engines: {node: '>= 0.4'} 1917 | dev: true 1918 | 1919 | /has-tostringtag/1.0.0: 1920 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1921 | engines: {node: '>= 0.4'} 1922 | dependencies: 1923 | has-symbols: 1.0.2 1924 | dev: true 1925 | 1926 | /has/1.0.3: 1927 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1928 | engines: {node: '>= 0.4.0'} 1929 | dependencies: 1930 | function-bind: 1.1.1 1931 | dev: true 1932 | 1933 | /hash-stream-validation/0.2.4: 1934 | resolution: {integrity: sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==} 1935 | dev: true 1936 | optional: true 1937 | 1938 | /http-parser-js/0.5.3: 1939 | resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==} 1940 | dev: true 1941 | 1942 | /http-proxy-agent/5.0.0: 1943 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} 1944 | engines: {node: '>= 6'} 1945 | dependencies: 1946 | '@tootallnate/once': 2.0.0 1947 | agent-base: 6.0.2 1948 | debug: 4.3.2 1949 | transitivePeerDependencies: 1950 | - supports-color 1951 | dev: true 1952 | optional: true 1953 | 1954 | /https-proxy-agent/5.0.0: 1955 | resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} 1956 | engines: {node: '>= 6'} 1957 | dependencies: 1958 | agent-base: 6.0.2 1959 | debug: 4.3.2 1960 | transitivePeerDependencies: 1961 | - supports-color 1962 | dev: true 1963 | optional: true 1964 | 1965 | /human-signals/2.1.0: 1966 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1967 | engines: {node: '>=10.17.0'} 1968 | dev: true 1969 | 1970 | /ignore/4.0.6: 1971 | resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} 1972 | engines: {node: '>= 4'} 1973 | dev: true 1974 | 1975 | /ignore/5.1.8: 1976 | resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} 1977 | engines: {node: '>= 4'} 1978 | dev: true 1979 | 1980 | /import-fresh/3.3.0: 1981 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1982 | engines: {node: '>=6'} 1983 | dependencies: 1984 | parent-module: 1.0.1 1985 | resolve-from: 4.0.0 1986 | dev: true 1987 | 1988 | /import-local/3.0.3: 1989 | resolution: {integrity: sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==} 1990 | engines: {node: '>=8'} 1991 | hasBin: true 1992 | dependencies: 1993 | pkg-dir: 4.2.0 1994 | resolve-cwd: 3.0.0 1995 | dev: true 1996 | 1997 | /imurmurhash/0.1.4: 1998 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 1999 | engines: {node: '>=0.8.19'} 2000 | dev: true 2001 | 2002 | /inflight/1.0.6: 2003 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 2004 | dependencies: 2005 | once: 1.4.0 2006 | wrappy: 1.0.2 2007 | dev: true 2008 | 2009 | /inherits/2.0.4: 2010 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2011 | dev: true 2012 | 2013 | /internal-slot/1.0.3: 2014 | resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} 2015 | engines: {node: '>= 0.4'} 2016 | dependencies: 2017 | get-intrinsic: 1.1.1 2018 | has: 1.0.3 2019 | side-channel: 1.0.4 2020 | dev: true 2021 | 2022 | /interpret/2.2.0: 2023 | resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} 2024 | engines: {node: '>= 0.10'} 2025 | dev: true 2026 | 2027 | /is-bigint/1.0.4: 2028 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 2029 | dependencies: 2030 | has-bigints: 1.0.1 2031 | dev: true 2032 | 2033 | /is-boolean-object/1.1.2: 2034 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 2035 | engines: {node: '>= 0.4'} 2036 | dependencies: 2037 | call-bind: 1.0.2 2038 | has-tostringtag: 1.0.0 2039 | dev: true 2040 | 2041 | /is-callable/1.2.4: 2042 | resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} 2043 | engines: {node: '>= 0.4'} 2044 | dev: true 2045 | 2046 | /is-core-module/2.8.0: 2047 | resolution: {integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==} 2048 | dependencies: 2049 | has: 1.0.3 2050 | dev: true 2051 | 2052 | /is-date-object/1.0.5: 2053 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 2054 | engines: {node: '>= 0.4'} 2055 | dependencies: 2056 | has-tostringtag: 1.0.0 2057 | dev: true 2058 | 2059 | /is-extglob/2.1.1: 2060 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 2061 | engines: {node: '>=0.10.0'} 2062 | dev: true 2063 | 2064 | /is-fullwidth-code-point/3.0.0: 2065 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2066 | engines: {node: '>=8'} 2067 | dev: true 2068 | optional: true 2069 | 2070 | /is-glob/4.0.3: 2071 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2072 | engines: {node: '>=0.10.0'} 2073 | dependencies: 2074 | is-extglob: 2.1.1 2075 | dev: true 2076 | 2077 | /is-negative-zero/2.0.1: 2078 | resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} 2079 | engines: {node: '>= 0.4'} 2080 | dev: true 2081 | 2082 | /is-number-object/1.0.6: 2083 | resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==} 2084 | engines: {node: '>= 0.4'} 2085 | dependencies: 2086 | has-tostringtag: 1.0.0 2087 | dev: true 2088 | 2089 | /is-number/7.0.0: 2090 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2091 | engines: {node: '>=0.12.0'} 2092 | dev: true 2093 | 2094 | /is-obj/2.0.0: 2095 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 2096 | engines: {node: '>=8'} 2097 | 2098 | /is-plain-object/2.0.4: 2099 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 2100 | engines: {node: '>=0.10.0'} 2101 | dependencies: 2102 | isobject: 3.0.1 2103 | dev: true 2104 | 2105 | /is-regex/1.1.4: 2106 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 2107 | engines: {node: '>= 0.4'} 2108 | dependencies: 2109 | call-bind: 1.0.2 2110 | has-tostringtag: 1.0.0 2111 | dev: true 2112 | 2113 | /is-shared-array-buffer/1.0.1: 2114 | resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} 2115 | dev: true 2116 | 2117 | /is-stream-ended/0.1.4: 2118 | resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} 2119 | dev: true 2120 | optional: true 2121 | 2122 | /is-stream/2.0.1: 2123 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 2124 | engines: {node: '>=8'} 2125 | dev: true 2126 | 2127 | /is-string/1.0.7: 2128 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 2129 | engines: {node: '>= 0.4'} 2130 | dependencies: 2131 | has-tostringtag: 1.0.0 2132 | dev: true 2133 | 2134 | /is-symbol/1.0.4: 2135 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 2136 | engines: {node: '>= 0.4'} 2137 | dependencies: 2138 | has-symbols: 1.0.2 2139 | dev: true 2140 | 2141 | /is-typedarray/1.0.0: 2142 | resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} 2143 | dev: true 2144 | optional: true 2145 | 2146 | /is-weakref/1.0.1: 2147 | resolution: {integrity: sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==} 2148 | dependencies: 2149 | call-bind: 1.0.2 2150 | dev: true 2151 | 2152 | /isexe/2.0.0: 2153 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 2154 | dev: true 2155 | 2156 | /isobject/3.0.1: 2157 | resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} 2158 | engines: {node: '>=0.10.0'} 2159 | dev: true 2160 | 2161 | /jest-worker/27.3.1: 2162 | resolution: {integrity: sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==} 2163 | engines: {node: '>= 10.13.0'} 2164 | dependencies: 2165 | '@types/node': 16.11.6 2166 | merge-stream: 2.0.0 2167 | supports-color: 8.1.1 2168 | dev: true 2169 | 2170 | /jose/2.0.5: 2171 | resolution: {integrity: sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==} 2172 | engines: {node: '>=10.13.0 < 13 || >=13.7.0'} 2173 | dependencies: 2174 | '@panva/asn1.js': 1.0.0 2175 | dev: true 2176 | 2177 | /js-yaml/3.14.1: 2178 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 2179 | hasBin: true 2180 | dependencies: 2181 | argparse: 1.0.10 2182 | esprima: 4.0.1 2183 | dev: true 2184 | 2185 | /js-yaml/4.1.0: 2186 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2187 | hasBin: true 2188 | dependencies: 2189 | argparse: 2.0.1 2190 | dev: true 2191 | 2192 | /json-bigint/1.0.0: 2193 | resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} 2194 | dependencies: 2195 | bignumber.js: 9.0.1 2196 | dev: true 2197 | optional: true 2198 | 2199 | /json-parse-better-errors/1.0.2: 2200 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 2201 | dev: true 2202 | 2203 | /json-schema-traverse/0.4.1: 2204 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2205 | dev: true 2206 | 2207 | /json-stable-stringify-without-jsonify/1.0.1: 2208 | resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} 2209 | dev: true 2210 | 2211 | /json5/1.0.1: 2212 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} 2213 | hasBin: true 2214 | dependencies: 2215 | minimist: 1.2.5 2216 | dev: true 2217 | 2218 | /jsonwebtoken/8.5.1: 2219 | resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} 2220 | engines: {node: '>=4', npm: '>=1.4.28'} 2221 | dependencies: 2222 | jws: 3.2.2 2223 | lodash.includes: 4.3.0 2224 | lodash.isboolean: 3.0.3 2225 | lodash.isinteger: 4.0.4 2226 | lodash.isnumber: 3.0.3 2227 | lodash.isplainobject: 4.0.6 2228 | lodash.isstring: 4.0.1 2229 | lodash.once: 4.1.1 2230 | ms: 2.1.3 2231 | semver: 5.7.1 2232 | dev: true 2233 | 2234 | /jwa/1.4.1: 2235 | resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} 2236 | dependencies: 2237 | buffer-equal-constant-time: 1.0.1 2238 | ecdsa-sig-formatter: 1.0.11 2239 | safe-buffer: 5.2.1 2240 | dev: true 2241 | 2242 | /jwa/2.0.0: 2243 | resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} 2244 | dependencies: 2245 | buffer-equal-constant-time: 1.0.1 2246 | ecdsa-sig-formatter: 1.0.11 2247 | safe-buffer: 5.2.1 2248 | dev: true 2249 | optional: true 2250 | 2251 | /jwks-rsa/2.0.5: 2252 | resolution: {integrity: sha512-fliHfsiBRzEU0nXzSvwnh0hynzGB0WihF+CinKbSRlaqRxbqqKf2xbBPgwc8mzf18/WgwlG8e5eTpfSTBcU4DQ==} 2253 | engines: {node: '>=10 < 13 || >=14'} 2254 | dependencies: 2255 | '@types/express-jwt': 0.0.42 2256 | debug: 4.3.2 2257 | jose: 2.0.5 2258 | limiter: 1.1.5 2259 | lru-memoizer: 2.1.4 2260 | transitivePeerDependencies: 2261 | - supports-color 2262 | dev: true 2263 | 2264 | /jws/3.2.2: 2265 | resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} 2266 | dependencies: 2267 | jwa: 1.4.1 2268 | safe-buffer: 5.2.1 2269 | dev: true 2270 | 2271 | /jws/4.0.0: 2272 | resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} 2273 | dependencies: 2274 | jwa: 2.0.0 2275 | safe-buffer: 5.2.1 2276 | dev: true 2277 | optional: true 2278 | 2279 | /kind-of/6.0.3: 2280 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 2281 | engines: {node: '>=0.10.0'} 2282 | dev: true 2283 | 2284 | /levn/0.4.1: 2285 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2286 | engines: {node: '>= 0.8.0'} 2287 | dependencies: 2288 | prelude-ls: 1.2.1 2289 | type-check: 0.4.0 2290 | dev: true 2291 | 2292 | /limiter/1.1.5: 2293 | resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} 2294 | dev: true 2295 | 2296 | /loader-runner/4.2.0: 2297 | resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==} 2298 | engines: {node: '>=6.11.5'} 2299 | dev: true 2300 | 2301 | /locate-path/2.0.0: 2302 | resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} 2303 | engines: {node: '>=4'} 2304 | dependencies: 2305 | p-locate: 2.0.0 2306 | path-exists: 3.0.0 2307 | dev: true 2308 | 2309 | /locate-path/5.0.0: 2310 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2311 | engines: {node: '>=8'} 2312 | dependencies: 2313 | p-locate: 4.1.0 2314 | dev: true 2315 | 2316 | /lodash.camelcase/4.3.0: 2317 | resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} 2318 | dev: true 2319 | optional: true 2320 | 2321 | /lodash.clonedeep/4.5.0: 2322 | resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} 2323 | dev: true 2324 | 2325 | /lodash.includes/4.3.0: 2326 | resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} 2327 | dev: true 2328 | 2329 | /lodash.isboolean/3.0.3: 2330 | resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} 2331 | dev: true 2332 | 2333 | /lodash.isequal/4.5.0: 2334 | resolution: {integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA=} 2335 | dev: false 2336 | 2337 | /lodash.isinteger/4.0.4: 2338 | resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} 2339 | dev: true 2340 | 2341 | /lodash.isnumber/3.0.3: 2342 | resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} 2343 | dev: true 2344 | 2345 | /lodash.isplainobject/4.0.6: 2346 | resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} 2347 | dev: true 2348 | 2349 | /lodash.isstring/4.0.1: 2350 | resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} 2351 | dev: true 2352 | 2353 | /lodash.merge/4.6.2: 2354 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2355 | dev: true 2356 | 2357 | /lodash.once/4.1.1: 2358 | resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} 2359 | dev: true 2360 | 2361 | /long/4.0.0: 2362 | resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} 2363 | dev: true 2364 | optional: true 2365 | 2366 | /lru-cache/4.0.2: 2367 | resolution: {integrity: sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=} 2368 | dependencies: 2369 | pseudomap: 1.0.2 2370 | yallist: 2.1.2 2371 | dev: true 2372 | 2373 | /lru-cache/6.0.0: 2374 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2375 | engines: {node: '>=10'} 2376 | dependencies: 2377 | yallist: 4.0.0 2378 | dev: true 2379 | 2380 | /lru-memoizer/2.1.4: 2381 | resolution: {integrity: sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==} 2382 | dependencies: 2383 | lodash.clonedeep: 4.5.0 2384 | lru-cache: 4.0.2 2385 | dev: true 2386 | 2387 | /make-dir/3.1.0: 2388 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 2389 | engines: {node: '>=8'} 2390 | dependencies: 2391 | semver: 6.3.0 2392 | dev: true 2393 | optional: true 2394 | 2395 | /make-error/1.3.6: 2396 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 2397 | dev: true 2398 | 2399 | /merge-stream/2.0.0: 2400 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2401 | dev: true 2402 | 2403 | /merge2/1.4.1: 2404 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2405 | engines: {node: '>= 8'} 2406 | dev: true 2407 | 2408 | /micromatch/4.0.4: 2409 | resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} 2410 | engines: {node: '>=8.6'} 2411 | dependencies: 2412 | braces: 3.0.2 2413 | picomatch: 2.3.0 2414 | dev: true 2415 | 2416 | /mime-db/1.50.0: 2417 | resolution: {integrity: sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==} 2418 | engines: {node: '>= 0.6'} 2419 | 2420 | /mime-types/2.1.33: 2421 | resolution: {integrity: sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==} 2422 | engines: {node: '>= 0.6'} 2423 | dependencies: 2424 | mime-db: 1.50.0 2425 | 2426 | /mime/3.0.0: 2427 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 2428 | engines: {node: '>=10.0.0'} 2429 | hasBin: true 2430 | dev: true 2431 | optional: true 2432 | 2433 | /mimic-fn/2.1.0: 2434 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 2435 | engines: {node: '>=6'} 2436 | dev: true 2437 | 2438 | /minimatch/3.0.4: 2439 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 2440 | dependencies: 2441 | brace-expansion: 1.1.11 2442 | dev: true 2443 | 2444 | /minimist/1.2.5: 2445 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 2446 | dev: true 2447 | 2448 | /ms/2.0.0: 2449 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} 2450 | dev: true 2451 | 2452 | /ms/2.1.2: 2453 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2454 | dev: true 2455 | 2456 | /ms/2.1.3: 2457 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2458 | dev: true 2459 | 2460 | /natural-compare/1.4.0: 2461 | resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} 2462 | dev: true 2463 | 2464 | /neo-async/2.6.2: 2465 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 2466 | dev: true 2467 | 2468 | /node-fetch/2.6.5: 2469 | resolution: {integrity: sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==} 2470 | engines: {node: 4.x || >=6.0.0} 2471 | dependencies: 2472 | whatwg-url: 5.0.0 2473 | dev: false 2474 | 2475 | /node-fetch/2.6.6: 2476 | resolution: {integrity: sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==} 2477 | engines: {node: 4.x || >=6.0.0} 2478 | dependencies: 2479 | whatwg-url: 5.0.0 2480 | dev: true 2481 | optional: true 2482 | 2483 | /node-forge/0.10.0: 2484 | resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} 2485 | engines: {node: '>= 6.0.0'} 2486 | dev: true 2487 | 2488 | /node-releases/2.0.1: 2489 | resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} 2490 | dev: true 2491 | 2492 | /npm-run-path/4.0.1: 2493 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2494 | engines: {node: '>=8'} 2495 | dependencies: 2496 | path-key: 3.1.1 2497 | dev: true 2498 | 2499 | /object-hash/2.2.0: 2500 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} 2501 | engines: {node: '>= 6'} 2502 | dev: true 2503 | optional: true 2504 | 2505 | /object-inspect/1.11.0: 2506 | resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} 2507 | dev: true 2508 | 2509 | /object-keys/1.1.1: 2510 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2511 | engines: {node: '>= 0.4'} 2512 | dev: true 2513 | 2514 | /object.assign/4.1.2: 2515 | resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} 2516 | engines: {node: '>= 0.4'} 2517 | dependencies: 2518 | call-bind: 1.0.2 2519 | define-properties: 1.1.3 2520 | has-symbols: 1.0.2 2521 | object-keys: 1.1.1 2522 | dev: true 2523 | 2524 | /object.values/1.1.5: 2525 | resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} 2526 | engines: {node: '>= 0.4'} 2527 | dependencies: 2528 | call-bind: 1.0.2 2529 | define-properties: 1.1.3 2530 | es-abstract: 1.19.1 2531 | dev: true 2532 | 2533 | /once/1.4.0: 2534 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 2535 | dependencies: 2536 | wrappy: 1.0.2 2537 | dev: true 2538 | 2539 | /onetime/5.1.2: 2540 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2541 | engines: {node: '>=6'} 2542 | dependencies: 2543 | mimic-fn: 2.1.0 2544 | dev: true 2545 | 2546 | /optionator/0.9.1: 2547 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 2548 | engines: {node: '>= 0.8.0'} 2549 | dependencies: 2550 | deep-is: 0.1.4 2551 | fast-levenshtein: 2.0.6 2552 | levn: 0.4.1 2553 | prelude-ls: 1.2.1 2554 | type-check: 0.4.0 2555 | word-wrap: 1.2.3 2556 | dev: true 2557 | 2558 | /ow/0.27.0: 2559 | resolution: {integrity: sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==} 2560 | engines: {node: '>=12'} 2561 | dependencies: 2562 | '@sindresorhus/is': 4.2.0 2563 | callsites: 3.1.0 2564 | dot-prop: 6.0.1 2565 | lodash.isequal: 4.5.0 2566 | type-fest: 1.4.0 2567 | vali-date: 1.0.0 2568 | dev: false 2569 | 2570 | /p-limit/1.3.0: 2571 | resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} 2572 | engines: {node: '>=4'} 2573 | dependencies: 2574 | p-try: 1.0.0 2575 | dev: true 2576 | 2577 | /p-limit/2.3.0: 2578 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2579 | engines: {node: '>=6'} 2580 | dependencies: 2581 | p-try: 2.2.0 2582 | dev: true 2583 | 2584 | /p-limit/3.1.0: 2585 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2586 | engines: {node: '>=10'} 2587 | dependencies: 2588 | yocto-queue: 0.1.0 2589 | dev: true 2590 | 2591 | /p-locate/2.0.0: 2592 | resolution: {integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=} 2593 | engines: {node: '>=4'} 2594 | dependencies: 2595 | p-limit: 1.3.0 2596 | dev: true 2597 | 2598 | /p-locate/4.1.0: 2599 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2600 | engines: {node: '>=8'} 2601 | dependencies: 2602 | p-limit: 2.3.0 2603 | dev: true 2604 | 2605 | /p-try/1.0.0: 2606 | resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} 2607 | engines: {node: '>=4'} 2608 | dev: true 2609 | 2610 | /p-try/2.2.0: 2611 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2612 | engines: {node: '>=6'} 2613 | dev: true 2614 | 2615 | /parent-module/1.0.1: 2616 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2617 | engines: {node: '>=6'} 2618 | dependencies: 2619 | callsites: 3.1.0 2620 | dev: true 2621 | 2622 | /path-exists/3.0.0: 2623 | resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} 2624 | engines: {node: '>=4'} 2625 | dev: true 2626 | 2627 | /path-exists/4.0.0: 2628 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2629 | engines: {node: '>=8'} 2630 | dev: true 2631 | 2632 | /path-is-absolute/1.0.1: 2633 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 2634 | engines: {node: '>=0.10.0'} 2635 | dev: true 2636 | 2637 | /path-key/3.1.1: 2638 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2639 | engines: {node: '>=8'} 2640 | dev: true 2641 | 2642 | /path-parse/1.0.7: 2643 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2644 | dev: true 2645 | 2646 | /path-type/4.0.0: 2647 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2648 | engines: {node: '>=8'} 2649 | dev: true 2650 | 2651 | /picocolors/1.0.0: 2652 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2653 | dev: true 2654 | 2655 | /picomatch/2.3.0: 2656 | resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} 2657 | engines: {node: '>=8.6'} 2658 | dev: true 2659 | 2660 | /pkg-dir/2.0.0: 2661 | resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=} 2662 | engines: {node: '>=4'} 2663 | dependencies: 2664 | find-up: 2.1.0 2665 | dev: true 2666 | 2667 | /pkg-dir/4.2.0: 2668 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2669 | engines: {node: '>=8'} 2670 | dependencies: 2671 | find-up: 4.1.0 2672 | dev: true 2673 | 2674 | /prelude-ls/1.2.1: 2675 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2676 | engines: {node: '>= 0.8.0'} 2677 | dev: true 2678 | 2679 | /prettier-linter-helpers/1.0.0: 2680 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2681 | engines: {node: '>=6.0.0'} 2682 | dependencies: 2683 | fast-diff: 1.2.0 2684 | dev: true 2685 | 2686 | /prettier/2.4.1: 2687 | resolution: {integrity: sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==} 2688 | engines: {node: '>=10.13.0'} 2689 | hasBin: true 2690 | dev: true 2691 | 2692 | /progress/2.0.3: 2693 | resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} 2694 | engines: {node: '>=0.4.0'} 2695 | dev: true 2696 | 2697 | /proto3-json-serializer/0.1.5: 2698 | resolution: {integrity: sha512-G395jcZkgNXNeS+6FGqd09TsXeoCs9wmBWByDiwFy7Yd7HD8pyfyvf6q+rGh7PhT4AshRpG4NowzoKYUtkNjKg==} 2699 | dev: true 2700 | optional: true 2701 | 2702 | /protobufjs/6.11.2: 2703 | resolution: {integrity: sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==} 2704 | hasBin: true 2705 | requiresBuild: true 2706 | dependencies: 2707 | '@protobufjs/aspromise': 1.1.2 2708 | '@protobufjs/base64': 1.1.2 2709 | '@protobufjs/codegen': 2.0.4 2710 | '@protobufjs/eventemitter': 1.1.0 2711 | '@protobufjs/fetch': 1.1.0 2712 | '@protobufjs/float': 1.0.2 2713 | '@protobufjs/inquire': 1.1.0 2714 | '@protobufjs/path': 1.1.2 2715 | '@protobufjs/pool': 1.1.0 2716 | '@protobufjs/utf8': 1.1.0 2717 | '@types/long': 4.0.1 2718 | '@types/node': 16.11.6 2719 | long: 4.0.0 2720 | dev: true 2721 | optional: true 2722 | 2723 | /pseudomap/1.0.2: 2724 | resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} 2725 | dev: true 2726 | 2727 | /pump/3.0.0: 2728 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 2729 | dependencies: 2730 | end-of-stream: 1.4.4 2731 | once: 1.4.0 2732 | dev: true 2733 | optional: true 2734 | 2735 | /pumpify/2.0.1: 2736 | resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} 2737 | dependencies: 2738 | duplexify: 4.1.2 2739 | inherits: 2.0.4 2740 | pump: 3.0.0 2741 | dev: true 2742 | optional: true 2743 | 2744 | /punycode/2.1.1: 2745 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 2746 | engines: {node: '>=6'} 2747 | dev: true 2748 | 2749 | /queue-microtask/1.2.3: 2750 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2751 | dev: true 2752 | 2753 | /randombytes/2.1.0: 2754 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 2755 | dependencies: 2756 | safe-buffer: 5.2.1 2757 | dev: true 2758 | 2759 | /readable-stream/3.6.0: 2760 | resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} 2761 | engines: {node: '>= 6'} 2762 | dependencies: 2763 | inherits: 2.0.4 2764 | string_decoder: 1.3.0 2765 | util-deprecate: 1.0.2 2766 | dev: true 2767 | optional: true 2768 | 2769 | /rechoir/0.7.1: 2770 | resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} 2771 | engines: {node: '>= 0.10'} 2772 | dependencies: 2773 | resolve: 1.20.0 2774 | dev: true 2775 | 2776 | /regexpp/3.2.0: 2777 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 2778 | engines: {node: '>=8'} 2779 | dev: true 2780 | 2781 | /require-directory/2.1.1: 2782 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} 2783 | engines: {node: '>=0.10.0'} 2784 | dev: true 2785 | optional: true 2786 | 2787 | /resolve-cwd/3.0.0: 2788 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 2789 | engines: {node: '>=8'} 2790 | dependencies: 2791 | resolve-from: 5.0.0 2792 | dev: true 2793 | 2794 | /resolve-from/4.0.0: 2795 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2796 | engines: {node: '>=4'} 2797 | dev: true 2798 | 2799 | /resolve-from/5.0.0: 2800 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2801 | engines: {node: '>=8'} 2802 | dev: true 2803 | 2804 | /resolve/1.20.0: 2805 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} 2806 | dependencies: 2807 | is-core-module: 2.8.0 2808 | path-parse: 1.0.7 2809 | dev: true 2810 | 2811 | /retry-request/4.2.2: 2812 | resolution: {integrity: sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==} 2813 | engines: {node: '>=8.10.0'} 2814 | dependencies: 2815 | debug: 4.3.2 2816 | extend: 3.0.2 2817 | transitivePeerDependencies: 2818 | - supports-color 2819 | dev: true 2820 | optional: true 2821 | 2822 | /retry/0.13.1: 2823 | resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} 2824 | engines: {node: '>= 4'} 2825 | dev: true 2826 | optional: true 2827 | 2828 | /reusify/1.0.4: 2829 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2830 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2831 | dev: true 2832 | 2833 | /rimraf/3.0.2: 2834 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2835 | hasBin: true 2836 | dependencies: 2837 | glob: 7.2.0 2838 | dev: true 2839 | 2840 | /run-parallel/1.2.0: 2841 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2842 | dependencies: 2843 | queue-microtask: 1.2.3 2844 | dev: true 2845 | 2846 | /safe-buffer/5.2.1: 2847 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2848 | dev: true 2849 | 2850 | /schema-utils/3.1.1: 2851 | resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} 2852 | engines: {node: '>= 10.13.0'} 2853 | dependencies: 2854 | '@types/json-schema': 7.0.9 2855 | ajv: 6.12.6 2856 | ajv-keywords: 3.5.2_ajv@6.12.6 2857 | dev: true 2858 | 2859 | /semver/5.7.1: 2860 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 2861 | hasBin: true 2862 | dev: true 2863 | 2864 | /semver/6.3.0: 2865 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2866 | hasBin: true 2867 | dev: true 2868 | optional: true 2869 | 2870 | /semver/7.3.5: 2871 | resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} 2872 | engines: {node: '>=10'} 2873 | hasBin: true 2874 | dependencies: 2875 | lru-cache: 6.0.0 2876 | dev: true 2877 | 2878 | /serialize-javascript/6.0.0: 2879 | resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} 2880 | dependencies: 2881 | randombytes: 2.1.0 2882 | dev: true 2883 | 2884 | /shallow-clone/3.0.1: 2885 | resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} 2886 | engines: {node: '>=8'} 2887 | dependencies: 2888 | kind-of: 6.0.3 2889 | dev: true 2890 | 2891 | /shebang-command/2.0.0: 2892 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2893 | engines: {node: '>=8'} 2894 | dependencies: 2895 | shebang-regex: 3.0.0 2896 | dev: true 2897 | 2898 | /shebang-regex/3.0.0: 2899 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2900 | engines: {node: '>=8'} 2901 | dev: true 2902 | 2903 | /side-channel/1.0.4: 2904 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2905 | dependencies: 2906 | call-bind: 1.0.2 2907 | get-intrinsic: 1.1.1 2908 | object-inspect: 1.11.0 2909 | dev: true 2910 | 2911 | /signal-exit/3.0.5: 2912 | resolution: {integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==} 2913 | dev: true 2914 | 2915 | /slash/3.0.0: 2916 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2917 | engines: {node: '>=8'} 2918 | dev: true 2919 | 2920 | /snakeize/0.1.0: 2921 | resolution: {integrity: sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=} 2922 | dev: true 2923 | optional: true 2924 | 2925 | /source-map-support/0.5.20: 2926 | resolution: {integrity: sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==} 2927 | dependencies: 2928 | buffer-from: 1.1.2 2929 | source-map: 0.6.1 2930 | dev: true 2931 | 2932 | /source-map/0.6.1: 2933 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2934 | engines: {node: '>=0.10.0'} 2935 | dev: true 2936 | 2937 | /source-map/0.7.3: 2938 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 2939 | engines: {node: '>= 8'} 2940 | dev: true 2941 | 2942 | /sprintf-js/1.0.3: 2943 | resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} 2944 | dev: true 2945 | 2946 | /stream-events/1.0.5: 2947 | resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} 2948 | dependencies: 2949 | stubs: 3.0.0 2950 | dev: true 2951 | optional: true 2952 | 2953 | /stream-shift/1.0.1: 2954 | resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} 2955 | dev: true 2956 | optional: true 2957 | 2958 | /streamsearch/0.1.2: 2959 | resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=} 2960 | engines: {node: '>=0.8.0'} 2961 | dev: true 2962 | 2963 | /string-width/4.2.3: 2964 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2965 | engines: {node: '>=8'} 2966 | dependencies: 2967 | emoji-regex: 8.0.0 2968 | is-fullwidth-code-point: 3.0.0 2969 | strip-ansi: 6.0.1 2970 | dev: true 2971 | optional: true 2972 | 2973 | /string.prototype.trimend/1.0.4: 2974 | resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} 2975 | dependencies: 2976 | call-bind: 1.0.2 2977 | define-properties: 1.1.3 2978 | dev: true 2979 | 2980 | /string.prototype.trimstart/1.0.4: 2981 | resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} 2982 | dependencies: 2983 | call-bind: 1.0.2 2984 | define-properties: 1.1.3 2985 | dev: true 2986 | 2987 | /string_decoder/1.3.0: 2988 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 2989 | dependencies: 2990 | safe-buffer: 5.2.1 2991 | dev: true 2992 | optional: true 2993 | 2994 | /strip-ansi/6.0.1: 2995 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2996 | engines: {node: '>=8'} 2997 | dependencies: 2998 | ansi-regex: 5.0.1 2999 | dev: true 3000 | 3001 | /strip-bom/3.0.0: 3002 | resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=} 3003 | engines: {node: '>=4'} 3004 | dev: true 3005 | 3006 | /strip-final-newline/2.0.0: 3007 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 3008 | engines: {node: '>=6'} 3009 | dev: true 3010 | 3011 | /strip-json-comments/3.1.1: 3012 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3013 | engines: {node: '>=8'} 3014 | dev: true 3015 | 3016 | /stubs/3.0.0: 3017 | resolution: {integrity: sha1-6NK6H6nJBXAwPAMLaQD31fiavls=} 3018 | dev: true 3019 | optional: true 3020 | 3021 | /supports-color/7.2.0: 3022 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3023 | engines: {node: '>=8'} 3024 | dependencies: 3025 | has-flag: 4.0.0 3026 | dev: true 3027 | 3028 | /supports-color/8.1.1: 3029 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 3030 | engines: {node: '>=10'} 3031 | dependencies: 3032 | has-flag: 4.0.0 3033 | dev: true 3034 | 3035 | /tapable/2.2.1: 3036 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 3037 | engines: {node: '>=6'} 3038 | dev: true 3039 | 3040 | /teeny-request/7.1.3: 3041 | resolution: {integrity: sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg==} 3042 | engines: {node: '>=10'} 3043 | dependencies: 3044 | http-proxy-agent: 5.0.0 3045 | https-proxy-agent: 5.0.0 3046 | node-fetch: 2.6.6 3047 | stream-events: 1.0.5 3048 | uuid: 8.3.2 3049 | transitivePeerDependencies: 3050 | - supports-color 3051 | dev: true 3052 | optional: true 3053 | 3054 | /terser-webpack-plugin/5.2.4_webpack@5.61.0: 3055 | resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==} 3056 | engines: {node: '>= 10.13.0'} 3057 | peerDependencies: 3058 | '@swc/core': '*' 3059 | esbuild: '*' 3060 | uglify-js: '*' 3061 | webpack: ^5.1.0 3062 | peerDependenciesMeta: 3063 | '@swc/core': 3064 | optional: true 3065 | esbuild: 3066 | optional: true 3067 | uglify-js: 3068 | optional: true 3069 | dependencies: 3070 | jest-worker: 27.3.1 3071 | p-limit: 3.1.0 3072 | schema-utils: 3.1.1 3073 | serialize-javascript: 6.0.0 3074 | source-map: 0.6.1 3075 | terser: 5.9.0 3076 | webpack: 5.61.0_webpack-cli@4.9.1 3077 | dev: true 3078 | 3079 | /terser/5.9.0: 3080 | resolution: {integrity: sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==} 3081 | engines: {node: '>=10'} 3082 | hasBin: true 3083 | dependencies: 3084 | commander: 2.20.3 3085 | source-map: 0.7.3 3086 | source-map-support: 0.5.20 3087 | dev: true 3088 | 3089 | /text-table/0.2.0: 3090 | resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} 3091 | dev: true 3092 | 3093 | /to-regex-range/5.0.1: 3094 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3095 | engines: {node: '>=8.0'} 3096 | dependencies: 3097 | is-number: 7.0.0 3098 | dev: true 3099 | 3100 | /tr46/0.0.3: 3101 | resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} 3102 | 3103 | /ts-loader/9.2.6_typescript@4.4.4+webpack@5.61.0: 3104 | resolution: {integrity: sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==} 3105 | engines: {node: '>=12.0.0'} 3106 | peerDependencies: 3107 | typescript: '*' 3108 | webpack: ^5.0.0 3109 | dependencies: 3110 | chalk: 4.1.2 3111 | enhanced-resolve: 5.8.3 3112 | micromatch: 4.0.4 3113 | semver: 7.3.5 3114 | typescript: 4.4.4 3115 | webpack: 5.61.0_webpack-cli@4.9.1 3116 | dev: true 3117 | 3118 | /ts-mixer/6.0.0: 3119 | resolution: {integrity: sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==} 3120 | dev: false 3121 | 3122 | /ts-node/10.4.0_typescript@4.4.4: 3123 | resolution: {integrity: sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==} 3124 | hasBin: true 3125 | peerDependencies: 3126 | '@swc/core': '>=1.2.50' 3127 | '@swc/wasm': '>=1.2.50' 3128 | '@types/node': '*' 3129 | typescript: '>=2.7' 3130 | peerDependenciesMeta: 3131 | '@swc/core': 3132 | optional: true 3133 | '@swc/wasm': 3134 | optional: true 3135 | dependencies: 3136 | '@cspotcode/source-map-support': 0.7.0 3137 | '@tsconfig/node10': 1.0.8 3138 | '@tsconfig/node12': 1.0.9 3139 | '@tsconfig/node14': 1.0.1 3140 | '@tsconfig/node16': 1.0.2 3141 | acorn: 8.5.0 3142 | acorn-walk: 8.2.0 3143 | arg: 4.1.3 3144 | create-require: 1.1.1 3145 | diff: 4.0.2 3146 | make-error: 1.3.6 3147 | typescript: 4.4.4 3148 | yn: 3.1.1 3149 | dev: true 3150 | 3151 | /tsconfig-paths/3.11.0: 3152 | resolution: {integrity: sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==} 3153 | dependencies: 3154 | '@types/json5': 0.0.29 3155 | json5: 1.0.1 3156 | minimist: 1.2.5 3157 | strip-bom: 3.0.0 3158 | dev: true 3159 | 3160 | /tslib/1.14.1: 3161 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 3162 | dev: true 3163 | 3164 | /tslib/2.3.1: 3165 | resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} 3166 | 3167 | /tsutils/3.21.0_typescript@4.4.4: 3168 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 3169 | engines: {node: '>= 6'} 3170 | peerDependencies: 3171 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 3172 | dependencies: 3173 | tslib: 1.14.1 3174 | typescript: 4.4.4 3175 | dev: true 3176 | 3177 | /type-check/0.4.0: 3178 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3179 | engines: {node: '>= 0.8.0'} 3180 | dependencies: 3181 | prelude-ls: 1.2.1 3182 | dev: true 3183 | 3184 | /type-fest/0.20.2: 3185 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3186 | engines: {node: '>=10'} 3187 | dev: true 3188 | 3189 | /type-fest/1.4.0: 3190 | resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} 3191 | engines: {node: '>=10'} 3192 | dev: false 3193 | 3194 | /typedarray-to-buffer/3.1.5: 3195 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 3196 | dependencies: 3197 | is-typedarray: 1.0.0 3198 | dev: true 3199 | optional: true 3200 | 3201 | /typescript/4.4.4: 3202 | resolution: {integrity: sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==} 3203 | engines: {node: '>=4.2.0'} 3204 | hasBin: true 3205 | dev: true 3206 | 3207 | /unbox-primitive/1.0.1: 3208 | resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} 3209 | dependencies: 3210 | function-bind: 1.1.1 3211 | has-bigints: 1.0.1 3212 | has-symbols: 1.0.2 3213 | which-boxed-primitive: 1.0.2 3214 | dev: true 3215 | 3216 | /unique-string/2.0.0: 3217 | resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} 3218 | engines: {node: '>=8'} 3219 | dependencies: 3220 | crypto-random-string: 2.0.0 3221 | dev: true 3222 | optional: true 3223 | 3224 | /uri-js/4.4.1: 3225 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3226 | dependencies: 3227 | punycode: 2.1.1 3228 | dev: true 3229 | 3230 | /util-deprecate/1.0.2: 3231 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 3232 | dev: true 3233 | optional: true 3234 | 3235 | /uuid/8.3.2: 3236 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 3237 | hasBin: true 3238 | dev: true 3239 | optional: true 3240 | 3241 | /v8-compile-cache/2.3.0: 3242 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 3243 | dev: true 3244 | 3245 | /vali-date/1.0.0: 3246 | resolution: {integrity: sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=} 3247 | engines: {node: '>=0.10.0'} 3248 | dev: false 3249 | 3250 | /watchpack/2.2.0: 3251 | resolution: {integrity: sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==} 3252 | engines: {node: '>=10.13.0'} 3253 | dependencies: 3254 | glob-to-regexp: 0.4.1 3255 | graceful-fs: 4.2.8 3256 | dev: true 3257 | 3258 | /webidl-conversions/3.0.1: 3259 | resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} 3260 | 3261 | /webpack-cli/4.9.1_webpack@5.61.0: 3262 | resolution: {integrity: sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==} 3263 | engines: {node: '>=10.13.0'} 3264 | hasBin: true 3265 | peerDependencies: 3266 | '@webpack-cli/generators': '*' 3267 | '@webpack-cli/migrate': '*' 3268 | webpack: 4.x.x || 5.x.x 3269 | webpack-bundle-analyzer: '*' 3270 | webpack-dev-server: '*' 3271 | peerDependenciesMeta: 3272 | '@webpack-cli/generators': 3273 | optional: true 3274 | '@webpack-cli/migrate': 3275 | optional: true 3276 | webpack-bundle-analyzer: 3277 | optional: true 3278 | webpack-dev-server: 3279 | optional: true 3280 | dependencies: 3281 | '@discoveryjs/json-ext': 0.5.5 3282 | '@webpack-cli/configtest': 1.1.0_webpack-cli@4.9.1+webpack@5.61.0 3283 | '@webpack-cli/info': 1.4.0_webpack-cli@4.9.1 3284 | '@webpack-cli/serve': 1.6.0_webpack-cli@4.9.1 3285 | colorette: 2.0.16 3286 | commander: 7.2.0 3287 | execa: 5.1.1 3288 | fastest-levenshtein: 1.0.12 3289 | import-local: 3.0.3 3290 | interpret: 2.2.0 3291 | rechoir: 0.7.1 3292 | webpack: 5.61.0_webpack-cli@4.9.1 3293 | webpack-merge: 5.8.0 3294 | dev: true 3295 | 3296 | /webpack-merge/5.8.0: 3297 | resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} 3298 | engines: {node: '>=10.0.0'} 3299 | dependencies: 3300 | clone-deep: 4.0.1 3301 | wildcard: 2.0.0 3302 | dev: true 3303 | 3304 | /webpack-node-externals/3.0.0: 3305 | resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} 3306 | engines: {node: '>=6'} 3307 | dev: true 3308 | 3309 | /webpack-sources/3.2.1: 3310 | resolution: {integrity: sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==} 3311 | engines: {node: '>=10.13.0'} 3312 | dev: true 3313 | 3314 | /webpack/5.61.0_webpack-cli@4.9.1: 3315 | resolution: {integrity: sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==} 3316 | engines: {node: '>=10.13.0'} 3317 | hasBin: true 3318 | peerDependencies: 3319 | webpack-cli: '*' 3320 | peerDependenciesMeta: 3321 | webpack-cli: 3322 | optional: true 3323 | dependencies: 3324 | '@types/eslint-scope': 3.7.1 3325 | '@types/estree': 0.0.50 3326 | '@webassemblyjs/ast': 1.11.1 3327 | '@webassemblyjs/wasm-edit': 1.11.1 3328 | '@webassemblyjs/wasm-parser': 1.11.1 3329 | acorn: 8.5.0 3330 | acorn-import-assertions: 1.8.0_acorn@8.5.0 3331 | browserslist: 4.17.6 3332 | chrome-trace-event: 1.0.3 3333 | enhanced-resolve: 5.8.3 3334 | es-module-lexer: 0.9.3 3335 | eslint-scope: 5.1.1 3336 | events: 3.3.0 3337 | glob-to-regexp: 0.4.1 3338 | graceful-fs: 4.2.8 3339 | json-parse-better-errors: 1.0.2 3340 | loader-runner: 4.2.0 3341 | mime-types: 2.1.33 3342 | neo-async: 2.6.2 3343 | schema-utils: 3.1.1 3344 | tapable: 2.2.1 3345 | terser-webpack-plugin: 5.2.4_webpack@5.61.0 3346 | watchpack: 2.2.0 3347 | webpack-cli: 4.9.1_webpack@5.61.0 3348 | webpack-sources: 3.2.1 3349 | transitivePeerDependencies: 3350 | - '@swc/core' 3351 | - esbuild 3352 | - uglify-js 3353 | dev: true 3354 | 3355 | /websocket-driver/0.7.4: 3356 | resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} 3357 | engines: {node: '>=0.8.0'} 3358 | dependencies: 3359 | http-parser-js: 0.5.3 3360 | safe-buffer: 5.2.1 3361 | websocket-extensions: 0.1.4 3362 | dev: true 3363 | 3364 | /websocket-extensions/0.1.4: 3365 | resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} 3366 | engines: {node: '>=0.8.0'} 3367 | dev: true 3368 | 3369 | /whatwg-url/5.0.0: 3370 | resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} 3371 | dependencies: 3372 | tr46: 0.0.3 3373 | webidl-conversions: 3.0.1 3374 | 3375 | /which-boxed-primitive/1.0.2: 3376 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3377 | dependencies: 3378 | is-bigint: 1.0.4 3379 | is-boolean-object: 1.1.2 3380 | is-number-object: 1.0.6 3381 | is-string: 1.0.7 3382 | is-symbol: 1.0.4 3383 | dev: true 3384 | 3385 | /which/2.0.2: 3386 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3387 | engines: {node: '>= 8'} 3388 | hasBin: true 3389 | dependencies: 3390 | isexe: 2.0.0 3391 | dev: true 3392 | 3393 | /wildcard/2.0.0: 3394 | resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} 3395 | dev: true 3396 | 3397 | /word-wrap/1.2.3: 3398 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 3399 | engines: {node: '>=0.10.0'} 3400 | dev: true 3401 | 3402 | /wrap-ansi/7.0.0: 3403 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3404 | engines: {node: '>=10'} 3405 | dependencies: 3406 | ansi-styles: 4.3.0 3407 | string-width: 4.2.3 3408 | strip-ansi: 6.0.1 3409 | dev: true 3410 | optional: true 3411 | 3412 | /wrappy/1.0.2: 3413 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 3414 | dev: true 3415 | 3416 | /write-file-atomic/3.0.3: 3417 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 3418 | dependencies: 3419 | imurmurhash: 0.1.4 3420 | is-typedarray: 1.0.0 3421 | signal-exit: 3.0.5 3422 | typedarray-to-buffer: 3.1.5 3423 | dev: true 3424 | optional: true 3425 | 3426 | /ws/8.2.3: 3427 | resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} 3428 | engines: {node: '>=10.0.0'} 3429 | peerDependencies: 3430 | bufferutil: ^4.0.1 3431 | utf-8-validate: ^5.0.2 3432 | peerDependenciesMeta: 3433 | bufferutil: 3434 | optional: true 3435 | utf-8-validate: 3436 | optional: true 3437 | dev: false 3438 | 3439 | /xdg-basedir/4.0.0: 3440 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} 3441 | engines: {node: '>=8'} 3442 | dev: true 3443 | optional: true 3444 | 3445 | /y18n/5.0.8: 3446 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3447 | engines: {node: '>=10'} 3448 | dev: true 3449 | optional: true 3450 | 3451 | /yallist/2.1.2: 3452 | resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} 3453 | dev: true 3454 | 3455 | /yallist/4.0.0: 3456 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3457 | dev: true 3458 | 3459 | /yargs-parser/20.2.9: 3460 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 3461 | engines: {node: '>=10'} 3462 | dev: true 3463 | optional: true 3464 | 3465 | /yargs/16.2.0: 3466 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 3467 | engines: {node: '>=10'} 3468 | dependencies: 3469 | cliui: 7.0.4 3470 | escalade: 3.1.1 3471 | get-caller-file: 2.0.5 3472 | require-directory: 2.1.1 3473 | string-width: 4.2.3 3474 | y18n: 5.0.8 3475 | yargs-parser: 20.2.9 3476 | dev: true 3477 | optional: true 3478 | 3479 | /yn/3.1.1: 3480 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 3481 | engines: {node: '>=6'} 3482 | dev: true 3483 | 3484 | /yocto-queue/0.1.0: 3485 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3486 | engines: {node: '>=10'} 3487 | dev: true 3488 | --------------------------------------------------------------------------------