From 8986224b885afa6e095bd550539d29a674516c1f Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Mon, 31 Jan 2022 16:50:02 -0800 Subject: [PATCH 01/12] Initial WIP --- scripts/generate-sidebar.js | 162 ++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100755 scripts/generate-sidebar.js diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar.js new file mode 100755 index 0000000000..76da5795a5 --- /dev/null +++ b/scripts/generate-sidebar.js @@ -0,0 +1,162 @@ +#!/usr/bin/env node + +const yargs = require("yargs/yargs") +const path = require(`path`) +const fs = require("fs") +const startCase = require("lodash").startCase + +function toOutputPath(sourcePath) { + return sourcePath.replace(/.*_docs-sources/, "") +} + +async function generateSidebar(dir) { + const paths = fs.readdirSync(dir) + const resultingItems = [] + + // // console.log(paths) + // const foundIndex = paths.find((p) => { + // let fullPath = path.join(dir, p) + // // console.log(fullPath) + // if (fs.statSync(fullPath).isDirectory()) { + // // console.log("DIR: ", fullPath) + // return false + // } + // // console.log(path.parse(p).name.toLowerCase()) + // return path.parse(p).name.toLowerCase() === "index" + // }) + // if (foundIndex) { + // console.log("AHA! AN INDEX FILE in: %o", paths) + // } + // process.exit(1) + + // iterate over all files in this directory + for (const file of paths) { + let fullDir = path.join(dir, file) + const newFullDir = path.join(dir, file.substring(2)) + + // process subdirectories recusively + if (fs.statSync(fullDir).isDirectory()) { + if (argv.verbose) { + console.log(`Processing subdirectory: %o`, path.parse(fullDir).name) + } + + const items = await generateSidebar(fullDir) + const foundIndex = items.find((item) => { + if (typeof item === "object") { + return false + } + // console.log(path.parse(item).name.toLowerCase()) + return path.parse(item).name.toLowerCase() === "index" + }) + const betterName = startCase( + path.parse(fullDir).name.replace(/\-/gim, " ") + ) + + // apply the category-index convention to make the category clickable, + // and remove it from the list of subpages + if (foundIndex) { + // console.log(`Found index in %o`, fullDir) + resultingItems.push({ + label: betterName, + type: "category", + link: { + type: "doc", + id: foundIndex, + }, + items: items.filter((item) => { + if (typeof item === "object") { + return true + } + return path.parse(item).name.toLowerCase() !== "index" + }), + }) + } else { + resultingItems.push({ [betterName]: items }) + } + // if it's a file, output its path + } else { + if (file.match(/.md$/)) { + const properPath = toOutputPath(fullDir) + const generatedPageId = path.join( + path.parse(properPath).dir, + path.parse(properPath).name + ) + resultingItems.push(generatedPageId) + } + } + } + return resultingItems +} + +async function main() { + const { hideBin } = require("yargs/helpers") + + argv = yargs(hideBin(process.argv)) + .usage("$0 [-bv] [-o file] [directory]") + .option("back", { + alias: "b", + type: "boolean", + description: "Include a back button at the top of the sidebar", + }) + .option("output", { + alias: "o", + type: "string", + description: "The path at which to write sidebar file", + }) + .option("verbose", { + alias: "v", + type: "boolean", + description: "Run with verbose logging", + }) + .positional("directory", { + description: + "the directory to generate a sidebar for, e.g. a multi-page guide", + }) + .strictOptions() + .parse() + + if (argv.verbose) { + console.log("Generating sidebar for %o", argv._[0] || process.cwd()) + } + + // operate on the working dir if not otherwise specified + const inputDir = argv._[0] || process.cwd() + const sideBar = await generateSidebar(inputDir) + + // add a back button, if called for + if (argv.back) { + sideBar.unshift({ + label: "Back to INSERT_TITLE_HERE", + type: "link", + href: toOutputPath(path.dirname(inputDir)), + className: "back-button", + }) + } + + if (argv.verbose) { + console.log("Done.\n") + } + + // console.log( + // "Done. Don't forget to place your sidebar file in /sidebars and update /sidebars.js to require it.\n" + // ) + + // construct the final output + data = + "const sidebar = " + + JSON.stringify(sideBar, null, 2) + + "\n\nmodule.exports = sidebar\n" + + // write to file or print to stdout + if (argv.output) { + fs.writeFile(argv.output, data, (err) => { + if (err) { + console.log("Error writing sidebar file: ", err) + } + }) + } else { + console.log(data) + } +} + +main() From e05412cab611f9365673a4e1c57cfe7d35e214a5 Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Mon, 31 Jan 2022 18:42:04 -0800 Subject: [PATCH 02/12] Fully functional for solo sidebars with category index pattern --- scripts/generate-sidebar.js | 139 ++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 77 deletions(-) diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar.js index 76da5795a5..1fa93dba1f 100755 --- a/scripts/generate-sidebar.js +++ b/scripts/generate-sidebar.js @@ -5,86 +5,73 @@ const path = require(`path`) const fs = require("fs") const startCase = require("lodash").startCase -function toOutputPath(sourcePath) { - return sourcePath.replace(/.*_docs-sources/, "") +function toOutputDocId(sourcePath) { + const outputPath = sourcePath.replace(/.*_docs-sources\//, "") + const docId = path.join( + path.parse(outputPath).dir, + path.parse(outputPath).name + ) + return docId } -async function generateSidebar(dir) { +const formatName = (filepath) => { + // TODO: extract from _category_.json file or file itself? + return startCase(path.parse(filepath).name.replace(/\-/gim, " ")) +} + +const isCategoryIndexPredicate = (p) => { + // e.g. .../index.md (we don't support the README variant) + return fs.statSync(p).isFile && path.parse(p).name.toLowerCase() === "index" +} + +const isSupportedFileType = (filepath) => { + // we only support .md and .mdx files + return filepath.match(/\.mdx?$/) +} + +async function generateSidebar(dir, spacer = "") { + if (argv.verbose) { + console.log("Processing directory: " + spacer + `%o`, path.parse(dir).name) + } + const paths = fs.readdirSync(dir) + let fullPaths = paths.map((p) => { + return path.join(dir, p) + }) const resultingItems = [] - // // console.log(paths) - // const foundIndex = paths.find((p) => { - // let fullPath = path.join(dir, p) - // // console.log(fullPath) - // if (fs.statSync(fullPath).isDirectory()) { - // // console.log("DIR: ", fullPath) - // return false - // } - // // console.log(path.parse(p).name.toLowerCase()) - // return path.parse(p).name.toLowerCase() === "index" - // }) - // if (foundIndex) { - // console.log("AHA! AN INDEX FILE in: %o", paths) - // } - // process.exit(1) - - // iterate over all files in this directory - for (const file of paths) { - let fullDir = path.join(dir, file) - const newFullDir = path.join(dir, file.substring(2)) - - // process subdirectories recusively - if (fs.statSync(fullDir).isDirectory()) { - if (argv.verbose) { - console.log(`Processing subdirectory: %o`, path.parse(fullDir).name) - } + const categoryIndex = fullPaths.find(isCategoryIndexPredicate) + fullPaths = fullPaths.filter((p) => !isCategoryIndexPredicate(p)) - const items = await generateSidebar(fullDir) - const foundIndex = items.find((item) => { - if (typeof item === "object") { - return false - } - // console.log(path.parse(item).name.toLowerCase()) - return path.parse(item).name.toLowerCase() === "index" - }) - const betterName = startCase( - path.parse(fullDir).name.replace(/\-/gim, " ") - ) - - // apply the category-index convention to make the category clickable, - // and remove it from the list of subpages - if (foundIndex) { - // console.log(`Found index in %o`, fullDir) - resultingItems.push({ - label: betterName, - type: "category", - link: { - type: "doc", - id: foundIndex, - }, - items: items.filter((item) => { - if (typeof item === "object") { - return true - } - return path.parse(item).name.toLowerCase() !== "index" - }), - }) - } else { - resultingItems.push({ [betterName]: items }) - } - // if it's a file, output its path + // iterate over all non-index files in this directory + for (const fullPath of fullPaths) { + if (fs.statSync(fullPath).isDirectory()) { + // process subdirectories recusively + const items = await generateSidebar(fullPath, spacer + " ") + resultingItems.push({ [formatName(fullPath)]: items }) } else { - if (file.match(/.md$/)) { - const properPath = toOutputPath(fullDir) - const generatedPageId = path.join( - path.parse(properPath).dir, - path.parse(properPath).name - ) + // if it's a (supported) file, just output its path + if (isSupportedFileType(fullPath)) { + const generatedPageId = toOutputDocId(fullPath) resultingItems.push(generatedPageId) } } } + + if (categoryIndex) { + return [ + { + label: formatName(dir), + type: "category", + link: { + type: "doc", + id: toOutputDocId(categoryIndex), + }, + items: resultingItems, + }, + ] + } + return resultingItems } @@ -123,24 +110,22 @@ async function main() { const inputDir = argv._[0] || process.cwd() const sideBar = await generateSidebar(inputDir) - // add a back button, if called for + // add a back button, if requested if (argv.back) { sideBar.unshift({ - label: "Back to INSERT_TITLE_HERE", + label: "INSERT_BACK_LABEL_HERE", type: "link", - href: toOutputPath(path.dirname(inputDir)), + href: toOutputDocId(path.dirname(inputDir)), className: "back-button", }) } if (argv.verbose) { - console.log("Done.\n") + console.log( + "Done. Don't forget to place your sidebar file in /sidebars and update /sidebars.js to require it.\n" + ) } - // console.log( - // "Done. Don't forget to place your sidebar file in /sidebars and update /sidebars.js to require it.\n" - // ) - // construct the final output data = "const sidebar = " + From 4bebf3d411633cb3727fd7cebc0c013cc681ca48 Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 05:59:59 -0800 Subject: [PATCH 03/12] Refactored to support multiple sidebar files --- scripts/generate-sidebar.js | 165 +++++++++++++++++++++++++++--------- 1 file changed, 124 insertions(+), 41 deletions(-) diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar.js index 1fa93dba1f..d34abe2ff9 100755 --- a/scripts/generate-sidebar.js +++ b/scripts/generate-sidebar.js @@ -6,7 +6,12 @@ const fs = require("fs") const startCase = require("lodash").startCase function toOutputDocId(sourcePath) { - const outputPath = sourcePath.replace(/.*_docs-sources\//, "") + // assume it could run in either source or output directories, but strip + // out everything up to the docs site base path + const outputPath = path + .resolve(sourcePath) + .replace(/.*\/(_docs-sources|docs)\//, "") + // then drop the extension const docId = path.join( path.parse(outputPath).dir, path.parse(outputPath).name @@ -19,7 +24,7 @@ const formatName = (filepath) => { return startCase(path.parse(filepath).name.replace(/\-/gim, " ")) } -const isCategoryIndexPredicate = (p) => { +const isCategoryIndexFilePredicate = (p) => { // e.g. .../index.md (we don't support the README variant) return fs.statSync(p).isFile && path.parse(p).name.toLowerCase() === "index" } @@ -29,37 +34,56 @@ const isSupportedFileType = (filepath) => { return filepath.match(/\.mdx?$/) } -async function generateSidebar(dir, spacer = "") { - if (argv.verbose) { - console.log("Processing directory: " + spacer + `%o`, path.parse(dir).name) +async function generateSidebar(dir, backButtonLabel = null, spacer = "") { + // bail if it isn't actually a directory + if (!fs.statSync(dir).isDirectory()) { + console.log(`WARNING: skipping top-level plain file %o`, dir) + return } + if (verbose) { + console.log("Generating: " + spacer + `%o`, path.parse(dir).name) + } + + // fetch the directory contents const paths = fs.readdirSync(dir) let fullPaths = paths.map((p) => { return path.join(dir, p) }) - const resultingItems = [] - const categoryIndex = fullPaths.find(isCategoryIndexPredicate) - fullPaths = fullPaths.filter((p) => !isCategoryIndexPredicate(p)) + // bail if the directory is empty + if (fullPaths.length == 0) { + console.log(`WARNING: skipping empty directory %o`, dir) + return + } + + // determine if this directory follows the category index convention + const categoryIndex = fullPaths.find(isCategoryIndexFilePredicate) + // if so, iterate only the non-index pages + fullPaths = fullPaths.filter((p) => !isCategoryIndexFilePredicate(p)) // iterate over all non-index files in this directory + let sidebarItems = [] + for (const fullPath of fullPaths) { if (fs.statSync(fullPath).isDirectory()) { - // process subdirectories recusively - const items = await generateSidebar(fullPath, spacer + " ") - resultingItems.push({ [formatName(fullPath)]: items }) + // process subdirectories recusively (back button is top level only!) + const items = await generateSidebar(fullPath, null, spacer + " ") + if (items) { + sidebarItems.push({ [formatName(fullPath)]: items }) + } } else { - // if it's a (supported) file, just output its path + // if it's a file (of supported type), just output its path if (isSupportedFileType(fullPath)) { const generatedPageId = toOutputDocId(fullPath) - resultingItems.push(generatedPageId) + sidebarItems.push(generatedPageId) } } } + // create a category index block with the other items if there is one if (categoryIndex) { - return [ + sidebarItems = [ { label: formatName(dir), type: "category", @@ -67,23 +91,89 @@ async function generateSidebar(dir, spacer = "") { type: "doc", id: toOutputDocId(categoryIndex), }, - items: resultingItems, + items: sidebarItems, }, ] } - return resultingItems + // add a back button, if requested + if (backButtonLabel) { + sidebarItems.unshift({ + label: backButtonLabel, + type: "link", + href: toOutputDocId(path.dirname(dir)), + className: "back-button", + }) + } + + return sidebarItems +} + +async function generateSingleSidebarFile(dir, backButtonLabel) { + if (verbose) { + console.log("Generating sidebar for %o", dir) + } + + // generate it! + const sidebar = await generateSidebar(dir, backButtonLabel) + + // exit with error if no sidebar was generated + if (!sidebar) { + console.log(`ERROR: Failed to generate a sidebar for %o`, dir) + process.exit(1) + } + + // construct the final output + const data = + "const sidebar = " + + JSON.stringify(sidebar, null, 2) + + "\n\nmodule.exports = sidebar\n" + + return data +} + +async function generateMultiSidebarFile(dirs, backButtonLabel) { + if (verbose) { + console.log(`Generating sidebars for multiple directories: %o`, dirs) + } + + // iterate over all dirs and generate a sidebar from each + const sidebars = {} + + for (const dir of dirs) { + // generate it! + const sidebar = await generateSidebar(dir, backButtonLabel) + // add the sidebar to our result object + if (sidebar) { + sidebars[path.parse(dir).name] = sidebar + } + } + + // exit with error if no sidebars were generated + if (Object.keys(sidebars).length === 0) { + console.log("ERROR: Failed to generate sidebars") + process.exit(1) + } + + // construct the final output + const data = + "const sidebars = " + + JSON.stringify(sidebars, null, 2) + + "\n\nmodule.exports = sidebars\n" + + return data } async function main() { const { hideBin } = require("yargs/helpers") - argv = yargs(hideBin(process.argv)) + // parse command line args + const argv = yargs(hideBin(process.argv)) .usage("$0 [-bv] [-o file] [directory]") .option("back", { alias: "b", - type: "boolean", - description: "Include a back button at the top of the sidebar", + type: "string", + description: "Include a back button with the specified label", }) .option("output", { alias: "o", @@ -97,46 +187,39 @@ async function main() { }) .positional("directory", { description: - "the directory to generate a sidebar for, e.g. a multi-page guide", + "The directory to generate a sidebar for, e.g. a multi-page guide, or a list of directories to generate a multi-sidebar file", }) .strictOptions() + .version("1.0") .parse() - if (argv.verbose) { - console.log("Generating sidebar for %o", argv._[0] || process.cwd()) - } + // we'll let this be global, for convenience + verbose = argv.verbose - // operate on the working dir if not otherwise specified - const inputDir = argv._[0] || process.cwd() - const sideBar = await generateSidebar(inputDir) + let data - // add a back button, if requested - if (argv.back) { - sideBar.unshift({ - label: "INSERT_BACK_LABEL_HERE", - type: "link", - href: toOutputDocId(path.dirname(inputDir)), - className: "back-button", - }) + // generate a single or multi-sidebar file + if (argv._.length < 2) { + // operate on the working dir if not otherwise specified + const inputDir = argv._[0] || process.cwd() + data = await generateSingleSidebarFile(inputDir, argv.back) + } else { + data = await generateMultiSidebarFile(argv._, argv.back) } - if (argv.verbose) { + if (verbose) { console.log( "Done. Don't forget to place your sidebar file in /sidebars and update /sidebars.js to require it.\n" ) } - // construct the final output - data = - "const sidebar = " + - JSON.stringify(sideBar, null, 2) + - "\n\nmodule.exports = sidebar\n" - // write to file or print to stdout if (argv.output) { fs.writeFile(argv.output, data, (err) => { if (err) { console.log("Error writing sidebar file: ", err) + } else { + console.log("Wrote sidebar file to %o", argv.output) } }) } else { From b22910a67deebd9537afc8ce80158f14759a91de Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 07:59:37 -0800 Subject: [PATCH 04/12] Get it working through yarn --- package.json | 3 ++- .../{generate-sidebar.js => generate-sidebar} | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) rename scripts/{generate-sidebar.js => generate-sidebar} (93%) diff --git a/package.json b/package.json index 0655107a73..3400f503b1 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", "regenerate": "env-cmd --silent docs-sourcer", - "regenerate:local": "yarn regenerate --plugins local-copier" + "regenerate:local": "yarn regenerate --plugins local-copier", + "sidebar": "scripts/generate-sidebar" }, "dependencies": { "@docusaurus/core": "^2.0.0-beta.14", diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar similarity index 93% rename from scripts/generate-sidebar.js rename to scripts/generate-sidebar index d34abe2ff9..5d3de07e9d 100755 --- a/scripts/generate-sidebar.js +++ b/scripts/generate-sidebar @@ -5,9 +5,12 @@ const path = require(`path`) const fs = require("fs") const startCase = require("lodash").startCase +// global, for convenience +let verbose + function toOutputDocId(sourcePath) { - // assume it could run in either source or output directories, but strip - // out everything up to the docs site base path + // assume it could run against either source or output directories, + // but strip out everything up to the docs site base path const outputPath = path .resolve(sourcePath) .replace(/.*\/(_docs-sources|docs)\//, "") @@ -34,6 +37,10 @@ const isSupportedFileType = (filepath) => { return filepath.match(/\.mdx?$/) } +const resolveDir = (dir) => { + return path.resolve(path.join(process.env.INIT_CWD, dir)) +} + async function generateSidebar(dir, backButtonLabel = null, spacer = "") { // bail if it isn't actually a directory if (!fs.statSync(dir).isDirectory()) { @@ -141,6 +148,7 @@ async function generateMultiSidebarFile(dirs, backButtonLabel) { const sidebars = {} for (const dir of dirs) { + // generate it! const sidebar = await generateSidebar(dir, backButtonLabel) // add the sidebar to our result object @@ -193,7 +201,6 @@ async function main() { .version("1.0") .parse() - // we'll let this be global, for convenience verbose = argv.verbose let data @@ -201,10 +208,11 @@ async function main() { // generate a single or multi-sidebar file if (argv._.length < 2) { // operate on the working dir if not otherwise specified - const inputDir = argv._[0] || process.cwd() + const inputDir = resolveDir(argv._[0] || "") data = await generateSingleSidebarFile(inputDir, argv.back) } else { - data = await generateMultiSidebarFile(argv._, argv.back) + const inputDirs = argv._.map(resolveDir) + data = await generateMultiSidebarFile(inputDirs, argv.back) } if (verbose) { From 87d1841ef80bd3238a0fd521e2f36157b7119d08 Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 11:34:59 -0800 Subject: [PATCH 05/12] Split sidebar script into executable and lib to prepare for testing --- package.json | 2 +- scripts/generate-sidebar.js | 87 +++++++++++++++ scripts/{generate-sidebar => sidebar-lib.js} | 107 ++++--------------- 3 files changed, 111 insertions(+), 85 deletions(-) create mode 100755 scripts/generate-sidebar.js rename scripts/{generate-sidebar => sidebar-lib.js} (61%) mode change 100755 => 100644 diff --git a/package.json b/package.json index 3400f503b1..bd720f839a 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "typecheck": "tsc", "regenerate": "env-cmd --silent docs-sourcer", "regenerate:local": "yarn regenerate --plugins local-copier", - "sidebar": "scripts/generate-sidebar" + "sidebar": "scripts/generate-sidebar.js", }, "dependencies": { "@docusaurus/core": "^2.0.0-beta.14", diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar.js new file mode 100755 index 0000000000..8ef3f97287 --- /dev/null +++ b/scripts/generate-sidebar.js @@ -0,0 +1,87 @@ +#!/usr/bin/env node + +const yargs = require("yargs/yargs") +const path = require(`path`) +const fs = require("fs") +const { + generateSingleSidebarFile, + generateMultiSidebarFile, +} = require("./sidebar-lib") + +// when running with yarn, we need to prepend the initial +// working directory to the path +const resolveDir = (dir) => { + if (process.env.INIT_CWD) { + return path.resolve(path.join(process.env.INIT_CWD, dir)) + } else { + return path.resolve(dir) + } +} + +async function main() { + const { hideBin } = require("yargs/helpers") + + // parse command line args + const argv = yargs(hideBin(process.argv)) + .usage("$0 [-bv] [-o file] [directory]") + .option("back", { + alias: "b", + type: "string", + description: "Include a back button with the specified label", + }) + .option("output", { + alias: "o", + type: "string", + description: "The path at which to write sidebar file", + }) + .option("verbose", { + alias: "v", + type: "boolean", + description: "Run with verbose logging", + }) + .positional("directory", { + description: + "The directory to generate a sidebar for, e.g. a multi-page guide, or a list of directories to generate a multi-sidebar file", + }) + .strictOptions() + .version("1.0") + .parse() + + const opts = { + backButton: argv.back, + verbose: argv.verbose, + } + + let data + + // generate a single or multi-sidebar file + if (argv._.length < 2) { + // operate on the working dir if not otherwise specified + const inputDir = resolveDir(argv._[0] || ".") + data = await generateSingleSidebarFile(inputDir, opts) + } else { + const inputDirs = argv._.map(resolveDir) + data = await generateMultiSidebarFile(inputDirs, opts) + } + + if (opts.verbose) { + console.log( + "Done. Don't forget to place your sidebar file in /sidebars and update /sidebars.js to require it.\n" + ) + } + + // write to file or print to stdout + if (argv.output) { + fs.writeFile(argv.output, data, (err) => { + if (err) { + console.log("Error writing sidebar file: ", err) + } else { + console.log("Wrote sidebar file to %o", argv.output) + } + }) + } else { + console.log(data) + } +} + +main() diff --git a/scripts/generate-sidebar b/scripts/sidebar-lib.js old mode 100755 new mode 100644 similarity index 61% rename from scripts/generate-sidebar rename to scripts/sidebar-lib.js index 5d3de07e9d..e1900a125c --- a/scripts/generate-sidebar +++ b/scripts/sidebar-lib.js @@ -1,13 +1,10 @@ #!/usr/bin/env node const yargs = require("yargs/yargs") -const path = require(`path`) +const path = require("path") const fs = require("fs") const startCase = require("lodash").startCase -// global, for convenience -let verbose - function toOutputDocId(sourcePath) { // assume it could run against either source or output directories, // but strip out everything up to the docs site base path @@ -37,19 +34,17 @@ const isSupportedFileType = (filepath) => { return filepath.match(/\.mdx?$/) } -const resolveDir = (dir) => { - return path.resolve(path.join(process.env.INIT_CWD, dir)) -} - -async function generateSidebar(dir, backButtonLabel = null, spacer = "") { +async function generateSidebar(dir, opts) { // bail if it isn't actually a directory if (!fs.statSync(dir).isDirectory()) { console.log(`WARNING: skipping top-level plain file %o`, dir) return } - if (verbose) { - console.log("Generating: " + spacer + `%o`, path.parse(dir).name) + opts.spacer = opts.spacer || "" + + if (opts.verbose) { + console.log("Generating: " + opts.spacer + `%o`, path.parse(dir).name) } // fetch the directory contents @@ -75,7 +70,11 @@ async function generateSidebar(dir, backButtonLabel = null, spacer = "") { for (const fullPath of fullPaths) { if (fs.statSync(fullPath).isDirectory()) { // process subdirectories recusively (back button is top level only!) - const items = await generateSidebar(fullPath, null, spacer + " ") + const items = await generateSidebar(fullPath, { + backButton: opts.backButton, + verbose: opts.verbose, + spacer: opts.spacer + " ", + }) if (items) { sidebarItems.push({ [formatName(fullPath)]: items }) } @@ -104,9 +103,9 @@ async function generateSidebar(dir, backButtonLabel = null, spacer = "") { } // add a back button, if requested - if (backButtonLabel) { + if (opts.backButton) { sidebarItems.unshift({ - label: backButtonLabel, + label: opts.backButton, type: "link", href: toOutputDocId(path.dirname(dir)), className: "back-button", @@ -116,13 +115,13 @@ async function generateSidebar(dir, backButtonLabel = null, spacer = "") { return sidebarItems } -async function generateSingleSidebarFile(dir, backButtonLabel) { - if (verbose) { +async function generateSingleSidebarFile(dir, opts) { + if (opts.verbose) { console.log("Generating sidebar for %o", dir) } // generate it! - const sidebar = await generateSidebar(dir, backButtonLabel) + const sidebar = await generateSidebar(dir, opts) // exit with error if no sidebar was generated if (!sidebar) { @@ -139,8 +138,8 @@ async function generateSingleSidebarFile(dir, backButtonLabel) { return data } -async function generateMultiSidebarFile(dirs, backButtonLabel) { - if (verbose) { +async function generateMultiSidebarFile(dirs, opts) { + if (opts.verbose) { console.log(`Generating sidebars for multiple directories: %o`, dirs) } @@ -148,9 +147,8 @@ async function generateMultiSidebarFile(dirs, backButtonLabel) { const sidebars = {} for (const dir of dirs) { - // generate it! - const sidebar = await generateSidebar(dir, backButtonLabel) + const sidebar = await generateSidebar(dir, opts) // add the sidebar to our result object if (sidebar) { sidebars[path.parse(dir).name] = sidebar @@ -172,67 +170,8 @@ async function generateMultiSidebarFile(dirs, backButtonLabel) { return data } -async function main() { - const { hideBin } = require("yargs/helpers") - - // parse command line args - const argv = yargs(hideBin(process.argv)) - .usage("$0 [-bv] [-o file] [directory]") - .option("back", { - alias: "b", - type: "string", - description: "Include a back button with the specified label", - }) - .option("output", { - alias: "o", - type: "string", - description: "The path at which to write sidebar file", - }) - .option("verbose", { - alias: "v", - type: "boolean", - description: "Run with verbose logging", - }) - .positional("directory", { - description: - "The directory to generate a sidebar for, e.g. a multi-page guide, or a list of directories to generate a multi-sidebar file", - }) - .strictOptions() - .version("1.0") - .parse() - - verbose = argv.verbose - - let data - - // generate a single or multi-sidebar file - if (argv._.length < 2) { - // operate on the working dir if not otherwise specified - const inputDir = resolveDir(argv._[0] || "") - data = await generateSingleSidebarFile(inputDir, argv.back) - } else { - const inputDirs = argv._.map(resolveDir) - data = await generateMultiSidebarFile(inputDirs, argv.back) - } - - if (verbose) { - console.log( - "Done. Don't forget to place your sidebar file in /sidebars and update /sidebars.js to require it.\n" - ) - } - - // write to file or print to stdout - if (argv.output) { - fs.writeFile(argv.output, data, (err) => { - if (err) { - console.log("Error writing sidebar file: ", err) - } else { - console.log("Wrote sidebar file to %o", argv.output) - } - }) - } else { - console.log(data) - } +module.exports = { + generateSidebar: generateSidebar, + generateSingleSidebarFile: generateSingleSidebarFile, + generateMultiSidebarFile: generateMultiSidebarFile, } - -main() From 8c048a5833040a42414a364b0946789409292e3d Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 15:42:00 -0800 Subject: [PATCH 06/12] Now with 97% test coverage! --- jest.config.js | 12 + package.json | 4 + scripts/generate-sidebar.js | 21 +- scripts/sidebar-lib.js | 56 +- .../scripts/sidebar-data/_category_.json | 0 .../sidebar-data/category-index/bar.mdx | 0 .../sidebar-data/category-index/baz.md | 0 .../sidebar-data/category-index/foo.md | 0 .../sidebar-data/category-index/index.md | 0 .../sample-data/scripts/sidebar-data/file.md | 0 .../scripts/sidebar-data/flat-list/bar.mdx | 0 .../scripts/sidebar-data/flat-list/baz.md | 0 .../scripts/sidebar-data/flat-list/foo.md | 0 .../scripts/sidebar-data/hierarchy/bar.mdx | 0 .../scripts/sidebar-data/hierarchy/baz.md | 0 .../hierarchy/first-section/bar.mdx | 0 .../hierarchy/first-section/baz.md | 0 .../hierarchy/first-section/foo.md | 0 .../scripts/sidebar-data/hierarchy/foo.md | 0 .../hierarchy/second-section/bar.mdx | 0 .../hierarchy/second-section/baz.md | 0 .../hierarchy/second-section/foo.md | 0 .../hierarchy/third-section/bar.mdx | 0 .../hierarchy/third-section/baz.md | 0 .../hierarchy/third-section/foo.md | 0 .../sample-data/scripts/sidebar-data/index.md | 0 .../scripts/sidebar-data/index.txt | 0 .../sidebar-data/more-types/_category_.json | 0 .../scripts/sidebar-data/more-types/bar.mdx | 0 .../scripts/sidebar-data/more-types/baz.md | 0 .../scripts/sidebar-data/more-types/foo.md | 0 .../scripts/sidebar-data/more-types/script.js | 0 .../scripts/sidebar-data/more-types/text.txt | 0 .../sample-data/scripts/sidebar-data/page.mdx | 0 .../scripts/sidebar-data/script.js | 0 tests/scripts/sidebar-lib.spec.ts | 231 +++ tsconfig.json | 3 +- yarn.lock | 1622 ++++++++++++++++- 38 files changed, 1872 insertions(+), 77 deletions(-) create mode 100644 jest.config.js create mode 100644 tests/sample-data/scripts/sidebar-data/_category_.json create mode 100644 tests/sample-data/scripts/sidebar-data/category-index/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/category-index/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/category-index/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/category-index/index.md create mode 100644 tests/sample-data/scripts/sidebar-data/file.md create mode 100644 tests/sample-data/scripts/sidebar-data/flat-list/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/flat-list/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/flat-list/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/first-section/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/first-section/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/first-section/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/second-section/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/second-section/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/second-section/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/third-section/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/third-section/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/hierarchy/third-section/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/index.md create mode 100644 tests/sample-data/scripts/sidebar-data/index.txt create mode 100644 tests/sample-data/scripts/sidebar-data/more-types/_category_.json create mode 100644 tests/sample-data/scripts/sidebar-data/more-types/bar.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/more-types/baz.md create mode 100644 tests/sample-data/scripts/sidebar-data/more-types/foo.md create mode 100644 tests/sample-data/scripts/sidebar-data/more-types/script.js create mode 100644 tests/sample-data/scripts/sidebar-data/more-types/text.txt create mode 100644 tests/sample-data/scripts/sidebar-data/page.mdx create mode 100644 tests/sample-data/scripts/sidebar-data/script.js create mode 100644 tests/scripts/sidebar-lib.spec.ts diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000..d076645e87 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,12 @@ +/* + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + +module.exports = { + clearMocks: true, + collectCoverage: true, + coverageDirectory: "coverage", + coverageProvider: "v8", + preset: "ts-jest", +} diff --git a/package.json b/package.json index bd720f839a..05d460de6c 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,14 @@ "regenerate": "env-cmd --silent docs-sourcer", "regenerate:local": "yarn regenerate --plugins local-copier", "sidebar": "scripts/generate-sidebar.js", + "test": "jest" }, "dependencies": { "@docusaurus/core": "^2.0.0-beta.14", "@docusaurus/preset-classic": "^2.0.0-beta.14", "@mdx-js/react": "^1.6.21", "@svgr/webpack": "^5.5.0", + "@types/jest": "^27.4.0", "clsx": "^1.1.1", "config": "^3.3.6", "env-cmd": "^10.1.0", @@ -33,11 +35,13 @@ "react": "^17.0.1", "react-dom": "^17.0.1", "react-modal": "^3.14.4", + "ts-jest": "^27.1.3", "url-loader": "^4.1.1" }, "devDependencies": { "@docusaurus/module-type-aliases": "^2.0.0-beta.14", "@tsconfig/docusaurus": "^1.0.4", + "jest": "^27.4.7", "onchange": "^7.1.0", "typescript": "^4.3.5" }, diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar.js index 8ef3f97287..1da91d92fc 100755 --- a/scripts/generate-sidebar.js +++ b/scripts/generate-sidebar.js @@ -1,7 +1,7 @@ #!/usr/bin/env node const yargs = require("yargs/yargs") -const path = require(`path`) +const path = require("path") const fs = require("fs") const { generateSingleSidebarFile, @@ -55,13 +55,18 @@ async function main() { let data // generate a single or multi-sidebar file - if (argv._.length < 2) { - // operate on the working dir if not otherwise specified - const inputDir = resolveDir(argv._[0] || ".") - data = await generateSingleSidebarFile(inputDir, opts) - } else { - const inputDirs = argv._.map(resolveDir) - data = await generateMultiSidebarFile(inputDirs, opts) + try { + if (argv._.length < 2) { + // operate on the working dir if not otherwise specified + const inputDir = resolveDir(argv._[0] || ".") + data = await generateSingleSidebarFile(inputDir, opts) + } else { + const inputDirs = argv._.map(resolveDir) + data = await generateMultiSidebarFile(inputDirs, opts) + } + } catch (err) { + console.log(`ERROR: Failed to generate a sidebar — %o`, err.message) + process.exit(1) } if (opts.verbose) { diff --git a/scripts/sidebar-lib.js b/scripts/sidebar-lib.js index e1900a125c..7f4dfe0f31 100644 --- a/scripts/sidebar-lib.js +++ b/scripts/sidebar-lib.js @@ -26,7 +26,11 @@ const formatName = (filepath) => { const isCategoryIndexFilePredicate = (p) => { // e.g. .../index.md (we don't support the README variant) - return fs.statSync(p).isFile && path.parse(p).name.toLowerCase() === "index" + return ( + fs.statSync(p).isFile() && + isSupportedFileType(p) && + path.parse(p).name.toLowerCase() === "index" + ) } const isSupportedFileType = (filepath) => { @@ -34,7 +38,7 @@ const isSupportedFileType = (filepath) => { return filepath.match(/\.mdx?$/) } -async function generateSidebar(dir, opts) { +async function generateSidebar(dir, opts = {}) { // bail if it isn't actually a directory if (!fs.statSync(dir).isDirectory()) { console.log(`WARNING: skipping top-level plain file %o`, dir) @@ -115,7 +119,22 @@ async function generateSidebar(dir, opts) { return sidebarItems } -async function generateSingleSidebarFile(dir, opts) { +async function generateMultiSidebar(dirs, opts = {}) { + const sidebars = {} + + for (const dir of dirs) { + // generate it! + const sidebar = await generateSidebar(dir, opts) + // add the sidebar to our result object + if (sidebar) { + sidebars[path.parse(dir).name] = sidebar + } + } + + return sidebars +} + +async function generateSidebarFile(dir, opts = {}) { if (opts.verbose) { console.log("Generating sidebar for %o", dir) } @@ -126,7 +145,7 @@ async function generateSingleSidebarFile(dir, opts) { // exit with error if no sidebar was generated if (!sidebar) { console.log(`ERROR: Failed to generate a sidebar for %o`, dir) - process.exit(1) + return undefined } // construct the final output @@ -138,27 +157,18 @@ async function generateSingleSidebarFile(dir, opts) { return data } -async function generateMultiSidebarFile(dirs, opts) { +async function generateMultiSidebarFile(dirs, opts = {}) { if (opts.verbose) { console.log(`Generating sidebars for multiple directories: %o`, dirs) } // iterate over all dirs and generate a sidebar from each - const sidebars = {} - - for (const dir of dirs) { - // generate it! - const sidebar = await generateSidebar(dir, opts) - // add the sidebar to our result object - if (sidebar) { - sidebars[path.parse(dir).name] = sidebar - } - } + const sidebars = await generateMultiSidebar(dirs, opts) // exit with error if no sidebars were generated if (Object.keys(sidebars).length === 0) { console.log("ERROR: Failed to generate sidebars") - process.exit(1) + return undefined } // construct the final output @@ -171,7 +181,17 @@ async function generateMultiSidebarFile(dirs, opts) { } module.exports = { - generateSidebar: generateSidebar, - generateSingleSidebarFile: generateSingleSidebarFile, + // for execution + generateSidebarFile: generateSidebarFile, generateMultiSidebarFile: generateMultiSidebarFile, + + // for testing + generateSidebar: generateSidebar, + generateMultiSidebar: generateMultiSidebar, + + // helpers, also for testing + toOutputDocId: toOutputDocId, + formatName: formatName, + isCategoryIndexFilePredicate: isCategoryIndexFilePredicate, + isSupportedFileType: isSupportedFileType, } diff --git a/tests/sample-data/scripts/sidebar-data/_category_.json b/tests/sample-data/scripts/sidebar-data/_category_.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/category-index/bar.mdx b/tests/sample-data/scripts/sidebar-data/category-index/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/category-index/baz.md b/tests/sample-data/scripts/sidebar-data/category-index/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/category-index/foo.md b/tests/sample-data/scripts/sidebar-data/category-index/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/category-index/index.md b/tests/sample-data/scripts/sidebar-data/category-index/index.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/file.md b/tests/sample-data/scripts/sidebar-data/file.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/flat-list/bar.mdx b/tests/sample-data/scripts/sidebar-data/flat-list/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/flat-list/baz.md b/tests/sample-data/scripts/sidebar-data/flat-list/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/flat-list/foo.md b/tests/sample-data/scripts/sidebar-data/flat-list/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/bar.mdx b/tests/sample-data/scripts/sidebar-data/hierarchy/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/baz.md b/tests/sample-data/scripts/sidebar-data/hierarchy/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/first-section/bar.mdx b/tests/sample-data/scripts/sidebar-data/hierarchy/first-section/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/first-section/baz.md b/tests/sample-data/scripts/sidebar-data/hierarchy/first-section/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/first-section/foo.md b/tests/sample-data/scripts/sidebar-data/hierarchy/first-section/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/foo.md b/tests/sample-data/scripts/sidebar-data/hierarchy/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/second-section/bar.mdx b/tests/sample-data/scripts/sidebar-data/hierarchy/second-section/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/second-section/baz.md b/tests/sample-data/scripts/sidebar-data/hierarchy/second-section/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/second-section/foo.md b/tests/sample-data/scripts/sidebar-data/hierarchy/second-section/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/third-section/bar.mdx b/tests/sample-data/scripts/sidebar-data/hierarchy/third-section/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/third-section/baz.md b/tests/sample-data/scripts/sidebar-data/hierarchy/third-section/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/hierarchy/third-section/foo.md b/tests/sample-data/scripts/sidebar-data/hierarchy/third-section/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/index.md b/tests/sample-data/scripts/sidebar-data/index.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/index.txt b/tests/sample-data/scripts/sidebar-data/index.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/more-types/_category_.json b/tests/sample-data/scripts/sidebar-data/more-types/_category_.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/more-types/bar.mdx b/tests/sample-data/scripts/sidebar-data/more-types/bar.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/more-types/baz.md b/tests/sample-data/scripts/sidebar-data/more-types/baz.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/more-types/foo.md b/tests/sample-data/scripts/sidebar-data/more-types/foo.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/more-types/script.js b/tests/sample-data/scripts/sidebar-data/more-types/script.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/more-types/text.txt b/tests/sample-data/scripts/sidebar-data/more-types/text.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/page.mdx b/tests/sample-data/scripts/sidebar-data/page.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/sample-data/scripts/sidebar-data/script.js b/tests/sample-data/scripts/sidebar-data/script.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/scripts/sidebar-lib.spec.ts b/tests/scripts/sidebar-lib.spec.ts new file mode 100644 index 0000000000..5d8eee9cd8 --- /dev/null +++ b/tests/scripts/sidebar-lib.spec.ts @@ -0,0 +1,231 @@ +const path = require("path") +const { + generateSidebar, + generateMultiSidebar, + formatName, + isCategoryIndexFilePredicate, + isSupportedFileType, + toOutputDocId, +} = require("../../scripts/sidebar-lib") + +function sampleDataPath(filepath) { + return path.resolve( + path.join("tests/sample-data/scripts/sidebar-data", filepath) + ) +} + +function docId(filepath) { + return path.join("tests/sample-data/scripts/sidebar-data", filepath) +} + +function findSidebarSectionByName(sidebar, name) { + const sectionObj = sidebar.find( + (item) => typeof item === "object" && item[name] !== undefined + ) + return sectionObj[name] +} + +describe("Script:generate-sidebar", () => { + describe("Function:generateSidebar", () => { + test("Returns undefined for a bogus path", async () => { + try { + await generateSidebar("bogus/path") + fail("Did not throw") + } catch (_e) {} + }) + + test("Returns undefined for an empty directory", async () => { + const sidebar = await generateSidebar(sampleDataPath("empty")) + expect(sidebar).toBeUndefined() + }) + + test("Returns undefined for a non-directory file", async () => { + const sidebar = await generateSidebar(sampleDataPath("file.md")) + expect(sidebar).toBeUndefined() + }) + + test("Supports a flat list of files", async () => { + const sidebar = await generateSidebar(sampleDataPath("flat-list")) + expect(sidebar.length).toBe(3) + expect(sidebar).toContain(docId("flat-list/foo")) + expect(sidebar).toContain(docId("flat-list/bar")) + expect(sidebar).toContain(docId("flat-list/baz")) + }) + + test("Supports hierarchical sets of files", async () => { + const sidebar = await generateSidebar(sampleDataPath("hierarchy")) + expect(sidebar.length).toBe(6) + expect(sidebar).toContain(docId("hierarchy/foo")) + expect(sidebar).toContain(docId("hierarchy/bar")) + expect(sidebar).toContain(docId("hierarchy/baz")) + const firstSection = findSidebarSectionByName(sidebar, "First Section") + const secondSection = findSidebarSectionByName(sidebar, "Second Section") + const thirdSection = findSidebarSectionByName(sidebar, "Third Section") + expect(firstSection.length).toBe(3) + expect(secondSection.length).toBe(3) + expect(thirdSection.length).toBe(3) + }) + + test("Ignores files of unsupported type", async () => { + const sidebar = await generateSidebar(sampleDataPath("more-types")) + expect(sidebar.length).toBe(3) + expect(sidebar).not.toContain(docId("flat-list/text")) + expect(sidebar).not.toContain(docId("flat-list/script")) + expect(sidebar).not.toContain(docId("flat-list/_category_")) + }) + + test("Applies the category index convention", async () => { + const sidebar = await generateSidebar(sampleDataPath("category-index")) + expect(sidebar.length).toBe(1) + const indexItem = sidebar[0] + expect(indexItem.type).toBe("category") + expect(indexItem.label).toBe("Category Index") + expect(indexItem.items.length).toBe(3) + expect(indexItem.link.type).toBe("doc") + expect(indexItem.link.id).toBe(docId("category-index/index")) + }) + + test("Can include a back button", async () => { + const sidebar = await generateSidebar(sampleDataPath("flat-list"), { + backButton: "Back", + }) + expect(sidebar.length).toBe(4) + const backButton = sidebar[0] + expect(backButton.type).toBe("link") + expect(backButton.label).toBe("Back") + expect(backButton.className).toBe("back-button") + expect(backButton.href).toBe(docId(".")) + }) + }) + + describe("Function:GenerateMultiSidebar", () => { + test("Generates an object with sidebars for each directory", async () => { + const dirs = [ + sampleDataPath("flat-list"), + sampleDataPath("more-types"), + sampleDataPath("hierarchy"), + ] + const sidebars = await generateMultiSidebar(dirs) + expect(Object.keys(sidebars).length).toBe(3) + }) + + test("Omits invalid input dirs without throwing", async () => { + const dirs = [ + sampleDataPath("flat-list"), + sampleDataPath("more-types"), + sampleDataPath("empty"), // should be omitted + ] + const sidebars = await generateMultiSidebar(dirs) + expect(Object.keys(sidebars).length).toBe(2) + }) + + test("Adds a back button to each sidebar", async () => { + const dirs = [ + sampleDataPath("flat-list"), + sampleDataPath("more-types"), + sampleDataPath("hierarchy"), + ] + const sidebars = await generateMultiSidebar(dirs, { + backButton: "Back", + }) + Object.values(sidebars).forEach((sidebar) => { + const backButton = sidebar[0] + expect(backButton.type).toBe("link") + expect(backButton.label).toBe("Back") + expect(backButton.className).toBe("back-button") + expect(backButton.href).toBe(docId(".")) + }) + }) + }) + + describe("Helpers", () => { + describe("Function:formatName", () => { + test("Converts hyphens to strings", () => { + const formattedName = formatName("name-with-dashes") + expect(formattedName).toBe("Name With Dashes") + }) + + test("Consolidates whitespace", () => { + const formattedName = formatName("name with extra whitespace") + expect(formattedName).toBe("Name With Extra Whitespace") + }) + + test("Converts to title case", () => { + let formattedName + formattedName = formatName("lowercase-title") + expect(formattedName).toBe("Lowercase Title") + }) + + test("Leaves acronyms untouched", () => { + let formattedName + formattedName = formatName("ABC-acronym") + expect(formattedName).toBe("ABC Acronym") + }) + }) + + describe("Function:isCategoryIndexFilePredicate", () => { + test("Returns false for Markdown files not named index", () => { + const b = isCategoryIndexFilePredicate(sampleDataPath("file.md")) + expect(b).toBeFalsy() + }) + + test("Returns false for directories (even if named index)", () => { + const b = isCategoryIndexFilePredicate(sampleDataPath("index")) + expect(b).toBeFalsy() + }) + + test("Returns false for non-Markdown files named index", () => { + const b = isCategoryIndexFilePredicate(sampleDataPath("index.txt")) + expect(b).toBeFalsy() + }) + + test("Returns true for Markdown files named index", () => { + const b = isCategoryIndexFilePredicate(sampleDataPath("index.md")) + expect(b).toBeTruthy() + }) + }) + + describe("Function:isSupportedFileType", () => { + test("Returns true for Markdown files", () => { + const b = isSupportedFileType(sampleDataPath("index.md")) + expect(b).toBeTruthy() + }) + + test("Returns true for MDX files", () => { + const b = isSupportedFileType(sampleDataPath("page.mdx")) + expect(b).toBeTruthy() + }) + + test("Returns false for JS files", () => { + const b = isSupportedFileType(sampleDataPath("script.js")) + expect(b).toBeFalsy() + }) + + test("Returns false _category_.json files", () => { + const b = isSupportedFileType(sampleDataPath("script.js")) + expect(b).toBeFalsy() + }) + + test("Returns false for text files", () => { + const b = isSupportedFileType(sampleDataPath("index.txt")) + expect(b).toBeFalsy() + }) + }) + + describe("Function:toOutputDocId", () => { + test("Generates proper docId for files inside _docs-sources", () => { + const docId = toOutputDocId( + "/any/asbsolute/path/that/ends/with/_docs-sources/foo/bar/baz.md" + ) + expect(docId).toBe("foo/bar/baz") + }) + + test("Generates proper docId for files inside output docs", () => { + const docId = toOutputDocId( + "/any/asbsolute/path/that/ends/with/docs/foo/bar/baz.md" + ) + expect(docId).toBe("foo/bar/baz") + }) + }) + }) +}) diff --git a/tsconfig.json b/tsconfig.json index 6f4756980d..4a27219cdf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,7 @@ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@tsconfig/docusaurus/tsconfig.json", "compilerOptions": { - "baseUrl": "." + "baseUrl": ".", + "types": ["jest", "node"] } } diff --git a/yarn.lock b/yarn.lock index 74e5f22c3e..10452582ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -132,7 +132,7 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/code-frame@^7.16.7": +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== @@ -178,6 +178,27 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/core@^7.12.3": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" @@ -238,6 +259,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.16.8", "@babel/generator@^7.7.2": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" @@ -675,6 +705,11 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + "@babel/parser@^7.12.7", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" @@ -982,7 +1017,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -1010,6 +1052,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -1038,7 +1087,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -1052,7 +1101,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -1087,14 +1136,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5": +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7": +"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== @@ -1934,7 +1983,7 @@ "@babel/parser" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/template@^7.16.7": +"@babel/template@^7.16.7", "@babel/template@^7.3.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== @@ -1958,6 +2007,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.16.10", "@babel/traverse@^7.7.2": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.16.3", "@babel/traverse@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" @@ -1974,6 +2039,14 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.4.4": version "7.15.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" @@ -1990,6 +2063,11 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@blakeembrey/deque@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@blakeembrey/deque/-/deque-1.0.5.tgz#f4fa17fc5ee18317ec01a763d355782c7b395eaf" @@ -2413,6 +2491,191 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.6.tgz#0742e6787f682b22bdad56f9db2a8a77f6a86107" + integrity sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA== + dependencies: + "@jest/types" "^27.4.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.4.6" + jest-util "^27.4.2" + slash "^3.0.0" + +"@jest/core@^27.4.7": + version "27.4.7" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.7.tgz#84eabdf42a25f1fa138272ed229bcf0a1b5e6913" + integrity sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg== + dependencies: + "@jest/console" "^27.4.6" + "@jest/reporters" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^27.4.2" + jest-config "^27.4.7" + jest-haste-map "^27.4.6" + jest-message-util "^27.4.6" + jest-regex-util "^27.4.0" + jest-resolve "^27.4.6" + jest-resolve-dependencies "^27.4.6" + jest-runner "^27.4.6" + jest-runtime "^27.4.6" + jest-snapshot "^27.4.6" + jest-util "^27.4.2" + jest-validate "^27.4.6" + jest-watcher "^27.4.6" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.6.tgz#1e92885d64f48c8454df35ed9779fbcf31c56d8b" + integrity sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg== + dependencies: + "@jest/fake-timers" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + jest-mock "^27.4.6" + +"@jest/fake-timers@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.6.tgz#e026ae1671316dbd04a56945be2fa251204324e8" + integrity sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A== + dependencies: + "@jest/types" "^27.4.2" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.4.6" + jest-mock "^27.4.6" + jest-util "^27.4.2" + +"@jest/globals@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.6.tgz#3f09bed64b0fd7f5f996920258bd4be8f52f060a" + integrity sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw== + dependencies: + "@jest/environment" "^27.4.6" + "@jest/types" "^27.4.2" + expect "^27.4.6" + +"@jest/reporters@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.6.tgz#b53dec3a93baf9b00826abf95b932de919d6d8dd" + integrity sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.4.6" + jest-resolve "^27.4.6" + jest-util "^27.4.2" + jest-worker "^27.4.6" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/source-map@^27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" + integrity sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.6.tgz#b3df94c3d899c040f602cea296979844f61bdf69" + integrity sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ== + dependencies: + "@jest/console" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz#447339b8a3d7b5436f50934df30854e442a9d904" + integrity sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw== + dependencies: + "@jest/test-result" "^27.4.6" + graceful-fs "^4.2.4" + jest-haste-map "^27.4.6" + jest-runtime "^27.4.6" + +"@jest/transform@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.6.tgz#153621940b1ed500305eacdb31105d415dc30231" + integrity sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.4.2" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^27.4.6" + jest-regex-util "^27.4.0" + jest-util "^27.4.2" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" + integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@mdx-js/mdx@1.6.22", "@mdx-js/mdx@^1.6.21": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" @@ -2681,6 +2944,20 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@slorber/static-site-generator-webpack-plugin@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz#0c8852146441aaa683693deaa5aee2f991d94841" @@ -2906,6 +3183,11 @@ dependencies: defer-to-connect "^1.0.1" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -2916,6 +3198,39 @@ resolved "https://registry.yarnpkg.com/@tsconfig/docusaurus/-/docusaurus-1.0.4.tgz#fc40f87a672568678d83533dd4031a09d75877ca" integrity sha512-I6sziQAzLrrqj9r6S26c7aOAjfGVXIE7gWdNONPwnpDcHiMRMQut1s1YCi/APem3dOy23tAb2rvHfNtGCaWuUQ== +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + "@types/body-parser@*": version "1.19.2" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" @@ -2991,6 +3306,13 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + "@types/hast@^2.0.0": version "2.3.4" resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" @@ -3015,6 +3337,33 @@ dependencies: "@types/node" "*" +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" + integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== + dependencies: + jest-diff "^27.0.0" + pretty-format "^27.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -3064,6 +3413,11 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== +"@types/prettier@^2.1.5": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" + integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== + "@types/prop-types@*": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" @@ -3165,6 +3519,11 @@ dependencies: "@types/node" "*" +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" @@ -3177,6 +3536,18 @@ dependencies: "@types/node" "*" +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -3308,6 +3679,11 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -3321,6 +3697,14 @@ acorn-dynamic-import@^4.0.0: resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-import-assertions@^1.7.6: version "1.8.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" @@ -3331,6 +3715,11 @@ acorn-jsx@^5.0.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" @@ -3341,11 +3730,21 @@ acorn@^6.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + acorn@^8.0.4, acorn@^8.4.1: version "8.5.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== +acorn@^8.2.4: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + add@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" @@ -3356,6 +3755,13 @@ address@^1.0.1, address@^1.1.2: resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3442,7 +3848,7 @@ ansi-align@^3.0.0: dependencies: string-width "^4.1.0" -ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -3478,7 +3884,12 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@~3.1.2: +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -3540,6 +3951,11 @@ async@^3.1.0: resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -3564,6 +3980,20 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +babel-jest@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.6.tgz#4d024e69e241cdf4f396e453a07100f44f7ce314" + integrity sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg== + dependencies: + "@jest/transform" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.4.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + babel-loader@^8.2.2: version "8.2.3" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" @@ -3603,6 +4033,27 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz#d7831fc0f93573788d80dee7e682482da4c730d6" + integrity sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + babel-plugin-polyfill-corejs2@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" @@ -3651,6 +4102,32 @@ babel-plugin-polyfill-regenerator@^0.3.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.0" +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz#70d0e676a282ccb200fbabd7f415db5fdf393bca" + integrity sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg== + dependencies: + babel-plugin-jest-hoist "^27.4.0" + babel-preset-current-node-syntax "^1.0.0" + bail@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" @@ -3758,6 +4235,11 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.17.5: version "4.17.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559" @@ -3791,6 +4273,20 @@ browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" @@ -3873,6 +4369,11 @@ camelcase-css@2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" @@ -3917,7 +4418,7 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3925,6 +4426,11 @@ chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" @@ -3992,6 +4498,16 @@ ci-info@^3.1.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + clean-css@^5.1.5: version "5.2.2" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.2.2.tgz#d3a7c6ee2511011e051719838bdcf8314dc4548d" @@ -4039,6 +4555,11 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" @@ -4053,6 +4574,11 @@ collapse-white-space@^1.0.2: resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -4121,6 +4647,13 @@ combine-promises@^1.1.0: resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^1.0.0: version "1.0.8" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" @@ -4227,7 +4760,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== @@ -4518,11 +5051,37 @@ csso@^4.0.2, csso@^4.2.0: dependencies: css-tree "^1.1.2" +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + csstype@^3.0.2: version "3.0.9" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4530,6 +5089,13 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" +debug@4: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + debug@^3.1.1: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -4544,6 +5110,11 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -4551,6 +5122,11 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -4568,6 +5144,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -4611,6 +5192,11 @@ del@^6.0.0: rimraf "^3.0.2" slash "^3.0.0" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -4633,6 +5219,11 @@ detab@2.0.4: dependencies: repeat-string "^1.5.4" +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -4654,6 +5245,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" +diff-sequences@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" + integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4746,6 +5342,13 @@ domelementtype@^2.0.1, domelementtype@^2.2.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -4842,6 +5445,11 @@ electron-to-chromium@^1.4.17: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.32.tgz#7ad1e76692b307da454b7380cc882784962648b8" integrity sha512-7QRVfMlccTFs7cZV3lB0k9Wcm6R6F+w1yBPX+xBAlAP/1oJIstxTev3A4r8REnUUAFph/cIB8y/EBU7PDbJTQw== +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4982,6 +5590,18 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -4990,7 +5610,7 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5069,6 +5689,21 @@ exenv@^1.2.0: resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expect@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.6.tgz#f335e128b0335b6ceb4fcab67ece7cbd14c942e6" + integrity sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag== + dependencies: + "@jest/types" "^27.4.2" + jest-get-type "^27.4.0" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -5133,11 +5768,16 @@ fast-glob@^3.1.1, fast-glob@^3.2.5: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fast-url-parser@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" @@ -5159,6 +5799,13 @@ faye-websocket@^0.11.3: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + fbemitter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" @@ -5305,6 +5952,15 @@ fork-ts-checker-webpack-plugin@^6.0.5: semver "^7.3.2" tapable "^1.0.0" +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -5354,7 +6010,7 @@ fs@^0.0.1-security: resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" integrity sha1-invTcYa23d84E/I4WLV+yq9eQdQ= -fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -5388,6 +6044,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5439,7 +6100,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5710,11 +6371,23 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-entities@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-minifier-terser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.0.2.tgz#14059ad64b69bf9f8b8a33f25b53411d8321e75d" @@ -5818,6 +6491,15 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-middleware@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz#7ef3417a479fb7666a571e09966c66a39bd2c15f" @@ -5838,6 +6520,14 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -5878,6 +6568,14 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6037,6 +6735,13 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -6069,6 +6774,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6153,6 +6863,11 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-regex@^1.0.4, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -6254,6 +6969,434 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" + integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.4.2.tgz#da2547ea47c6e6a5f6ed336151bd2075736eb4a5" + integrity sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A== + dependencies: + "@jest/types" "^27.4.2" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.6.tgz#d3af34c0eb742a967b1919fbb351430727bcea6c" + integrity sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ== + dependencies: + "@jest/environment" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.4.6" + is-generator-fn "^2.0.0" + jest-each "^27.4.6" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" + jest-runtime "^27.4.6" + jest-snapshot "^27.4.6" + jest-util "^27.4.2" + pretty-format "^27.4.6" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.4.7: + version "27.4.7" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.7.tgz#d00e759e55d77b3bcfea0715f527c394ca314e5a" + integrity sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw== + dependencies: + "@jest/core" "^27.4.7" + "@jest/test-result" "^27.4.6" + "@jest/types" "^27.4.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + jest-config "^27.4.7" + jest-util "^27.4.2" + jest-validate "^27.4.6" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.4.7: + version "27.4.7" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.7.tgz#4f084b2acbd172c8b43aa4cdffe75d89378d3972" + integrity sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.4.6" + "@jest/types" "^27.4.2" + babel-jest "^27.4.6" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-circus "^27.4.6" + jest-environment-jsdom "^27.4.6" + jest-environment-node "^27.4.6" + jest-get-type "^27.4.0" + jest-jasmine2 "^27.4.6" + jest-regex-util "^27.4.0" + jest-resolve "^27.4.6" + jest-runner "^27.4.6" + jest-util "^27.4.2" + jest-validate "^27.4.6" + micromatch "^4.0.4" + pretty-format "^27.4.6" + slash "^3.0.0" + +jest-diff@^27.0.0, jest-diff@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" + integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.4.0" + jest-get-type "^27.4.0" + pretty-format "^27.4.6" + +jest-docblock@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" + integrity sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.6.tgz#e7e8561be61d8cc6dbf04296688747ab186c40ff" + integrity sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA== + dependencies: + "@jest/types" "^27.4.2" + chalk "^4.0.0" + jest-get-type "^27.4.0" + jest-util "^27.4.2" + pretty-format "^27.4.6" + +jest-environment-jsdom@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz#c23a394eb445b33621dfae9c09e4c8021dea7b36" + integrity sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA== + dependencies: + "@jest/environment" "^27.4.6" + "@jest/fake-timers" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + jest-mock "^27.4.6" + jest-util "^27.4.2" + jsdom "^16.6.0" + +jest-environment-node@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.6.tgz#ee8cd4ef458a0ef09d087c8cd52ca5856df90242" + integrity sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ== + dependencies: + "@jest/environment" "^27.4.6" + "@jest/fake-timers" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + jest-mock "^27.4.6" + jest-util "^27.4.2" + +jest-get-type@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" + integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== + +jest-haste-map@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.6.tgz#c60b5233a34ca0520f325b7e2cc0a0140ad0862a" + integrity sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ== + dependencies: + "@jest/types" "^27.4.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^27.4.0" + jest-serializer "^27.4.0" + jest-util "^27.4.2" + jest-worker "^27.4.6" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz#109e8bc036cb455950ae28a018f983f2abe50127" + integrity sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw== + dependencies: + "@jest/environment" "^27.4.6" + "@jest/source-map" "^27.4.0" + "@jest/test-result" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.4.6" + is-generator-fn "^2.0.0" + jest-each "^27.4.6" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" + jest-runtime "^27.4.6" + jest-snapshot "^27.4.6" + jest-util "^27.4.2" + pretty-format "^27.4.6" + throat "^6.0.1" + +jest-leak-detector@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz#ed9bc3ce514b4c582637088d9faf58a33bd59bf4" + integrity sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA== + dependencies: + jest-get-type "^27.4.0" + pretty-format "^27.4.6" + +jest-matcher-utils@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz#53ca7f7b58170638590e946f5363b988775509b8" + integrity sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA== + dependencies: + chalk "^4.0.0" + jest-diff "^27.4.6" + jest-get-type "^27.4.0" + pretty-format "^27.4.6" + +jest-message-util@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.6.tgz#9fdde41a33820ded3127465e1a5896061524da31" + integrity sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.4.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.4" + pretty-format "^27.4.6" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.6.tgz#77d1ba87fbd33ccb8ef1f061697e7341b7635195" + integrity sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw== + dependencies: + "@jest/types" "^27.4.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" + integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== + +jest-resolve-dependencies@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz#fc50ee56a67d2c2183063f6a500cc4042b5e2327" + integrity sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw== + dependencies: + "@jest/types" "^27.4.2" + jest-regex-util "^27.4.0" + jest-snapshot "^27.4.6" + +jest-resolve@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.6.tgz#2ec3110655e86d5bfcfa992e404e22f96b0b5977" + integrity sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw== + dependencies: + "@jest/types" "^27.4.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^27.4.6" + jest-pnp-resolver "^1.2.2" + jest-util "^27.4.2" + jest-validate "^27.4.6" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.6.tgz#1d390d276ec417e9b4d0d081783584cbc3e24773" + integrity sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg== + dependencies: + "@jest/console" "^27.4.6" + "@jest/environment" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-docblock "^27.4.0" + jest-environment-jsdom "^27.4.6" + jest-environment-node "^27.4.6" + jest-haste-map "^27.4.6" + jest-leak-detector "^27.4.6" + jest-message-util "^27.4.6" + jest-resolve "^27.4.6" + jest-runtime "^27.4.6" + jest-util "^27.4.2" + jest-worker "^27.4.6" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.6.tgz#83ae923818e3ea04463b22f3597f017bb5a1cffa" + integrity sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ== + dependencies: + "@jest/environment" "^27.4.6" + "@jest/fake-timers" "^27.4.6" + "@jest/globals" "^27.4.6" + "@jest/source-map" "^27.4.0" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" + "@jest/types" "^27.4.2" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-haste-map "^27.4.6" + jest-message-util "^27.4.6" + jest-mock "^27.4.6" + jest-regex-util "^27.4.0" + jest-resolve "^27.4.6" + jest-snapshot "^27.4.6" + jest-util "^27.4.2" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.4.0.tgz#34866586e1cae2388b7d12ffa2c7819edef5958a" + integrity sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.6.tgz#e2a3b4fff8bdce3033f2373b2e525d8b6871f616" + integrity sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.4.6" + graceful-fs "^4.2.4" + jest-diff "^27.4.6" + jest-get-type "^27.4.0" + jest-haste-map "^27.4.6" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" + jest-util "^27.4.2" + natural-compare "^1.4.0" + pretty-format "^27.4.6" + semver "^7.3.2" + +jest-util@^27.0.0, jest-util@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" + integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== + dependencies: + "@jest/types" "^27.4.2" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.4" + picomatch "^2.2.3" + +jest-validate@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.6.tgz#efc000acc4697b6cf4fa68c7f3f324c92d0c4f1f" + integrity sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ== + dependencies: + "@jest/types" "^27.4.2" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.4.0" + leven "^3.1.0" + pretty-format "^27.4.6" + +jest-watcher@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.6.tgz#673679ebeffdd3f94338c24f399b85efc932272d" + integrity sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw== + dependencies: + "@jest/test-result" "^27.4.6" + "@jest/types" "^27.4.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.4.2" + string-length "^4.0.1" + jest-worker@^27.0.2, jest-worker@^27.0.6: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2" @@ -6263,6 +7406,24 @@ jest-worker@^27.0.2, jest-worker@^27.0.6: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" + integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.4.7: + version "27.4.7" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.7.tgz#87f74b9026a1592f2da05b4d258e57505f28eca4" + integrity sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg== + dependencies: + "@jest/core" "^27.4.7" + import-local "^3.0.2" + jest-cli "^27.4.7" + joi@^17.4.0, joi@^17.4.2: version "17.4.2" resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" @@ -6294,6 +7455,39 @@ js-yaml@^4.0.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -6329,6 +7523,13 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json5@2.x, json5@^2.1.1, json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6336,13 +7537,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -6424,6 +7618,14 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + lilconfig@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.3.tgz#68f3005e921dafbd2a2afb48379986aa6d2579fd" @@ -6559,7 +7761,7 @@ lodash.map@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= -lodash.memoize@^4.1.2: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= @@ -6599,7 +7801,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6660,6 +7862,18 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" +make-error@1.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + markdown-escapes@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" @@ -6780,6 +7994,13 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" +mime-types@^2.1.12, mime-types@^2.1.31: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.33" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" @@ -6787,13 +8008,6 @@ mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: dependencies: mime-db "1.50.0" -mime-types@^2.1.31: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -6903,6 +8117,11 @@ nanoid@^3.1.30: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6960,6 +8179,11 @@ node-html-parser@^4.1.5: css-select "^4.1.3" he "1.2.0" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" @@ -7011,6 +8235,11 @@ nth-check@^2.0.0: dependencies: boolbase "^1.0.0" +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -7135,6 +8364,18 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -7247,16 +8488,16 @@ parse-numeric-range@^1.3.0: resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== +parse5@6.0.1, parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parse5@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -7295,7 +8536,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -7342,7 +8583,12 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pkg-dir@^4.1.0: +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -7677,6 +8923,11 @@ posthog-docusaurus@^1.0.3: resolved "https://registry.yarnpkg.com/posthog-docusaurus/-/posthog-docusaurus-1.0.3.tgz#bd49dd7f425bb6bce81ac49d3c251f8b0f9cd9d9" integrity sha512-gvvHpKmOIcO7Sj68T2/vfYR/VfZmYoTaZO6kDZTJXQ309jdrhlrDncPr/Gjy+C0W9zaVlrOT6vvC7SdBBmvbdg== +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -7690,6 +8941,15 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" +pretty-format@^27.0.0, pretty-format@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" + integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + pretty-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" @@ -7717,7 +8977,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prompts@^2.4.0, prompts@^2.4.1: +prompts@^2.0.1, prompts@^2.4.0, prompts@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -7749,6 +9009,11 @@ proxy-addr@~2.0.5: forwarded "0.2.0" ipaddr.js "1.9.1" +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -7767,7 +9032,7 @@ punycode@^1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -7933,6 +9198,11 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + react-json-view@^1.21.3: version "1.21.3" resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" @@ -8271,16 +9541,33 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" @@ -8289,6 +9576,15 @@ resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.20.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -8306,7 +9602,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8368,6 +9664,13 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" @@ -8445,6 +9748,13 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -8455,13 +9765,6 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -8647,6 +9950,14 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== +source-map-support@^0.5.6: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@~0.5.20: version "0.5.20" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" @@ -8665,7 +9976,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.7.2: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -8723,6 +10034,13 @@ stack-trace@0.0.x: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -8740,6 +10058,14 @@ std-env@^2.2.1: dependencies: ci-info "^3.1.1" +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -8807,6 +10133,11 @@ strip-bom-string@^1.0.0: resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -8844,7 +10175,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -8858,6 +10189,19 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + svg-parser@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" @@ -8908,6 +10252,11 @@ svgo@^2.5.0: picocolors "^1.0.0" stable "^0.1.8" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -8918,6 +10267,14 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz#ad1be7639b1cbe3ea49fab995cbe7224b31747a1" @@ -8939,6 +10296,15 @@ terser@^5.7.2: source-map "~0.7.2" source-map-support "~0.5.20" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-hex@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" @@ -8949,6 +10315,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -8969,6 +10340,11 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -8996,6 +10372,22 @@ totalist@^1.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -9031,6 +10423,20 @@ ts-essentials@^2.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== +ts-jest@^27.1.3: + version "27.1.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957" + integrity sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "20.x" + tslib@^2.0.3, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" @@ -9041,6 +10447,18 @@ tslib@~2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -9237,6 +10655,11 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -9357,6 +10780,15 @@ uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" @@ -9395,6 +10827,20 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + wait-on@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.0.tgz#7e9bf8e3d7fe2daecbb7a570ac8ca41e9311c7e7" @@ -9406,6 +10852,13 @@ wait-on@^6.0.0: minimist "^1.2.5" rxjs "^7.1.0" +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -9438,6 +10891,16 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webpack-bundle-analyzer@^4.4.2: version "4.5.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" @@ -9578,6 +11041,18 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -9586,6 +11061,15 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -9646,6 +11130,11 @@ winston@^3.3.3: triple-beam "^1.3.0" winston-transport "^4.4.0" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -9675,6 +11164,11 @@ ws@^7.3.1: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== +ws@^7.4.6: + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + ws@^8.1.0: version "8.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" @@ -9692,6 +11186,16 @@ xml-js@^1.6.11: dependencies: sax "^1.2.4" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@^4.0.0, xtend@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -9712,11 +11216,29 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yargs-parser@20.x, yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.0.0: version "21.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.3.1: version "17.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" From d0766426467fbab3a53c253a3dcd69e40c0db7f3 Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 15:59:59 -0800 Subject: [PATCH 07/12] Generic sidebar var names The names of the sidebars that get exported from each sidebar.js file aren't actually relevant, moreover many of them were copy pasted and used the wrong name. This changes them to the generic "sidebar" or "sidebars" (for multi-sidebar files) for consistency. --- sidebars/api-reference.js | 4 ++-- sidebars/compliance-guide.js | 4 ++-- sidebars/guides-index.js | 4 ++-- sidebars/intro-guide.js | 4 ++-- sidebars/kubernetes-guide.js | 4 ++-- sidebars/landing-zone-guide.js | 4 ++-- sidebars/pipelines-guide.js | 4 ++-- sidebars/production-framework-guide.js | 4 ++-- sidebars/refarch-usage-guide.js | 4 ++-- sidebars/update-guides.js | 4 ++-- sidebars/vpc-guide.js | 4 ++-- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/sidebars/api-reference.js b/sidebars/api-reference.js index ab64eed9a9..95470b7b3b 100644 --- a/sidebars/api-reference.js +++ b/sidebars/api-reference.js @@ -1,4 +1,4 @@ -const apiSidebars = { +const sidebars = { referenceSidebar: [ { type: "doc", @@ -84,4 +84,4 @@ const apiSidebars = { toolsSidebar: [{ type: "autogenerated", dirName: "reference/tools" }], } -module.exports = apiSidebars +module.exports = sidebars diff --git a/sidebars/compliance-guide.js b/sidebars/compliance-guide.js index 3039bbdaa3..ccca54c8cf 100644 --- a/sidebars/compliance-guide.js +++ b/sidebars/compliance-guide.js @@ -1,4 +1,4 @@ -const complianceGuide = [ +const sidebar = [ { label: "Build Your Own Architecture", type: "link", @@ -61,4 +61,4 @@ const complianceGuide = [ }, ] -module.exports = complianceGuide +module.exports = sidebar diff --git a/sidebars/guides-index.js b/sidebars/guides-index.js index 8dee6824cd..76ec88173e 100644 --- a/sidebars/guides-index.js +++ b/sidebars/guides-index.js @@ -1,4 +1,4 @@ -const guidesIndex = [ +const sidebar = [ { label: "Foundations", type: "doc", @@ -35,4 +35,4 @@ const guidesIndex = [ }, ] -module.exports = guidesIndex +module.exports = sidebar diff --git a/sidebars/intro-guide.js b/sidebars/intro-guide.js index 3433a53a22..01ece3ff55 100644 --- a/sidebars/intro-guide.js +++ b/sidebars/intro-guide.js @@ -1,4 +1,4 @@ -const introSidebar = [ +const sidebar = [ { Overview: [ "intro/overview/intro-to-gruntwork", @@ -52,4 +52,4 @@ const introSidebar = [ }, ] -module.exports = introSidebar +module.exports = sidebar diff --git a/sidebars/kubernetes-guide.js b/sidebars/kubernetes-guide.js index 53cfe4b760..836a669d34 100644 --- a/sidebars/kubernetes-guide.js +++ b/sidebars/kubernetes-guide.js @@ -1,4 +1,4 @@ -const vpcGuide = [ +const sidebar = [ { label: "Build Your Own Architecture", type: "link", @@ -58,4 +58,4 @@ const vpcGuide = [ }, ] -module.exports = vpcGuide +module.exports = sidebar diff --git a/sidebars/landing-zone-guide.js b/sidebars/landing-zone-guide.js index 5f62c633e5..c6375cb8a0 100644 --- a/sidebars/landing-zone-guide.js +++ b/sidebars/landing-zone-guide.js @@ -1,4 +1,4 @@ -const landingZoneGuide = [ +const sidebar = [ { label: "Build Your Own Architecture", type: "link", @@ -69,4 +69,4 @@ const landingZoneGuide = [ }, ] -module.exports = landingZoneGuide +module.exports = sidebar diff --git a/sidebars/pipelines-guide.js b/sidebars/pipelines-guide.js index 546d7bacc5..bc4056c394 100644 --- a/sidebars/pipelines-guide.js +++ b/sidebars/pipelines-guide.js @@ -1,4 +1,4 @@ -const pipelineGuide = [ +const sidebar = [ { label: "Build Your Own Architecture", type: "link", @@ -53,4 +53,4 @@ const pipelineGuide = [ }, ] -module.exports = pipelineGuide +module.exports = sidebar diff --git a/sidebars/production-framework-guide.js b/sidebars/production-framework-guide.js index 3baae63b10..5bb50032f6 100644 --- a/sidebars/production-framework-guide.js +++ b/sidebars/production-framework-guide.js @@ -1,4 +1,4 @@ -const productionFrameworkSidebar = [ +const sidebar = [ { label: "Production Framework Guide", type: "category", @@ -104,4 +104,4 @@ const productionFrameworkSidebar = [ }, ] -module.exports = productionFrameworkSidebar +module.exports = sidebar diff --git a/sidebars/refarch-usage-guide.js b/sidebars/refarch-usage-guide.js index 2da28db418..48753ff044 100644 --- a/sidebars/refarch-usage-guide.js +++ b/sidebars/refarch-usage-guide.js @@ -1,4 +1,4 @@ -const refarchUsageSidebar = [ +const sidebar = [ { label: "Reference Architecture Guides", type: "link", @@ -74,4 +74,4 @@ const refarchUsageSidebar = [ }, ] -module.exports = refarchUsageSidebar +module.exports = sidebar diff --git a/sidebars/update-guides.js b/sidebars/update-guides.js index 850b55dd32..b7964b4d4f 100644 --- a/sidebars/update-guides.js +++ b/sidebars/update-guides.js @@ -5,7 +5,7 @@ const backLink = { className: "back-button", } -const updateGuideSidebars = { +const sidebars = { cis130: [ backLink, { @@ -188,4 +188,4 @@ const updateGuideSidebars = { ], } -module.exports = updateGuideSidebars +module.exports = sidebars diff --git a/sidebars/vpc-guide.js b/sidebars/vpc-guide.js index a576559835..228a971cbb 100644 --- a/sidebars/vpc-guide.js +++ b/sidebars/vpc-guide.js @@ -1,4 +1,4 @@ -const vpcGuide = [ +const sidebar = [ { label: "Build Your Own Architecture", type: "link", @@ -56,4 +56,4 @@ const vpcGuide = [ }, ] -module.exports = vpcGuide +module.exports = sidebar From 462a5bfd5ca19f80d2f4ee0411c74240fbafe1d9 Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 16:10:24 -0800 Subject: [PATCH 08/12] Removed unused _category_.json files from guides Our deployment guides initially used auto-generated sidebars. Now that we're leveraging the sidebar files, these are no longer needed. --- .../build-it-yourself/achieve-compliance/_category_.json | 3 --- .../achieve-compliance/core-concepts/_category_.json | 3 --- .../achieve-compliance/deployment-walkthrough/_category_.json | 3 --- .../deploy-landing-zone-solution/_category_.json | 3 --- .../achieve-compliance/production-grade-design/_category_.json | 3 --- .../build-it-yourself/kubernetes-cluster/_category_.json | 3 --- .../kubernetes-cluster/core-concepts/_category_.json | 3 --- .../kubernetes-cluster/deployment-walkthrough/_category_.json | 3 --- .../kubernetes-cluster/production-grade-design/_category_.json | 3 --- .../guides/build-it-yourself/landing-zone/_category_.json | 3 --- .../landing-zone/core-concepts/_category_.json | 3 --- .../landing-zone/deployment-walkthrough/_category_.json | 3 --- .../landing-zone/production-grade-design/_category_.json | 3 --- .../guides/build-it-yourself/pipelines/_category_.json | 3 --- .../build-it-yourself/pipelines/core-concepts/_category_.json | 3 --- .../pipelines/deployment-walkthrough/_category_.json | 3 --- .../pipelines/production-grade-design/_category_.json | 3 --- _docs-sources/guides/build-it-yourself/vpc/_category_.json | 3 --- .../guides/build-it-yourself/vpc/core-concepts/_category_.json | 3 --- .../vpc/deployment-walkthrough/_category_.json | 3 --- .../vpc/production-grade-design/_category_.json | 3 --- 21 files changed, 63 deletions(-) delete mode 100644 _docs-sources/guides/build-it-yourself/achieve-compliance/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/achieve-compliance/core-concepts/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/deploy-landing-zone-solution/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/achieve-compliance/production-grade-design/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/kubernetes-cluster/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/kubernetes-cluster/core-concepts/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/kubernetes-cluster/production-grade-design/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/landing-zone/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/landing-zone/core-concepts/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/landing-zone/deployment-walkthrough/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/landing-zone/production-grade-design/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/pipelines/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/pipelines/core-concepts/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/pipelines/deployment-walkthrough/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/pipelines/production-grade-design/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/vpc/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/vpc/core-concepts/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/vpc/deployment-walkthrough/_category_.json delete mode 100644 _docs-sources/guides/build-it-yourself/vpc/production-grade-design/_category_.json diff --git a/_docs-sources/guides/build-it-yourself/achieve-compliance/_category_.json b/_docs-sources/guides/build-it-yourself/achieve-compliance/_category_.json deleted file mode 100644 index 67fc37efed..0000000000 --- a/_docs-sources/guides/build-it-yourself/achieve-compliance/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Achieve Compliance With the CIS AWS Foundations Benchmark" -} diff --git a/_docs-sources/guides/build-it-yourself/achieve-compliance/core-concepts/_category_.json b/_docs-sources/guides/build-it-yourself/achieve-compliance/core-concepts/_category_.json deleted file mode 100644 index cd85871b6b..0000000000 --- a/_docs-sources/guides/build-it-yourself/achieve-compliance/core-concepts/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Core concepts" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/_category_.json b/_docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/_category_.json deleted file mode 100644 index cd05330845..0000000000 --- a/_docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Deployment walkthrough" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/deploy-landing-zone-solution/_category_.json b/_docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/deploy-landing-zone-solution/_category_.json deleted file mode 100644 index 153ca2acf1..0000000000 --- a/_docs-sources/guides/build-it-yourself/achieve-compliance/deployment-walkthrough/deploy-landing-zone-solution/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Deploy Landing Zone Solution" -} diff --git a/_docs-sources/guides/build-it-yourself/achieve-compliance/production-grade-design/_category_.json b/_docs-sources/guides/build-it-yourself/achieve-compliance/production-grade-design/_category_.json deleted file mode 100644 index 8c8bc9a850..0000000000 --- a/_docs-sources/guides/build-it-yourself/achieve-compliance/production-grade-design/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Production-grade design" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/_category_.json b/_docs-sources/guides/build-it-yourself/kubernetes-cluster/_category_.json deleted file mode 100644 index c92dbcd070..0000000000 --- a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Deploy a Kubernetes Cluster" -} diff --git a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/core-concepts/_category_.json b/_docs-sources/guides/build-it-yourself/kubernetes-cluster/core-concepts/_category_.json deleted file mode 100644 index cd85871b6b..0000000000 --- a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/core-concepts/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Core concepts" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/_category_.json b/_docs-sources/guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/_category_.json deleted file mode 100644 index cd05330845..0000000000 --- a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Deployment walkthrough" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/production-grade-design/_category_.json b/_docs-sources/guides/build-it-yourself/kubernetes-cluster/production-grade-design/_category_.json deleted file mode 100644 index 8c8bc9a850..0000000000 --- a/_docs-sources/guides/build-it-yourself/kubernetes-cluster/production-grade-design/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Production-grade design" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/landing-zone/_category_.json b/_docs-sources/guides/build-it-yourself/landing-zone/_category_.json deleted file mode 100644 index c64d3f942c..0000000000 --- a/_docs-sources/guides/build-it-yourself/landing-zone/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Configure Your Accounts With Landing Zone" -} diff --git a/_docs-sources/guides/build-it-yourself/landing-zone/core-concepts/_category_.json b/_docs-sources/guides/build-it-yourself/landing-zone/core-concepts/_category_.json deleted file mode 100644 index cd85871b6b..0000000000 --- a/_docs-sources/guides/build-it-yourself/landing-zone/core-concepts/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Core concepts" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/landing-zone/deployment-walkthrough/_category_.json b/_docs-sources/guides/build-it-yourself/landing-zone/deployment-walkthrough/_category_.json deleted file mode 100644 index cd05330845..0000000000 --- a/_docs-sources/guides/build-it-yourself/landing-zone/deployment-walkthrough/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Deployment walkthrough" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/landing-zone/production-grade-design/_category_.json b/_docs-sources/guides/build-it-yourself/landing-zone/production-grade-design/_category_.json deleted file mode 100644 index 8c8bc9a850..0000000000 --- a/_docs-sources/guides/build-it-yourself/landing-zone/production-grade-design/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Production-grade design" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/pipelines/_category_.json b/_docs-sources/guides/build-it-yourself/pipelines/_category_.json deleted file mode 100644 index 7abe10fde6..0000000000 --- a/_docs-sources/guides/build-it-yourself/pipelines/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Set Up an Infrastructure CI/CD Pipeline" -} diff --git a/_docs-sources/guides/build-it-yourself/pipelines/core-concepts/_category_.json b/_docs-sources/guides/build-it-yourself/pipelines/core-concepts/_category_.json deleted file mode 100644 index 14838b0280..0000000000 --- a/_docs-sources/guides/build-it-yourself/pipelines/core-concepts/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Core Concepts" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/pipelines/deployment-walkthrough/_category_.json b/_docs-sources/guides/build-it-yourself/pipelines/deployment-walkthrough/_category_.json deleted file mode 100644 index cd05330845..0000000000 --- a/_docs-sources/guides/build-it-yourself/pipelines/deployment-walkthrough/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Deployment walkthrough" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/pipelines/production-grade-design/_category_.json b/_docs-sources/guides/build-it-yourself/pipelines/production-grade-design/_category_.json deleted file mode 100644 index 8c8bc9a850..0000000000 --- a/_docs-sources/guides/build-it-yourself/pipelines/production-grade-design/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Production-grade design" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/vpc/_category_.json b/_docs-sources/guides/build-it-yourself/vpc/_category_.json deleted file mode 100644 index c7647f7f23..0000000000 --- a/_docs-sources/guides/build-it-yourself/vpc/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Deploy a VPC" -} diff --git a/_docs-sources/guides/build-it-yourself/vpc/core-concepts/_category_.json b/_docs-sources/guides/build-it-yourself/vpc/core-concepts/_category_.json deleted file mode 100644 index cd85871b6b..0000000000 --- a/_docs-sources/guides/build-it-yourself/vpc/core-concepts/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Core concepts" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/vpc/deployment-walkthrough/_category_.json b/_docs-sources/guides/build-it-yourself/vpc/deployment-walkthrough/_category_.json deleted file mode 100644 index cd05330845..0000000000 --- a/_docs-sources/guides/build-it-yourself/vpc/deployment-walkthrough/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Deployment walkthrough" -} \ No newline at end of file diff --git a/_docs-sources/guides/build-it-yourself/vpc/production-grade-design/_category_.json b/_docs-sources/guides/build-it-yourself/vpc/production-grade-design/_category_.json deleted file mode 100644 index 8c8bc9a850..0000000000 --- a/_docs-sources/guides/build-it-yourself/vpc/production-grade-design/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"label": "Production-grade design" -} \ No newline at end of file From f3268ffed1aee16bcdde27e5097c755b3be347ca Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Tue, 1 Feb 2022 16:11:42 -0800 Subject: [PATCH 09/12] Capitalize 'Deployment Walkthrough' in our guide sidebars --- sidebars/compliance-guide.js | 2 +- sidebars/kubernetes-guide.js | 2 +- sidebars/landing-zone-guide.js | 2 +- sidebars/pipelines-guide.js | 2 +- sidebars/vpc-guide.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sidebars/compliance-guide.js b/sidebars/compliance-guide.js index ccca54c8cf..06a7d6f745 100644 --- a/sidebars/compliance-guide.js +++ b/sidebars/compliance-guide.js @@ -30,7 +30,7 @@ const sidebar = [ ], }, { - "Deployment walkthrough": [ + "Deployment Walkthrough": [ "guides/build-it-yourself/achieve-compliance/deployment-walkthrough/pre-requisites", "guides/build-it-yourself/achieve-compliance/deployment-walkthrough/the-gruntwork-solution", "guides/build-it-yourself/achieve-compliance/deployment-walkthrough/prepare-your-infrastructure-live-repository", diff --git a/sidebars/kubernetes-guide.js b/sidebars/kubernetes-guide.js index 836a669d34..c2d582a299 100644 --- a/sidebars/kubernetes-guide.js +++ b/sidebars/kubernetes-guide.js @@ -38,7 +38,7 @@ const sidebar = [ ], }, { - "Deployment walkthrough": [ + "Deployment Walkthrough": [ "guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/pre-requisites", "guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/deploy-the-vpc", "guides/build-it-yourself/kubernetes-cluster/deployment-walkthrough/configure-the-control-plane", diff --git a/sidebars/landing-zone-guide.js b/sidebars/landing-zone-guide.js index c6375cb8a0..dbf6b4a657 100644 --- a/sidebars/landing-zone-guide.js +++ b/sidebars/landing-zone-guide.js @@ -46,7 +46,7 @@ const sidebar = [ ], }, { - "Deployment walkthrough": [ + "Deployment Walkthrough": [ "guides/build-it-yourself/landing-zone/deployment-walkthrough/pre-requisites", "guides/build-it-yourself/landing-zone/deployment-walkthrough/prepare-your-infrastructure-live-repository", "guides/build-it-yourself/landing-zone/deployment-walkthrough/create-the-root-account", diff --git a/sidebars/pipelines-guide.js b/sidebars/pipelines-guide.js index bc4056c394..b6282f5fa7 100644 --- a/sidebars/pipelines-guide.js +++ b/sidebars/pipelines-guide.js @@ -39,7 +39,7 @@ const sidebar = [ ], }, { - "Deployment walkthrough": [ + "Deployment Walkthrough": [ "guides/build-it-yourself/pipelines/deployment-walkthrough/pre-requisites", "guides/build-it-yourself/pipelines/deployment-walkthrough/deploy-a-vpc", "guides/build-it-yourself/pipelines/deployment-walkthrough/deploy-the-ecs-deploy-runner", diff --git a/sidebars/vpc-guide.js b/sidebars/vpc-guide.js index 228a971cbb..7747e4c9c5 100644 --- a/sidebars/vpc-guide.js +++ b/sidebars/vpc-guide.js @@ -43,7 +43,7 @@ const sidebar = [ ], }, { - "Deployment walkthrough": [ + "Deployment Walkthrough": [ "guides/build-it-yourself/vpc/deployment-walkthrough/pre-requisites", "guides/build-it-yourself/vpc/deployment-walkthrough/deploy-a-management-vpc", "guides/build-it-yourself/vpc/deployment-walkthrough/deploy-application-vp-cs", From d1358cff87cef825922781903b43355125ba66dc Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Wed, 2 Feb 2022 13:03:44 -0800 Subject: [PATCH 10/12] Add a README for the sidebar tool --- README.md | 55 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index f1d013ec10..e00c53cb8a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. -## Docs Sourcer +## Overview + +### Docs Sourcer All of the content that we see on the docs site is rendered to the top level `docs/` folder by the @@ -16,7 +18,7 @@ pull in tagged content from other files, located in other GitHub repos, pull in images and auto-correct links. This will allow content creators to have more features when authoring content. -## Content creation +### Content creation All manually created MarkDown source content lives in the `_docs-sources/` folder. The top level `docs/` folder contains the _generated_ output that @@ -24,7 +26,7 @@ results after the `docs-sourcer` processes the `_docs-sources/` directory. Grunts should **never edit any of the MarkDown files in the `docs/` folder directly**. We should always be editing the content in `_docs-sources/`. -## Installation of dependencies +## Installing dependencies ```sh yarn @@ -43,16 +45,7 @@ you edit a file in `_docs-sources/` then the `docs-sourcer` will automatically re-run to regenerate the output files. Docusaurus will then hot-reload that content so that to the end user, they have "live reloading" while authoring. -### Run production build locally - -```sh -yarn build && yarn serve -``` - -This will create and serve a production build. This can be used to verify the -expected behaviors in a production environment and view the Google analytics. - -## Committing changes to docs +### Committing changes While authoring local content, you will exclusively be making your changes in the `_docs-sources/` folder. The `docs-sourcer` will then pre-process and @@ -64,7 +57,16 @@ Generated content should be up to date if you are previewing locally while editing but you may wish to manually regenerate the output (see section below) to ensure it is totally up to date. -## Manually generating docs output +### Running a production build locally + +```sh +yarn build && yarn serve +``` + +This will create and serve a production build. This can be used to verify the +expected behaviors in a production environment and view the Google analytics. + +### Manually generating docs output It's possible to manually regenerate output content from the sources in `_docs-sources/`: @@ -76,11 +78,28 @@ yarn regenerate:local This command can be run at any time, regardless of whether `yarn start` is currently running. -## Build +### Generating sidebars for guides + +We utilitize explicit sidebar definitions for most of our docs content. Doing +so enables authors to easily provide explicit titles for all category labels, +as well as define the relative ordering of pages in a maintainable way. +Long-form docs with many sections receive a dedicated sidebar to provide a +focused reading experience (e.g. /guides/build-it-yourself/\*). + +A tool is provided to automatically generate sidebars for any new guide. To +run it, specify the path to the directory you wish to create a sidebar for in +either `_docs-sources/` or the output `docs/` path, relative to your current +working directory. ```sh -yarn build +yarn sidebar docs/guides/build-it-yourself/my-new-guide/ ``` -This command generates static content into the `build` directory and can be -served using any static contents hosting service. +Once generated, you're free to adjust the names of each category, which only +appear in the sidebar itself. You may also reorder any of the linked pages +within each section, which will be reflected in the rendered output. + +See the usage instructions with `yarn sidebar --help` to learn how to add a +back button or specify an output file. The resulting file should be placed in +the `sidebars/` directory. You'll also need to require this file in +`sidebars.js`, and then re-run `yarn start` to see your changes. From 821e76bb6f96e5fdd51dacd71fff963633abfe5a Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Wed, 2 Feb 2022 13:04:16 -0800 Subject: [PATCH 11/12] Add/fix a few sidebar tests --- .../scripts/sidebar-data/index.mdx | 0 tests/scripts/sidebar-lib.spec.ts | 38 ++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 tests/sample-data/scripts/sidebar-data/index.mdx diff --git a/tests/sample-data/scripts/sidebar-data/index.mdx b/tests/sample-data/scripts/sidebar-data/index.mdx new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/scripts/sidebar-lib.spec.ts b/tests/scripts/sidebar-lib.spec.ts index 5d8eee9cd8..cc5ad47c75 100644 --- a/tests/scripts/sidebar-lib.spec.ts +++ b/tests/scripts/sidebar-lib.spec.ts @@ -140,7 +140,7 @@ describe("Script:generate-sidebar", () => { describe("Helpers", () => { describe("Function:formatName", () => { - test("Converts hyphens to strings", () => { + test("Converts hyphens to spaces", () => { const formattedName = formatName("name-with-dashes") expect(formattedName).toBe("Name With Dashes") }) @@ -156,11 +156,29 @@ describe("Script:generate-sidebar", () => { expect(formattedName).toBe("Lowercase Title") }) - test("Leaves acronyms untouched", () => { + test("Leaves acronyms uppercase", () => { let formattedName formattedName = formatName("ABC-acronym") expect(formattedName).toBe("ABC Acronym") }) + + test.skip("Leaves articles lowercase", () => { + let formattedName + formattedName = formatName("read-the-manual") + expect(formattedName).toBe("Read the Manual") + }) + + test.skip("Leaves conjunctions lowercase", () => { + let formattedName + formattedName = formatName("that-and-that") + expect(formattedName).toBe("This and That") + }) + + test("Supports title with numbers", () => { + let formattedName + formattedName = formatName("1-is-the-loneliest") + expect(formattedName).toBe("1 Is The Loneliest") + }) }) describe("Function:isCategoryIndexFilePredicate", () => { @@ -183,6 +201,11 @@ describe("Script:generate-sidebar", () => { const b = isCategoryIndexFilePredicate(sampleDataPath("index.md")) expect(b).toBeTruthy() }) + + test("Returns true for MDX files named index", () => { + const b = isCategoryIndexFilePredicate(sampleDataPath("index.mdx")) + expect(b).toBeTruthy() + }) }) describe("Function:isSupportedFileType", () => { @@ -202,7 +225,7 @@ describe("Script:generate-sidebar", () => { }) test("Returns false _category_.json files", () => { - const b = isSupportedFileType(sampleDataPath("script.js")) + const b = isSupportedFileType(sampleDataPath("_category_.json")) expect(b).toBeFalsy() }) @@ -210,19 +233,24 @@ describe("Script:generate-sidebar", () => { const b = isSupportedFileType(sampleDataPath("index.txt")) expect(b).toBeFalsy() }) + + test("Returns false for non-existent files", () => { + const b = isSupportedFileType(sampleDataPath("bogus.foo")) + expect(b).toBeFalsy() + }) }) describe("Function:toOutputDocId", () => { test("Generates proper docId for files inside _docs-sources", () => { const docId = toOutputDocId( - "/any/asbsolute/path/that/ends/with/_docs-sources/foo/bar/baz.md" + "/any/absolute/path/that/ends/with/_docs-sources/foo/bar/baz.md" ) expect(docId).toBe("foo/bar/baz") }) test("Generates proper docId for files inside output docs", () => { const docId = toOutputDocId( - "/any/asbsolute/path/that/ends/with/docs/foo/bar/baz.md" + "/any/absolute/path/that/ends/with/docs/foo/bar/baz.md" ) expect(docId).toBe("foo/bar/baz") }) From 25d09f50d2e7eba14680e3c4a646eb1da8c35426 Mon Sep 17 00:00:00 2001 From: Eben Eliason Date: Thu, 3 Feb 2022 15:51:17 -0800 Subject: [PATCH 12/12] Final fixes and updated tests --- scripts/generate-sidebar.js | 4 ++-- scripts/sidebar-lib.js | 6 +++--- tests/scripts/sidebar-lib.spec.ts | 12 ++++++++++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/scripts/generate-sidebar.js b/scripts/generate-sidebar.js index 1da91d92fc..2d96e4a722 100755 --- a/scripts/generate-sidebar.js +++ b/scripts/generate-sidebar.js @@ -4,7 +4,7 @@ const yargs = require("yargs/yargs") const path = require("path") const fs = require("fs") const { - generateSingleSidebarFile, + generateSidebarFile, generateMultiSidebarFile, } = require("./sidebar-lib") @@ -59,7 +59,7 @@ async function main() { if (argv._.length < 2) { // operate on the working dir if not otherwise specified const inputDir = resolveDir(argv._[0] || ".") - data = await generateSingleSidebarFile(inputDir, opts) + data = await generateSidebarFile(inputDir, opts) } else { const inputDirs = argv._.map(resolveDir) data = await generateMultiSidebarFile(inputDirs, opts) diff --git a/scripts/sidebar-lib.js b/scripts/sidebar-lib.js index 7f4dfe0f31..322e485409 100644 --- a/scripts/sidebar-lib.js +++ b/scripts/sidebar-lib.js @@ -73,9 +73,9 @@ async function generateSidebar(dir, opts = {}) { for (const fullPath of fullPaths) { if (fs.statSync(fullPath).isDirectory()) { - // process subdirectories recusively (back button is top level only!) + // process subdirectories recusively const items = await generateSidebar(fullPath, { - backButton: opts.backButton, + // note: back button is ommited as it's top-level only verbose: opts.verbose, spacer: opts.spacer + " ", }) @@ -111,7 +111,7 @@ async function generateSidebar(dir, opts = {}) { sidebarItems.unshift({ label: opts.backButton, type: "link", - href: toOutputDocId(path.dirname(dir)), + href: "/" + toOutputDocId(path.dirname(dir)), // must be absolute className: "back-button", }) } diff --git a/tests/scripts/sidebar-lib.spec.ts b/tests/scripts/sidebar-lib.spec.ts index cc5ad47c75..9e9ba6d60a 100644 --- a/tests/scripts/sidebar-lib.spec.ts +++ b/tests/scripts/sidebar-lib.spec.ts @@ -94,7 +94,15 @@ describe("Script:generate-sidebar", () => { expect(backButton.type).toBe("link") expect(backButton.label).toBe("Back") expect(backButton.className).toBe("back-button") - expect(backButton.href).toBe(docId(".")) + expect(backButton.href).toBe("/" + docId(".")) // must be absolute + }) + + test("Back button only appears at the top level", async () => { + const sidebar = await generateSidebar(sampleDataPath("hierarchy"), { + backButton: "Back", + }) + const firstSection = findSidebarSectionByName(sidebar, "First Section") + expect(firstSection[0].label).not.toBe("Back") }) }) @@ -133,7 +141,7 @@ describe("Script:generate-sidebar", () => { expect(backButton.type).toBe("link") expect(backButton.label).toBe("Back") expect(backButton.className).toBe("back-button") - expect(backButton.href).toBe(docId(".")) + expect(backButton.href).toBe("/" + docId(".")) // must be absolute }) }) })