diff --git a/package.json b/package.json index e14f320..3e30dbe 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dotenv": "^16.0.3", "esbuild": "^0.15.11", "eslint": "^8.25.0", + "gray-matter": "^4.0.3", "prettier": "^2.7.1", "typescript": "^4.8.4" } diff --git a/src/_reupload.ts b/src/_reupload.ts index 4cf84ce..3364847 100644 --- a/src/_reupload.ts +++ b/src/_reupload.ts @@ -1,6 +1,6 @@ import { SlashCommandBuilder, Routes, PermissionFlagsBits } from 'discord.js'; import { REST } from '@discordjs/rest'; -import { getTags } from './tagsTags'; +import { getTags } from './tags'; export const reuploadCommands = async () => { const tags = await getTags(); @@ -39,7 +39,7 @@ export const reuploadCommands = async () => { ), new SlashCommandBuilder() .setName('say') - .setDescription('Say someothing through the bot') + .setDescription('Say something through the bot') .addStringOption((option) => option .setName('content') @@ -48,11 +48,6 @@ export const reuploadCommands = async () => { ) .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers) .setDMPermission(false), - new SlashCommandBuilder() - .setName('rolemenu') - .setDescription('Make a role menu') - .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers) - .setDMPermission(false), new SlashCommandBuilder().setName('joke').setDescription("it's a joke"), ].map((command) => command.toJSON()); diff --git a/src/commands/rolemenu.ts b/src/commands/rolemenu.ts deleted file mode 100644 index 09f4b52..0000000 --- a/src/commands/rolemenu.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - ActionRowBuilder, - ButtonBuilder, - ButtonStyle, - CacheType, - ChatInputCommandInteraction, -} from 'discord.js'; - -export const roleMenuCommand = async ( - i: ChatInputCommandInteraction -) => { - const row = new ActionRowBuilder().addComponents( - new ButtonBuilder() - .setCustomId('showRoleMenu') - .setLabel('Show role menu') - .setStyle(ButtonStyle.Primary) - ); - - await i.channel?.send({ content: '**Role menu**', components: [row] }); - - await i.reply({ content: 'Done!', ephemeral: true }); -}; diff --git a/src/commands/tags.ts b/src/commands/tags.ts index 9ba8b16..840290d 100644 --- a/src/commands/tags.ts +++ b/src/commands/tags.ts @@ -3,7 +3,7 @@ import { type CacheType, EmbedBuilder, } from 'discord.js'; -import { getTags } from '../tagsTags'; +import { getTags } from '../tags'; export const tagsCommand = async ( i: ChatInputCommandInteraction diff --git a/src/constants.ts b/src/constants.ts index 44f9dba..3a88957 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -23,7 +23,7 @@ export const COLORS = { blue: 0x60a5fa, yellow: 0xfde047, orange: 0xfb923c, -} as const; +} as { [key: string]: number }; /* CHANGEME */ export const ALLOWED_ROLES = ['Alert', 'Events', 'Progress']; diff --git a/src/index.ts b/src/index.ts index 9813fb3..2a16eca 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,9 +4,6 @@ import { Partials, OAuth2Scopes, InteractionType, - SelectMenuBuilder, - ActionRowBuilder, - GuildMemberRoleManager, } from 'discord.js'; import { reuploadCommands } from './_reupload'; @@ -23,7 +20,6 @@ import { jokeCommand } from './commands/joke'; import random from 'just-random'; import { green, bold, yellow } from 'kleur/colors'; import 'dotenv/config'; -import { roleMenuCommand } from './commands/rolemenu'; const client = new Client({ intents: [ @@ -119,74 +115,6 @@ client.on('interactionCreate', async (interaction) => { await tagsCommand(interaction); } else if (commandName === 'joke') { await jokeCommand(interaction); - } else if (commandName === 'rolemenu') { - await roleMenuCommand(interaction); - } - } else if (interaction.isButton()) { - if (interaction.customId === 'showRoleMenu') { - if (!interaction.guild || !interaction.member) return; - - const roles = await interaction.guild.roles - .fetch() - .then((a) => - a.filter((b) => BuildConfig.ALLOWED_ROLES.includes(b.name)) - ); - - const row = new ActionRowBuilder().addComponents( - new SelectMenuBuilder() - .setCustomId('roleMenuSelect') - .setPlaceholder('Nothing selected') - .addOptions( - roles.map((role) => ({ - label: role.name, - value: role.id, - default: ( - interaction.member!.roles as GuildMemberRoleManager - ).cache.has(role.id), - })) - ) - .setMaxValues(roles.toJSON().length) - .setMinValues(0) - ); - - await interaction.reply({ - content: 'Select your roles here.', - components: [row], - ephemeral: true, - }); - } - } else if (interaction.isSelectMenu()) { - if (interaction.customId === 'roleMenuSelect') { - if (!interaction.guild || !interaction.member) return; - - await interaction.deferReply({ ephemeral: true }); - - const selectedRoles = interaction.values; - - const roleManager = interaction.member.roles as GuildMemberRoleManager; - - for (const role of BuildConfig.ALLOWED_ROLES) { - const roleID = interaction.guild.roles.cache - .find((a) => a.name === role) - ?.id.toString(); - - if (!roleID) continue; - - if (roleManager.cache.has(roleID) && !selectedRoles.includes(roleID)) { - await roleManager.remove(roleID); - } - if (!roleManager.cache.has(roleID) && selectedRoles.includes(roleID)) { - await roleManager.add(roleID); - } - } - - await interaction.editReply({ - content: 'Roles updated.', - }); - - setTimeout(() => { - interaction.deleteReply(); - }, 3000); } } }); diff --git a/src/tags.json b/src/tags.json deleted file mode 100644 index 470471b..0000000 --- a/src/tags.json +++ /dev/null @@ -1,151 +0,0 @@ -[ - { - "name": "migrate", - "text": "https://prismlauncher.org/wiki/getting-started/migrating-multimc/", - "aliases": ["migr", "mmc", "multimc"] - }, - { - "name": "thematrix", - "text": "https://matrix.to/#/#prismlauncher:matrix.org" - }, - { - "name": "log", - "aliases": ["sendlog", "logs", "🪵"], - "text": "Please send logs: https://media.discordapp.net/attachments/923671549758820434/1027408644289077268/unknown.png" - }, - { - "name": "eta", - "aliases": ["wen", "when"], - "text": "Sometime" - }, - { - "name": "optifine", - "aliases": ["of", "optimize", "opticrap", "notfine"], - "embed": { - "color": "green", - "title": "OptiFine", - "description": "OptiFine is known to cause problems when paired with other mods.\nPlease see [Installing OptiFine Alternatives](https://prismlauncher.org/wiki/getting-started/install-of-alternatives/).\nIf you really want to use OptiFine, see [Installing OptiFine](https://prismlauncher.org/wiki/getting-started/installing-optifine/)" - } - }, - { - "name": "binary-search", - "aliases": ["thanosmethod"], - "embed": { - "color": "blue", - "title": "Binary Search - method to find mod problems", - "description": "The binary search is a way of finding a faulty thing among a lot of other things, without having to remove the things one-by-one. This is useful for finding a broken mod among hundreds of mods, without having to spend time testing the mods one-by-one.\nThe procedure is simple:\n1. Remove half of the existing things, and put them aside.\n2. Run the program / game.\n3. Does the issue still exist?\nIf YES: Repeat from step 1 with the current things.\nIF NO: Swap out the current things with the ones set aside, and repeat from step 1.\n4. Repeat this process until the problematic thing/s have been found.\n\n Credit to the Quilt Community discord and the Forge Discord for these instructions." - } - }, - { - "name": "java", - "text": "https://prismlauncher.org/wiki/getting-started/installing-java/", - "aliases": ["j"] - }, - { - "name": "legacyjavafixer", - "text": "MinecraftForge provides a coremod to fix some issues with older Forge versions on recent Java versions. You can download it here: https://dist.creeper.host/FTB2/maven/net/minecraftforge/lex/legacyjavafixer/1.0/legacyjavafixer-1.0.jar", - "aliases": ["legacyjava", "ljf"] - }, - { - "name": "paths", - "aliases": ["dirs", "locate"], - "embed": { - "title": "Data directories", - "description": "Where Prism Launcher stores your data (e.g. instances)", - "color": "blue", - "fields": [ - { - "name": "Portable (Windows / Linux)", - "value": "In the PrismLauncher folder" - }, - { - "name": "Windows", - "value": "`%APPDATA%/PrismLauncher`" - }, - { - "name": "macOS", - "value": "`~/Library/Application Support/PrismLauncher`" - }, - { - "name": "Linux", - "value": "`~/.local/share/PrismLauncher`" - }, - { - "name": "Flatpak", - "value": "`~/.var/app/org.prismlauncher.PrismLauncher/data/PrismLauncher`" - } - ] - } - }, - { - "name": "build", - "text": "https://prismlauncher.org/wiki/development/build-instructions/" - }, - { - "name": "why", - "text": "https://prismlauncher.org/wiki/overview/faq/#why-did-our-community-choose-to-fork https://prismlauncher.org/news/moving-on/", - "aliases": [ - "whywasprismlaunchermade", - "whywasprismmade", - "whywaspolymcmade", - "mmcdrama", - "devlauncher" - ] - }, - { - "name": "whyjava8", - "embed": { - "title": "Why does Prism Launcher ask me to change java version?", - "description": "Minecraft versions before 1.17 required Java 8 and have issues with newer java, while newer versions require Java 17, so you need to change java version. Some people think Java 8 is very outdated, but it's actually an LTS, it's still getting updates. If one of your mods is weird and requires newer java, you can bypass this going to instance settings-Java and ticking 'Skip java compatibility checks', but be aware of potential issues, such as [random CMEs](https://bugs.mojang.com/browse/MC-149777).", - "color": "orange" - }, - "aliases": ["isjava8ancient", "whyisprismforcingme"] - }, - { - "name": "update", - "embed": { - "title": "Does Prism Launcher auto-update?", - "description": "Prism Launcher auto-updates for macOS using the Sparkle Framework.\n\nWindows auto-updating is WIP for now, you will need to download the installer and run it again. (You will not lose your instances.)\n\nFor Linux, just use your package manager!", - "color": "blue" - }, - "aliases": ["updating", "autoupdate"] - }, - { - "name": "modupdater", - "embed": { - "title": "Mod updater", - "description": "Mod updating has been introduced in Prism Launcher 1.4.0! Upgrade if you haven't and you'll be able to use it.", - "color": "green" - }, - "aliases": ["mod-update", "modupdate"] - }, - { - "name": "curseforge", - "embed": { - "title": "What's wrong with CurseForge?", - "description": "CurseForge added a new option to block third party clients like Prism Launcher from accessing mod files, and they started to enforce this option lately. We can't allow you to download those mods directly from Prism Launcher, but Prism Launcher 1.3.1 and higher have a workaround to let modpacks work: letting you to download those opted out mods manually. We highly encourage asking authors that opted out to stop doing so.", - "color": "orange" - }, - "aliases": ["cf", "curse", "cursed", "cursedfrog"] - }, - { - "name": "piracy", - "embed": { - "title": "We don't tolerate piracy!", - "description": "Prism Launcher has always been legal, legitimate & appropriate. We don't and never will have features such as offline login without an official account.", - "color": "red" - } - }, - { - "name": "whatislinuxexactly", - "text": "I’d just like to interject for a moment. What you’re refering to as Linux, is in fact, GNU/Linux, or as I’ve recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.\nMany computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called Linux, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project.\nThere really is a Linux, and these people are using it, but it is just a part of the system they use. Linux is the kernel: the program in the system that allocates the machine’s resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called Linux distributions are really distributions of GNU/Linux!" - }, - { - "name": "pluralkit", - "embed": { - "title": "Why PluralKit?", - "description": "Plurality is the existence of multiple self-aware entities inside the same brain.\n\nEach member of a system/collective (group residing inside the same physical brain) is an individual person, so please treat them as such.\n\nOn Discord, some systems may use [PluralKit](https://pluralkit.me/) to make their message appear with the correct profile, resulting in a `[BOT]` tag.\n\nFor more information about plurality, we recommend [More Than One](https://morethanone.info/) for a useful overview.", - "color": "blue" - } - } -] diff --git a/src/tags.ts b/src/tags.ts new file mode 100644 index 0000000..685d505 --- /dev/null +++ b/src/tags.ts @@ -0,0 +1,45 @@ +import type { EmbedData } from 'discord.js'; + +import matter from 'gray-matter'; +import { readdir, readFile } from 'fs/promises'; +import { join } from 'path'; +import { COLORS } from './constants'; + +interface Tag { + name: string; + aliases?: string[]; + text?: string; + embed?: EmbedData; +} + +const TAG_DIR = join(process.cwd(), 'tags'); + +export const getTags = async (): Promise => { + const filenames = await readdir(TAG_DIR); + const tags: Tag[] = []; + + for (const _file of filenames) { + const file = join(TAG_DIR, _file); + const { data, content } = matter(await readFile(file)); + + if (data.embed) { + tags.push({ + ...data, + name: _file.replace('.md', ''), + embed: { + ...data.embed, + description: content, + color: COLORS[data.embed.color], + }, + }); + } else { + tags.push({ + ...data, + name: _file.replace('.md', ''), + text: content, + }); + } + } + + return tags; +}; diff --git a/src/tagsTags.ts b/src/tagsTags.ts deleted file mode 100644 index abd15b7..0000000 --- a/src/tagsTags.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { EmbedData } from 'discord.js'; - -import { readFile } from 'fs/promises'; -import { join } from 'path'; -import { COLORS } from './constants'; - -interface Tag { - name: string; - aliases?: Array; - text?: string; - embed?: EmbedData; -} - -export const getTags = async (): Promise => { - const raw = JSON.parse( - await readFile(join(__dirname, 'tags.json'), { encoding: 'utf8' }) - ) as Tag[]; - - return raw.map((tag) => { - if (tag.embed?.color) { - // @ts-expect-error this doesn't work for TypeScript but it does for me - tag.embed.color = COLORS[tag.embed.color]; - } - - return tag; - }); -}; diff --git a/tags/binary-search.md b/tags/binary-search.md new file mode 100644 index 0000000..631b2e9 --- /dev/null +++ b/tags/binary-search.md @@ -0,0 +1,19 @@ +--- +aliases: ['thanosmethod'] +embed: + title: Binary Search - method to find mod problems + color: blue +--- + +The binary search is a way of finding a faulty thing among a lot of other things, without having to remove the things one-by-one. This is useful for finding a broken mod among hundreds of mods, without having to spend time testing the mods one-by-one. + +The procedure is simple: + +1. Remove half of the existing things, and put them aside. +2. Run the program / game. +3. Does the issue still exist? + If YES: Repeat from step 1 with the current things. + IF NO: Swap out the current things with the ones set aside, and repeat from step 1. +4. Repeat this process until the problematic thing/s have been found. + +_Credit to the Quilt Community discord and the Forge Discord for these instructions._ diff --git a/tags/build.md b/tags/build.md new file mode 100644 index 0000000..edbe551 --- /dev/null +++ b/tags/build.md @@ -0,0 +1 @@ +https://prismlauncher.org/wiki/development/build-instructions/ diff --git a/tags/curseforge.md b/tags/curseforge.md new file mode 100644 index 0000000..e889f9f --- /dev/null +++ b/tags/curseforge.md @@ -0,0 +1,8 @@ +--- +aliases: ['cf', 'curse', 'cursed', 'cursedfrog'] +embed: + title: What's wrong with CurseForge? + color: orange +--- + +CurseForge added a new option to block third party clients like Prism Launcher from accessing mod files, and they started to enforce this option lately. We can't allow you to download those mods directly from Prism Launcher, but Prism Launcher 1.3.1 and higher have a workaround to let modpacks work: letting you to download those opted out mods manually. We highly encourage asking authors that opted out to stop doing so. diff --git a/tags/java.md b/tags/java.md new file mode 100644 index 0000000..ed73997 --- /dev/null +++ b/tags/java.md @@ -0,0 +1 @@ +https://prismlauncher.org/wiki/getting-started/installing-java/ diff --git a/tags/legacyjavafixer.md b/tags/legacyjavafixer.md new file mode 100644 index 0000000..706a8d8 --- /dev/null +++ b/tags/legacyjavafixer.md @@ -0,0 +1,5 @@ +--- +aliases: ['legacyjava', 'ljf'] +--- + +MinecraftForge provides a coremod to fix some issues with older Forge versions on recent Java versions. You can download it here: https://dist.creeper.host/FTB2/maven/net/minecraftforge/lex/legacyjavafixer/1.0/legacyjavafixer-1.0.jar diff --git a/tags/log.md b/tags/log.md new file mode 100644 index 0000000..82c3d5d --- /dev/null +++ b/tags/log.md @@ -0,0 +1,5 @@ +--- +aliases: ['sendlog', 'logs', '🪵'] +--- + +Please send logs: https://media.discordapp.net/attachments/923671549758820434/1027408644289077268/unknown.png diff --git a/tags/migrate.md b/tags/migrate.md new file mode 100644 index 0000000..287442b --- /dev/null +++ b/tags/migrate.md @@ -0,0 +1,5 @@ +--- +aliases: ['migr', 'mmc', 'multimc'] +--- + +https://prismlauncher.org/wiki/getting-started/migrating-multimc/ diff --git a/tags/optifine.md b/tags/optifine.md new file mode 100644 index 0000000..52a4476 --- /dev/null +++ b/tags/optifine.md @@ -0,0 +1,12 @@ +--- +aliases: ['of', 'optimize', 'opticrap', 'notfine'] +embed: + title: OptiFine + color: green +--- + +OptiFine is known to cause problems when paired with other mods. + +Please see [Installing OptiFine Alternatives](https://prismlauncher.org/wiki/getting-started/install-of-alternatives/). + +If you really want to use OptiFine, see [Installing OptiFine](https://prismlauncher.org/wiki/getting-started/installing-optifine/) diff --git a/tags/paths.md b/tags/paths.md new file mode 100644 index 0000000..c02b553 --- /dev/null +++ b/tags/paths.md @@ -0,0 +1,19 @@ +--- +aliases: ['dirs', 'locate'] +embed: + title: Data directories + color: blue + fields: + - name: Portable (Windows / Linux) + value: In the PrismLauncher folder + - name: Windows + value: '`%APPDATA%/PrismLauncher`' + - name: macOS + value: '`~/Library/Application Support/PrismLauncher`' + - name: Linux + value: '`~/.local/share/PrismLauncher`' + - name: Flatpak + value: '`~/.var/app/org.prismlauncher.PrismLauncher/data/PrismLauncher`' +--- + +Where Prism Launcher stores your data (e.g. instances) diff --git a/tags/piracy.md b/tags/piracy.md new file mode 100644 index 0000000..fb55393 --- /dev/null +++ b/tags/piracy.md @@ -0,0 +1,7 @@ +--- +embed: + title: We don't tolerate piracy! + color: red +--- + +Prism Launcher has always been legal, legitimate & appropriate. We don't and never will have features such as offline login without an official account. diff --git a/tags/pluralkit.md b/tags/pluralkit.md new file mode 100644 index 0000000..c2096d4 --- /dev/null +++ b/tags/pluralkit.md @@ -0,0 +1,14 @@ +--- +aliases: ['pk'] +embed: + title: Why PluralKit? + color: blue +--- + +Plurality is the existence of multiple self-aware entities inside the same brain. + +Each member of a system/collective (group residing inside the same physical brain) is an individual person, so please treat them as such. + +On Discord, some systems may use [PluralKit](https://pluralkit.me/) to make their message appear with the correct profile, resulting in a `[BOT]` tag. + +For more information about plurality, we recommend [More Than One](https://morethanone.info/) for a useful overview. diff --git a/tags/update.md b/tags/update.md new file mode 100644 index 0000000..111fca6 --- /dev/null +++ b/tags/update.md @@ -0,0 +1,12 @@ +--- +aliases: ['updating', 'autoupdate'] +embed: + title: Does Prism Launcher auto-update? + color: blue +--- + +Prism Launcher auto-updates for macOS using the Sparkle Framework. + +Windows auto-updating is WIP for now, you will need to download the installer and run it again. (You will not lose your instances.) + +For Linux, just use your package manager! diff --git a/tags/why.md b/tags/why.md new file mode 100644 index 0000000..d26458f --- /dev/null +++ b/tags/why.md @@ -0,0 +1,11 @@ +--- +aliases: + - 'whywasprismlaunchermade' + - 'whywasprismmade' + - 'whywaspolymcmade' + - 'mmcdrama' + - 'devlauncher' +--- + +https://prismlauncher.org/wiki/overview/faq/#why-did-our-community-choose-to-fork +https://prismlauncher.org/news/moving-on/ diff --git a/tags/whyjava8.md b/tags/whyjava8.md new file mode 100644 index 0000000..fa696c8 --- /dev/null +++ b/tags/whyjava8.md @@ -0,0 +1,8 @@ +--- +aliases: ['isjava8ancient', 'whyisprismforcingme'] +embed: + title: Why does Prism Launcher ask me to change Java version? + color: orange +--- + +Minecraft versions before 1.17 required Java 8 and have issues with newer java, while newer versions require Java 17, so you need to change java version. Some people think Java 8 is very outdated, but it's actually an LTS, it's still getting updates. If one of your mods is weird and requires newer java, you can bypass this going to instance settings-Java and ticking 'Skip java compatibility checks', but be aware of potential issues, such as [random CMEs](https://bugs.mojang.com/browse/MC-149777). diff --git a/yarn.lock b/yarn.lock index deff0b6..f1f030f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -291,6 +291,13 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -650,6 +657,11 @@ espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" @@ -679,6 +691,13 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -836,6 +855,16 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -882,6 +911,11 @@ ip-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -909,6 +943,14 @@ js-sdsl@^4.1.4: resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -931,6 +973,11 @@ just-random@^3.1.1: resolved "https://registry.yarnpkg.com/just-random/-/just-random-3.1.1.tgz#87ca02798b427d5e7b632cfe3367b3b25aea7040" integrity sha512-nb9chl3E511Zu68G1EfC6jGh/aU0lojFOo7zaSEPznktuQhr8TkH4z7DyWebgwdLki8ekLOmzia3UTlv4zBWHQ== +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + kleur@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" @@ -1162,6 +1209,14 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -1199,6 +1254,11 @@ source-map@^0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" @@ -1218,6 +1278,11 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"