├── .gitignore ├── .npmignore ├── examples └── index.tsx ├── package.json ├── readme.md ├── src ├── Client.tsx ├── Command.ts ├── CommonInhibitors.ts ├── Event.ts ├── Shortcuts.ts ├── Token.ts ├── context.ts ├── index.ts ├── start.ts └── util.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .idea 4 | .vscode 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | example 2 | .idea 3 | .vscode 4 | dist 5 | -------------------------------------------------------------------------------- /examples/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | import { 4 | Client, 5 | Command, 6 | Token, 7 | start, 8 | CommonInhibitors, 9 | author, 10 | channelName, 11 | } from "../src"; 12 | 13 | import { TextChannel } from "discord.js"; 14 | 15 | function App() { 16 | return ( 17 | { 20 | console.log( 21 | `[ERROR][c:${message.channel.id}, m:${message.id}]: ${error.message}` 22 | ); 23 | }} 24 | > 25 | 30 | hello {(msg) => msg.author.tag} 31 | 32 | 37 | {(_msg, ...args) => args.join(" ")} 38 | {(message) => (message.channel as TextChannel).name} 39 | 40 | msg.reply("Hello world")} 44 | /> 45 | 46 | Hello {{ author }}, I hope you like this {{ channelName }} 47 | 48 | console.log(`Logging in as ${client.user?.tag}`)} 51 | onReady={(client) => console.log(`Ready as ${client.user?.tag}`)} 52 | /> 53 | 54 | ); 55 | } 56 | 57 | start(); 58 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-jsx", 3 | "version": "1.0.17", 4 | "main": "dist/index.js", 5 | "types": "dist/index.d.ts", 6 | "author": "Alistair Smith", 7 | "license": "MIT", 8 | "scripts": { 9 | "build": "rimraf dist&&tsc", 10 | "prepare": "yarn build" 11 | }, 12 | "files": [ 13 | "dist", 14 | "package.json", 15 | "readme.md" 16 | ], 17 | "devDependencies": { 18 | "@types/node": "^14.14.5", 19 | "@types/react": "^16.9.53", 20 | "eslint": "^7.12.0", 21 | "prettier": "^2.1.2", 22 | "rimraf": "^3.0.2", 23 | "typescript": "^4.0.5" 24 | }, 25 | "dependencies": { 26 | "discord.js": "^12.4.1", 27 | "react": "^17.0.1", 28 | "react-nil": "^0.0.3", 29 | "scheduler": "^0.20.1" 30 | }, 31 | "repository": { 32 | "url": "https://github.com/alii/discord-jsx", 33 | "type": "git" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # `discord-jsx` 2 | 3 | ### Installation 4 | 5 | ``` 6 | yarn add discord-jsx 7 | ``` 8 | 9 | ### Usage 10 | 11 | ##### View the example in [examples](examples/index.tsx) 12 | 13 | ## API 14 | 15 | ## Components 16 | 17 | ### `` 18 | 19 | | _prop_ | prefix | onError? | 20 | | ----------- | --------------------- | --------------------------- | 21 | | _type_ | string | `(error: Error) => unknown` | 22 | | Description | The prefix of the bot | An error handler | 23 | 24 | This is the most fundamental part of any `discord-jsx` application. It is the internal `Provider` for the discord.js `Client` under the hood, as well as prefix among other things. 25 | 26 | ### `` 27 | 28 | | _prop_ | token | onReady | onLogin? | 29 | | ----------- | ------------- | ----------------------------- | ----------------------------- | 30 | | _type_ | string | `(client: Client) => unknown` | `(client: Client) => unknown` | 31 | | Description | The bot token | Ready event shorthand | Login event shorthand | 32 | 33 | This component will run `client.login()` under the hood, and is the starting point for any `discord-jsx` client. 34 | 35 | ### `` 36 | 37 | | _prop_ | name | description | inhibitors? | handler? | children? | 38 | | ----------- | ----------------------- | ----------------------------------------- | -------------------------------- | -------------------------------------------------- | ------------------------------ | 39 | | _type_ | string | string | `Inhibitor[]` | `(message: Message, ...args: string[]) => unknown` | Read below | 40 | | Description | The name of the command | The description of what this command does | Optional inhibitors (Read below) | Optional handler function (Read below) | Optional children (Read below) | 41 | 42 | The `Command` component is very versatile when not using a `handler` function prop. It supports three main types of children. Text (string or number), a Shortcut (we'll come on to that later), or a custom function that takes 0-2 arguments. 43 | 44 | For instance, we can pass regular text as a simple reply. E.g. 45 | 46 | ```tsx 47 | 48 | This would be the example reply. 49 | 50 | ``` 51 | 52 | However, we can do much more with Shortcuts. As the name implies, these are shorter ways to template a message. `discord-jsx` has a few built in. Currently, they are `author` and `channelName`. You can use shortcuts in a handlebars-style syntax. E.g. 53 | 54 | ```tsx 55 | 59 | Hello, {{ author }}. You sent a message in {{ channelName }}. 60 | 61 | ``` 62 | 63 | Under the hood, these are actually valid JavaScript objects, and we just call the first property. A shortcut is simply a function that takes a `Message` as the first argument and always returns a string. Because of this, it's easy to build your own and reuse them as you please. 64 | 65 | Secondly, `Command` also accepts a function that takes 0-2 argument. Similar to a `Shortcut` however this time, they can be async. This allows for database calls etc to be executed. E.g. 66 | 67 | ```tsx 68 | // An example function 69 | async function getFavouriteFood(discordId: string): Promise { 70 | const user = await database.getUserByDiscord(discordId); 71 | return user.favouriteFood; 72 | } 73 | 74 | 78 | Hello {{ author }}. Your favourite food is{" "} 79 | {(msg) => getFavouriteFood(msg.author.id)}. 80 | ; 81 | ``` 82 | 83 | And an example using the second argument (message args) 84 | 85 | ```tsx 86 | 87 | {(msg, ...args) => arg.join(" ")} 88 | 89 | ``` 90 | 91 | ### `` 92 | 93 | | _prop_ | event | handler | 94 | | ----------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------ | 95 | | _type_ | [`keyof ClientEvents`](https://discord.js.org/#/docs/main/stable/class/Client) | Function that accepts the params referenced in the list of client events | 96 | | Description | The event name | The handler for this event | 97 | 98 | This is a component for listening to custom Discord.js Client events. It's fairly self-explanatory. Here's a couple examples: 99 | 100 | ```tsx 101 | console.log(message.content)} /> 102 | console.log(`Client joined ${guild.name}`)} /> 103 | ``` 104 | 105 | ## Hooks 106 | 107 | If you want to use the client in your own hook, you can use `useClientContext` which returns [`ClientContext`](./src/context.ts) – an object containing the `Client` and `prefix`. 108 | 109 | For example: 110 | 111 | ```tsx 112 | // Custom hook to check if a string starts with the current prefix 113 | function useIsCommand(content: string): boolean { 114 | const context = useClientContext(); 115 | return content.startsWith(context.prefix); 116 | } 117 | ``` 118 | 119 | ## Inhibitors 120 | 121 | Stolen from [cookiecord](https://github.com/cookiecord/cookiecord), inhibitors are a way of preventing a command from executing when a specific condition isn't met. 122 | 123 | They are very easy to make, and we provide a couple from the constant `CommonInhibitors`. You use them in a `` component, documented above. 124 | 125 | For example: 126 | 127 | ```tsx 128 | // A command that will only run in a guild 129 | 130 | 131 | ``` 132 | 133 | To build an inhibitor, you can import the `Inhibitor` type. Inhibitors stop execution just by throwing a regular error. The error gets caught, and the message is echoed to the channel where the inhibition rose. 134 | 135 | ##### This project is very experimental, don't use it in production... please..... 136 | -------------------------------------------------------------------------------- /src/Client.tsx: -------------------------------------------------------------------------------- 1 | import { Client as DiscordClient, ClientOptions } from "discord.js"; 2 | import { Provider, ClientContext } from "./context"; 3 | import * as React from "react"; 4 | 5 | type ClientProps = { 6 | children: React.ReactNode; 7 | prefix: string; 8 | constructorOptions?: ClientOptions; 9 | onError?: ClientContext["onError"]; 10 | allowLogging?: boolean; 11 | }; 12 | 13 | export function Client(props: ClientProps): JSX.Element { 14 | return ( 15 | 24 | {props.children} 25 | 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/Command.ts: -------------------------------------------------------------------------------- 1 | import { useClientContext } from "./context"; 2 | import { Message } from "discord.js"; 3 | import { useArguments, useCommand } from "./util"; 4 | import { Inhibitor } from "./CommonInhibitors"; 5 | import { Shortcut } from "./Shortcuts"; 6 | 7 | type Child = 8 | | string 9 | | number 10 | | ((message: Message, ...args: string[]) => string | Promise) 11 | | Record; 12 | 13 | type CommandProps = { 14 | name: string; 15 | description: string; 16 | inhibitors?: Inhibitor[]; 17 | } & ( 18 | | { children: Child | Child[] } 19 | | { handler(message: Message, ...args: string[]): unknown } 20 | ); 21 | 22 | export function Command(props: CommandProps): JSX.Element { 23 | const parseArguments = useArguments(); 24 | const context = useClientContext(); 25 | 26 | useCommand(async (message) => { 27 | const { command: commandName, args } = parseArguments(message); 28 | 29 | if (commandName !== props.name) { 30 | return; 31 | } 32 | 33 | if (message.author.id === context.client.user?.id) return; 34 | 35 | if (props.inhibitors) { 36 | for (const inhibitor of props.inhibitors) { 37 | try { 38 | await inhibitor(message); 39 | } catch (e) { 40 | return message.channel.send( 41 | `⚠️ **Command was inhibited**: ${e.message}` 42 | ); 43 | } 44 | } 45 | } 46 | 47 | if ("children" in props) { 48 | try { 49 | const children: Child[] = Array.isArray(props.children) 50 | ? props.children 51 | : [props.children]; 52 | 53 | const returnMessage = await children.reduce(async (_msg, child) => { 54 | const msg = await _msg; 55 | 56 | if (typeof child === "function") { 57 | return msg + (await child(message, ...args)); 58 | } 59 | 60 | if (typeof child === "object") { 61 | const values = Object.values(child); 62 | 63 | if (values.length !== 1) { 64 | throw new Error( 65 | `Shortcut objects must only have one property. Found ${values.length} on ${child}` 66 | ); 67 | } 68 | 69 | const [shortcut] = values; 70 | 71 | return msg + shortcut(message); 72 | } 73 | 74 | return msg + child.toString(); 75 | }, Promise.resolve("")); 76 | 77 | await message.channel.send(returnMessage); 78 | } catch (e) { 79 | if ("onError" in context) { 80 | return context.onError(message, e); 81 | } else { 82 | await message.channel.send(`⚠ **An error occurred:** ${e.message}`); 83 | context.allowLogging && console.error(e); 84 | } 85 | } // uwu 86 | } else { 87 | try { 88 | await props.handler(message, ...args); 89 | } catch (e) { 90 | if ("onError" in context) { 91 | return context.onError(message, e); 92 | } else { 93 | await message.channel.send(`⚠ **An error occurred:** ${e.message}`); 94 | context.allowLogging && console.error(e); 95 | } 96 | } 97 | } 98 | }); 99 | 100 | return null; 101 | } 102 | -------------------------------------------------------------------------------- /src/CommonInhibitors.ts: -------------------------------------------------------------------------------- 1 | import { Message, Permissions } from "discord.js"; 2 | 3 | /** 4 | * A function that will halt execution if an error is thrown 5 | */ 6 | export type Inhibitor = (message: Message) => void | never; 7 | 8 | /** 9 | * Make this command executable by humans only 10 | * @param message 11 | */ 12 | export const noBots: Inhibitor = (message) => { 13 | if (message.author.bot) { 14 | throw new Error("This command cannot be used by bots"); 15 | } 16 | }; 17 | 18 | /** 19 | * Make this command run in a guild only 20 | * @param message 21 | */ 22 | export const guildsOnly: Inhibitor = (message) => { 23 | if (!message.guild) { 24 | throw new Error("This command can only be used in a server"); 25 | } 26 | }; 27 | 28 | /** 29 | * Make this command executable by guild admins only 30 | * @param message 31 | */ 32 | export const guildAdminsOnly: Inhibitor = (message) => { 33 | if (!message.guild) { 34 | throw new Error("This command can only be used in a server"); 35 | } 36 | 37 | if (!message.member) { 38 | throw new Error("Could not find member of message"); 39 | } 40 | 41 | if (!message.member.permissions.has(Permissions.FLAGS.ADMINISTRATOR)) { 42 | throw new Error("You do not have permission to use this command"); 43 | } 44 | }; 45 | 46 | export const CommonInhibitors = { 47 | noBots, 48 | guildsOnly, 49 | guildAdminsOnly, 50 | } as const; 51 | -------------------------------------------------------------------------------- /src/Event.ts: -------------------------------------------------------------------------------- 1 | import { ClientEvents } from "discord.js"; 2 | import { useClientContext } from "./context"; 3 | 4 | type EventProps = { 5 | event: Key; 6 | handler(...args: ClientEvents[Key]): void; 7 | }; 8 | 9 | export function Event( 10 | props: EventProps 11 | ): JSX.Element { 12 | const context = useClientContext(); 13 | context.client.on(props.event, (...args) => props.handler(...args)); 14 | return null; 15 | } 16 | -------------------------------------------------------------------------------- /src/Shortcuts.ts: -------------------------------------------------------------------------------- 1 | import { Message, TextChannel } from "discord.js"; 2 | 3 | /** 4 | * A shortcut is a function that returns a specific bit of data from a message 5 | */ 6 | export type Shortcut = (message: Message) => string | Promise; 7 | 8 | /** 9 | * Shortcut that returns the username#discriminator of the author of the message 10 | * @param message 11 | */ 12 | export const author: Shortcut = (message) => message.author.tag; 13 | 14 | /** 15 | * Shortcut that returns the current channel name 16 | * @param message 17 | */ 18 | export const channelName: Shortcut = (message) => 19 | (message.channel as TextChannel).name; 20 | -------------------------------------------------------------------------------- /src/Token.ts: -------------------------------------------------------------------------------- 1 | import { useClientContext } from "./context"; 2 | import { useEffect } from "react"; 3 | import { Client } from "discord.js"; 4 | 5 | type TokenProps = { 6 | token: string; 7 | onReady(client: Client): void; 8 | onLogin?(client: Client): void; 9 | }; 10 | 11 | export function Token(props: TokenProps): JSX.Element { 12 | const context = useClientContext(); 13 | 14 | useEffect(() => { 15 | context.client.login(props.token).then(() => { 16 | if (props.onLogin) { 17 | props.onLogin(context.client); 18 | } 19 | }); 20 | 21 | context.client.on("ready", () => props.onReady(context.client)); 22 | }, []); 23 | 24 | return null; 25 | } 26 | -------------------------------------------------------------------------------- /src/context.ts: -------------------------------------------------------------------------------- 1 | import { Client, Message } from "discord.js"; 2 | import { createContext, useContext } from "react"; 3 | 4 | export type ClientContext = { 5 | client: Client; 6 | prefix: string; 7 | onError?: (message: Message, error: Error) => unknown; 8 | allowLogging: boolean; 9 | }; 10 | 11 | export const context = createContext(null); 12 | 13 | export const Provider = context.Provider; 14 | 15 | export function useClientContext(): ClientContext { 16 | const clientContext = useContext(context); 17 | 18 | if (clientContext === null) { 19 | throw new Error("Client Provider not found."); 20 | } 21 | 22 | return clientContext; 23 | } 24 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Command"; 2 | export * from "./Client"; 3 | export * from "./Event"; 4 | export * from "./start"; 5 | export * from "./Token"; 6 | export * from "./util"; 7 | export * from "./CommonInhibitors"; 8 | export * from "./Shortcuts"; 9 | export { useClientContext } from "./context"; 10 | -------------------------------------------------------------------------------- /src/start.ts: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { render } from "react-nil"; 3 | 4 | export function start(node: React.ReactNode) { 5 | render(node); 6 | } 7 | -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- 1 | import { useClientContext } from "./context"; 2 | import { Message } from "discord.js"; 3 | import { useEffect } from "react"; 4 | 5 | export function useArguments() { 6 | const context = useClientContext(); 7 | 8 | return function parseArguments(message: Message) { 9 | const [command, ...args] = message.content 10 | .replace(context.prefix, "") 11 | .split(" "); 12 | 13 | return { command, args }; 14 | }; 15 | } 16 | 17 | export function useCommand(callback: (message: Message) => unknown) { 18 | const { client } = useClientContext(); 19 | 20 | useEffect(() => { 21 | client.on("message", callback); 22 | return () => void client.off("message", callback); 23 | }, []); 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ESNext", 5 | "sourceMap": true, 6 | "jsx": "react", 7 | "esModuleInterop": true, 8 | "rootDir": "src", 9 | "outDir": "dist", 10 | "declaration": true 11 | }, 12 | "exclude": ["node_modules", "examples"] 13 | } 14 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.10.4" 7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.10.4": 13 | version "7.10.4" 14 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 15 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@discordjs/collection@^0.1.6": 27 | version "0.1.6" 28 | resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz#9e9a7637f4e4e0688fd8b2b5c63133c91607682c" 29 | integrity sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ== 30 | 31 | "@discordjs/form-data@^3.0.1": 32 | version "3.0.1" 33 | resolved "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697" 34 | integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg== 35 | dependencies: 36 | asynckit "^0.4.0" 37 | combined-stream "^1.0.8" 38 | mime-types "^2.1.12" 39 | 40 | "@eslint/eslintrc@^0.2.0": 41 | version "0.2.0" 42 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz#bc7e3c4304d4c8720968ccaee793087dfb5fe6b4" 43 | integrity sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ== 44 | dependencies: 45 | ajv "^6.12.4" 46 | debug "^4.1.1" 47 | espree "^7.3.0" 48 | globals "^12.1.0" 49 | ignore "^4.0.6" 50 | import-fresh "^3.2.1" 51 | js-yaml "^3.13.1" 52 | lodash "^4.17.19" 53 | minimatch "^3.0.4" 54 | strip-json-comments "^3.1.1" 55 | 56 | "@types/node@^14.14.5": 57 | version "14.14.5" 58 | resolved "https://registry.npmjs.org/@types/node/-/node-14.14.5.tgz#e92d3b8f76583efa26c1a63a21c9d3c1143daa29" 59 | integrity sha512-H5Wn24s/ZOukBmDn03nnGTp18A60ny9AmCwnEcgJiTgSGsCO7k+NWP7zjCCbhlcnVCoI+co52dUAt9GMhOSULw== 60 | 61 | "@types/prop-types@*": 62 | version "15.7.3" 63 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 64 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 65 | 66 | "@types/react@^16.9.53": 67 | version "16.9.53" 68 | resolved "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz#40cd4f8b8d6b9528aedd1fff8fcffe7a112a3d23" 69 | integrity sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw== 70 | dependencies: 71 | "@types/prop-types" "*" 72 | csstype "^3.0.2" 73 | 74 | abort-controller@^3.0.0: 75 | version "3.0.0" 76 | resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 77 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 78 | dependencies: 79 | event-target-shim "^5.0.0" 80 | 81 | acorn-jsx@^5.2.0: 82 | version "5.3.1" 83 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 84 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 85 | 86 | acorn@^7.4.0: 87 | version "7.4.1" 88 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 89 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 90 | 91 | ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: 92 | version "6.12.6" 93 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 94 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 95 | dependencies: 96 | fast-deep-equal "^3.1.1" 97 | fast-json-stable-stringify "^2.0.0" 98 | json-schema-traverse "^0.4.1" 99 | uri-js "^4.2.2" 100 | 101 | ansi-colors@^4.1.1: 102 | version "4.1.1" 103 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 104 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 105 | 106 | ansi-regex@^4.1.0: 107 | version "4.1.0" 108 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 109 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 110 | 111 | ansi-regex@^5.0.0: 112 | version "5.0.0" 113 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 114 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 115 | 116 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 117 | version "3.2.1" 118 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 119 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 120 | dependencies: 121 | color-convert "^1.9.0" 122 | 123 | ansi-styles@^4.1.0: 124 | version "4.3.0" 125 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 126 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 127 | dependencies: 128 | color-convert "^2.0.1" 129 | 130 | argparse@^1.0.7: 131 | version "1.0.10" 132 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 133 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 134 | dependencies: 135 | sprintf-js "~1.0.2" 136 | 137 | astral-regex@^1.0.0: 138 | version "1.0.0" 139 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 140 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 141 | 142 | asynckit@^0.4.0: 143 | version "0.4.0" 144 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 145 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 146 | 147 | balanced-match@^1.0.0: 148 | version "1.0.0" 149 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 150 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 151 | 152 | brace-expansion@^1.1.7: 153 | version "1.1.11" 154 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 155 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 156 | dependencies: 157 | balanced-match "^1.0.0" 158 | concat-map "0.0.1" 159 | 160 | callsites@^3.0.0: 161 | version "3.1.0" 162 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 163 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 164 | 165 | chalk@^2.0.0: 166 | version "2.4.2" 167 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 168 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 169 | dependencies: 170 | ansi-styles "^3.2.1" 171 | escape-string-regexp "^1.0.5" 172 | supports-color "^5.3.0" 173 | 174 | chalk@^4.0.0: 175 | version "4.1.0" 176 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 177 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 178 | dependencies: 179 | ansi-styles "^4.1.0" 180 | supports-color "^7.1.0" 181 | 182 | color-convert@^1.9.0: 183 | version "1.9.3" 184 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 185 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 186 | dependencies: 187 | color-name "1.1.3" 188 | 189 | color-convert@^2.0.1: 190 | version "2.0.1" 191 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 192 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 193 | dependencies: 194 | color-name "~1.1.4" 195 | 196 | color-name@1.1.3: 197 | version "1.1.3" 198 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 199 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 200 | 201 | color-name@~1.1.4: 202 | version "1.1.4" 203 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 204 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 205 | 206 | combined-stream@^1.0.8: 207 | version "1.0.8" 208 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 209 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 210 | dependencies: 211 | delayed-stream "~1.0.0" 212 | 213 | concat-map@0.0.1: 214 | version "0.0.1" 215 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 216 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 217 | 218 | cross-spawn@^7.0.2: 219 | version "7.0.3" 220 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 221 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 222 | dependencies: 223 | path-key "^3.1.0" 224 | shebang-command "^2.0.0" 225 | which "^2.0.1" 226 | 227 | csstype@^3.0.2: 228 | version "3.0.4" 229 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz#b156d7be03b84ff425c9a0a4b1e5f4da9c5ca888" 230 | integrity sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA== 231 | 232 | debug@^4.0.1, debug@^4.1.1: 233 | version "4.2.0" 234 | resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 235 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 236 | dependencies: 237 | ms "2.1.2" 238 | 239 | deep-is@^0.1.3: 240 | version "0.1.3" 241 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 242 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 243 | 244 | delayed-stream@~1.0.0: 245 | version "1.0.0" 246 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 247 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 248 | 249 | discord.js@^12.4.1: 250 | version "12.4.1" 251 | resolved "https://registry.npmjs.org/discord.js/-/discord.js-12.4.1.tgz#be88bb32caa9e41eae67749a4e2387585745ac3b" 252 | integrity sha512-KxOB8LOAN3GmrvkD6a6Fr1nlfArIFZ+q7Uqg4T/5duB90GZy9a0/Py2E+Y+eHKP6ZUCR2mbNMLCcHGjahiaNqA== 253 | dependencies: 254 | "@discordjs/collection" "^0.1.6" 255 | "@discordjs/form-data" "^3.0.1" 256 | abort-controller "^3.0.0" 257 | node-fetch "^2.6.1" 258 | prism-media "^1.2.2" 259 | setimmediate "^1.0.5" 260 | tweetnacl "^1.0.3" 261 | ws "^7.3.1" 262 | 263 | doctrine@^3.0.0: 264 | version "3.0.0" 265 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 266 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 267 | dependencies: 268 | esutils "^2.0.2" 269 | 270 | emoji-regex@^7.0.1: 271 | version "7.0.3" 272 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 273 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 274 | 275 | enquirer@^2.3.5: 276 | version "2.3.6" 277 | resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 278 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 279 | dependencies: 280 | ansi-colors "^4.1.1" 281 | 282 | escape-string-regexp@^1.0.5: 283 | version "1.0.5" 284 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 285 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 286 | 287 | eslint-scope@^5.1.1: 288 | version "5.1.1" 289 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 290 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 291 | dependencies: 292 | esrecurse "^4.3.0" 293 | estraverse "^4.1.1" 294 | 295 | eslint-utils@^2.1.0: 296 | version "2.1.0" 297 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 298 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 299 | dependencies: 300 | eslint-visitor-keys "^1.1.0" 301 | 302 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 303 | version "1.3.0" 304 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 305 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 306 | 307 | eslint-visitor-keys@^2.0.0: 308 | version "2.0.0" 309 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" 310 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 311 | 312 | eslint@^7.12.0: 313 | version "7.12.0" 314 | resolved "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz#7b6a85f87a9adc239e979bb721cde5ce0dc27da6" 315 | integrity sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA== 316 | dependencies: 317 | "@babel/code-frame" "^7.0.0" 318 | "@eslint/eslintrc" "^0.2.0" 319 | ajv "^6.10.0" 320 | chalk "^4.0.0" 321 | cross-spawn "^7.0.2" 322 | debug "^4.0.1" 323 | doctrine "^3.0.0" 324 | enquirer "^2.3.5" 325 | eslint-scope "^5.1.1" 326 | eslint-utils "^2.1.0" 327 | eslint-visitor-keys "^2.0.0" 328 | espree "^7.3.0" 329 | esquery "^1.2.0" 330 | esutils "^2.0.2" 331 | file-entry-cache "^5.0.1" 332 | functional-red-black-tree "^1.0.1" 333 | glob-parent "^5.0.0" 334 | globals "^12.1.0" 335 | ignore "^4.0.6" 336 | import-fresh "^3.0.0" 337 | imurmurhash "^0.1.4" 338 | is-glob "^4.0.0" 339 | js-yaml "^3.13.1" 340 | json-stable-stringify-without-jsonify "^1.0.1" 341 | levn "^0.4.1" 342 | lodash "^4.17.19" 343 | minimatch "^3.0.4" 344 | natural-compare "^1.4.0" 345 | optionator "^0.9.1" 346 | progress "^2.0.0" 347 | regexpp "^3.1.0" 348 | semver "^7.2.1" 349 | strip-ansi "^6.0.0" 350 | strip-json-comments "^3.1.0" 351 | table "^5.2.3" 352 | text-table "^0.2.0" 353 | v8-compile-cache "^2.0.3" 354 | 355 | espree@^7.3.0: 356 | version "7.3.0" 357 | resolved "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" 358 | integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== 359 | dependencies: 360 | acorn "^7.4.0" 361 | acorn-jsx "^5.2.0" 362 | eslint-visitor-keys "^1.3.0" 363 | 364 | esprima@^4.0.0: 365 | version "4.0.1" 366 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 367 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 368 | 369 | esquery@^1.2.0: 370 | version "1.3.1" 371 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 372 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 373 | dependencies: 374 | estraverse "^5.1.0" 375 | 376 | esrecurse@^4.3.0: 377 | version "4.3.0" 378 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 379 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 380 | dependencies: 381 | estraverse "^5.2.0" 382 | 383 | estraverse@^4.1.1: 384 | version "4.3.0" 385 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 386 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 387 | 388 | estraverse@^5.1.0, estraverse@^5.2.0: 389 | version "5.2.0" 390 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 391 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 392 | 393 | esutils@^2.0.2: 394 | version "2.0.3" 395 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 396 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 397 | 398 | event-target-shim@^5.0.0: 399 | version "5.0.1" 400 | resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 401 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 402 | 403 | fast-deep-equal@^3.1.1: 404 | version "3.1.3" 405 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 406 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 407 | 408 | fast-json-stable-stringify@^2.0.0: 409 | version "2.1.0" 410 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 411 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 412 | 413 | fast-levenshtein@^2.0.6: 414 | version "2.0.6" 415 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 416 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 417 | 418 | file-entry-cache@^5.0.1: 419 | version "5.0.1" 420 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 421 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 422 | dependencies: 423 | flat-cache "^2.0.1" 424 | 425 | flat-cache@^2.0.1: 426 | version "2.0.1" 427 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 428 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 429 | dependencies: 430 | flatted "^2.0.0" 431 | rimraf "2.6.3" 432 | write "1.0.3" 433 | 434 | flatted@^2.0.0: 435 | version "2.0.2" 436 | resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 437 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 438 | 439 | fs.realpath@^1.0.0: 440 | version "1.0.0" 441 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 442 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 443 | 444 | functional-red-black-tree@^1.0.1: 445 | version "1.0.1" 446 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 447 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 448 | 449 | glob-parent@^5.0.0: 450 | version "5.1.1" 451 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 452 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 453 | dependencies: 454 | is-glob "^4.0.1" 455 | 456 | glob@^7.1.3: 457 | version "7.1.6" 458 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 459 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 460 | dependencies: 461 | fs.realpath "^1.0.0" 462 | inflight "^1.0.4" 463 | inherits "2" 464 | minimatch "^3.0.4" 465 | once "^1.3.0" 466 | path-is-absolute "^1.0.0" 467 | 468 | globals@^12.1.0: 469 | version "12.4.0" 470 | resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 471 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 472 | dependencies: 473 | type-fest "^0.8.1" 474 | 475 | has-flag@^3.0.0: 476 | version "3.0.0" 477 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 478 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 479 | 480 | has-flag@^4.0.0: 481 | version "4.0.0" 482 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 483 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 484 | 485 | ignore@^4.0.6: 486 | version "4.0.6" 487 | resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 488 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 489 | 490 | import-fresh@^3.0.0, import-fresh@^3.2.1: 491 | version "3.2.1" 492 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" 493 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 494 | dependencies: 495 | parent-module "^1.0.0" 496 | resolve-from "^4.0.0" 497 | 498 | imurmurhash@^0.1.4: 499 | version "0.1.4" 500 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 501 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 502 | 503 | inflight@^1.0.4: 504 | version "1.0.6" 505 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 506 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 507 | dependencies: 508 | once "^1.3.0" 509 | wrappy "1" 510 | 511 | inherits@2: 512 | version "2.0.4" 513 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 514 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 515 | 516 | is-extglob@^2.1.1: 517 | version "2.1.1" 518 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 519 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 520 | 521 | is-fullwidth-code-point@^2.0.0: 522 | version "2.0.0" 523 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 524 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 525 | 526 | is-glob@^4.0.0, is-glob@^4.0.1: 527 | version "4.0.1" 528 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 529 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 530 | dependencies: 531 | is-extglob "^2.1.1" 532 | 533 | isexe@^2.0.0: 534 | version "2.0.0" 535 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 536 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 537 | 538 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 539 | version "4.0.0" 540 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 541 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 542 | 543 | js-yaml@^3.13.1: 544 | version "3.14.0" 545 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 546 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 547 | dependencies: 548 | argparse "^1.0.7" 549 | esprima "^4.0.0" 550 | 551 | json-schema-traverse@^0.4.1: 552 | version "0.4.1" 553 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 554 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 555 | 556 | json-stable-stringify-without-jsonify@^1.0.1: 557 | version "1.0.1" 558 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 559 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 560 | 561 | levn@^0.4.1: 562 | version "0.4.1" 563 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 564 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 565 | dependencies: 566 | prelude-ls "^1.2.1" 567 | type-check "~0.4.0" 568 | 569 | lodash@^4.17.14, lodash@^4.17.19: 570 | version "4.17.20" 571 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 572 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 573 | 574 | loose-envify@^1.1.0: 575 | version "1.4.0" 576 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 577 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 578 | dependencies: 579 | js-tokens "^3.0.0 || ^4.0.0" 580 | 581 | mime-db@1.44.0: 582 | version "1.44.0" 583 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 584 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 585 | 586 | mime-types@^2.1.12: 587 | version "2.1.27" 588 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 589 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 590 | dependencies: 591 | mime-db "1.44.0" 592 | 593 | minimatch@^3.0.4: 594 | version "3.0.4" 595 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 596 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 597 | dependencies: 598 | brace-expansion "^1.1.7" 599 | 600 | minimist@^1.2.5: 601 | version "1.2.5" 602 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 603 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 604 | 605 | mkdirp@^0.5.1: 606 | version "0.5.5" 607 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 608 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 609 | dependencies: 610 | minimist "^1.2.5" 611 | 612 | ms@2.1.2: 613 | version "2.1.2" 614 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 615 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 616 | 617 | natural-compare@^1.4.0: 618 | version "1.4.0" 619 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 620 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 621 | 622 | node-fetch@^2.6.1: 623 | version "2.6.1" 624 | resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 625 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 626 | 627 | object-assign@^4.1.1: 628 | version "4.1.1" 629 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 630 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 631 | 632 | once@^1.3.0: 633 | version "1.4.0" 634 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 635 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 636 | dependencies: 637 | wrappy "1" 638 | 639 | optionator@^0.9.1: 640 | version "0.9.1" 641 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 642 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 643 | dependencies: 644 | deep-is "^0.1.3" 645 | fast-levenshtein "^2.0.6" 646 | levn "^0.4.1" 647 | prelude-ls "^1.2.1" 648 | type-check "^0.4.0" 649 | word-wrap "^1.2.3" 650 | 651 | parent-module@^1.0.0: 652 | version "1.0.1" 653 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 654 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 655 | dependencies: 656 | callsites "^3.0.0" 657 | 658 | path-is-absolute@^1.0.0: 659 | version "1.0.1" 660 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 661 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 662 | 663 | path-key@^3.1.0: 664 | version "3.1.1" 665 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 666 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 667 | 668 | prelude-ls@^1.2.1: 669 | version "1.2.1" 670 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 671 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 672 | 673 | prettier@^2.1.2: 674 | version "2.1.2" 675 | resolved "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" 676 | integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== 677 | 678 | prism-media@^1.2.2: 679 | version "1.2.2" 680 | resolved "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz#4f1c841f248b67d325a24b4e6b1a491b8f50a24f" 681 | integrity sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw== 682 | 683 | progress@^2.0.0: 684 | version "2.0.3" 685 | resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 686 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 687 | 688 | punycode@^2.1.0: 689 | version "2.1.1" 690 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 691 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 692 | 693 | react-nil@^0.0.3: 694 | version "0.0.3" 695 | resolved "https://registry.npmjs.org/react-nil/-/react-nil-0.0.3.tgz#c6242460ce3dbb6d00744444911565cdba3b73b9" 696 | integrity sha512-RDK8yWeWasmGFTRCqnbljvIBpWpHvH0YpGIXk65NeyOaN7SEyxsHCz3DU69G6r4L0HYLBPhMdbX5xynOvTDWuQ== 697 | 698 | react@^17.0.1: 699 | version "17.0.1" 700 | resolved "https://registry.npmjs.org/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" 701 | integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== 702 | dependencies: 703 | loose-envify "^1.1.0" 704 | object-assign "^4.1.1" 705 | 706 | regexpp@^3.1.0: 707 | version "3.1.0" 708 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 709 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 710 | 711 | resolve-from@^4.0.0: 712 | version "4.0.0" 713 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 714 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 715 | 716 | rimraf@2.6.3: 717 | version "2.6.3" 718 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 719 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 720 | dependencies: 721 | glob "^7.1.3" 722 | 723 | rimraf@^3.0.2: 724 | version "3.0.2" 725 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 726 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 727 | dependencies: 728 | glob "^7.1.3" 729 | 730 | scheduler@^0.20.1: 731 | version "0.20.1" 732 | resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" 733 | integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== 734 | dependencies: 735 | loose-envify "^1.1.0" 736 | object-assign "^4.1.1" 737 | 738 | semver@^7.2.1: 739 | version "7.3.2" 740 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" 741 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== 742 | 743 | setimmediate@^1.0.5: 744 | version "1.0.5" 745 | resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 746 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 747 | 748 | shebang-command@^2.0.0: 749 | version "2.0.0" 750 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 751 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 752 | dependencies: 753 | shebang-regex "^3.0.0" 754 | 755 | shebang-regex@^3.0.0: 756 | version "3.0.0" 757 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 758 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 759 | 760 | slice-ansi@^2.1.0: 761 | version "2.1.0" 762 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 763 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 764 | dependencies: 765 | ansi-styles "^3.2.0" 766 | astral-regex "^1.0.0" 767 | is-fullwidth-code-point "^2.0.0" 768 | 769 | sprintf-js@~1.0.2: 770 | version "1.0.3" 771 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 772 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 773 | 774 | string-width@^3.0.0: 775 | version "3.1.0" 776 | resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 777 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 778 | dependencies: 779 | emoji-regex "^7.0.1" 780 | is-fullwidth-code-point "^2.0.0" 781 | strip-ansi "^5.1.0" 782 | 783 | strip-ansi@^5.1.0: 784 | version "5.2.0" 785 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 786 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 787 | dependencies: 788 | ansi-regex "^4.1.0" 789 | 790 | strip-ansi@^6.0.0: 791 | version "6.0.0" 792 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 793 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 794 | dependencies: 795 | ansi-regex "^5.0.0" 796 | 797 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 798 | version "3.1.1" 799 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 800 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 801 | 802 | supports-color@^5.3.0: 803 | version "5.5.0" 804 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 805 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 806 | dependencies: 807 | has-flag "^3.0.0" 808 | 809 | supports-color@^7.1.0: 810 | version "7.2.0" 811 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 812 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 813 | dependencies: 814 | has-flag "^4.0.0" 815 | 816 | table@^5.2.3: 817 | version "5.4.6" 818 | resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 819 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 820 | dependencies: 821 | ajv "^6.10.2" 822 | lodash "^4.17.14" 823 | slice-ansi "^2.1.0" 824 | string-width "^3.0.0" 825 | 826 | text-table@^0.2.0: 827 | version "0.2.0" 828 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 829 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 830 | 831 | tweetnacl@^1.0.3: 832 | version "1.0.3" 833 | resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 834 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 835 | 836 | type-check@^0.4.0, type-check@~0.4.0: 837 | version "0.4.0" 838 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 839 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 840 | dependencies: 841 | prelude-ls "^1.2.1" 842 | 843 | type-fest@^0.8.1: 844 | version "0.8.1" 845 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 846 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 847 | 848 | typescript@^4.0.5: 849 | version "4.0.5" 850 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" 851 | integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ== 852 | 853 | uri-js@^4.2.2: 854 | version "4.4.0" 855 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" 856 | integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 857 | dependencies: 858 | punycode "^2.1.0" 859 | 860 | v8-compile-cache@^2.0.3: 861 | version "2.1.1" 862 | resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" 863 | integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== 864 | 865 | which@^2.0.1: 866 | version "2.0.2" 867 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 868 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 869 | dependencies: 870 | isexe "^2.0.0" 871 | 872 | word-wrap@^1.2.3: 873 | version "1.2.3" 874 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 875 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 876 | 877 | wrappy@1: 878 | version "1.0.2" 879 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 880 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 881 | 882 | write@1.0.3: 883 | version "1.0.3" 884 | resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 885 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 886 | dependencies: 887 | mkdirp "^0.5.1" 888 | 889 | ws@^7.3.1: 890 | version "7.3.1" 891 | resolved "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" 892 | integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== 893 | --------------------------------------------------------------------------------