diff --git a/.gitignore b/.gitignore index 2d7d879365..95f1cddd0d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,14 +7,13 @@ npm-debug.log coverage/ .linkinator /assets/images/early-access +/assets/fonts/inter /content/early-access /data/early-access -dist .next .eslintcache # blc: broken link checker blc_output.log blc_output_internal.log -/dist/ broken_links.md diff --git a/Dockerfile b/Dockerfile index 0dd8574072..817ab582a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,7 +46,6 @@ COPY lib ./lib # one part of the build relies on this content file to pull all-products COPY content/index.md ./content/index.md -COPY webpack.config.js ./webpack.config.js COPY next.config.js ./next.config.js COPY tsconfig.json ./tsconfig.json @@ -73,7 +72,6 @@ USER node COPY --chown=node:node --from=prod_deps /usr/src/docs/node_modules /usr/src/docs/node_modules # Copy our front-end code -COPY --chown=node:node --from=builder /usr/src/docs/dist /usr/src/docs/dist COPY --chown=node:node --from=builder /usr/src/docs/.next /usr/src/docs/.next # We should always be running in production mode @@ -87,7 +85,6 @@ COPY --chown=node:node assets ./assets COPY --chown=node:node content ./content COPY --chown=node:node data ./data COPY --chown=node:node includes ./includes -COPY --chown=node:node layouts ./layouts COPY --chown=node:node lib ./lib COPY --chown=node:node middleware ./middleware COPY --chown=node:node translations ./translations diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph.md b/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph.md index 26bd212f04..74f0ec25bc 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph.md +++ b/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph.md @@ -74,8 +74,9 @@ The recommended formats explicitly define which versions are used for all direct | Package manager | Languages | Recommended formats | All supported formats | | --- | --- | --- | ---| | Composer | PHP | `composer.lock` | `composer.json`, `composer.lock` | -| `dotnet` CLI | .NET languages (C#, C++, F#, VB) | `.csproj`, `.vbproj`, `.nuspec`, `.vcxproj`, `.fsproj` | `.csproj`, `.vbproj`, `.nuspec`, `.vcxproj`, `.fsproj`, `packages.config` | -| Maven | Java, Scala | `pom.xml` | `pom.xml` | +| `dotnet` CLI | .NET languages (C#, C++, F#, VB) | `.csproj`, `.vbproj`, `.nuspec`, `.vcxproj`, `.fsproj` | `.csproj`, `.vbproj`, `.nuspec`, `.vcxproj`, `.fsproj`, `packages.config` |{% ifversion fpt or ghes > 3.1 %} +| Go modules | Go | `go.mod` | `go.mod` | +{% endif %}| Maven | Java, Scala | `pom.xml` | `pom.xml` | | npm | JavaScript | `package-lock.json` | `package-lock.json`, `package.json`| | Python PIP | Python | `requirements.txt`, `pipfile.lock` | `requirements.txt`, `pipfile`, `pipfile.lock`, `setup.py`* | | RubyGems | Ruby | `Gemfile.lock` | `Gemfile.lock`, `Gemfile`, `*.gemspec` | diff --git a/data/reusables/supported-languages/go.md b/data/reusables/supported-languages/go.md index a9590737d3..102e2b5b5e 100644 --- a/data/reusables/supported-languages/go.md +++ b/data/reusables/supported-languages/go.md @@ -1 +1 @@ -| Go {% ifversion fpt %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} | {% octicon "check" aria-label="The check icon" %}
Go modules | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% elsif ghes > 2.21 %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% elsif ghae %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% endif %} +| Go {% ifversion fpt %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "check" aria-label="The check icon" %} | {% octicon "check" aria-label="The check icon" %}
Go modules | {% octicon "check" aria-label="The check icon" %}
Go modules | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% elsif ghes > 3.1 %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "check" aria-label="The check icon" %}
Go modules | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% elsif ghes > 2.21 %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% elsif ghae %}| {% octicon "check" aria-label="The check icon" %} | {% octicon "check" aria-label="The check icon" %} | {% octicon "x" aria-label="The X icon" %} |{% endif %} diff --git a/includes/all-enterprise-releases-link.html b/includes/all-enterprise-releases-link.html deleted file mode 100644 index ed96dfc2d4..0000000000 --- a/includes/all-enterprise-releases-link.html +++ /dev/null @@ -1 +0,0 @@ -See all Enterprise releases diff --git a/includes/all-products-link.html b/includes/all-products-link.html deleted file mode 100644 index 22e691d554..0000000000 --- a/includes/all-products-link.html +++ /dev/null @@ -1,8 +0,0 @@ -{% if currentVersion != 'homepage' %} -
  • - - - All products - -
  • -{% endif %} diff --git a/includes/contribution.html b/includes/contribution.html deleted file mode 100644 index 29652dd0ff..0000000000 --- a/includes/contribution.html +++ /dev/null @@ -1,16 +0,0 @@ -{% unless enterpriseServerReleases.isOldestReleaseDeprecated and currentVersion contains enterpriseServerReleases.oldestSupported %} -
    -

    {% data ui.contribution_cta.title %}

    -

    {% data ui.contribution_cta.body %}

    - {% if page.relativePath %} - {% assign contribution_href = "https://github.com/github/docs/edit/main/content/" | append: page.relativePath %} - {% else %} - {% assign contribution_href = "https://github.com/github/docs" %} - {% endif %} - - {% octicon "git-pull-request" height="16" %} - {% data ui.contribution_cta.button %} - -

    {% data ui.contribution_cta.or %} {% data ui.contribution_cta.to_guidelines %}

    -
    -{% endunless %} diff --git a/includes/error-404-deprecation-message.html b/includes/error-404-deprecation-message.html deleted file mode 100644 index e73938725d..0000000000 --- a/includes/error-404-deprecation-message.html +++ /dev/null @@ -1,12 +0,0 @@ -{% if enterpriseServerReleases.deprecated contains currentVersion %} -{% assign deprecatedDate = enterpriseServerReleases.dates[currentVersion].deprecationDate %} -
    -

    - - {% data reusables.enterprise_deprecation.version_was_deprecated %} - {{ deprecatedDate }}. - - The documentation page you are looking for may have moved. Try going to the GitHub Enterprise Server {{ currentVersion }} documentation homepage or searching by keyword. -

    -
    -{% endif %} diff --git a/includes/head.html b/includes/head.html deleted file mode 100644 index 99425bbd70..0000000000 --- a/includes/head.html +++ /dev/null @@ -1,33 +0,0 @@ - - {% comment %} For human readers {% endcomment %} - - {% if error == '404' %}{% data ui.errors.oops %}{% elsif page.documentType == 'homepage' and currentVersion == 'free-pro-team@latest' %}GitHub Documentation{% elsif page.fullTitle %}{{ page.fullTitle }}{% else %}GitHub Documentation{% endif %} - - - - - - {% comment %} For Google and Bots {% endcomment %} - {% if page.intro %} - - {% endif %} - {% if page.topics %} - - {% endif %} - {% if page.hidden %} - - {% endif %} - {% for languageVariant in page.languageVariants %} - - {% endfor %} - - - - {% comment %} For our JS {% endcomment %} - - - diff --git a/includes/header-notification.html b/includes/header-notification.html deleted file mode 100644 index 24775efd55..0000000000 --- a/includes/header-notification.html +++ /dev/null @@ -1,69 +0,0 @@ - -{% if currentLanguage != 'en' %} - {% assign translation_notification_type = "true" %} - - - {% if page.relativePath contains '/site-policy/' %} - {% assign translation_notification = site.data.reusables.policies.translation %} - - - {% elsif languages[currentLanguage].wip != true %} - {% assign translation_notification = site.data.ui.header.notices.localization_complete %} - - - {% elsif languages[currentLanguage].wip %} - {% assign translation_notification = site.data.ui.header.notices.localization_in_progress %} - {% endif %} - -{% else %} - - {% if languages[userLanguage].wip == false and userLanguage != 'en' %} - {% assign user_language_redirect_notification_type = true %} - {% endif %} - -{% endif %} - - - - -{% if currentVersion == "github-ae@latest" %} - {% assign release_notification_type = "true" %} - {% assign release_notification = site.data.ui.header.notices.ghae_silent_launch %} - - -{% elsif currentVersion == site.data.variables.release_candidate.version %} - {% assign release_notification_type = "true" %} - {% assign release_notification = allVersions[currentVersion].versionTitle | append: site.data.ui.header.notices.release_candidate %} -{% endif %} - - - -{% if page.hidden and page.relativePath contains "early-access/" %} -{% assign early_access_notification_type = true %} -{% assign early_access_notification = site.data.ui.header.notices.early_access %} -{% endif %} - - -{% if translation_notification_type %} -
    - {{ translation_notification }} -
    -{% endif %} - -{% if user_language_redirect_notification_type %} -
    - This article is also available in your language of choice. Click here -
    -{% endif %} - -{% if release_notification_type %} -
    - {{ release_notification }} -
    -{% endif %} - -{% if early_access_notification_type %} -
    - {{ early_access_notification }} -
    -{% endif %} diff --git a/includes/header-version-switcher.html b/includes/header-version-switcher.html deleted file mode 100644 index 4462c7d344..0000000000 --- a/includes/header-version-switcher.html +++ /dev/null @@ -1,26 +0,0 @@ - -{% if page.relativePath == 'index.md' or page.layout == 'product-landing' or page.layout == 'product-sublanding' or page.layout == 'release-notes' %} -{% if page.permalinks and page.permalinks.length > 1 %} -
    -
    - -
    -{% endif %} -{% endif %} diff --git a/includes/header.html b/includes/header.html deleted file mode 100644 index e4ad00cafd..0000000000 --- a/includes/header.html +++ /dev/null @@ -1,104 +0,0 @@ -
    - {% unless error == '404' %} - {% include header-notification %} - {% endunless %} - -
    - - - -
    -
    - - -
    -
    -
    -
    diff --git a/includes/liquid-tags/homepage-link-with-intro.html b/includes/liquid-tags/homepage-link-with-intro.html deleted file mode 100644 index 3a2ed99940..0000000000 --- a/includes/liquid-tags/homepage-link-with-intro.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/includes/liquid-tags/link-as-article-card.html b/includes/liquid-tags/link-as-article-card.html index 23ba93ef90..628a2618ed 100644 --- a/includes/liquid-tags/link-as-article-card.html +++ b/includes/liquid-tags/link-as-article-card.html @@ -11,4 +11,4 @@
    {% endif %} - + \ No newline at end of file diff --git a/includes/liquid-tags/link-in-list.html b/includes/liquid-tags/link-in-list.html index ef9d132a22..51a25c9fe8 100644 --- a/includes/liquid-tags/link-in-list.html +++ b/includes/liquid-tags/link-in-list.html @@ -1 +1 @@ -- {{ title }} +- {{ title }} \ No newline at end of file diff --git a/includes/liquid-tags/link-with-intro.html b/includes/liquid-tags/link-with-intro.html index e5c70bbd8a..361f22042f 100644 --- a/includes/liquid-tags/link-with-intro.html +++ b/includes/liquid-tags/link-with-intro.html @@ -1,4 +1,4 @@ -{% if intro %}{% endif %} +{% if intro %}{% endif %} \ No newline at end of file diff --git a/includes/liquid-tags/link.html b/includes/liquid-tags/link.html index 1d4faae5b2..c41d80ea0e 100644 --- a/includes/liquid-tags/link.html +++ b/includes/liquid-tags/link.html @@ -1 +1 @@ -{{ title }} +{{ title }} \ No newline at end of file diff --git a/includes/liquid-tags/topic-link-in-list.html b/includes/liquid-tags/topic-link-in-list.html index 8870536b3c..87d5ddfdc2 100644 --- a/includes/liquid-tags/topic-link-in-list.html +++ b/includes/liquid-tags/topic-link-in-list.html @@ -1 +1 @@ -- {{ title }} +- {{ title }} \ No newline at end of file diff --git a/includes/scripts.html b/includes/scripts.html deleted file mode 100644 index 6f328a0cc3..0000000000 --- a/includes/scripts.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/includes/scroll-button.html b/includes/scroll-button.html deleted file mode 100644 index 772ed5ac89..0000000000 --- a/includes/scroll-button.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/includes/search-form.html b/includes/search-form.html deleted file mode 100644 index 5749ba0803..0000000000 --- a/includes/search-form.html +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/includes/sidebar-homepage.html b/includes/sidebar-homepage.html deleted file mode 100644 index 0dbccee175..0000000000 --- a/includes/sidebar-homepage.html +++ /dev/null @@ -1,19 +0,0 @@ -{% if currentVersion != 'free-pro-team@latest' %} -{% include all-products-link %} -{% endif %} - -{% for product in activeProducts %} -{% if currentVersion == 'free-pro-team@latest' or product.external or product.versions contains currentVersion %} - -{% endif %} -{% endfor %} diff --git a/includes/sidebar-product.html b/includes/sidebar-product.html deleted file mode 100644 index 94c41df035..0000000000 --- a/includes/sidebar-product.html +++ /dev/null @@ -1,76 +0,0 @@ - - -{% include all-products-link %} - -{% unless currentProductTree.page.hidden %} - -{% if currentProductTree.renderedShortTitle %}{% assign productTitle = currentProductTree.renderedShortTitle %}{% else %}{% assign productTitle = currentProductTree.renderedFullTitle %}{% endif %} - - -
  • - -
  • - -{% endunless %} diff --git a/includes/sidebar.html b/includes/sidebar.html deleted file mode 100644 index d4ed2d8f85..0000000000 --- a/includes/sidebar.html +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/includes/small-footer.html b/includes/small-footer.html deleted file mode 100644 index 85957b8c6b..0000000000 --- a/includes/small-footer.html +++ /dev/null @@ -1,22 +0,0 @@ - - -{% include scripts %} diff --git a/includes/support-section.html b/includes/support-section.html deleted file mode 100644 index fbb98fa7df..0000000000 --- a/includes/support-section.html +++ /dev/null @@ -1,16 +0,0 @@ -
    -
    -
    - {% include survey %} -
    -
    - {% include contribution %} -
    -
    - {% include support %} -
    -
    - {% include toggle-images %} -
    -
    -
    diff --git a/includes/support.html b/includes/support.html deleted file mode 100644 index 2a78e31634..0000000000 --- a/includes/support.html +++ /dev/null @@ -1,15 +0,0 @@ - -
    -

    - {% data ui.support.still_need_help %} -

    - {% if currentVersion contains 'enterprise' %}{% assign isEnterprise = true %}{% else %}{% assign isEnterprise = false %}{% endif %} - - {% octicon "people" width="16" %} - {% data ui.support.ask_community %} - - - {% octicon "comment-discussion" width="16" %} - {% data ui.support.contact_support %} - -
    diff --git a/includes/survey.html b/includes/survey.html deleted file mode 100644 index 882b015b8c..0000000000 --- a/includes/survey.html +++ /dev/null @@ -1,107 +0,0 @@ -{% unless enterpriseServerReleases.isOldestReleaseDeprecated and currentVersion contains enterpriseServerReleases.oldestSupported %} -
    -

    - {% data ui.survey.able_to_find %} - {% data ui.survey.privacy_policy %} -

    -

    - - - - -

    - - - - - - - -
    -{% endunless %} diff --git a/includes/toggle-images.html b/includes/toggle-images.html deleted file mode 100644 index 79da415c49..0000000000 --- a/includes/toggle-images.html +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/includes/tool-switcher.html b/includes/tool-switcher.html index 5aca48f340..dec63c8214 100644 --- a/includes/tool-switcher.html +++ b/includes/tool-switcher.html @@ -6,4 +6,4 @@ cURL Desktop - + \ No newline at end of file diff --git a/javascripts/explorer.ts b/javascripts/explorer.ts deleted file mode 100644 index 44bfd0ee6d..0000000000 --- a/javascripts/explorer.ts +++ /dev/null @@ -1,16 +0,0 @@ -const explorerUrl = - location.hostname === 'localhost' - ? 'http://localhost:3000' - : 'https://graphql.github.com/explorer' - -// Pass non-search query params to Explorer app via the iFrame -export default function () { - const graphiqlExplorer = document.getElementById('graphiql') as HTMLIFrameElement - const queryString = window.location.search - - if (!(queryString && graphiqlExplorer)) return - - window.onload = () => { - graphiqlExplorer?.contentWindow?.postMessage(queryString, explorerUrl) - } -} diff --git a/javascripts/hyperscript.ts b/javascripts/hyperscript.ts deleted file mode 100644 index ddef7d9c06..0000000000 --- a/javascripts/hyperscript.ts +++ /dev/null @@ -1,46 +0,0 @@ -const xmlns = 'http://www.w3.org/2000/svg' - -const plainObjectConstructor = {}.constructor - -function exists(value: any) { - return value !== null && typeof value !== 'undefined' -} - -function isPlainObject(value: any) { - return value.constructor === plainObjectConstructor -} - -function isString(value: any) { - return typeof value === 'string' -} - -function renderChildren(el: HTMLElement | SVGElement, children: Array) { - for (const child of children) { - if (isPlainObject(child)) { - Object.entries(child) - .filter(([, value]) => exists(value)) - .forEach(([key, value]) => el.setAttribute(key, value as string)) - } else if (Array.isArray(child)) { - renderChildren(el, child) - } else if (isString(child)) { - el.append(document.createTextNode(child)) - } else { - el.append(child) - } - } -} - -export default function h(tagName: string, ...children: Array) { - const el = ['svg', 'path'].includes(tagName) - ? document.createElementNS(xmlns, tagName) - : document.createElement(tagName) - renderChildren(el, children) - return el -} - -export const tags = Object.fromEntries( - ['div', 'form', 'a', 'input', 'button', 'ol', 'li', 'mark'].map((tagName) => [ - tagName, - (...args: Array) => h(tagName, ...args), - ]) -) diff --git a/javascripts/index.ts b/javascripts/index.ts index 95c5e219bb..4d1ca18b83 100644 --- a/javascripts/index.ts +++ b/javascripts/index.ts @@ -2,11 +2,7 @@ import '../stylesheets/index.scss' import displayPlatformSpecificContent from './display-platform-specific-content' import displayToolSpecificContent from './display-tool-specific-content' -import explorer from './explorer' -import scrollUp from './scroll-up' -import search from './search' import wrapCodeTerms from './wrap-code-terms' -import print from './print' import localization from './localization' import experiment from './experiment' import copyCode from './copy-code' @@ -16,11 +12,7 @@ import toggleImages from './toggle-images' document.addEventListener('DOMContentLoaded', async () => { displayPlatformSpecificContent() displayToolSpecificContent() - explorer() - scrollUp() - search() wrapCodeTerms() - print() localization() copyCode() initializeEvents() diff --git a/javascripts/print.ts b/javascripts/print.ts deleted file mode 100644 index 14c8a05494..0000000000 --- a/javascripts/print.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { EventType, sendEvent } from './events' - -export default function () { - const printButtons = document.querySelectorAll('.js-print') - - Array.from(printButtons).forEach((btn) => { - // Open the print dialog when the button is clicked - btn.addEventListener('click', () => { - window.print() - }) - }) - - // Track print events - window.onbeforeprint = function () { - sendEvent({ type: EventType.print }) - } -} diff --git a/javascripts/scroll-up.ts b/javascripts/scroll-up.ts deleted file mode 100644 index e4604e02f8..0000000000 --- a/javascripts/scroll-up.ts +++ /dev/null @@ -1,22 +0,0 @@ -export default function () { - // function to scroll up to page top - const PageTopBtn = document.getElementById('js-scroll-top') - if (!PageTopBtn) return - - PageTopBtn.addEventListener('click', () => { - window.scrollTo({ - top: 0, - behavior: 'smooth', - }) - }) - - // show scroll button only when display is scroll down - window.addEventListener('scroll', function () { - const y = document.documentElement.scrollTop // get the height from page top - if (y < 100) { - PageTopBtn.classList.remove('show') - } else if (y >= 100) { - PageTopBtn.classList.add('show') - } - }) -} diff --git a/javascripts/search-with-your-keyboard.d.ts b/javascripts/search-with-your-keyboard.d.ts deleted file mode 100644 index b33fead8f5..0000000000 --- a/javascripts/search-with-your-keyboard.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module 'search-with-your-keyboard' { - export default function searchWithYourKeyboard(inputSelector: string, hitsSelector: string): void -} diff --git a/javascripts/search.ts b/javascripts/search.ts deleted file mode 100644 index 5d1a84e45c..0000000000 --- a/javascripts/search.ts +++ /dev/null @@ -1,307 +0,0 @@ -import { tags } from './hyperscript' -import { sendEvent, EventType } from './events' -import searchWithYourKeyboard from 'search-with-your-keyboard' - -let $searchInputContainer: HTMLElement | null | undefined -let $searchResultsContainer: HTMLElement | null | undefined -let $searchOverlay: HTMLElement | null | undefined -let $searchInput: HTMLInputElement | null | undefined - -let isExplorerPage: boolean - -// This is our default placeholder, but it can be localized with a tag -let placeholder = 'Search topics, products...' -let version: string -let language: string - -export default function search() { - // @ts-ignore - if (window.IS_NEXTJS_PAGE) return - - // We don't want to mess with query params intended for the GraphQL Explorer - isExplorerPage = Boolean(document.getElementById('graphiql')) - - // First, only initialize search if the elements are on the page - $searchInputContainer = document.getElementById('search-input-container') - $searchResultsContainer = document.getElementById('search-results-container') - if (!$searchInputContainer || !$searchResultsContainer) return - - // This overlay exists so if you click off the search, it closes - $searchOverlay = document.querySelector('.search-overlay-desktop') as HTMLElement - - // There's an index for every version/language combination - const { languages, versions, nonEnterpriseDefaultVersion } = JSON.parse( - (document.getElementById('expose') as HTMLScriptElement)?.text || '' - ).searchOptions - version = deriveVersionFromPath(versions, nonEnterpriseDefaultVersion) - language = deriveLanguageCodeFromPath(languages) - - // Find search placeholder text in a tag, falling back to a default - const $placeholderMeta = document.querySelector( - 'meta[name="site.data.ui.search.placeholder"]' - ) as HTMLMetaElement - if ($placeholderMeta) { - placeholder = $placeholderMeta.content - } - - // Write the search form into its container - $searchInputContainer.append(tmplSearchInput()) - $searchInput = $searchInputContainer.querySelector('input') as HTMLInputElement - - // Prevent 'enter' from refreshing the page - ;($searchInputContainer.querySelector('form') as HTMLFormElement).addEventListener( - 'submit', - (evt) => evt.preventDefault() - ) - - // Search when the user finished typing - $searchInput.addEventListener('keyup', debounce(onSearch)) - - // Adds ability to navigate search results with keyboard (up, down, enter, esc) - searchWithYourKeyboard('#search-input-container input', '.ais-Hits-item') - - // If the user already has a query in the URL, parse it and search away - if (!isExplorerPage) { - parseExistingSearch() - } - - // If not on home page, decide if search panel should be open - toggleSearchDisplay() // must come after parseExistingSearch -} - -// The home page and 404 pages have a standalone search -function hasStandaloneSearch() { - return document.getElementById('landing') || document.querySelector('body.error-404') !== null -} - -function toggleSearchDisplay() { - // Clear/close search, if ESC is clicked - document.addEventListener('keyup', (e) => { - if (e.key === 'Escape') { - closeSearch() - } - }) - - // If not on homepage... - if (hasStandaloneSearch()) return - - // Open panel if input is clicked - $searchInput?.addEventListener('focus', openSearch) - - // Close panel if overlay is clicked - if ($searchOverlay) { - $searchOverlay.addEventListener('click', closeSearch) - } - - // Open panel if page loads with query in the params/input - if ($searchInput?.value) { - openSearch() - } -} - -// On most pages, opens the search panel -function openSearch() { - $searchInput?.classList.add('js-open') - $searchResultsContainer?.classList.add('js-open') - $searchOverlay?.classList.add('js-open') -} - -// Close panel if not on homepage -function closeSearch() { - if (!hasStandaloneSearch()) { - $searchInput?.classList.remove('js-open') - $searchResultsContainer?.classList.remove('js-open') - $searchOverlay?.classList.remove('js-open') - } - - if ($searchInput) $searchInput.value = '' - onSearch() -} - -function deriveLanguageCodeFromPath(languageCodes: Array) { - let languageCode = location.pathname.split('/')[1] - if (!languageCodes.includes(languageCode)) languageCode = 'en' - return languageCode -} - -function deriveVersionFromPath( - allVersions: Record, - nonEnterpriseDefaultVersion: string -) { - // fall back to the non-enterprise default version (FPT currently) on the homepage, 404 page, etc. - const versionStr = location.pathname.split('/')[2] || nonEnterpriseDefaultVersion - return allVersions[versionStr] || allVersions[nonEnterpriseDefaultVersion] -} - -// Wait for the event to stop triggering for X milliseconds before responding -function debounce(fn: Function, delay = 300) { - let timer: number - return (...args: Array) => { - clearTimeout(timer) - timer = window.setTimeout(() => fn.apply(null, args), delay) - } -} - -// When the user finishes typing, update the results -async function onSearch() { - const query = $searchInput?.value || '' - - // Update the URL with the search parameters in the query string - // UNLESS this is the GraphQL Explorer page, where a query in the URL is a GraphQL query - const pushUrl = new URL(location.toString()) - pushUrl.search = query && !isExplorerPage ? new URLSearchParams({ query }).toString() : '' - history.pushState({}, '', pushUrl.toString()) - - // If there's a query, call the endpoint - // Otherwise, there's no results by default - let results = [] - if (query.trim()) { - const endpointUrl = new URL(location.origin) - endpointUrl.pathname = '/search' - endpointUrl.search = new URLSearchParams({ language, version, query }).toString() - - const response = await fetch(endpointUrl.toString(), { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }) - results = response.ok ? await response.json() : [] - } - - // Either way, update the display - $searchResultsContainer?.querySelectorAll('*').forEach((el) => el.remove()) - $searchResultsContainer?.append(tmplSearchResults(results)) - toggleStandaloneSearch() - - // Analytics tracking - if (query.trim()) { - sendEvent({ - type: EventType.search, - search_query: query, - // search_context - }) - } -} - -// If on homepage, toggle results container if query is present -function toggleStandaloneSearch() { - if (!hasStandaloneSearch()) return - - const query = $searchInput?.value - const queryPresent = Boolean(query && query.length > 0) - const $results = document.querySelector('.ais-Hits') as HTMLElement - - // Primer classNames for showing and hiding the results container - const activeClass = $searchResultsContainer?.getAttribute('data-active-class') - const inactiveClass = $searchResultsContainer?.getAttribute('data-inactive-class') - - if (!activeClass) { - console.error( - 'container is missing required `data-active-class` attribute', - $searchResultsContainer - ) - return - } - - if (!inactiveClass) { - console.error( - 'container is missing required `data-inactive-class` attribute', - $searchResultsContainer - ) - return - } - - // hide the container when no query is present - $searchResultsContainer?.classList.toggle(activeClass, queryPresent) - $searchResultsContainer?.classList.toggle(inactiveClass, !queryPresent) - - if (queryPresent && $results) $results.style.display = 'block' -} - -// If the user shows up with a query in the URL, go ahead and search for it -function parseExistingSearch() { - const params = new URLSearchParams(location.search) - if (!params.has('query')) return - if ($searchInput) $searchInput.value = params.get('query') || '' - onSearch() -} - -/** * Template functions ***/ - -function tmplSearchInput() { - // only autofocus on the homepage, and only if no #hash is present in the URL - const autofocus = (hasStandaloneSearch() && !location.hash.length) || null - const { div, form, input, button } = tags - return div( - { class: 'ais-SearchBox' }, - form( - { role: 'search', class: 'ais-SearchBox-form', novalidate: true }, - input({ - class: 'ais-SearchBox-input', - type: 'search', - placeholder, - autofocus, - autocomplete: 'off', - autocorrect: 'off', - autocapitalize: 'off', - spellcheck: 'false', - maxlength: '512', - }), - button({ - class: 'ais-SearchBox-submit', - type: 'submit', - title: 'Submit the search query.', - hidden: true, - }) - ) - ) -} - -type SearchResult = { - url: string - breadcrumbs: string - heading: string - title: string - content: string -} - -function tmplSearchResults(items: Array) { - const { div, ol, li } = tags - return div( - { class: 'ais-Hits', style: 'display:block' }, - ol( - { class: 'ais-Hits-list' }, - items.map((item) => li({ class: 'ais-Hits-item' }, tmplSearchResult(item))) - ) - ) -} - -function tmplSearchResult({ url, breadcrumbs, heading, title, content }: SearchResult) { - const { div, a } = tags - return div( - { class: 'search-result border-top color-border-secondary py-3 px-2' }, - a( - { href: url, class: 'no-underline' }, - div( - { - class: 'search-result-breadcrumbs d-block color-text-primary opacity-60 text-small pb-1', - }, - // Breadcrumbs in search records don't include the page title - markify(breadcrumbs || '') - ), - div( - { class: 'search-result-title d-block h4-mktg color-text-primary' }, - // Display page title and heading (if present exists) - markify(heading ? `${title}: ${heading}` : title) - ), - div({ class: 'search-result-content d-block color-text-secondary' }, markify(content)) - ) - ) -} - -// Convert mark tags in search responses -function markify(text: string) { - const { mark } = tags - return text.split(/<\/?mark>/g).map((el, i) => (i % 2 ? mark(el) : el)) -} diff --git a/layouts/README.md b/layouts/README.md deleted file mode 100644 index 0d25697508..0000000000 --- a/layouts/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Layouts - -The files in this directory are layouts which can be wrapped around pages. - -See also [includes](includes), which are snippets of HTML or Markdown that -can be reused in multiple layouts. - -## Using Layouts - -Be default, `layouts/default.html` will be used for all pages. - -To use a custom layout, add a `layout` value to the page's frontmatter: - -``` ---- -title: Hello World -layout: some-layout ---- -``` - -The example above will use the `layouts/some-layout.html` layout. - -To render a page with no layout, set `layout: false`. - -## Writing Layouts - -Layout files should have a `.html` or `.md` extension, and they -must include the string `{{ content}}` to specify where inner content should -be injected. diff --git a/layouts/error-404.html b/layouts/error-404.html deleted file mode 100644 index 5d6965ac41..0000000000 --- a/layouts/error-404.html +++ /dev/null @@ -1,36 +0,0 @@ - -{% assign error = '404' %} - - {% include head %} - - - {% include sidebar %} - -
    - {% include header %} - -
    -
    - {% include error-404-deprecation-message %} - -

    {% data ui.errors.oops %}

    - -
    - {% data ui.errors.page_doesnt_exist %} -
    - -
    -

    {% data ui.search.need_help %}

    - {% include search-form %} -
    -
    -
    -
    - - - {% include support-section %} - {% include small-footer %} - {% include scroll-button %} -
    - - diff --git a/layouts/error-500.html b/layouts/error-500.html deleted file mode 100644 index b1d928b9fe..0000000000 --- a/layouts/error-500.html +++ /dev/null @@ -1,27 +0,0 @@ - - - {% include head %} - - {% include header %} - -
    -
    -

    {% data ui.errors.oops %}

    - -
    - {% data ui.errors.something_went_wrong %} - {% data ui.errors.we_track_errors %} -
    - - {% if error %} -
    {{ error.stack }}
    - {% endif %} -
    -
    - - - {% include support-section %} - {% include small-footer %} - {% include scroll-button %} - - diff --git a/lib/built-asset-urls.js b/lib/built-asset-urls.js deleted file mode 100644 index f1990f1c91..0000000000 --- a/lib/built-asset-urls.js +++ /dev/null @@ -1,23 +0,0 @@ -import fs from 'fs' -import path from 'path' -import crypto from 'crypto' - -// Get an MD4 Digest Hex content hash, loosely based on Webpack `[contenthash]` -function getContentHash(absFilePath) { - const buffer = fs.readFileSync(absFilePath) - const hash = crypto.createHash('md4') - hash.update(buffer) - return hash.digest('hex') -} - -function getUrl(relFilePath) { - const absFilePath = path.join(process.cwd(), relFilePath) - return `/${relFilePath}?hash=${getContentHash(absFilePath)}` -} - -export default { - main: { - js: getUrl('dist/index.js'), - css: getUrl('dist/index.css'), - }, -} diff --git a/lib/render-content/index.js b/lib/render-content/index.js index 93b47836ad..84194938be 100644 --- a/lib/render-content/index.js +++ b/lib/render-content/index.js @@ -3,7 +3,6 @@ import renderContent from './renderContent.js' import { ExtendedMarkdown, tags } from '../liquid-tags/extended-markdown.js' import xLink from '../liquid-tags/link.js' import xLinkWithIntro from '../liquid-tags/link-with-intro.js' -import xHomepageLinkWithIntro from '../liquid-tags/homepage-link-with-intro.js' import xLinkInList from '../liquid-tags/link-in-list.js' import xTopicLinkInList from '../liquid-tags/topic-link-in-list.js' import xIndentedDataReference from '../liquid-tags/indented-data-reference.js' @@ -15,7 +14,6 @@ import xIfversion from '../liquid-tags/ifversion.js' // Include custom tags like {% link_with_intro /article/foo %} renderContent.liquid.registerTag('link', xLink('link')) renderContent.liquid.registerTag('link_with_intro', xLinkWithIntro) -renderContent.liquid.registerTag('homepage_link_with_intro', xHomepageLinkWithIntro) renderContent.liquid.registerTag('link_in_list', xLinkInList) renderContent.liquid.registerTag('topic_link_in_list', xTopicLinkInList) renderContent.liquid.registerTag('indented_data_reference', xIndentedDataReference) diff --git a/middleware/context.js b/middleware/context.js index 72d3eea794..0a5f02c292 100644 --- a/middleware/context.js +++ b/middleware/context.js @@ -6,7 +6,6 @@ import xPathUtils from '../lib/path-utils.js' import productNames from '../lib/product-names.js' import warmServer from '../lib/warm-server.js' import readJsonFile from '../lib/read-json-file.js' -import builtAssets from '../lib/built-asset-urls.js' import searchVersions from '../lib/search/versions.js' import nonEnterpriseDefaultVersion from '../lib/non-enterprise-default-version.js' const activeProducts = Object.values(productMap).filter( @@ -58,9 +57,6 @@ export default async function contextualize(req, res, next) { req.context.siteTree = siteTree req.context.pages = pageMap - // JS + CSS asset paths - req.context.builtAssets = builtAssets - // Object exposing selected variables to client req.context.expose = JSON.stringify({ // Languages and versions for search diff --git a/middleware/handle-errors.js b/middleware/handle-errors.js index 3b3647624f..01ce128bfd 100644 --- a/middleware/handle-errors.js +++ b/middleware/handle-errors.js @@ -1,6 +1,5 @@ import FailBot from '../lib/failbot.js' import loadSiteData from '../lib/site-data.js' -import builtAssets from '../lib/built-asset-urls.js' import { nextApp } from './next.js' function shouldLogException(error) { @@ -42,9 +41,8 @@ export default async function handleError(error, req, res, next) { // set req.context.site here so we can pass data/ui.yml text to the 500 layout if (!req.context) { const site = await loadSiteData() - req.context = { site: site[req.language || 'en'].site, builtAssets } + req.context = { site: site[req.language || 'en'].site } } - // display error on the page in development and staging, but not in production if (req.context && process.env.HEROKU_PRODUCTION_APP !== 'true') { req.context.error = error diff --git a/next.config.js b/next.config.js index 8644dd711b..8a86137242 100644 --- a/next.config.js +++ b/next.config.js @@ -3,17 +3,30 @@ const fs = require('fs') const frontmatter = require('gray-matter') +const CopyWebpackPlugin = require('copy-webpack-plugin') const path = require('path') const homepage = path.posix.join(process.cwd(), 'content/index.md') const { data } = frontmatter(fs.readFileSync(homepage, 'utf8')) const productIds = data.children module.exports = { + webpack: (config, { isServer }) => { + if (isServer) { + config.plugins.push( + new CopyWebpackPlugin({ + patterns: [ + { + from: path.join(__dirname, 'node_modules/@primer/css/fonts'), + to: path.join(__dirname, 'assets/fonts/inter'), + }, + ], + }) + ) + } + return config + }, // speed up production `next build` by ignoring typechecking during that step of build. // type-checking still occurs in the Dockerfile build - future: { - webpack: 5, - }, typescript: { ignoreBuildErrors: true, }, diff --git a/package-lock.json b/package-lock.json index 382e37d303..7f871b710a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "connect-datadog": "0.0.9", "connect-slashes": "^1.4.0", "cookie-parser": "^1.4.5", + "copy-webpack-plugin": "^9.0.1", "cors": "^2.8.5", "csurf": "^1.11.0", "dayjs": "^1.10.4", @@ -116,7 +117,6 @@ "babel-preset-env": "^1.7.0", "chalk": "^4.1.1", "commander": "^7.2.0", - "copy-webpack-plugin": "^8.1.1", "count-array-values": "^1.2.1", "cross-env": "^7.0.3", "csp-parse": "0.0.2", @@ -171,8 +171,6 @@ "ts-loader": "^9.2.3", "typescript": "^4.3.2", "url-template": "^2.0.8", - "webpack": "^5.37.0", - "webpack-cli": "^4.7.0", "website-scraper": "^4.2.3" }, "engines": { @@ -1889,15 +1887,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -3548,7 +3537,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" @@ -3561,7 +3549,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "dev": true, "engines": { "node": ">= 8" } @@ -3570,7 +3557,6 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" @@ -4069,7 +4055,7 @@ "version": "7.2.8", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz", "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==", - "devOptional": true, + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -4079,7 +4065,7 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "devOptional": true, + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4089,7 +4075,7 @@ "version": "0.0.47", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", - "devOptional": true + "peer": true }, "node_modules/@types/github-slugger": { "version": "1.3.0", @@ -4170,10 +4156,9 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "devOptional": true + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -4655,7 +4640,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.0", "@webassemblyjs/helper-wasm-bytecode": "1.11.0" @@ -4665,25 +4650,25 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "devOptional": true + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "devOptional": true + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", - "devOptional": true + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.0", "@webassemblyjs/helper-api-error": "1.11.0", @@ -4694,13 +4679,13 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "devOptional": true + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-buffer": "1.11.0", @@ -4712,7 +4697,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", - "devOptional": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4721,7 +4706,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", - "devOptional": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -4730,13 +4715,13 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", - "devOptional": true + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-buffer": "1.11.0", @@ -4752,7 +4737,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-wasm-bytecode": "1.11.0", @@ -4765,7 +4750,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-buffer": "1.11.0", @@ -4777,7 +4762,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-api-error": "1.11.0", @@ -4791,44 +4776,23 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "devOptional": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", - "dev": true - }, - "node_modules/@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", - "dev": true - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true + "peer": true }, "node_modules/abab": { "version": "2.0.5", @@ -5021,8 +4985,7 @@ "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "devOptional": true + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "node_modules/ajv/node_modules/json-schema-traverse": { "version": "1.0.0", @@ -7329,7 +7292,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "devOptional": true, + "peer": true, "dependencies": { "tslib": "^1.9.0" }, @@ -7793,49 +7756,67 @@ "dev": true }, "node_modules/copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", - "dev": true, + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", "dependencies": { "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", + "glob-parent": "^6.0.0", "globby": "^11.0.3", "normalize-path": "^3.0.0", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, "node_modules/copy-webpack-plugin/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/copy-webpack-plugin/node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", - "dev": true, + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7846,13 +7827,15 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-webpack-plugin/node_modules/ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, "engines": { "node": ">= 4" } @@ -7861,7 +7844,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7870,26 +7852,39 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" } }, "node_modules/core-js": { @@ -8748,7 +8743,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -9112,7 +9106,6 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "devOptional": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -9153,18 +9146,6 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -9209,7 +9190,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", - "devOptional": true + "peer": true }, "node_modules/es-to-primitive": { "version": "1.2.1", @@ -9649,7 +9630,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "devOptional": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -9662,7 +9642,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "devOptional": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -9674,7 +9653,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "devOptional": true, "engines": { "node": ">=4.0" } @@ -10310,7 +10288,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -10326,8 +10303,7 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "devOptional": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -10340,17 +10316,10 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "node_modules/fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -11956,15 +11925,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -12245,7 +12205,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "devOptional": true, + "optional": true, "dependencies": { "isobject": "^3.0.1" }, @@ -12407,7 +12367,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "devOptional": true, + "optional": true, "engines": { "node": ">=0.10.0" } @@ -14986,7 +14946,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "devOptional": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -15000,7 +14960,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "peer": true, "engines": { "node": ">=8" } @@ -15009,7 +14969,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -15209,8 +15169,7 @@ "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "devOptional": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -15227,8 +15186,7 @@ "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -15863,7 +15821,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "devOptional": true, + "peer": true, "engines": { "node": ">=6.11.5" } @@ -16383,7 +16341,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -16425,7 +16382,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "devOptional": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -16852,8 +16808,7 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "devOptional": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/next": { "version": "11.0.0", @@ -18559,7 +18514,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -19463,8 +19417,7 @@ "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "node_modules/quick-lru": { "version": "4.0.1", @@ -19691,18 +19644,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -20400,7 +20341,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -20464,7 +20404,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "dependencies": { "queue-microtask": "^1.2.2" } @@ -20715,7 +20654,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "devOptional": true, + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -20917,8 +20856,7 @@ "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "devOptional": true + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, "node_modules/source-map": { "version": "0.5.7", @@ -20941,7 +20879,6 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "devOptional": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -20951,7 +20888,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -21902,7 +21838,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "devOptional": true, "engines": { "node": ">=6" } @@ -21972,7 +21907,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", - "devOptional": true, + "peer": true, "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", @@ -21989,7 +21924,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", - "devOptional": true, + "peer": true, "dependencies": { "jest-worker": "^26.6.2", "p-limit": "^3.1.0", @@ -22006,7 +21941,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -22018,7 +21953,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "devOptional": true, + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -22030,7 +21965,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "devOptional": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", @@ -22044,7 +21979,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -22053,13 +21988,13 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "peer": true }, "node_modules/terser/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "devOptional": true, + "peer": true, "engines": { "node": ">= 8" } @@ -22348,8 +22283,7 @@ "node_modules/tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "devOptional": true + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -23248,7 +23182,7 @@ "version": "5.37.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.1.tgz", "integrity": "sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow==", - "devOptional": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.0", "@types/estree": "^0.0.47", @@ -23281,72 +23215,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-merge/node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-merge/node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -23370,7 +23238,7 @@ "version": "8.2.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", - "devOptional": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -23382,7 +23250,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -23394,7 +23262,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true, + "peer": true, "engines": { "node": ">=0.8.x" } @@ -23403,7 +23271,7 @@ "version": "1.47.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "devOptional": true, + "peer": true, "engines": { "node": ">= 0.6" } @@ -23412,7 +23280,7 @@ "version": "2.1.30", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "devOptional": true, + "peer": true, "dependencies": { "mime-db": "1.47.0" }, @@ -23424,7 +23292,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "devOptional": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", @@ -23438,7 +23306,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -23447,7 +23315,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "devOptional": true, + "peer": true, "dependencies": { "source-list-map": "^2.0.1", "source-map": "^0.6.1" @@ -23606,12 +23474,6 @@ "node": ">=8" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -25570,12 +25432,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", - "dev": true - }, "@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -27021,7 +26877,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "dev": true, "requires": { "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" @@ -27030,14 +26885,12 @@ "@nodelib/fs.stat": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "dev": true + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" }, "@nodelib/fs.walk": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" @@ -27524,7 +27377,7 @@ "version": "7.2.8", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz", "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==", - "devOptional": true, + "peer": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -27534,7 +27387,7 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "devOptional": true, + "peer": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -27544,7 +27397,7 @@ "version": "0.0.47", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", - "devOptional": true + "peer": true }, "@types/github-slugger": { "version": "1.3.0", @@ -27625,10 +27478,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "devOptional": true + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" }, "@types/json5": { "version": "0.0.29", @@ -27995,7 +27847,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.0", "@webassemblyjs/helper-wasm-bytecode": "1.11.0" @@ -28005,25 +27857,25 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "devOptional": true + "peer": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "devOptional": true + "peer": true }, "@webassemblyjs/helper-buffer": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", - "devOptional": true + "peer": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.0", "@webassemblyjs/helper-api-error": "1.11.0", @@ -28034,13 +27886,13 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "devOptional": true + "peer": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-buffer": "1.11.0", @@ -28052,7 +27904,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", - "devOptional": true, + "peer": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -28061,7 +27913,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", - "devOptional": true, + "peer": true, "requires": { "@xtuc/long": "4.2.2" } @@ -28070,13 +27922,13 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", - "devOptional": true + "peer": true }, "@webassemblyjs/wasm-edit": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-buffer": "1.11.0", @@ -28092,7 +27944,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-wasm-bytecode": "1.11.0", @@ -28105,7 +27957,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-buffer": "1.11.0", @@ -28117,7 +27969,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/helper-api-error": "1.11.0", @@ -28131,44 +27983,23 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "devOptional": true, + "peer": true, "requires": { "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, - "@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", - "dev": true - }, - "@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", - "dev": true - }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true + "peer": true }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true + "peer": true }, "abab": { "version": "2.0.5", @@ -28332,8 +28163,7 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "devOptional": true + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "algoliasearch": { "version": "4.9.1", @@ -30376,7 +30206,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "devOptional": true, + "peer": true, "requires": { "tslib": "^1.9.0" } @@ -30765,25 +30595,23 @@ "dev": true }, "copy-webpack-plugin": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-8.1.1.tgz", - "integrity": "sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==", - "dev": true, + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz", + "integrity": "sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw==", "requires": { "fast-glob": "^3.2.5", - "glob-parent": "^5.1.1", + "glob-parent": "^6.0.0", "globby": "^11.0.3", "normalize-path": "^3.0.0", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1" + "serialize-javascript": "^6.0.0" }, "dependencies": { "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -30794,14 +30622,20 @@ "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "glob-parent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz", + "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==", + "requires": { + "is-glob": "^4.0.1" + } }, "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", - "dev": true, + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -30814,34 +30648,38 @@ "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } } } }, @@ -31549,7 +31387,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "requires": { "path-type": "^4.0.0" } @@ -31863,7 +31700,6 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "devOptional": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -31897,12 +31733,6 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -31946,7 +31776,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", - "devOptional": true + "peer": true }, "es-to-primitive": { "version": "1.2.1", @@ -32435,7 +32265,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "devOptional": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -32445,7 +32274,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "devOptional": true, "requires": { "estraverse": "^5.2.0" }, @@ -32453,8 +32281,7 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "devOptional": true + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" } } } @@ -32832,7 +32659,6 @@ "version": "3.2.5", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -32845,8 +32671,7 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "devOptional": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -32859,17 +32684,10 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -34254,12 +34072,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -34474,7 +34286,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "devOptional": true, + "optional": true, "requires": { "isobject": "^3.0.1" } @@ -34602,7 +34414,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "devOptional": true + "optional": true }, "isstream": { "version": "0.1.2", @@ -36690,7 +36502,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "devOptional": true, + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -36701,13 +36513,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true + "peer": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -36864,8 +36676,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "devOptional": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -36882,8 +36693,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -37384,7 +37194,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "devOptional": true + "peer": true }, "loader-utils": { "version": "1.4.0", @@ -37834,8 +37644,7 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "methods": { "version": "1.1.2", @@ -37870,7 +37679,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "devOptional": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -38228,8 +38036,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "devOptional": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "next": { "version": "11.0.0", @@ -39736,8 +39543,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pause-stream": { "version": "0.0.11", @@ -40485,8 +40291,7 @@ "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-lru": { "version": "4.0.1", @@ -40679,15 +40484,6 @@ "picomatch": "^2.2.1" } }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -41279,8 +41075,7 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "revalidator": { "version": "0.3.1", @@ -41336,7 +41131,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -41552,7 +41346,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "devOptional": true, + "peer": true, "requires": { "randombytes": "^2.1.0" } @@ -41741,8 +41535,7 @@ "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "devOptional": true + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, "source-map": { "version": "0.5.7", @@ -41759,7 +41552,6 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "devOptional": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -41768,8 +41560,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -42566,8 +42357,7 @@ "tapable": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "devOptional": true + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" }, "tar-fs": { "version": "2.1.1", @@ -42627,7 +42417,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", - "devOptional": true, + "peer": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", @@ -42638,13 +42428,13 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "peer": true }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "devOptional": true + "peer": true } } }, @@ -42652,7 +42442,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", - "devOptional": true, + "peer": true, "requires": { "jest-worker": "^26.6.2", "p-limit": "^3.1.0", @@ -42666,7 +42456,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -42678,7 +42468,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "devOptional": true, + "peer": true, "requires": { "yocto-queue": "^0.1.0" } @@ -42687,7 +42477,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "devOptional": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", @@ -42698,7 +42488,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true + "peer": true } } }, @@ -42934,8 +42724,7 @@ "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "devOptional": true + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tsscmp": { "version": "1.0.6", @@ -43701,7 +43490,7 @@ "version": "5.37.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.1.tgz", "integrity": "sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow==", - "devOptional": true, + "peer": true, "requires": { "@types/eslint-scope": "^3.7.0", "@types/estree": "^0.0.47", @@ -43732,13 +43521,13 @@ "version": "8.2.4", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", - "devOptional": true + "peer": true }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -43750,19 +43539,19 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true + "peer": true }, "mime-db": { "version": "1.47.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "devOptional": true + "peer": true }, "mime-types": { "version": "2.1.30", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "devOptional": true, + "peer": true, "requires": { "mime-db": "1.47.0" } @@ -43771,7 +43560,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "devOptional": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", @@ -43782,13 +43571,13 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true + "peer": true }, "webpack-sources": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "devOptional": true, + "peer": true, "requires": { "source-list-map": "^2.0.1", "source-map": "^0.6.1" @@ -43796,59 +43585,6 @@ } } }, - "webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" - } - }, - "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - } - } - }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -44004,12 +43740,6 @@ "string-width": "^4.0.0" } }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 3fc2ab4c19..780f49c2ee 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "connect-datadog": "0.0.9", "connect-slashes": "^1.4.0", "cookie-parser": "^1.4.5", + "copy-webpack-plugin": "^9.0.1", "cors": "^2.8.5", "csurf": "^1.11.0", "dayjs": "^1.10.4", @@ -118,7 +119,6 @@ "babel-preset-env": "^1.7.0", "chalk": "^4.1.1", "commander": "^7.2.0", - "copy-webpack-plugin": "^8.1.1", "count-array-values": "^1.2.1", "cross-env": "^7.0.3", "csp-parse": "0.0.2", @@ -173,8 +173,6 @@ "ts-loader": "^9.2.3", "typescript": "^4.3.2", "url-template": "^2.0.8", - "webpack": "^5.37.0", - "webpack-cli": "^4.7.0", "website-scraper": "^4.2.3" }, "engines": { @@ -196,7 +194,7 @@ "browser-test": "start-server-and-test browser-test-server 4001 browser-test-tests", "browser-test-server": "cross-env NODE_ENV=production WEB_CONCURRENCY=1 PORT=4001 node server.mjs", "browser-test-tests": "cross-env BROWSER=1 NODE_OPTIONS=--experimental-vm-modules jest tests/browser/browser.js", - "build": "npm run webpack-build && next build", + "build": "next build", "debug": "cross-env NODE_ENV=development ENABLED_LANGUAGES='en,ja' nodemon --inspect server.mjs", "dev": "npm start", "heroku-postbuild": "node script/early-access/clone-for-build.js && npm run build", @@ -220,8 +218,7 @@ "sync-search-indices": "script/sync-search-indices.js", "sync-search-server": "cross-env NODE_ENV=production WEB_CONCURRENCY=1 PORT=4002 node server.mjs", "test": "npm run lint && cross-env NODE_OPTIONS=--experimental-vm-modules jest", - "test-watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch --notify --notifyMode=change --coverage", - "webpack-build": "cross-env NODE_ENV=production npx webpack --mode production" + "test-watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch --notify --notifyMode=change --coverage" }, "lint-staged": { "*.{js,mjs,ts,tsx}": "eslint --cache --fix", diff --git a/stylesheets/index.scss b/stylesheets/index.scss index a9c2182924..917353f80a 100644 --- a/stylesheets/index.scss +++ b/stylesheets/index.scss @@ -5,7 +5,7 @@ @import "@primer/css/labels/index.scss"; @import "@primer/css/avatars/avatar.scss"; -$marketing-font-path: "/dist/fonts/"; +$marketing-font-path: "/assets/fonts/inter/"; @import "@primer/css/marketing/index.scss"; @import "font-mktg.scss"; diff --git a/tests/rendering/server.js b/tests/rendering/server.js index f2bd50c245..262841543a 100644 --- a/tests/rendering/server.js +++ b/tests/rendering/server.js @@ -3,7 +3,6 @@ import enterpriseServerReleases from '../../lib/enterprise-server-releases.js' import { get, getDOM, head, post } from '../helpers/supertest.js' import { describeViaActionsOnly } from '../helpers/conditional-runs.js' import { loadPages } from '../../lib/page-data.js' -import builtAssets from '../../lib/built-asset-urls.js' import CspParse from 'csp-parse' import { productMap } from '../../lib/all-products.js' import { jest } from '@jest/globals' @@ -177,7 +176,11 @@ describe('server', () => { const $ = await getDOM('/not-a-real-page') expect($('h1').text()).toBe('Ooops!') expect($.text().includes("It looks like this page doesn't exist.")).toBe(true) - expect($.text().includes('We track these errors automatically, but if the problem persists please feel free to contact us.')).toBe(true) + expect( + $.text().includes( + 'We track these errors automatically, but if the problem persists please feel free to contact us.' + ) + ).toBe(true) expect($.res.statusCode).toBe(404) }) @@ -200,8 +203,12 @@ describe('server', () => { test('renders a 500 page when errors are thrown', async () => { const $ = await getDOM('/_500') expect($('h1').text()).toBe('Ooops!') - expect($.text().includes("It looks like something went wrong.")).toBe(true) - expect($.text().includes("We track these errors automatically, but if the problem persists please feel free to contact us.")).toBe(true) + expect($.text().includes('It looks like something went wrong.')).toBe(true) + expect( + $.text().includes( + 'We track these errors automatically, but if the problem persists please feel free to contact us.' + ) + ).toBe(true) expect($.res.statusCode).toBe(500) }) @@ -498,9 +505,7 @@ describe('server', () => { const $ = await getDOM( `${latestEnterprisePath}/github/getting-started-with-github/set-up-git` ) - expect( - $('a[href="/en/desktop/installing-and-configuring-github-desktop"]').length - ).toBe(1) + expect($('a[href="/en/desktop/installing-and-configuring-github-desktop"]').length).toBe(1) }) test('admin articles that link to non-admin articles have Enterprise user links', async () => { @@ -526,16 +531,16 @@ describe('server', () => { `${latestEnterprisePath}/admin/installation/upgrading-github-enterprise-server` ) expect( - $( - 'a[href="https://docs.microsoft.com/azure/backup/backup-azure-vms-first-look-arm"]' - ).length + $('a[href="https://docs.microsoft.com/azure/backup/backup-azure-vms-first-look-arm"]') + .length ).toBe(1) }) }) describe('article versions', () => { test('includes links to all versions of each article', async () => { - const articlePath = 'github/setting-up-and-managing-your-github-user-account/managing-user-account-settings/about-your-personal-dashboard' + const articlePath = + 'github/setting-up-and-managing-your-github-user-account/managing-user-account-settings/about-your-personal-dashboard' const $ = await getDOM( `/en/enterprise-server@${enterpriseServerReleases.latest}/${articlePath}` ) @@ -545,7 +550,10 @@ describe('server', () => { ).length ).toBe(2) // 2.13 predates this feature, so it should be excluded: - expect($(`[data-testid=article-version-picker] a[href="/en/enterprise/2.13/user/${articlePath}"]`).length).toBe(0) + expect( + $(`[data-testid=article-version-picker] a[href="/en/enterprise/2.13/user/${articlePath}"]`) + .length + ).toBe(0) }) test('is not displayed if article has only one version', async () => { @@ -852,8 +860,9 @@ describe('GitHub Desktop URLs', () => { describe('static assets', () => { test('fonts', async () => { - expect((await get('/dist/fonts/Inter-Medium.woff')).statusCode).toBe(200) - expect((await get('/dist/fonts/Inter-Regular.woff')).statusCode).toBe(200) + expect((await get('/assets/fonts/inter/Inter-Bold.woff')).statusCode).toBe(200) + expect((await get('/assets/fonts/inter/Inter-Medium.woff')).statusCode).toBe(200) + expect((await get('/assets/fonts/inter/Inter-Regular.woff')).statusCode).toBe(200) }) }) @@ -948,37 +957,6 @@ describe('?json query param for context debugging', () => { }) }) -describe('stylesheets', () => { - it('compiles and sets the right content-type header', async () => { - const stylesheetUrl = builtAssets.main.css - const res = await get(stylesheetUrl) - expect(res.statusCode).toBe(200) - expect(res.headers['content-type']).toBe('text/css; charset=UTF-8') - }) -}) - -describe('client-side JavaScript bundle', () => { - let res - beforeAll(async () => { - const scriptUrl = builtAssets.main.js - res = await get(scriptUrl) - }) - - it('returns a 200 response', async () => { - expect(res.statusCode).toBe(200) - }) - - it('sets the right content-type header', async () => { - expect(res.headers['content-type']).toBe('application/javascript; charset=UTF-8') - }) - - // TODO: configure webpack to create production bundle in the test env - // it('is not too big', async () => { - // const tooBig = 10 * 1000 - // expect(res.text.length).toBeLessThan(tooBig) - // }) -}) - describe('static routes', () => { it('serves content from the /assets directory', async () => { expect((await get('/assets/images/site/be-social.gif')).statusCode).toBe(200) diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index f5652e573f..0000000000 --- a/webpack.config.js +++ /dev/null @@ -1,78 +0,0 @@ -const path = require('path') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const CopyWebpackPlugin = require('copy-webpack-plugin') -const { EnvironmentPlugin, ProvidePlugin } = require('webpack') - -module.exports = { - mode: 'development', - devtool: process.env.NODE_ENV === 'development' ? 'eval' : 'source-map', // no 'eval' outside of development - entry: './javascripts/index.ts', - output: { - filename: 'index.js', - path: path.resolve(__dirname, 'dist'), - publicPath: '/dist', - }, - stats: 'errors-only', - resolve: { - extensions: ['.tsx', '.ts', '.js', '.css', '.scss'], - }, - module: { - rules: [ - { - test: /\.tsx?$/, - use: 'ts-loader', - exclude: /node_modules/, - }, - { - test: /\.css$/i, - use: ['style-loader', 'css-loader'], - }, - { - test: /\.s[ac]ss$/i, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - sourceMap: true, - url: false, - }, - }, - { - // Needed to resolve image url()s within @primer/css - loader: 'resolve-url-loader', - options: {}, - }, - { - loader: 'sass-loader', - options: { - sassOptions: { - quietDeps: true, - includePaths: ['./stylesheets', './node_modules'], - options: { - sourceMap: true, - sourceMapContents: false, - }, - }, - }, - }, - ], - }, - ], - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: 'index.css', - }), - new CopyWebpackPlugin({ - patterns: [{ from: 'node_modules/@primer/css/fonts', to: 'fonts' }], - }), - new EnvironmentPlugin({ - NODE_ENV: 'development', // use 'development' unless process.env.NODE_ENV is defined - DEBUG: false, - }), - new ProvidePlugin({ - process: 'process/browser', - }), - ], -}