diff --git a/.eleventy.js b/.eleventy.js index bd54a3945e4..62a9cddce67 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -20,6 +20,8 @@ const pluginSyntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight'); const yaml = require('js-yaml'); const fs = require('fs'); const path = require('path'); +const fse = require('fs-extra'); +const fetch = require('node-fetch'); const patterns = require('./src/lib/patterns').patterns(); const markdown = require('./src/site/_plugins/markdown'); @@ -27,6 +29,7 @@ const markdown = require('./src/site/_plugins/markdown'); // Shortcodes used in prose const Aside = require('./src/site/_includes/components/Aside'); const {Blockquote} = require('webdev-infra/shortcodes/Blockquote'); +const {BrowserCompat} = require('webdev-infra/shortcodes/BrowserCompat'); const {Codepen} = require('webdev-infra/shortcodes/Codepen'); const Compare = require('./src/site/_includes/components/Compare'); const CompareCaption = require('./src/site/_includes/components/CompareCaption'); @@ -39,7 +42,6 @@ const Instruction = require('./src/site/_includes/components/Instruction'); const Label = require('./src/site/_includes/components/Label'); const {Video} = require('./src/site/_includes/components/Video'); const {YouTube} = require('webdev-infra/shortcodes/YouTube'); -const BrowserCompat = require('./src/site/_includes/components/BrowserCompat'); const CodePattern = require('./src/site/_includes/components/CodePattern'); const Widget = require('./src/site/_includes/components/Widget'); @@ -48,16 +50,10 @@ const Assessment = require('./src/site/_includes/components/Assessment'); const Author = require('./src/site/_includes/components/Author'); const AuthorsDate = require('./src/site/_includes/components/AuthorsDate'); const Banner = require('./src/site/_includes/components/Banner'); -const Breadcrumbs = require('./src/site/_includes/components/Breadcrumbs'); const CodelabsCallout = require('./src/site/_includes/components/CodelabsCallout'); -const Hero = require('./src/site/_includes/components/Hero'); const includeRaw = require('./src/site/_includes/components/includeRaw'); -const LanguageList = require('./src/site/_includes/components/LanguageList'); const Meta = require('./src/site/_includes/components/Meta'); -const PathCard = require('./src/site/_includes/components/PathCard'); -const SignPosts = require('./src/site/_includes/components/SignPosts'); const StackOverflow = require('./src/site/_includes/components/StackOverflow'); -const Tooltip = require('./src/site/_includes/components/Tooltip'); const YouTubePlaylist = require('./src/site/_includes/components/YouTubePlaylist'); // Collections @@ -71,9 +67,10 @@ const tags = require('./src/site/_collections/tags'); const {i18n} = require('./src/site/_filters/i18n'); const {getDefaultUrl, getRelativePath} = require('./src/site/_filters/urls'); const {memoize, findByUrl} = require('./src/site/_filters/find-by-url'); +const {supportedLanguages} = require('./src/site/_filters/language-list'); const pathSlug = require('./src/site/_filters/path-slug'); const algoliaIndexable = require('./src/site/_filters/algolia-indexable'); -const algoliaItem = require('./src/site/_filters/algolia-item'); +const {algoliaItem} = require('./src/site/_filters/algolia-item'); const containsTag = require('./src/site/_filters/contains-tag'); const expandAuthors = require('./src/site/_filters/expand-authors'); const githubLink = require('./src/site/_filters/github-link'); @@ -92,6 +89,7 @@ const stripBlog = require('./src/site/_filters/strip-blog'); const getPaths = require('./src/site/_filters/get-paths'); const navigation = require('./src/site/_filters/navigation'); const {minifyJs} = require('./src/site/_filters/minify-js'); +const {minifyJSON} = require('./src/site/_filters/minify-json'); const {cspHash, getHashList} = require('./src/site/_filters/csp-hash'); const {siteRender} = require('./src/site/_filters/site-render'); const { @@ -99,10 +97,10 @@ const { filterInUpcoming, filterOutUpcoming, } = require('./src/site/_filters/is-upcoming'); +const {latestPostByTags} = require('./src/site/_filters/latest-post-by-tags'); const {calendarLink} = require('./src/site/_filters/calendar-link'); const disableLazyLoad = require('./src/site/_transforms/disable-lazy-load'); -const {purifyCss} = require('./src/site/_transforms/purify-css'); const {minifyHtml} = require('./src/site/_transforms/minify-html'); // Shared dependencies between web.dev and developer.chrome.com @@ -150,25 +148,12 @@ module.exports = function (config) { return memoize(collection.getAll()); }); - // Filters through all collection items and finds content that has - // CSS_ORIGIN set to 'next'. This allows shortcodes to determine if we - // are in a design system context or a legacy context - config.addCollection('designSystemGlobals', (collection) => { - global.__designSystemPaths = new Set( - collection - .getAll() - .filter(({data}) => data.CSS_ORIGIN === 'next') - .map(({filePathStem}) => filePathStem), - ); - - return global.__designSystemPaths; - }); - // ---------------------------------------------------------------------------- // FILTERS // ---------------------------------------------------------------------------- config.addFilter('i18n', i18n); config.addFilter('findByUrl', findByUrl); + config.addFilter('supportedLanguages', supportedLanguages); config.addFilter('getDefaultUrl', getDefaultUrl); config.addFilter('getRelativePath', getRelativePath); config.addFilter('pathSlug', pathSlug); @@ -196,10 +181,12 @@ module.exports = function (config) { config.addFilter('toc', toc); config.addFilter('updateSvgForInclude', updateSvgForInclude); config.addNunjucksAsyncFilter('minifyJs', minifyJs); + config.addFilter('minifyJSON', minifyJSON); config.addFilter('cspHash', cspHash); config.addFilter('isUpcoming', isUpcoming); config.addFilter('filterInUpcoming', filterInUpcoming); config.addFilter('filterOutUpcoming', filterOutUpcoming); + config.addFilter('latestPostByTags', latestPostByTags); config.addFilter('calendarLink', calendarLink); // ---------------------------------------------------------------------------- @@ -211,8 +198,7 @@ module.exports = function (config) { config.addShortcode('AuthorsDate', AuthorsDate); config.addPairedShortcode('Banner', Banner); config.addPairedShortcode('Blockquote', Blockquote); - config.addShortcode('Breadcrumbs', Breadcrumbs); - config.addNunjucksShortcode('BrowserCompat', BrowserCompat); + config.addShortcode('BrowserCompat', BrowserCompat); config.addShortcode('CodelabsCallout', CodelabsCallout); config.addShortcode('Codepen', Codepen); config.addShortcode('CodePattern', CodePattern); @@ -221,17 +207,12 @@ module.exports = function (config) { config.addPairedShortcode('Details', Details); config.addPairedShortcode('DetailsSummary', DetailsSummary); config.addShortcode('Glitch', Glitch); - config.addShortcode('Hero', Hero); config.addShortcode('IFrame', IFrame); config.addShortcode('Img', Img); config.addShortcode('Instruction', Instruction); config.addPairedShortcode('Label', Label); - config.addShortcode('LanguageList', LanguageList); config.addShortcode('Meta', Meta); - config.addShortcode('PathCard', PathCard); - config.addShortcode('SignPosts', SignPosts); config.addShortcode('StackOverflow', StackOverflow); - config.addShortcode('Tooltip', Tooltip); config.addShortcode('Widget', Widget); config.addShortcode('Video', Video); config.addShortcode('YouTube', YouTube); @@ -246,7 +227,6 @@ module.exports = function (config) { } if (isProd || isStaging) { - config.addTransform('purifyCss', purifyCss); config.addTransform('minifyHtml', minifyHtml); } @@ -297,6 +277,38 @@ module.exports = function (config) { } } + // Third party scripts and assets + config.addPassthroughCopy({ + 'src/site/content/en/third_party/': 'third_party', + }); + + // ---------------------------------------------------------------------------- + // ALTERNATIVE BUILD FOR EXPORT + // ---------------------------------------------------------------------------- + // Temporary + if (process.env.ALT_BUILD) { + const downloadImage = async (src, outputPath) => { + let image = await fetch(generateImgixSrc(src)); + image = await image.buffer(); + await fse.outputFile(outputPath, image); + console.log('Downloaded ', outputPath); + }; + + config.addCollection('hero', (collection) => { + collection.getAll().forEach((el) => { + if (el.data.hero) { + const ext = el.data.hero.split('.').pop(); + const outputPath = el.data.page.outputPath.replace( + 'index.html', + 'hero.' + ext, + ); + downloadImage(el.data.hero, outputPath); + } + }); + return []; + }); + } + return { dir: { input: 'src/site/content/', // we use a string path with the forward slash since windows doesn't like the paths generated from path.join @@ -304,7 +316,7 @@ module.exports = function (config) { data: '../_data', includes: '../_includes', }, - templateFormats: ['njk', 'md'], + templateFormats: ['njk', 'md', 'html'], htmlTemplateEngine: 'njk', markdownTemplateEngine: 'njk', }; diff --git a/.eslintignore b/.eslintignore index 38f75d75266..c2752038e5e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,3 +3,4 @@ dist/* types/* /src/site/content/en/patterns/** +/src/site/content/en/third_party/** diff --git a/.eslintrc.js b/.eslintrc.js index c40856e9729..21eb2fc17eb 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -14,7 +14,9 @@ module.exports = { globals: { customElements: true, firebase: true, - ga: true, + gtag: true, + loadScript: true, + dataLayer: true, }, rules: { indent: [ diff --git a/.github/chrome-devrel-bot.json b/.github/chrome-devrel-bot.json index b3f162330e8..f423e8be831 100644 --- a/.github/chrome-devrel-bot.json +++ b/.github/chrome-devrel-bot.json @@ -10,7 +10,9 @@ "heyawhite", "jpmedley", "mihajlija", - "sofiayem" + "sofiayem", + "AaronForinton", + "anusmitaray" ], "paths" : [ "src/site/content/**/*.md" @@ -21,20 +23,20 @@ "teams" : [], "users" : [ "PaulKinlan", - "jeffposnick", - "devnook" + "matthiasrohmer", + "devnook", + "tunetheweb" ], "paths" : [ - "*.js", - "*.json", - "*.css", - "*.scss", - "*.html", - "*.htm", - "*.njk", - "*.toml", - "*.sh", - "src/site/content/en/newsletter/" + "**/*.js", + "**/*.json", + "**/*.css", + "**/*.scss", + "**/*.html", + "**/*.htm", + "**/*.njk", + "**/*.toml", + "**/*.sh" ] }, { @@ -42,14 +44,16 @@ "teams" : [], "users" : [ "PaulKinlan", - "jeffposnick", + "matthiasrohmer", "devnook", "malchata", "rachelandrew", "heyawhite", "jpmedley", "mihajlija", - "sofiayem" + "sofiayem", + "AaronForinton", + "anusmitaray" ], "paths" : [ "src/site/_data/**.yml", diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..bf9b91c6185 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + pull-request-branch-name: + separator: "/" + labels: + - "eng" + schedule: + interval: "daily" + allow: + - dependency-name: "@11ty/eleventy" + - dependency-name: "webdev-infra" + - dependency-name: "@mdn/browser-compat-data" \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 72cd610b6c7..567855de93b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -4,6 +4,8 @@ + + Fixes #SOME_ISSUE_NUMBER Changes proposed in this pull request: diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 00000000000..40a77732675 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,230 @@ +--- +name: 'Check' + +on: pull_request + +jobs: + queue: + runs-on: ubuntu-latest + steps: + - id: skip + uses: fkirc/skip-duplicate-actions@master + with: + concurrent_skipping: 'outdated_runs' + cancel_others: true + skip_after_successful_duplicate: true + do_not_skip: '["workflow_dispatch", "schedule"]' + + lint: + needs: queue + runs-on: ubuntu-latest + steps: + - name: Getting changes + id: changes + uses: dorny/paths-filter@v2 + with: + filters: | + js: + - '**/*.js' + - '**/*.json' + md: + - '**/*.md' + scss: + - '**/*.scss' + tags: + - 'src/site/_data/i18n/tags.yml' + + - name: Cloning repository + uses: actions/checkout@v3 + + - name: Setting up Node.js + uses: actions/setup-node@v3 + with: + cache: npm + node-version: 16 + + - name: Installing Node.js packages + run: npm ci + + - name: Lint Tags + if: ${{ steps.filter.outputs.tags == 'true' || steps.filter.outputs.md == 'true' }} + uses: ./.github/actions/lint-tags + + - name: Linting JavaScript + if: ${{ steps.changes.outputs.js == 'true' }} + run: | + npm run lint:js + + - name: Linting Markdown + if: ${{ steps.changes.outputs.md == 'true' }} + run: npm run lint:md + + - name: Linting SCSS + if: ${{ steps.changes.outputs.scss == 'true' }} + run: npm run lint:scss + + test: + needs: queue + runs-on: ubuntu-latest + steps: + - name: Getting changes + id: changes + uses: dorny/paths-filter@v2 + with: + filters: | + js: + - 'package.json' + - 'site/**/*.js' + - 'server/**.js' + - 'tests/**.js' + + - name: Cloning repository + uses: actions/checkout@v3 + + - name: Setting up Node.js + uses: actions/setup-node@v3 + with: + cache: npm + node-version: 16 + + - name: Installing Node.js packages + run: npm ci + + - name: Running tests + if: ${{ steps.changes.outputs.js == 'true' }} + run: | + npm run test + + build: + needs: queue + runs-on: ubuntu-latest + steps: + - name: Cloning repository + uses: actions/checkout@v3 + + - name: Setting up Node.js + uses: actions/setup-node@v3 + with: + cache: npm + node-version: 16 + + - name: Installing Node.js packages + run: npm ci + + - name: Building site + env: + # Increase memory limit as a full build requires around 8GB + NODE_OPTIONS: --max_old_space_size=8192 + ELEVENTY_ENV: staging + run: npm run build + + - name: Packing up built files + run: | + cp firebase.json dist && tar cfj dist.tar.gz ./dist + + - name: Storing build artifacts + uses: actions/upload-artifact@v3 + with: + name: dist-${{ github.run_id }} + path: dist.tar.gz + if-no-files-found: error + + lighthouse: + needs: build + runs-on: ubuntu-latest + steps: + - name: Getting changes + id: changes + uses: dorny/paths-filter@v2 + with: + filters: | + frontend: + - 'package.json' + - 'site/_js/**/*.js' + - 'site/_includes/**/*.njk' + - 'site/_scss/**/*.scss' + + - name: Cloning repository + uses: actions/checkout@v3 + if: ${{ steps.changes.outputs.frontend == 'true' }} + + - name: Setting up Node.js + uses: actions/setup-node@v3 + if: ${{ steps.changes.outputs.frontend == 'true' }} + with: + cache: npm + node-version: 16 + + - name: Installing Node.js packages + if: ${{ steps.changes.outputs.frontend == 'true' }} + run: npm ci + + - name: Downloading build artifacts + if: ${{ steps.changes.outputs.frontend == 'true' }} + uses: actions/download-artifact@v3 + with: + name: dist-${{ github.run_id }} + + - name: Unpacking built files + if: ${{ steps.changes.outputs.frontend == 'true' }} + run: | + tar xf dist.tar.gz && mv ./dist/firebase.json . + + - name: Lighthouse + if: ${{ steps.changes.outputs.frontend == 'true' }} + run: | + npx @lhci/cli@0.8.x autorun --config=./tools/lhci/lighthouserc.js + + percy: + needs: build + runs-on: ubuntu-latest + steps: + - name: Getting changes + id: changes + uses: dorny/paths-filter@v2 + with: + filters: | + frontend: + - 'package.json' + - 'site/_filters/**.js' + - 'site/_includes/**' + - 'site/_js/**.js' + - 'site/_plugins/**.js' + - 'site/_scss/**.scss' + - 'site/_shortcodes/**.js' + - 'site/_transforms/**.js' + - 'site/_utils/**.js' + - 'site/en/content-types/**' + + - name: Cloning repository + uses: actions/checkout@v3 + if: ${{ steps.changes.outputs.frontend == 'true' }} + + - name: Setting up Node.js + uses: actions/setup-node@v3 + if: ${{ steps.changes.outputs.frontend == 'true' }} + with: + cache: npm + node-version: 16 + + - name: Installing Node.js packages + if: ${{ steps.changes.outputs.frontend == 'true' }} + run: npm ci + + - name: Downloading build artifacts + if: ${{ steps.changes.outputs.frontend == 'true' }} + uses: actions/download-artifact@v3 + with: + name: dist-${{ github.run_id }} + + - name: Unpacking built files + if: ${{ steps.changes.outputs.frontend == 'true' }} + run: | + tar xf dist.tar.gz + + - name: Percy + if: ${{ steps.changes.outputs.frontend == 'true' }} + env: + NODE_OPTIONS: "--max-old-space-size=8192" + PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} + run: npm run percy diff --git a/.github/workflows/lint-workflow.yml b/.github/workflows/lint-workflow.yml deleted file mode 100644 index 69e2345d940..00000000000 --- a/.github/workflows/lint-workflow.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Lint - -on: pull_request - -jobs: - lint: - name: Lint - runs-on: ubuntu-latest - env: - NODE_OPTIONS: --max_old_space_size=4096 - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - name: Install - run: npm ci - - # Checks to see if any files in the PR match one of the listed file types. - # We can use this filter to decide whether or not to run linters or tests. - # You can check if a file with a listed file type is in the PR by doing: - # if: ${{ steps.filter.outputs.md == 'true' }} - # This will return true if there's a markdown file that was changed - # in the PR. - - uses: dorny/paths-filter@v2.2.1 - id: filter - with: - filters: | - md: - - '**/*.md' - js: - - '**/*.js' - json: - - '**/*.json' - scss: - - '**/*.scss' - tags: - - 'src/site/_data/i18n/tags.yml' - - # Use the filter to check if files with a specific file type were changed - # in the PR. If they were, run the relevant linters. Otherwise, skip. - - - name: Lint Markdown - if: ${{ steps.filter.outputs.md == 'true' }} - run: npm run lint:md - - - name: Lint Tags - if: ${{ steps.filter.outputs.tags == 'true' || steps.filter.outputs.md == 'true' }} - uses: ./.github/actions/lint-tags - - - name: Lint JavaScript - if: ${{ steps.filter.outputs.js == 'true' || steps.filter.outputs.json == 'true' }} - run: npm run lint:js - - - name: Lint SCSS - if: ${{ steps.filter.outputs.scss == 'true' }} - run: npm run lint:scss diff --git a/.github/workflows/percy-workflow.yml b/.github/workflows/percy-workflow.yml deleted file mode 100644 index 64288960c66..00000000000 --- a/.github/workflows/percy-workflow.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Percy - -# By default, runs when a pull_request's activity type is opened, synchronize, -# or reopened -on: - push: - branches: - - main - paths: - - 'src/**.js' - - 'shared/**.js' - - '!src/site/_data/countries.js' - - 'package.json' - - '**.njk' - - '**.scss' - pull_request: - paths: - - '.github/workflows/percy-workflow.yml' - - 'src/**.js' - - 'shared/**.js' - - '!src/site/_data/countries.js' - - 'package.json' - - '**.njk' - - '**.scss' - -jobs: - percy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - name: Install - run: npm ci - - - name: Percy - env: - NODE_OPTIONS: "--max-old-space-size=8192" - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} - run: npm run percy diff --git a/.github/workflows/presubmit-workflow.yml b/.github/workflows/presubmit-workflow.yml deleted file mode 100644 index 9aa61c3d847..00000000000 --- a/.github/workflows/presubmit-workflow.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Presubmit - -on: pull_request - -jobs: - presubmit: - runs-on: ubuntu-latest - env: - NODE_OPTIONS: --max_old_space_size=8192 - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 'v16.14.2' - cache: 'npm' - - - name: Install dependencies - run: npm ci - - - name: Run a staging build of site - run: npm run build - env: - ELEVENTY_ENV: staging - - # Checks to see if any files in the PR match one of the listed file types. - # We can use this filter to decide whether or not to run linters or tests. - # You can check if a file with a listed file type is in the PR by doing: - # if: ${{ steps.filter.outputs.md == 'true' }} - # This will return true if there's a markdown file that was changed - # in the PR. - - uses: dorny/paths-filter@v2.2.1 - id: filter - with: - filters: | - js: - - '**/*.js' - json: - - '**/*.json' - yml: - - '**/*.yml' - scss: - - '**/*.scss' - njk: - - '**/*.njk' - packageJson: - - 'package.json' - - # Only run tests if the PR touches behavior related files. - - - name: Test - if: ${{ steps.filter.outputs.js == 'true' || steps.filter.outputs.json == 'true' || steps.filter.outputs.yml == 'true' || steps.filter.outputs.njk == 'true'}} - run: npm run test - - - name: Lighthouse CI - if: ${{ steps.filter.outputs.js == 'true' || steps.filter.outputs.packageJson == 'true' || steps.filter.outputs.njk == 'true' || steps.filter.outputs.scss == 'true'}} - env: - LHCI_SERVER: ${{ secrets.LHCI_SERVER }} - LHCI_TOKEN: ${{ secrets.LHCI_TOKEN }} - run: | - npx @lhci/cli@0.8.x autorun --config=./tools/lhci/lighthouserc.js diff --git a/.github/workflows/translation-status-workflow.yml b/.github/workflows/translation-status.yml similarity index 100% rename from .github/workflows/translation-status-workflow.yml rename to .github/workflows/translation-status.yml diff --git a/.huskyrc b/.huskyrc index 74c9294e66c..3664a833827 100644 --- a/.huskyrc +++ b/.huskyrc @@ -2,6 +2,6 @@ "//1": "Use git commit --no-verify to bypass the pre-commit hook", "//2": "Use git push --no-verify to bypass the pre-push hook", "hooks": { - "pre-push": "npm run lint" + "pre-commit": "npx lint-staged" } } diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000000..71e88f9c657 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,5 @@ +{ + "*.scss": "npm run lint:scss", + "*.md": "npm run lint:md", + "*.js": "npm run lint:js" +} diff --git a/README.md b/README.md index 6645d4aba41..7db51adebe1 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,14 @@ -# web.dev +# web.dev [Archived] -![Continuous integration](https://github.com/GoogleChrome/web.dev/workflows/Continuous%20integration/badge.svg) +**Note:** This site is migrated to a new platform and this repository is available in a read-only mode. **We will not be merging new pull requests**. Please raise content issues in the new [issue tracker](https://issuetracker.google.com/issues/new?component=1400680&pli=1&template=1857359). web.dev is the ultimate resource for developers of all backgrounds to learn, create, and solve on the web. It's meant to not only educate developers, but help them apply what they've learned to any site they work on, be it personal or business. -## Found a bug? 👷‍♀️ - -Thanks for letting us know! Please [file an issue](https://github.com/GoogleChrome/web.dev/issues/new?assignees=&labels=bug&template=bug_report.md&title=) and a team member should reply shortly. - -## Authoring content ✍️ - -Before you start writing take a moment to look over the [web.dev -handbook](https://web.dev/handbook) and familiarize yourself with the process. -When you're ready, follow the steps in the -[Quickstart](https://web.dev/handbook/quick-start/) to create your content -proposal. +----- +# [Archived README] ## Building the site 🏗 @@ -36,7 +27,7 @@ git clone https://github.com/GoogleChrome/web.dev.git ### Change directory into the folder created ```bash -cd web.dev +cd web.dev ``` ### Install dependencies diff --git a/firebase.incl.json b/firebase.incl.json index 4ea2fcaa111..32bbe4927e3 100644 --- a/firebase.incl.json +++ b/firebase.incl.json @@ -20,10 +20,6 @@ { "key": "Cache-Control", "value": "max-age=0" - }, - { - "key": "Origin-Trial", - "value": "AroL15qduRNqNxaVOrRCcy3Lg2qmVISGidsHrfTRIwaZgUoJqZfqGYBAcqTKWf+6SgVWVbHV/OWkQCUy/ut0PwAAAABReyJvcmlnaW4iOiJodHRwczovL3dlYi5kZXY6NDQzIiwiZmVhdHVyZSI6IlByaW9yaXR5SGludHNBUEkiLCJleHBpcnkiOjE2NDc5OTM1OTl9" } ] } diff --git a/functions/package-lock.json b/functions/package-lock.json index 0ee977f16f2..598312887fc 100644 --- a/functions/package-lock.json +++ b/functions/package-lock.json @@ -15,7 +15,7 @@ "firebase-functions-test": "^0.2.0" }, "engines": { - "node": "14" + "node": "16" } }, "node_modules/@firebase/app-types": { @@ -1341,9 +1341,9 @@ "optional": true }, "node_modules/jose": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz", - "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.6.tgz", + "integrity": "sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg==", "dependencies": { "@panva/asn1.js": "^1.0.0" }, @@ -3380,9 +3380,9 @@ "optional": true }, "jose": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz", - "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.6.tgz", + "integrity": "sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg==", "requires": { "@panva/asn1.js": "^1.0.0" } diff --git a/gulp-tasks/sass.js b/gulp-tasks/sass.js index 86347253b38..8eadcf0a3cd 100644 --- a/gulp-tasks/sass.js +++ b/gulp-tasks/sass.js @@ -1,11 +1,7 @@ const {dest, src} = require('gulp'); const sassProcessor = require('gulp-sass')(require('sass')); -const sourceFiles = [ - './src/scss/next.scss', - './src/styles/main.scss', - './src/styles/legacy-rollout.scss', -]; +const sourceFiles = ['./src/scss/next.scss']; // Flags wether we compress the output etc const isProduction = process.env.ELEVENTY_ENV === 'prod'; diff --git a/gulpfile.js b/gulpfile.js index 716015d5a39..fa82e65af93 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -48,6 +48,5 @@ gulp.task( gulp.task('watch', () => { gulp.watch('./src/images/**/*', {ignoreInitial: true}, copyGlobalImages); gulp.watch('./src/misc/**/*', {ignoreInitial: true}, copyMisc); - gulp.watch('./src/styles/**/*.scss', {ignoreInitial: true}, sassTask); gulp.watch('./src/scss/**/*.scss', {ignoreInitial: true}, sassTask); }); diff --git a/package-lock.json b/package-lock.json index 5c640de0db5..70b928bac9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@google-cloud/cloudbuild": "^2.6.0", "@google-cloud/error-reporting": "^2.0.3", "@google-cloud/secret-manager": "^3.10.0", - "@mdn/browser-compat-data": "^5.1.5", + "@mdn/browser-compat-data": "5.3.9", "@minify-html/node": "^0.9.2", "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-node-resolve": "^13.1.3", @@ -31,8 +31,7 @@ "dotenv": "^8.2.0", "fast-glob": "^3.2.7", "firebase": "^9.0.0-beta.7", - "firebase-tools": "^9.3.0", - "focus-visible": "^5.0.2", + "firebase-tools": "^12.6.1", "gorko": "^0.8.0", "gray-matter": "^4.0.3", "gulp": "^4.0.0", @@ -67,19 +66,18 @@ "terser": "^5.9.0", "truncate-utf8-bytes": "^1.0.2", "unistore": "^3.4.1", - "web-vitals": "^2.1.4", - "webdev-infra": "^1.0.31", - "wicg-inert": "^3.0.1", + "web-vitals": "^3.5.0", + "webdev-infra": "1.0.54", "yaml-front-matter": "^4.0.0" }, "devDependencies": { - "@actions/core": "^1.6.0", + "@actions/core": "^1.9.1", "@actions/github": "^5.0.0", "@percy/cli": "^1.0.0-beta.71", "@percy/puppeteer": "^2.0.0", "@types/chai": "^4.3.0", - "@types/google.analytics": "0.0.40", "@types/grecaptcha": "^3.0.3", + "@types/gtag.js": "^0.0.12", "@types/gulp": "^4.0.8", "@types/markdown-it": "^12.0.3", "@types/mocha": "^9.0.0", @@ -93,12 +91,13 @@ "eslint-plugin-lit-a11y": "^1.0.1", "gts": "^3.1.0", "husky": "^4.2.3", - "karma": "^4.2.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.2", - "karma-mocha": "^1.3.0", - "karma-sourcemap-loader": "^0.3.7", - "karma-spec-reporter": "0.0.32", + "karma": "6.4.0", + "karma-chrome-launcher": "3.1.1", + "karma-coverage": "2.2.0", + "karma-mocha": "2.0.1", + "karma-sourcemap-loader": "0.3.8", + "karma-spec-reporter": "0.0.34", + "lint-staged": "13.2.2", "mocha": "^6.2.0", "proxyquire": "^2.1.3", "puppeteer": "^12.0.1", @@ -128,30 +127,30 @@ "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==" }, "node_modules/@11ty/eleventy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-1.0.1.tgz", - "integrity": "sha512-2fJDHVBkRr1SB7CqBexwoLdiOGUE0f22O+Ie1TT/FI65XQZWshgHVZzvmZfmtKvQW4qtaC/FuJG3wMxkXfel7w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-1.0.2.tgz", + "integrity": "sha512-03ER4zukR6BgwppI5DHRE11lc+8B0fWsBrqacVWo3o49QkdEFXnEWjhyI9qd9LrPlgQHK2/MYyxuOvNwecyCLQ==", "dependencies": { "@11ty/dependency-tree": "^2.0.1", "@11ty/eleventy-utils": "^1.0.1", "@iarna/toml": "^2.2.5", "@sindresorhus/slugify": "^1.1.2", - "browser-sync": "^2.27.9", + "browser-sync": "^2.27.10", "chokidar": "^3.5.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "dependency-graph": "^0.11.0", - "ejs": "^3.1.6", + "ejs": "^3.1.8", "fast-glob": "^3.2.11", "graceful-fs": "^4.2.10", "gray-matter": "^4.0.3", "hamljs": "^0.6.2", "handlebars": "^4.7.7", "is-glob": "^4.0.3", - "kleur": "^4.1.4 ", - "liquidjs": "^9.36.1", + "kleur": "^4.1.5", + "liquidjs": "^9.40.0", "lodash": "^4.17.21", - "luxon": "^2.3.2", + "luxon": "^2.5.0", "markdown-it": "^12.3.2", "minimist": "^1.2.6", "moo": "^0.5.1", @@ -159,7 +158,7 @@ "mustache": "^4.2.0", "normalize-path": "^3.0.0", "nunjucks": "^3.2.3", - "path-to-regexp": "^6.2.0", + "path-to-regexp": "^6.2.1", "please-upgrade-node": "^3.2.0", "pretty": "^2.0.0", "pug": "^3.0.2", @@ -256,25 +255,44 @@ } }, "node_modules/@11ty/eleventy/node_modules/luxon": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.4.0.tgz", - "integrity": "sha512-w+NAwWOUL5hO0SgwOHsMBAmZ15SoknmQXhSO0hIbJCAmPKSsGeK8MlmhYh2w6Iib38IxN2M+/ooXWLbeis7GuA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", + "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==", "engines": { "node": ">=12" } }, "node_modules/@11ty/eleventy/node_modules/path-to-regexp": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", - "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" }, "node_modules/@actions/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", - "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", + "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", + "dev": true, + "dependencies": { + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + } + }, + "node_modules/@actions/core/node_modules/@actions/http-client": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", + "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", "dev": true, "dependencies": { - "@actions/http-client": "^1.0.11" + "tunnel": "^0.0.6" + } + }, + "node_modules/@actions/core/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/@actions/github": { @@ -414,9 +432,9 @@ } }, "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.6", @@ -440,6 +458,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" + }, "node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", @@ -699,9 +722,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -784,10 +807,18 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -1451,23 +1482,23 @@ } }, "node_modules/@google-cloud/paginator": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.5.tgz", - "integrity": "sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", + "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", "dependencies": { "arrify": "^2.0.0", "extend": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/precise-date": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.3.tgz", - "integrity": "sha512-+SDJ3ZvGkF7hzo6BGa8ZqeK3F6Z4+S+KviC9oOK+XCs3tfMyJCh/4j93XIWINgMMDIh9BgEvlw4306VxlXIlYA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-3.0.1.tgz", + "integrity": "sha512-crK2rgNFfvLoSgcKJY7ZBOLW91IimVNmPfi1CL+kMTf78pTJYd29XqEVedAeBu4DwCJc0EDIp1MpctLgoPq+Uw==", "engines": { - "node": ">=10.4.0" + "node": ">=12.0.0" } }, "node_modules/@google-cloud/projectify": { @@ -1487,30 +1518,514 @@ } }, "node_modules/@google-cloud/pubsub": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.15.1.tgz", - "integrity": "sha512-avBYmN1n9BsY8RzntkEP3SG1gSfEm0iOoUwoWjtrmWAk+6QZw0C093HJCGClteo+EwIQDhgyn2cXc5QInegSeg==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-3.7.5.tgz", + "integrity": "sha512-4Qrry4vIToth5mqduVslltWVsyb7DR8OhnkBA3F7XiE0jgQsiuUfwp/RB2F559aXnRbwcfmjvP4jSuEaGcjrCQ==", "dependencies": { - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", + "@google-cloud/paginator": "^4.0.0", + "@google-cloud/precise-date": "^3.0.0", + "@google-cloud/projectify": "^3.0.0", "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^0.22.0", + "@opentelemetry/api": "^1.6.0", + "@opentelemetry/semantic-conventions": "~1.3.0", "@types/duplexify": "^3.6.0", "@types/long": "^4.0.0", "arrify": "^2.0.0", "extend": "^3.0.2", - "google-auth-library": "^7.0.0", - "google-gax": "^2.12.0", + "google-auth-library": "^8.0.2", + "google-gax": "^3.6.1", + "heap-js": "^2.2.0", "is-stream-ended": "^0.1.4", "lodash.snakecase": "^4.1.1", "p-defer": "^3.0.0" }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/@google-cloud/projectify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/@grpc/grpc-js": { + "version": "1.8.21", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", + "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/@grpc/proto-loader": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@google-cloud/pubsub/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" } }, + "node_modules/@google-cloud/pubsub/node_modules/google-gax": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", + "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "dependencies": { + "@grpc/grpc-js": "~1.8.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.2.4", + "protobufjs-cli": "1.1.1", + "retry-request": "^5.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/@google-cloud/pubsub/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/proto3-json-serializer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", + "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", + "dependencies": { + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/protobufjs": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "dependencies": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/protobufjs-cli/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/retry-request": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", + "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@google-cloud/pubsub/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/@google-cloud/secret-manager": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-3.10.0.tgz", @@ -1602,6 +2117,102 @@ "md5": "^2.2.1" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "optional": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "optional": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "optional": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "optional": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "optional": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -1615,6 +2226,17 @@ "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, "node_modules/@justinribeiro/lite-youtube": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@justinribeiro/lite-youtube/-/lite-youtube-0.9.2.tgz", @@ -1626,9 +2248,9 @@ "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" }, "node_modules/@mdn/browser-compat-data": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.1.5.tgz", - "integrity": "sha512-B86Pr/KsXRl/AG68KySjBWjrS3JlzhA0otCHnkDAfnePEveOTa6j//6pWp9RZvDcsAL1DJTvADcTkt2xX7xjDw==" + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.9.tgz", + "integrity": "sha512-J7lLtHMEizYbI5T0Xlqpg1JXCz9JegZBeb7y3v/Nm8ScRw8TL9v3n+I3g1TFm+bLrRtwA33FKwX5znDwz+WzAQ==" }, "node_modules/@minify-html/node": { "version": "0.9.2", @@ -1677,29 +2299,16 @@ "node": ">= 8" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "optional": true, "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@oclif/command": { @@ -2164,25 +2773,26 @@ } }, "node_modules/@opentelemetry/api": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.1.tgz", - "integrity": "sha512-H5Djcc2txGAINgf3TNaq4yFofYSIK3722PM89S/3R8FuI/eqi1UscajlXk7EBkG9s2pxss/q6SHlpturaavXaw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.6.0.tgz", + "integrity": "sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==", "engines": { "node": ">=8.0.0" } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.22.0.tgz", - "integrity": "sha512-t4fKikazahwNKmwD+CE/icHyuZldWvNMupJhjxdk9T/KxHFx3zCGjHT3MKavwYP6abzgAAm5WwzD1oHlmj7dyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.1.tgz", + "integrity": "sha512-wU5J8rUoo32oSef/rFpOT1HIjLjAv3qIDHkw1QIhODV3OpAVHi5oVzlouozg9obUmZKtbZ0qUe/m7FP0y0yBzA==", "engines": { - "node": ">=8.0.0" + "node": ">=8.12.0" } }, "node_modules/@percy/cli": { "version": "1.0.0-beta.71", "resolved": "https://registry.npmjs.org/@percy/cli/-/cli-1.0.0-beta.71.tgz", "integrity": "sha512-G2ySjDZ29Bl0RwfqSJUPyRHjsJ+DEjLZDcdFaUjZ99/OwhplbuIMI0hR0UcxpV1lOtvYTpCSRX5z4y51kzJV7w==", + "deprecated": "Beta versions of @percy/cli are deprecated. Please update to the latest stable version to ensure compatibility", "dev": true, "dependencies": { "@oclif/plugin-help": "^3.2.0", @@ -2579,6 +3189,47 @@ "node": ">=12" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -2705,6 +3356,7 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, "engines": { "node": ">=6" } @@ -2767,14 +3419,233 @@ } }, "node_modules/@socket.io/component-emitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", - "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "node_modules/@swc/html": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html/-/html-0.0.18.tgz", + "integrity": "sha512-EiA134Oa5sneQqMfsWcEcDaEVX1Grtb82S6nUqPUI/t7LQzg4lO7Wcp3Fqy2UwpVsL4otWM03gD65qEr5ZPf2A==", + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "@swc/html-android-arm-eabi": "0.0.18", + "@swc/html-android-arm64": "0.0.18", + "@swc/html-darwin-arm64": "0.0.18", + "@swc/html-darwin-x64": "0.0.18", + "@swc/html-freebsd-x64": "0.0.18", + "@swc/html-linux-arm-gnueabihf": "0.0.18", + "@swc/html-linux-arm64-gnu": "0.0.18", + "@swc/html-linux-arm64-musl": "0.0.18", + "@swc/html-linux-x64-gnu": "0.0.18", + "@swc/html-linux-x64-musl": "0.0.18", + "@swc/html-win32-arm64-msvc": "0.0.18", + "@swc/html-win32-ia32-msvc": "0.0.18", + "@swc/html-win32-x64-msvc": "0.0.18" + } + }, + "node_modules/@swc/html-android-arm-eabi": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-android-arm-eabi/-/html-android-arm-eabi-0.0.18.tgz", + "integrity": "sha512-2/76+aJnzgoE2U+gaKfj/2Qbkx7OHTJyfP7qFdfvMb6zQsc6gQMqp3KDPXK3wmt4aPTifryl/QzIBAYFVyGXvQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-android-arm64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-android-arm64/-/html-android-arm64-0.0.18.tgz", + "integrity": "sha512-7bVCnuJvqPUghLaBgWuZUG4fayR8UZCcnBb9PAktL2a/r97KlKgHOwN7Z9T5d7PdXu3af3x3jN7c2gSKe1Zpmw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-darwin-arm64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-0.0.18.tgz", + "integrity": "sha512-fBHsO5+qfxvKulFuEIpoo32UOPN1N3478lRfcimENp9Cu0wWe4coLZVGKMaDdRJpMR0U8DEzeybrocpns89R2Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-darwin-x64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-0.0.18.tgz", + "integrity": "sha512-5hFbhf1ghUW1uZq2yHMp9GewmSf/1IAH5x7MlC+LhuBjEFDlTyY9ax2fK5YVwZwbMJh4LfgtN7ydFVUfNvHB1g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-freebsd-x64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-freebsd-x64/-/html-freebsd-x64-0.0.18.tgz", + "integrity": "sha512-AHBEiIqyy4FD2yUxtfPG5yopXh7tDCKV1OSXavdaAqikx8EwG3ok85WsgbPPBAfZMttHkp/mvYmxE2MZE1dhDQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-linux-arm-gnueabihf": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-0.0.18.tgz", + "integrity": "sha512-en0EokMYRY6kB/BqGDwGY56xe7bPbN+I6VhHho1FTy0UPuh8FhYDpev/J7qgmwVlh6Ch27SDzGF8ly0tXbjQWA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-linux-arm64-gnu": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-0.0.18.tgz", + "integrity": "sha512-gXsdpv6RVEhZYWj4CV4t9D+DWQ4iPx1fFt2ICxtvbo6dkuwNOszr/CoF+K+YwoE2DGUInmD8o4VT915n92NABQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-linux-arm64-musl": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-0.0.18.tgz", + "integrity": "sha512-im/vFj2OOG+yqNfn4AMxOolo3b9L3QfJY0sJ9BOFqXDGzQjj6DYfNV03HpRHtP8+LKlDAcbmaH9K84PN1U3xZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-linux-x64-gnu": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-0.0.18.tgz", + "integrity": "sha512-OCpMpFmeJTWFaFo6BkcTfHU5kx1AIU/Ad9g3LpzFyr5a/oBb1UCUVuV2Y6kUOkj93JmepsZnRkb9cr43cR6Hrg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-linux-x64-musl": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-0.0.18.tgz", + "integrity": "sha512-D0aiWk6yXQSk05ZH2gKrclT5VA5iAQfKaujmzQr+MZ+iSdMpCp+BHNi4xPuOCEnAbQ38qv6PfSY+zuszjC/utA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-win32-arm64-msvc": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-0.0.18.tgz", + "integrity": "sha512-8dE0Q8g5pIP+u8aFZmKZzud7/JH1evcRLLEktdICDj5cO67eC8yTfxpQ8NwyAmf6VFVaOaCELSjX2RaYYsEViw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-win32-ia32-msvc": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-0.0.18.tgz", + "integrity": "sha512-HxuBUmDc7xuTn7JD+VU7LfxP5X1XzgBbskomb8/9yoZglqpPNT200DIf8/JbP9Kv692VP5ACNIpJ6jpCfbF1kA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/html-win32-x64-msvc": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-0.0.18.tgz", + "integrity": "sha512-pZ93lqOtFdalit3EGinbbmFdT+sACo+QG6uiVsAU6tynjkJjeJxKq3TC6D3m8QQDRnEe8BViTwoEAyZ00ouuhA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "dependencies": { "defer-to-connect": "^1.0.1" }, @@ -2790,13 +3661,10 @@ "node": ">= 6" } }, - "node_modules/@types/archiver": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz", - "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==", - "dependencies": { - "@types/glob": "*" - } + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" }, "node_modules/@types/chai": { "version": "4.3.0", @@ -2820,9 +3688,9 @@ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "node_modules/@types/duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.2.tgz", + "integrity": "sha512-2/0R4riyD/OS6GNJLIhwRaj+8ZbxHUZl3I0a3PHwH7zhZEEAACUWjzaBrY1qVWckueZ5pouDRP0UxX6P8Hzfww==", "dependencies": { "@types/node": "*" } @@ -2857,18 +3725,18 @@ "@types/node": "*" } }, - "node_modules/@types/google.analytics": { - "version": "0.0.40", - "resolved": "https://registry.npmjs.org/@types/google.analytics/-/google.analytics-0.0.40.tgz", - "integrity": "sha512-R3HpnLkqmKxhUAf8kIVvDVGJqPtaaZlW4yowNwjOZUTmYUQEgHh8Nh5wkSXKMroNAuQM8gbXJHmNbbgA8tdb7Q==", - "dev": true - }, "node_modules/@types/grecaptcha": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/grecaptcha/-/grecaptcha-3.0.3.tgz", "integrity": "sha512-osLqWRzsRsDtCfiCl1lbtUY8ANGCQsG/hhht3E7g1pVT7fD5SXgAg53S2grKjjSkXcm0fvMDbhUeL9NyAJvzGQ==", "dev": true }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "dev": true + }, "node_modules/@types/gulp": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", @@ -2880,12 +3748,6 @@ "chokidar": "^3.3.1" } }, - "node_modules/@types/highlight.js": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", - "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", - "dev": true - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -2900,8 +3762,7 @@ "node_modules/@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", - "dev": true + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" }, "node_modules/@types/long": { "version": "4.0.1", @@ -2909,12 +3770,10 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "node_modules/@types/markdown-it": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.3.tgz", - "integrity": "sha512-MIhDl8e64vKJv3GX8irH5I/cNarX18edtdfg/+lbS92mArVl5VeaL4WKf8i06Zt2vsNuze2Vc8ELqrjoWO6hDQ==", - "dev": true, + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", "dependencies": { - "@types/highlight.js": "^9.7.0", "@types/linkify-it": "*", "@types/mdurl": "*" } @@ -2922,8 +3781,7 @@ "node_modules/@types/mdurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, "node_modules/@types/minimatch": { "version": "3.0.5", @@ -2993,6 +3851,20 @@ "@types/node": "*" } }, + "node_modules/@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", + "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==" + }, "node_modules/@types/trusted-types": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", @@ -3295,12 +4167,12 @@ } }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -3321,17 +4193,10 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -3344,13 +4209,11 @@ } }, "node_modules/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "optional": true, "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", "humanize-ms": "^1.2.1" }, "engines": { @@ -3361,7 +4224,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, + "devOptional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3374,7 +4237,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -3394,6 +4257,42 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/ajv-keywords": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", @@ -3483,11 +4382,28 @@ } }, "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-gray": { @@ -3531,7 +4447,7 @@ "node_modules/ansicolors": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, "node_modules/any-promise": { "version": "0.1.0", @@ -3562,21 +4478,21 @@ } }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "optional": true }, "node_modules/archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "dependencies": { "archiver-utils": "^2.1.0", - "async": "^3.2.0", + "async": "^3.2.4", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", + "readdir-glob": "^1.1.2", "tar-stream": "^2.2.0", "zip-stream": "^4.1.0" }, @@ -3604,15 +4520,10 @@ "node": ">= 6" } }, - "node_modules/archiver-utils/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3636,60 +4547,22 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/archiver/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" }, "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "optional": true, "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/argparse": { @@ -3872,12 +4745,6 @@ "node": ">=0.10.0" } }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -3889,7 +4756,7 @@ "node_modules/as-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", - "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc=" + "integrity": "sha512-1Sd1LrodN0XYxYeZcN1J4xYZvmvTwD5tDWaPUGPIzH1mFsmzsPnVtd2exWhecMjtZk/wYWjNZJiD3b1SLCeJqg==" }, "node_modules/asap": { "version": "2.0.6", @@ -3955,9 +4822,9 @@ } }, "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "node_modules/async-done": { "version": "1.3.2", @@ -3981,16 +4848,15 @@ "node_modules/async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", "engines": { "node": ">=0.8.0" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true + "node_modules/async-lock": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.3.2.tgz", + "integrity": "sha512-phnXdS3RP7PPcmP6NWWzWMU0sLTeyvtZCxBPpZdkYE3seGLKSQZs9FrmVO/qwypq98FUtWWUEYxziLkdGk5nnA==" }, "node_modules/async-settle": { "version": "1.0.0", @@ -4003,6 +4869,11 @@ "node": ">= 0.10" } }, + "node_modules/async-transforms": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/async-transforms/-/async-transforms-1.0.9.tgz", + "integrity": "sha512-PCZEV8XLKoJTYovmfbXN5bZU2b8jf2d22hM7gl3xYmNRsVBt0khvHsgOdbd8UZj0xM9Tv1eWt5qrzeThgR2Alw==" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4175,11 +5046,6 @@ "node": ">= 0.10" } }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -4299,17 +5165,25 @@ "node_modules/basic-auth-connect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", - "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=" + "integrity": "sha512-kiV+/DTgVro4aZifY/hwRwALBISViL5NP4aReaR2EVJEObpbUBHIkdJh/YpcoEiYt7nBodZ6U2ajZeZvSxUCCg==" }, "node_modules/basic-auth/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -4325,26 +5199,6 @@ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, - "node_modules/better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "dependencies": { - "callsite": "1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -4361,18 +5215,6 @@ "node": "*" } }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -4400,41 +5242,32 @@ "readable-stream": "^3.4.0" } }, - "node_modules/blakejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", - "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" - }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/debug": { @@ -4445,82 +5278,60 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "node_modules/body-parser/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/body-parser/node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4540,16 +5351,30 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/boxen/node_modules/color-convert": { @@ -4587,14 +5412,6 @@ "node": ">=8" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4627,12 +5444,12 @@ "dev": true }, "node_modules/browser-sync": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.9.tgz", - "integrity": "sha512-3zBtggcaZIeU9so4ja9yxk7/CZu9B3DOL6zkxFpzHCHsQmkGBPVXg61jItbeoa+WXgNLnr1sYES/2yQwyEZ2+w==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", + "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", "dependencies": { - "browser-sync-client": "^2.27.9", - "browser-sync-ui": "^2.27.9", + "browser-sync-client": "^2.27.11", + "browser-sync-ui": "^2.27.11", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^3.5.1", @@ -4649,8 +5466,8 @@ "localtunnel": "^2.0.1", "micromatch": "^4.0.2", "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", + "portscanner": "2.2.0", + "qs": "^6.11.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", @@ -4670,23 +5487,24 @@ } }, "node_modules/browser-sync-client": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.9.tgz", - "integrity": "sha512-FHW8kydp7FXo6jnX3gXJCpHAHtWNLK0nx839nnK+boMfMI1n4KZd0+DmTxHBsHsF3OHud4V4jwoN8U5HExMIdQ==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", + "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", "dependencies": { "etag": "1.8.1", "fresh": "0.5.2", "mitt": "^1.1.3", - "rxjs": "^5.5.6" + "rxjs": "^5.5.6", + "typescript": "^4.6.2" }, "engines": { "node": ">=8.0.0" } }, "node_modules/browser-sync-ui": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.9.tgz", - "integrity": "sha512-rsduR2bRIwFvM8CX6iY/Nu5aWub0WB9zfSYg9Le/RV5N5DEyxJYey0VxdfWCnzDOoelassTDzYQo+r0iJno3qw==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", + "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", "dependencies": { "async-each-series": "0.1.1", "connect-history-api-fallback": "^1", @@ -4699,7 +5517,7 @@ "node_modules/browser-sync/node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^3.0.0", @@ -4731,12 +5549,12 @@ "node_modules/bs-recipes": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=" + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==" }, "node_modules/bs-snippet-injector": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", - "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=" + "integrity": "sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw==" }, "node_modules/buffer": { "version": "5.7.1", @@ -4761,22 +5579,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -4798,33 +5600,11 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", @@ -4837,9 +5617,9 @@ } }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -4950,88 +5730,119 @@ } }, "node_modules/cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "optional": true, "dependencies": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "optional": true, - "engines": { - "node": ">=10" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/cacache/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "optional": true, "dependencies": { - "yallist": "^4.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "optional": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, "bin": { - "mkdirp": "bin/cmd.js" + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "optional": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/cacache/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "optional": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/cache-base": { "version": "1.0.1", @@ -5056,6 +5867,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5073,6 +5885,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, "engines": { "node": ">=8" } @@ -5090,9 +5903,9 @@ } }, "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" }, "node_modules/caller-callsite": { "version": "2.0.0", @@ -5116,15 +5929,6 @@ "node": ">=4" } }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", @@ -5137,6 +5941,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { "node": ">=6" } @@ -5181,7 +5986,7 @@ "node_modules/cardinal": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -5203,6 +6008,17 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -5230,17 +6046,6 @@ "node": ">=4" } }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5669,12 +6474,6 @@ "node": ">=0.10.0" } }, - "node_modules/chokidar-cli/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/chokidar-cli/node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -5873,7 +6672,8 @@ "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "node_modules/chrome-launcher": { "version": "0.15.0", @@ -5929,7 +6729,7 @@ "node_modules/cjson": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", - "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=", + "integrity": "sha512-yKNcXi/Mvi5kb1uK0sahubYiyfUO2EUgOp4NcY9+8NX5Xmc+4yeNogZuLFkpLBBj7/QI9MjRUIuXrV9XOw5kVg==", "dependencies": { "json-parse-helpfulerror": "^1.0.3" }, @@ -6000,34 +6800,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-color": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", - "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", - "dependencies": { - "ansi-regex": "^2.1.1", - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.5" - } - }, "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", "engines": { "node": ">=6" }, @@ -6036,9 +6823,9 @@ } }, "node_modules/cli-table": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz", - "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", "dependencies": { "colors": "1.0.3" }, @@ -6049,15 +6836,136 @@ "node_modules/cli-table/node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "engines": { "node": ">=0.1.90" } }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true }, "node_modules/cliui": { "version": "7.0.4", @@ -6108,6 +7016,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "dependencies": { "mimic-response": "^1.0.0" } @@ -6127,11 +7036,6 @@ "readable-stream": "^2.3.5" } }, - "node_modules/cloneable-readable/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/cloneable-readable/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -6222,12 +7126,12 @@ } }, "node_modules/color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "node_modules/color-convert": { @@ -6244,9 +7148,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -6269,16 +7173,17 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, "engines": { "node": ">=0.1.90" } }, "node_modules/colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "dependencies": { - "color": "3.0.x", + "color": "^3.1.3", "text-hex": "1.0.x" } }, @@ -6314,49 +7219,21 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "node_modules/compare-semver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/compare-semver/-/compare-semver-1.1.0.tgz", - "integrity": "sha1-fAp5onu4C2xplERfgpWCWdPQIVM=", - "dependencies": { - "semver": "^5.0.1" - } - }, - "node_modules/compare-semver/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -6398,7 +7275,7 @@ "node_modules/compression/node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } @@ -6414,7 +7291,7 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", @@ -6440,11 +7317,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -6575,7 +7447,7 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "optional": true }, "node_modules/console-log-level": { @@ -6593,21 +7465,16 @@ } }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -6671,6 +7538,7 @@ "version": "3.15.2", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", + "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure.", "dev": true, "hasInstallScript": true, "funding": { @@ -6710,13 +7578,9 @@ } }, "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "bin": { "crc32": "bin/crc32.njs" }, @@ -6725,9 +7589,9 @@ } }, "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -6767,9 +7631,9 @@ } }, "node_modules/cross-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -7270,19 +8134,10 @@ "cssom": "0.3.x" } }, - "node_modules/csv-streamify": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/csv-streamify/-/csv-streamify-3.0.4.tgz", - "integrity": "sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho=", - "dependencies": { - "through2": "2.0.1" - }, - "bin": { - "csv-streamify": "cli.js" - }, - "engines": { - "node": ">=0.12.0" - } + "node_modules/csv-parse": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.0.tgz", + "integrity": "sha512-RxruSK3M4XgzcD7Trm2wEN+SJ26ChIb903+IWxNOcB5q4jT2Cs+hFr6QP39J05EohshRFEvyzEBoZ/466S2sbw==" }, "node_modules/custom-event": { "version": "1.0.1", @@ -7311,17 +8166,17 @@ } }, "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, "engines": { "node": ">=4.0" @@ -7385,6 +8240,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, @@ -7415,7 +8271,7 @@ "node_modules/deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=" + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==" }, "node_modules/deep-is": { "version": "0.1.3", @@ -7458,17 +8314,20 @@ } }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defaults/node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "engines": { "node": ">=0.8" } @@ -7476,7 +8335,8 @@ "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "node_modules/define-lazy-prop": { "version": "2.0.0", @@ -7545,16 +8405,16 @@ } }, "node_modules/degenerator": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/delayed-stream": { @@ -7568,7 +8428,7 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "optional": true }, "node_modules/depd": { @@ -7609,7 +8469,7 @@ "node_modules/dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", "bin": { "dev-ip": "lib/dev-ip.js" }, @@ -7788,50 +8648,11 @@ "node": ">=10" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "node_modules/duplexify": { "version": "4.1.1", @@ -7853,6 +8674,12 @@ "object.defaults": "^1.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "devOptional": true + }, "node_modules/easy-extender": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", @@ -7925,11 +8752,11 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dependencies": { - "jake": "^10.6.1" + "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" @@ -8028,19 +8855,15 @@ } }, "node_modules/engine.io-client": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", - "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", + "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", "dependencies": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", + "engine.io-parser": "~5.0.3", "ws": "~8.2.3", - "xmlhttprequest-ssl": "~2.0.0", - "yeast": "0.1.2" + "xmlhttprequest-ssl": "~2.0.0" } }, "node_modules/engine.io-client/node_modules/ws": { @@ -8309,60 +9132,31 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">= 0.8.0" + "node": ">=4.0" } }, "node_modules/escodegen/node_modules/source-map": { @@ -8374,17 +9168,6 @@ "node": ">=0.10.0" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", @@ -8896,6 +9679,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -8909,6 +9693,11 @@ "node": ">=6" } }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -8954,47 +9743,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/exegesis": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-2.5.7.tgz", - "integrity": "sha512-Y0gEY3hgoLa80aMUm8rhhlIW3/KWo4uqN5hKJqok2GLh3maZjRLRC+p0gj33Jw3upAOKOXeRgScT5rtRoMyxwQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.1.tgz", + "integrity": "sha512-PvSqaMOw2absLBgsthtJyVOeCHN4lxQ1dM7ibXb6TfZZJaoXtGELoEAGJRFvdN16+u9kg8oy1okZXRk8VpimWA==", "dependencies": { "@apidevtools/json-schema-ref-parser": "^9.0.3", - "ajv": "^6.12.2", + "ajv": "^8.3.0", + "ajv-formats": "^2.1.0", "body-parser": "^1.18.3", "content-type": "^1.0.4", "deep-freeze": "0.0.1", "events-listener": "^1.1.0", "glob": "^7.1.3", - "json-ptr": "^2.2.0", + "json-ptr": "^3.0.1", "json-schema-traverse": "^1.0.0", "lodash": "^4.17.11", - "openapi3-ts": "^2.0.1", - "promise-breaker": "^5.0.0", + "openapi3-ts": "^3.1.1", + "promise-breaker": "^6.0.0", "pump": "^3.0.0", "qs": "^6.6.0", "raw-body": "^2.3.3", @@ -9006,40 +9772,36 @@ } }, "node_modules/exegesis-express": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-2.0.1.tgz", - "integrity": "sha512-8ORl1YRygYGPdR+zcClMqzaU+JQuvdNIw/s0RNwYluxNecEHkDEcXFmO6A5T79p7e48KI8iXJYt6KIn4Z9z4bg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz", + "integrity": "sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw==", "dependencies": { - "exegesis": "^2.5.7" + "exegesis": "^4.1.0" }, "engines": { "node": ">=6.0.0", "npm": ">5.0.0" } }, - "node_modules/exegesis/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/exegesis/node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "node_modules/exegesis/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/exit-code": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/exit-code/-/exit-code-1.0.2.tgz", - "integrity": "sha1-zhZYEcnxF69qX4gpQLlq5/muzDQ=" + "node_modules/exegesis/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/exit-hook": { "version": "1.1.1", @@ -9050,14 +9812,6 @@ "node": ">=0.10.0" } }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -9139,12 +9893,6 @@ "node": ">=0.10.0" } }, - "node_modules/expand-range/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/expand-range/node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", @@ -9180,38 +9928,45 @@ "node": ">=0.10.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "optional": true + }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -9221,9 +9976,9 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } @@ -9236,17 +9991,34 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/express/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -9267,69 +10039,67 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">=0.6" + "node": ">= 0.8" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/express/node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/express/node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/express/node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/express/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/ext": { @@ -9492,9 +10262,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9516,11 +10286,6 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "node_modules/fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" - }, "node_modules/fast-text-encoding": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", @@ -9586,19 +10351,22 @@ } }, "node_modules/fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -9620,11 +10388,30 @@ "optional": true }, "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.4.tgz", + "integrity": "sha512-U0iNYXt9wALljzfnGkhFSy5sAC6/SCR3JrHrlsdJz4kF8MvhTRQNiC59iUi1iqsitV7abrNAJWElVL9pdnoUgw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/filename-regex": { @@ -9921,65 +10708,67 @@ } }, "node_modules/firebase-tools": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-9.16.0.tgz", - "integrity": "sha512-H/zyDDrQuZKM6ZFyI8t2kDEC+/Ewhk771sM8NLZyEXIQnX5qKAwhi3sJUB+5yrXt+SJQYqUYksBLK6/gqxe9Eg==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-12.6.1.tgz", + "integrity": "sha512-/b6Ix9gSmltmDXJvHDTAe6y8yh7C6f5rjYwlHULAzNDQGZv5S4reIUgc06D7XuAdNK+4gNjy7vZoVVpqJ32J4A==", "dependencies": { - "@google-cloud/pubsub": "^2.7.0", - "@types/archiver": "^5.1.0", + "@google-cloud/pubsub": "^3.0.1", "abort-controller": "^3.0.0", "ajv": "^6.12.6", "archiver": "^5.0.0", + "async-lock": "1.3.2", "body-parser": "^1.19.0", "chokidar": "^3.0.2", "cjson": "^0.3.1", - "cli-color": "^1.2.0", - "cli-table": "^0.3.1", + "cli-table": "0.3.11", + "colorette": "^2.0.19", "commander": "^4.0.1", "configstore": "^5.0.1", "cors": "^2.8.5", "cross-env": "^5.1.3", - "cross-spawn": "^7.0.1", - "csv-streamify": "^3.0.4", - "dotenv": "^6.1.0", - "exegesis": "^2.5.7", - "exegesis-express": "^2.0.0", - "exit-code": "^1.0.2", + "cross-spawn": "^7.0.3", + "csv-parse": "^5.0.4", + "exegesis": "^4.1.0", + "exegesis-express": "^4.0.0", "express": "^4.16.4", "filesize": "^6.1.0", - "fs-extra": "^5.0.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", "glob": "^7.1.2", - "google-auth-library": "^6.1.3", - "inquirer": "~6.3.1", + "google-auth-library": "^7.11.0", + "inquirer": "^8.2.0", "js-yaml": "^3.13.1", - "JSONStream": "^1.2.1", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.0", "leven": "^3.1.0", + "libsodium-wrappers": "^0.7.10", "lodash": "^4.17.21", - "marked": "^0.7.0", - "marked-terminal": "^3.3.0", + "marked": "^4.0.14", + "marked-terminal": "^5.1.1", "mime": "^2.5.2", "minimatch": "^3.0.4", "morgan": "^1.10.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "open": "^6.3.0", - "ora": "^3.4.0", - "portfinder": "^1.0.23", + "ora": "^5.4.1", + "p-limit": "^3.0.1", + "portfinder": "^1.0.32", "progress": "^2.0.3", - "proxy-agent": "^4.0.0", + "proxy-agent": "^6.3.0", "request": "^2.87.0", + "retry": "^0.13.1", "rimraf": "^3.0.0", - "semver": "^5.7.1", - "superstatic": "^7.1.0", - "tar": "^4.3.0", - "tcp-port-used": "^1.0.1", - "tmp": "0.0.33", + "semver": "^7.5.2", + "stream-chain": "^2.2.4", + "stream-json": "^1.7.3", + "strip-ansi": "^6.0.1", + "superstatic": "^9.0.3", + "tar": "^6.1.11", + "tcp-port-used": "^1.0.2", + "tmp": "^0.2.1", "triple-beam": "^1.3.0", - "tweetsodium": "0.0.5", - "universal-analytics": "^0.4.16", - "unzipper": "^0.10.10", - "update-notifier": "^5.1.0", - "uuid": "^3.0.0", + "universal-analytics": "^0.5.3", + "update-notifier-cjs": "^5.1.6", + "uuid": "^8.3.2", "winston": "^3.0.0", "winston-transport": "^4.4.0", "ws": "^7.2.3" @@ -9988,9 +10777,22 @@ "firebase": "lib/bin/firebase.js" }, "engines": { - "node": ">= 10.13" + "node": ">=16.13.0 || >=18.0.0" } }, + "node_modules/firebase-tools/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/firebase-tools/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, "node_modules/firebase-tools/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -9999,28 +10801,36 @@ "node": ">= 6" } }, - "node_modules/firebase-tools/node_modules/dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "node_modules/firebase-tools/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=6" + "node": ">= 6" } }, "node_modules/firebase-tools/node_modules/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/firebase-tools/node_modules/google-auth-library": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", - "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", + "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -10037,9 +10847,12 @@ } }, "node_modules/firebase-tools/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -10056,9 +10869,9 @@ } }, "node_modules/firebase-tools/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "bin": { "mime": "cli.js" }, @@ -10066,12 +10879,56 @@ "node": ">=4.0.0" } }, - "node_modules/firebase-tools/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/firebase-tools/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/firebase-tools/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/firebase-tools/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/firebase-tools/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/firebase-tools/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { - "semver": "bin/semver" + "uuid": "dist/bin/uuid" } }, "node_modules/firebase-tools/node_modules/yallist": { @@ -10099,45 +10956,6 @@ "flat": "cli.js" } }, - "node_modules/flat-arguments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flat-arguments/-/flat-arguments-1.0.2.tgz", - "integrity": "sha1-m6p4Ct8FAfKC1ybJxqA426ROp28=", - "dependencies": { - "array-flatten": "^1.0.0", - "as-array": "^1.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isobject": "^3.0.0" - } - }, - "node_modules/flat-arguments/node_modules/as-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-array/-/as-array-1.0.0.tgz", - "integrity": "sha1-KKbu6qVynx9OyiBH316d4avaDtE=", - "dependencies": { - "lodash.isarguments": "2.4.x", - "lodash.isobject": "^2.4.1", - "lodash.values": "^2.4.1" - } - }, - "node_modules/flat-arguments/node_modules/as-array/node_modules/lodash.isarguments": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-2.4.1.tgz", - "integrity": "sha1-STGpwIJTrfCRrnyhkiWKlzh27Mo=" - }, - "node_modules/flat-arguments/node_modules/as-array/node_modules/lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dependencies": { - "lodash._objecttypes": "~2.4.1" - } - }, - "node_modules/flat-arguments/node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=" - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -10174,9 +10992,9 @@ } }, "node_modules/flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/flush-write-stream": { "version": "1.1.1", @@ -10187,11 +11005,6 @@ "readable-stream": "^2.3.6" } }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -10233,11 +11046,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "node_modules/focus-visible": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz", - "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==" - }, "node_modules/follow-redirects": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", @@ -10382,15 +11190,24 @@ } }, "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "optional": true, "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/fs-mkdirp-stream": { @@ -10405,11 +11222,6 @@ "node": ">= 0.10" } }, - "node_modules/fs-mkdirp-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/fs-mkdirp-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -10464,64 +11276,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -10534,45 +11288,52 @@ "dev": true }, "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "optional": true, "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "optional": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/gaxios": { @@ -10670,6 +11431,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -10681,27 +11443,33 @@ } }, "node_modules/get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, - "node_modules/get-uri/node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/get-value": { @@ -10796,12 +11564,12 @@ "node_modules/glob-slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", - "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=" + "integrity": "sha512-ZwFh34WZhZX28ntCMAP1mwyAJkn8+Omagvt/GvA+JQM/qgT0+MR2NPF3vhvgdshfdvDyGZXs8fPXW84K32Wjuw==" }, "node_modules/glob-slasher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", - "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", + "integrity": "sha512-5MUzqFiycIKLMD1B0dYOE4hGgLLUZUNGGYO4BExdwT32wUwW3DBOE7lMQars7vB1q43Fb3Tyt+HmgLKsJhDYdg==", "dependencies": { "glob-slash": "^1.0.0", "lodash.isobject": "^2.4.1", @@ -10848,11 +11616,6 @@ "node": ">=0.10.0" } }, - "node_modules/glob-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/glob-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -11097,11 +11860,6 @@ "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/glob-watcher/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -11178,23 +11936,26 @@ } }, "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dependencies": { - "ini": "1.3.7" + "ini": "2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/global-dirs/node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } }, "node_modules/global-modules": { "version": "1.0.0", @@ -11376,6 +12137,7 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -11397,6 +12159,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -11478,21 +12241,6 @@ "typescript": ">=3" } }, - "node_modules/gts/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gts/node_modules/ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -11533,18 +12281,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/gts/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gts/node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -11572,21 +12308,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/gts/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gts/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11620,49 +12341,6 @@ "node": ">=8.0.0" } }, - "node_modules/gts/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/gts/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/gts/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gts/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gts/node_modules/rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -11705,18 +12383,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/gts/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gulp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", @@ -12152,20 +12818,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -12188,7 +12840,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "optional": true }, "node_modules/has-value": { @@ -12262,6 +12914,21 @@ "resolved": "https://registry.npmjs.org/hash-string/-/hash-string-1.0.0.tgz", "integrity": "sha1-w/oV8Hjd0WvBULQXb95wkWIPLH8=" }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -12271,16 +12938,19 @@ "he": "bin/he" } }, + "node_modules/heap-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/heap-js/-/heap-js-2.3.0.tgz", + "integrity": "sha512-E5303mzwQ+4j/n2J0rDvEPBN7GKjhis10oHiYOgjxsmxYgqG++hz9NyLLOXttzH8as/DyiBHYpUrJTZWYaMo8Q==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, - "node_modules/home-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/home-dir/-/home-dir-1.0.0.tgz", - "integrity": "sha1-KRfrRL3JByztqUJXlUOEfjAX/k4=" - }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -12331,9 +13001,10 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "devOptional": true }, "node_modules/http-equiv-refresh": { "version": "1.0.0", @@ -12344,26 +13015,34 @@ } }, "node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" } }, "node_modules/http-errors/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-link-header": { @@ -12440,7 +13119,7 @@ "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "optional": true, "dependencies": { "ms": "^2.0.0" @@ -12749,7 +13428,7 @@ "node_modules/immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", "engines": { "node": ">=0.10.0" } @@ -12826,18 +13505,6 @@ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -12858,106 +13525,146 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" } }, "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "tslib": "^1.9.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/inquirer/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" } }, "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/inquirer/node_modules/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/install-artifact-from-github": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz", - "integrity": "sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.3.3.tgz", + "integrity": "sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ==", "optional": true, "bin": { "install-from-cache": "bin/install-from-cache.js", @@ -13004,9 +13711,9 @@ } }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, "node_modules/ip-regex": { "version": "4.3.0", @@ -13375,24 +14082,24 @@ } }, "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-installed-globally/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { "node": ">=8" } @@ -13400,7 +14107,7 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "optional": true }, "node_modules/is-module": { @@ -13447,11 +14154,14 @@ } }, "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-number": { @@ -13498,6 +14208,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -13640,6 +14358,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -13708,9 +14437,9 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "node_modules/is2": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", - "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "dependencies": { "deep-is": "^0.1.3", "ip-regex": "^4.1.0", @@ -13721,21 +14450,20 @@ } }, "node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, - "dependencies": { - "buffer-alloc": "^1.2.0" - }, "engines": { - "node": ">=0.6.0" + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" } }, "node_modules/isexe": { @@ -13759,15 +14487,24 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "engines": { "node": ">=8" } @@ -13830,9 +14567,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -13840,7 +14577,7 @@ "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { @@ -13853,9 +14590,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -13871,13 +14608,31 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "optional": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", + "async": "^3.2.3", + "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" }, @@ -13885,13 +14640,72 @@ "jake": "bin/cli.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/jake/node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/jest-worker": { "version": "26.6.2", @@ -13928,12 +14742,12 @@ "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" }, "node_modules/join-path": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz", - "integrity": "sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU=", + "integrity": "sha512-jnt9OC34sLXMLJ6YfPQ2ZEKrR9mB5ZbSnQb4LPaOx1c5rTzxpR33L18jjp0r75mGGTJmsil3qwN1B5IBeTnSSA==", "dependencies": { "as-array": "^2.0.0", "url-join": "0.0.1", @@ -14001,11 +14815,75 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdoc/node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/jsdoc/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -14028,7 +14906,8 @@ "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -14044,18 +14923,15 @@ "node_modules/json-parse-helpfulerror": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", "dependencies": { "jju": "^1.1.0" } }, "node_modules/json-ptr": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-2.2.0.tgz", - "integrity": "sha512-w9f6/zhz4kykltXMG7MLJWMajxiPj0q+uzQPR1cggNAE/sXoq/C5vjUb/7QNcC3rJsVIIKy37ALTXy1O+3c8QQ==", - "dependencies": { - "tslib": "^2.2.0" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-3.1.1.tgz", + "integrity": "sha512-SiSJQ805W1sDUCD1+/t1/1BIrveq2Fe9HJqENxZmMCILmrPI7WhS/pePpIOx85v6/H2z1Vy7AI08GV2TzfXocg==" }, "node_modules/json-schema": { "version": "0.2.3", @@ -14117,14 +14993,6 @@ "node": "*" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "engines": [ - "node >= 0.2.0" - ] - }, "node_modules/jsonpointer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", @@ -14134,25 +15002,10 @@ "node": ">=0.10.0" } }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -14163,11 +15016,11 @@ "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=4", - "npm": ">=1.4.28" + "node": ">=12", + "npm": ">=6" } }, "node_modules/jsonwebtoken/node_modules/jwa": { @@ -14189,14 +15042,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -14231,11 +15076,6 @@ "set-immediate-shim": "~1.0.1" } }, - "node_modules/jszip/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -14296,49 +15136,47 @@ } }, "node_modules/karma": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", - "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", "dev": true, "dependencies": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.0.0", - "colors": "^1.1.0", - "connect": "^3.6.0", + "chokidar": "^3.5.1", + "connect": "^3.7.0", "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.14", - "log4js": "^4.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.1.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.3.0" + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" }, "bin": { "karma": "bin/karma" }, "engines": { - "node": ">= 8" + "node": ">= 10" } }, "node_modules/karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, "dependencies": { "which": "^1.2.1" @@ -14357,36 +15195,55 @@ } }, "node_modules/karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", "minimatch": "^3.0.4" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/karma-mocha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", - "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { - "minimist": "1.2.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/karma-mocha/node_modules/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-mocha": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", + "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3" + } }, "node_modules/karma-sourcemap-loader": { "version": "0.3.8", @@ -14398,111 +15255,59 @@ } }, "node_modules/karma-spec-reporter": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz", - "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=", + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.34.tgz", + "integrity": "sha512-l5H/Nh9q4g2Ysx2CDU2m+NIPyLQpCVbk9c4V02BTZHw3NM6RO1dq3eRpKXCSSdPt4RGfhHk8jDt3XYkGp+5PWg==", "dev": true, "dependencies": { - "colors": "^1.1.2" + "colors": "1.4.0" }, "peerDependencies": { "karma": ">=0.9" } }, - "node_modules/karma/node_modules/base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/karma/node_modules/base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/karma/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "node_modules/karma/node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "node_modules/karma/node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.10.0" } }, "node_modules/karma/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, - "node_modules/karma/node_modules/engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - } - }, - "node_modules/karma/node_modules/engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "dependencies": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - } - }, - "node_modules/karma/node_modules/engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "node_modules/karma/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/karma/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, "node_modules/karma/node_modules/mime": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", @@ -14518,125 +15323,81 @@ "node_modules/karma/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/karma/node_modules/parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "better-assert": "~1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/karma/node_modules/parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "node_modules/karma/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "dependencies": { - "better-assert": "~1.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/karma/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "rimraf": "^3.0.0" }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/karma/node_modules/socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, - "dependencies": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - } - }, - "node_modules/karma/node_modules/socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "dependencies": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, - "node_modules/karma/node_modules/socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "dependencies": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" + "engines": { + "node": ">=8.17.0" } }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/karma/node_modules/ua-parser-js": { + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/karma/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/karma/node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/karma/node_modules/xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true, + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "dependencies": { "json-buffer": "3.0.0" } @@ -14649,10 +15410,18 @@ "node": ">=0.10.0" } }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "engines": { "node": ">=6" } @@ -14684,6 +15453,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "dependencies": { "package-json": "^6.3.0" }, @@ -14702,11 +15472,6 @@ "node": ">= 0.6.3" } }, - "node_modules/lazystream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -14777,6 +15542,19 @@ "node": ">= 0.8.0" } }, + "node_modules/libsodium": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.13.tgz", + "integrity": "sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==" + }, + "node_modules/libsodium-wrappers": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", + "integrity": "sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==", + "dependencies": { + "libsodium": "^0.7.13" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -14917,6 +15695,15 @@ "node": ">=12" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/limiter": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", @@ -14974,10 +15761,221 @@ "entities": "^3.0.1" } }, + "node_modules/lint-staged": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.2.tgz", + "integrity": "sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==", + "dev": true, + "dependencies": { + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/liquidjs": { - "version": "9.37.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-9.37.0.tgz", - "integrity": "sha512-qDj9iiNdB+QNZTR4iKjiQzoHQma7V8Itx5oZG/ZCP7xjebh1LI+s5IG2ZYUbs1ALO6hBzmW36Ptd8RR4eohuDA==", + "version": "9.43.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-9.43.0.tgz", + "integrity": "sha512-qZZuL5Emja2UgCqiLewiw9bvwZQwm19TTGFxDkonVzB4YSTOZ8tuTVo/7Uu/AeW1cL2Qb/at3DSoV8wwyFXQCw==", "bin": { "liquid": "bin/liquid.js", "liquidjs": "bin/liquid.js" @@ -14995,10 +15993,163 @@ "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", "integrity": "sha1-yn3/ZAYGQzysdcvoRGrNhksVv28=" }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + "node_modules/listr2": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", + "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/listr2/node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/lit": { "version": "2.2.2", @@ -15160,23 +16311,10 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash._isnative": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", - "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=" - }, "node_modules/lodash._objecttypes": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=" - }, - "node_modules/lodash._shimkeys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", - "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", - "dependencies": { - "lodash._objecttypes": "~2.4.1" - } + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -15202,17 +16340,17 @@ "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" }, "node_modules/lodash.get": { "version": "4.4.2", @@ -15222,17 +16360,12 @@ "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, "node_modules/lodash.isequal": { "version": "4.5.0", @@ -15242,22 +16375,22 @@ "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=" + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, "node_modules/lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", "dependencies": { "lodash._objecttypes": "~2.4.1" } @@ -15265,12 +16398,12 @@ "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", @@ -15278,16 +16411,6 @@ "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", "dev": true }, - "node_modules/lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dependencies": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" - } - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -15302,7 +16425,7 @@ "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/lodash.set": { "version": "4.3.2", @@ -15312,12 +16435,7 @@ "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=" - }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" }, "node_modules/lodash.truncate": { "version": "4.4.2", @@ -15328,25 +16446,18 @@ "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "node_modules/lodash.values": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", - "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", - "dependencies": { - "lodash.keys": "~2.4.1" - } - }, "node_modules/log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, "dependencies": { "chalk": "^2.0.1" }, @@ -15411,36 +16522,48 @@ } }, "node_modules/log4js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", - "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", + "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==", "dev": true, "dependencies": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.4", - "streamroller": "^1.0.6" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.3" }, "engines": { - "node": ">=6.0" + "node": ">=8.0" } }, - "node_modules/log4js/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "node_modules/log4js/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, "node_modules/logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", "dependencies": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", + "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" } }, @@ -15468,6 +16591,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -15481,14 +16605,6 @@ "yallist": "^2.1.2" } }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dependencies": { - "es5-ext": "~0.10.2" - } - }, "node_modules/luxon": { "version": "1.28.0", "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", @@ -15528,48 +16644,93 @@ } }, "node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "optional": true, "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true, "engines": { "node": ">= 10" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/make-fetch-happen/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "optional": true, "dependencies": { - "yallist": "^4.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=10" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "optional": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } }, "node_modules/make-iterator": { "version": "1.0.1", @@ -15699,30 +16860,69 @@ "dev": true }, "node_modules/marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "bin": { - "marked": "bin/marked" + "marked": "bin/marked.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, "node_modules/marked-terminal": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", - "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", "dependencies": { - "ansi-escapes": "^3.1.0", + "ansi-escapes": "^6.2.0", "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "cli-table": "^0.3.1", - "node-emoji": "^1.4.1", - "supports-hyperlinks": "^1.0.1" + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "engines": { + "node": ">=14.13.1 || >=16.0.0" }, "peerDependencies": { - "marked": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0" + "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/marked-terminal/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/marky": { @@ -16029,26 +17229,6 @@ "node": ">= 0.6" } }, - "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "node_modules/memoizee/node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -16178,12 +17358,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -16198,36 +17378,37 @@ } }, "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.48.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, "engines": { "node": ">=4" } @@ -16281,13 +17462,9 @@ } }, "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } @@ -16304,21 +17481,48 @@ "node": ">= 8" } }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, "node_modules/minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "optional": true, "dependencies": { - "minipass": "^3.1.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-flush": { @@ -16333,6 +17537,24 @@ "node": ">= 8" } }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -16345,6 +17567,24 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -16357,7 +17597,19 @@ "node": ">=8" } }, - "node_modules/minipass/node_modules/yallist": { + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", @@ -16367,7 +17619,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -16376,11 +17627,21 @@ "node": ">= 8" } }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/mitt": { "version": "1.2.0", @@ -16789,7 +18050,7 @@ "node_modules/morgan/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/ms": { "version": "2.1.2", @@ -16831,20 +18092,20 @@ } }, "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", "optional": true }, "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -16896,17 +18157,6 @@ "node": ">=0.10.0" } }, - "node_modules/nash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/nash/-/nash-3.0.0.tgz", - "integrity": "sha512-M5SahEycXUmko3zOvsBkF6p94CWLhnyy9hfpQ9Qzp+rQkQ8D1OaTlfTl1OBWktq9Fak3oDXKU+ev7tiMaMu+1w==", - "dependencies": { - "async": "^1.3.0", - "flat-arguments": "^1.0.0", - "lodash": "^4.17.5", - "minimist": "^1.1.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16923,9 +18173,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } @@ -16948,17 +18198,37 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true + }, "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dependencies": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node_modules/node-environment-flags": { @@ -16981,9 +18251,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -17008,73 +18278,76 @@ } }, "node_modules/node-gyp": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.1.0.tgz", - "integrity": "sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "optional": true, "dependencies": { "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^8.0.14", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.0", + "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", "optional": true, - "engines": { - "node": ">=10" + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "optional": true, + "dependencies": { + "abbrev": "^1.0.0" + }, "bin": { - "mkdirp": "bin/cmd.js" + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/node-gyp/node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "optional": true, + "node_modules/node-mocks-http": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.12.1.tgz", + "integrity": "sha512-jrA7Sn3qI6GsHgWtUW3gMj0vO6Yz0nJjzg3jRZYjcfj4tzi8oWPauDK1qHVJoAxTbwuDHF1JiM9GISZ/ocI/ig==", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "accepts": "^1.3.7", + "content-disposition": "^0.5.3", + "depd": "^1.1.0", + "fresh": "^0.5.2", + "merge-descriptors": "^1.0.1", + "methods": "^1.1.2", + "mime": "^1.3.4", + "parseurl": "^1.3.3", + "range-parser": "^1.2.0", + "type-is": "^1.6.18" }, "engines": { - "node": ">= 10" + "node": ">=0.6" } }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true - }, "node_modules/node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", @@ -17133,6 +18406,7 @@ "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, "engines": { "node": ">=8" } @@ -17293,15 +18567,18 @@ } }, "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "optional": true, "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/nth-check": { @@ -17368,12 +18645,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -17418,9 +18689,9 @@ } }, "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17603,14 +18874,17 @@ } }, "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/open": { @@ -17625,11 +18899,19 @@ } }, "node_modules/openapi3-ts": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.1.tgz", - "integrity": "sha512-v6X3iwddhi276siej96jHGIqTx3wzVfMTmpGJEQDt7GPI7pI6sywItURLzpEci21SBRpPN/aOWSF5mVfFVNmcg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-3.2.0.tgz", + "integrity": "sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg==", "dependencies": { - "yaml": "^1.10.0" + "yaml": "^2.2.1" + } + }, + "node_modules/openapi3-ts/node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "engines": { + "node": ">= 14" } }, "node_modules/opencollective-postinstall": { @@ -17644,7 +18926,7 @@ "node_modules/openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=" + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" }, "node_modules/opn": { "version": "5.3.0", @@ -17657,31 +18939,6 @@ "node": ">=4" } }, - "node_modules/optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "node_modules/optimist/node_modules/minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "node_modules/optimist/node_modules/wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -17700,38 +18957,123 @@ } }, "node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ora/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/ora/node_modules/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/ordered-read-streams": { @@ -17742,11 +19084,6 @@ "readable-stream": "^2.0.1" } }, - "node_modules/ordered-read-streams/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/ordered-read-streams/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -17806,6 +19143,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, "engines": { "node": ">=6" } @@ -17857,7 +19195,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, + "devOptional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -17904,41 +19242,92 @@ } }, "node_modules/pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "dependencies": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^2.0.1" + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -17953,6 +19342,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -18097,16 +19487,6 @@ "parse5": "^6.0.1" } }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -18183,6 +19563,31 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "optional": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "optional": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -18217,10 +19622,15 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -18266,6 +19676,19 @@ "node": ">=0.10.0" } }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -18353,22 +19776,22 @@ "dev": true }, "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" }, "engines": { "node": ">= 0.12.0" } }, "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { "lodash": "^4.17.14" } @@ -18381,12 +19804,23 @@ "ms": "^2.1.1" } }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", "dependencies": { - "async": "1.5.2", + "async": "^2.6.0", "is-number-like": "^1.0.3" }, "engines": { @@ -18394,6 +19828,14 @@ "npm": ">=1.0.0" } }, + "node_modules/portscanner/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -18403,20 +19845,26 @@ } }, "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-calc": { @@ -19964,9 +21412,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -20141,6 +21589,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, "engines": { "node": ">=4" } @@ -20198,17 +21647,6 @@ "node": ">= 0.8" } }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/prismjs": { "version": "1.28.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", @@ -20239,9 +21677,9 @@ } }, "node_modules/promise-breaker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz", - "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", + "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==" }, "node_modules/promise-each": { "version": "2.2.0", @@ -20251,12 +21689,6 @@ "any-promise": "^0.1.0" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "optional": true - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -20270,6 +21702,15 @@ "node": ">=10" } }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/promise.series": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", @@ -20326,35 +21767,81 @@ } }, "node_modules/proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", + "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { - "node": ">=6" + "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "yallist": "^3.0.2" + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/proxy-agent/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } }, "node_modules/proxy-from-env": { "version": "1.1.0", @@ -20540,11 +22027,6 @@ "stream-shift": "^1.0.0" } }, - "node_modules/pumpify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/pumpify/node_modules/pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", @@ -20698,11 +22180,17 @@ } }, "node_modules/qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystring": { @@ -20794,6 +22282,7 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/raven/-/raven-2.6.4.tgz", "integrity": "sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==", + "deprecated": "Please upgrade to @sentry/node. See the migration guide https://bit.ly/3ybOlo7", "dependencies": { "cookie": "0.3.1", "md5": "^2.2.1", @@ -20826,12 +22315,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.3", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -20862,15 +22351,15 @@ } }, "node_modules/re2": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/re2/-/re2-1.16.0.tgz", - "integrity": "sha512-eizTZL2ZO0ZseLqfD4t3Qd0M3b3Nr0MBWpX81EbPMIud/1d/CSfUIx2GQK8fWiAeHoSekO5EOeFib2udTZLwYw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/re2/-/re2-1.20.3.tgz", + "integrity": "sha512-g5j4YjygwGEccP9SCuDI90uPlgALLEYLotfL0K+kqL3XKB4ht7Nm1JuXfOTG96c7JozpvCUxTz1T7oTNwwMI6w==", "hasInstallScript": true, "optional": true, "dependencies": { - "install-artifact-from-github": "^1.2.0", - "nan": "^2.14.2", - "node-gyp": "^8.0.0" + "install-artifact-from-github": "^1.3.3", + "nan": "^2.17.0", + "node-gyp": "^9.4.0" } }, "node_modules/read-pkg": { @@ -20955,11 +22444,30 @@ } }, "node_modules/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/readdirp": { @@ -21056,7 +22564,7 @@ "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "dependencies": { "esprima": "~4.0.0" } @@ -21130,6 +22638,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, "dependencies": { "rc": "^1.2.8" }, @@ -21657,12 +23166,6 @@ "node": ">=0.10.0" } }, - "node_modules/remark-lint-are-links-valid/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/remark-lint-are-links-valid/node_modules/isobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", @@ -23197,11 +24700,6 @@ "node": ">= 0.10" } }, - "node_modules/remove-bom-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/remove-bom-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -23336,7 +24834,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -23404,6 +24901,14 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -23456,7 +24961,7 @@ "node_modules/resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", "dependencies": { "debug": "^2.2.0", "minimatch": "^3.0.2" @@ -23476,26 +24981,27 @@ "node_modules/resp-modifier/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "dependencies": { "lowercase-keys": "^1.0.0" } }, "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/ret": { @@ -23507,10 +25013,9 @@ } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "optional": true, + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "engines": { "node": ">= 4" } @@ -23831,9 +25336,9 @@ "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" }, "node_modules/router": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz", - "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", + "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", "dependencies": { "array-flatten": "3.0.0", "debug": "2.6.9", @@ -23863,20 +25368,7 @@ "node_modules/router/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/router/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/run-async": { "version": "2.4.1", @@ -23911,7 +25403,7 @@ "node_modules/rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" }, "node_modules/rx-lite": { "version": "3.1.2", @@ -23962,6 +25454,14 @@ "ret": "~0.1.10" } }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -24293,12 +25793,6 @@ "node": ">=0.10.0" } }, - "node_modules/sass-lint/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "node_modules/sass-lint/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -24595,9 +26089,9 @@ } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -24705,7 +26199,7 @@ "node_modules/send/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -24719,12 +26213,12 @@ "node_modules/send/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/send/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/setprototypeof": { "version": "1.1.0", @@ -24820,7 +26314,7 @@ "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -24845,7 +26339,7 @@ "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -24859,12 +26353,12 @@ "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", @@ -24874,7 +26368,7 @@ "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { "node": ">= 0.6" } @@ -24896,7 +26390,7 @@ "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" }, "node_modules/set-blocking": { "version": "2.0.0", @@ -24925,15 +26419,10 @@ "node": ">=0.10.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "1.2.0", @@ -25004,14 +26493,14 @@ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" }, "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dependencies": { "is-arrayish": "^0.3.1" } @@ -25094,9 +26583,9 @@ } }, "node_modules/smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -25241,34 +26730,26 @@ "node": ">=10.0.0" } }, - "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, "node_modules/socket.io-client": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", - "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", + "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", "dependencies": { - "@socket.io/component-emitter": "~3.0.0", - "backo2": "~1.0.2", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.1.1", - "parseuri": "0.0.6", - "socket.io-parser": "~4.1.1" + "engine.io-client": "~6.2.3", + "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", - "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", + "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", "dependencies": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" }, "engines": { @@ -25294,12 +26775,12 @@ "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" }, "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", @@ -25307,18 +26788,50 @@ } }, "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -25328,9 +26841,9 @@ } }, "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" } @@ -25489,21 +27002,31 @@ } }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "optional": true, "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, "node_modules/stack-trace": { "version": "0.0.10", @@ -25554,6 +27077,11 @@ "node": ">= 0.6" } }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + }, "node_modules/stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -25567,6 +27095,14 @@ "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" }, + "node_modules/stream-json": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", @@ -25575,7 +27111,7 @@ "node_modules/stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", "dependencies": { "commander": "^2.2.0", "limiter": "^1.0.5" @@ -25593,60 +27129,34 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/streamroller": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", - "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", + "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", "dev": true, "dependencies": { - "async": "^2.6.2", - "date-format": "^2.0.0", - "debug": "^3.2.6", - "fs-extra": "^7.0.1", - "lodash": "^4.17.14" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">=6.0" - } - }, - "node_modules/streamroller/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" + "node": ">=8.0" } }, "node_modules/streamroller/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/streamroller/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "ms": "2.1.2" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/string_decoder": { @@ -25657,26 +27167,39 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" }, - "node_modules/string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/string-width": { + "node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25686,6 +27209,27 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -25769,6 +27313,28 @@ "node": ">=0.10.0" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -25813,7 +27379,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -25899,96 +27464,117 @@ } }, "node_modules/superstatic": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-7.1.0.tgz", - "integrity": "sha512-yBU8iw07nM3Bu4jFc8lnKwLey0cj61OaGmFJZcYC2X+kEpXVmXzERJ3OTAHZAESe1OTeNIuWadt81U5IULGGAA==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-9.0.3.tgz", + "integrity": "sha512-e/tmW0bsnQ/33ivK6y3CapJT0Ovy4pk/ohNPGhIAGU2oasoNLRQ1cv6enua09NU9w6Y0H/fBu07cjzuiWvLXxw==", "dependencies": { "basic-auth-connect": "^1.0.0", - "chalk": "^1.1.3", - "compare-semver": "^1.0.0", + "commander": "^10.0.0", "compression": "^1.7.0", - "connect": "^3.6.2", + "connect": "^3.7.0", "destroy": "^1.0.4", "fast-url-parser": "^1.1.3", - "fs-extra": "^8.1.0", "glob-slasher": "^1.0.1", - "home-dir": "^1.0.0", "is-url": "^1.2.2", "join-path": "^1.1.1", "lodash": "^4.17.19", - "mime-types": "^2.1.16", - "minimatch": "^3.0.4", + "mime-types": "^2.1.35", + "minimatch": "^6.1.6", "morgan": "^1.8.2", - "nash": "^3.0.0", "on-finished": "^2.2.0", "on-headers": "^1.0.0", "path-to-regexp": "^1.8.0", "router": "^1.3.1", - "rsvp": "^4.8.5", - "string-length": "^1.0.0", - "update-notifier": "^4.1.1" + "update-notifier-cjs": "^5.1.6" }, "bin": { - "superstatic": "bin/server" + "superstatic": "lib/bin/server.js" }, "engines": { - "node": ">= 8.6.0" + "node": "^14.18.0 || >=16.4.0" }, "optionalDependencies": { - "re2": "^1.15.8" + "re2": "^1.17.7" } }, - "node_modules/superstatic/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" + "node_modules/superstatic/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/superstatic/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, + "node_modules/superstatic/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, - "node_modules/superstatic/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/superstatic/node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dependencies": { - "color-name": "~1.1.4" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.10.0" } }, - "node_modules/superstatic/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/superstatic/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/superstatic/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/superstatic/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, "node_modules/superstatic/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/superstatic/node_modules/minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/superstatic/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/superstatic/node_modules/path-to-regexp": { "version": "1.8.0", @@ -25998,67 +27584,46 @@ "isarray": "0.0.1" } }, - "node_modules/superstatic/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "node_modules/superstatic/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { - "node": ">=0.8.0" + "node": ">= 0.6" } }, - "node_modules/superstatic/node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "node": ">=4" } }, - "node_modules/superstatic/node_modules/update-notifier/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dependencies": { - "color-convert": "^2.0.1" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/superstatic/node_modules/update-notifier/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, - "node_modules/superstatic/node_modules/update-notifier/node_modules/supports-color": { + "node_modules/supports-hyperlinks/node_modules/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==", @@ -26069,37 +27634,6 @@ "node": ">=8" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "dependencies": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", @@ -26228,7 +27762,7 @@ "node_modules/symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==", "engines": { "node": ">=0.10.0" } @@ -26294,20 +27828,19 @@ } }, "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=4.5" + "node": ">=10" } }, "node_modules/tar-fs": { @@ -26337,35 +27870,51 @@ "node": ">=6" } }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/tar/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/tar/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/tar/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/tcp-port-used": { "version": "1.0.2", @@ -26415,17 +27964,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", @@ -26492,7 +28030,7 @@ "node_modules/tfunk/node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "engines": { "node": ">=0.10.0" } @@ -26500,7 +28038,7 @@ "node_modules/tfunk/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -26515,7 +28053,7 @@ "node_modules/tfunk/node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "engines": { "node": ">=0.8.0" } @@ -26548,11 +28086,6 @@ "xtend": "~4.0.0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/through2/node_modules/process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -26592,15 +28125,6 @@ "node": ">=0.10.0" } }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, "node_modules/timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", @@ -26629,12 +28153,6 @@ "node": ">=0.10.0" } }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -26669,6 +28187,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, "engines": { "node": ">=6" } @@ -26732,11 +28251,6 @@ "node": ">= 0.10" } }, - "node_modules/to-through/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/to-through/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -26811,9 +28325,9 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } @@ -26853,14 +28367,6 @@ "resolved": "https://registry.npmjs.org/transfob/-/transfob-1.0.0.tgz", "integrity": "sha1-x/wnpbVDCtSGJnrmZtkj90oKsyA=" }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "engines": { - "node": "*" - } - }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -26887,9 +28393,12 @@ } }, "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/trough": { "version": "1.0.5", @@ -26960,21 +28469,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "node_modules/tweetsodium": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tweetsodium/-/tweetsodium-0.0.5.tgz", - "integrity": "sha512-T3aXZtx7KqQbutTtBfn+P5By3HdBuB1eCoGviIrRJV2sXeToxv2X2cv5RvYqgG26PSnN5m3fYixds22Gkfd11w==", - "deprecated": "tweetsodium is deprecated and unmaintained. Please consider using libsodium.js, maintained by the same author as libsodium: https://github.com/jedisct1/libsodium.js", - "dependencies": { - "blakejs": "^1.1.0", - "tweetnacl": "^1.0.1" - } - }, - "node_modules/tweetsodium/node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -27038,10 +28532,9 @@ } }, "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true, + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -27077,7 +28570,6 @@ "version": "3.13.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", - "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" }, @@ -27090,12 +28582,6 @@ "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.1.0.tgz", "integrity": "sha512-o0QVGuFg24FK765Qdd5kk0zU/U4dEsCtN/GSiwNI9i8xsSVtjIAOdTaVhLwZ1nrbWxFVMxNDDl+9fednsOMsBw==" }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -27128,6 +28614,11 @@ "node": ">=0.10.0" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "node_modules/undertaker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", @@ -27251,21 +28742,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/unified-engine/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unified-lint-rule": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", @@ -27324,21 +28800,27 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" }, "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "optional": true, "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "optional": true, "dependencies": { "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-stream": { @@ -27473,13 +28955,23 @@ } }, "node_modules/universal-analytics": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", - "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.5.3.tgz", + "integrity": "sha512-HXSMyIcf2XTvwZ6ZZQLfxfViRm/yTGoRgDeTbojtq6rezeyKB0sTBcKH2fhddnteAHRcHiKgr/ACpbgjGOC6RQ==", "dependencies": { - "debug": "^4.1.1", - "request": "^2.88.2", - "uuid": "^3.0.0" + "debug": "^4.3.1", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=12.18.2" + } + }, + "node_modules/universal-analytics/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/universal-user-agent": { @@ -27553,11 +29045,6 @@ "node": ">=0.10.0" } }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/untildify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", @@ -27570,60 +29057,6 @@ "node": ">=0.10.0" } }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - }, - "node_modules/unzipper/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -27637,6 +29070,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -27660,7 +29094,33 @@ "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/update-notifier/node_modules/ansi-styles": { + "node_modules/update-notifier-cjs": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/update-notifier-cjs/-/update-notifier-cjs-5.1.6.tgz", + "integrity": "sha512-wgxdSBWv3x/YpMzsWz5G4p4ec7JWD0HCl8W6bmNB6E5Gwo+1ym5oN4hiXpLf0mPySVEJEIsYlkshnplkg2OP9A==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "isomorphic-fetch": "^3.0.0", + "pupa": "^2.1.1", + "registry-auth-token": "^5.0.1", + "registry-url": "^5.1.0", + "semver": "^7.3.7", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/update-notifier-cjs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -27674,42 +29134,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "node_modules/update-notifier-cjs/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -27721,7 +29149,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/update-notifier/node_modules/color-convert": { + "node_modules/update-notifier-cjs/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -27732,26 +29160,12 @@ "node": ">=7.0.0" } }, - "node_modules/update-notifier/node_modules/color-name": { + "node_modules/update-notifier-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/update-notifier/node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/has-flag": { + "node_modules/update-notifier-cjs/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -27759,44 +29173,82 @@ "node": ">=8" } }, - "node_modules/update-notifier/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "node_modules/update-notifier-cjs/node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, "engines": { - "node": ">=10" + "node": ">=14" } }, - "node_modules/update-notifier/node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/update-notifier-cjs/node_modules/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==", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/update-notifier/node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "node_modules/update-notifier/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/update-notifier/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/update-notifier/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/update-notifier/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/update-notifier/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -27805,6 +29257,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==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -27829,12 +29282,13 @@ "node_modules/url-join": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" + "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==" }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "dependencies": { "prepend-http": "^2.0.0" }, @@ -27862,16 +29316,6 @@ "node": ">=0.10.0" } }, - "node_modules/useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "dependencies": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, "node_modules/utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -27971,7 +29415,7 @@ "node_modules/valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -28224,11 +29668,6 @@ "node": ">= 0.10" } }, - "node_modules/vinyl-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/vinyl-fs/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -28312,32 +29751,230 @@ "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.0.tgz", + "integrity": "sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w==" }, "node_modules/webdev-infra": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/webdev-infra/-/webdev-infra-1.0.31.tgz", - "integrity": "sha512-Z+8Z4UB8SjJJDX2FRdmNBuGlQ1ezcm37s1kCgwI2IczryGDqgP1Soxa5idPOfFwbOPh/wyh2hO3EQTlgzAkxZg==", + "version": "1.0.54", + "resolved": "https://registry.npmjs.org/webdev-infra/-/webdev-infra-1.0.54.tgz", + "integrity": "sha512-RDNUe5ttd8L2Kxd9bfGOa8NukevvTQub6LGtdaljiUx69ignK2uQnkOGdwK8TFM03RisXFgpWG54puuOdZbkrg==", "dependencies": { + "@11ty/eleventy": "1.0.2", + "@11ty/eleventy-cache-assets": "^2.3.0", "@imgix/js-core": "^3.1.3", "@justinribeiro/lite-youtube": "^0.9.1", + "@mdn/browser-compat-data": "5.2.x", + "@swc/html": "0.0.18", + "async-transforms": "^1.0.9", "browser-media-mime-type": "^1.0.0", + "chalk": "4.1.2", "common-tags": "^1.8.0", + "csso": "5.0.5", + "express": "4.18.2", + "fast-glob": "3.2.12", + "js-yaml": "4.1.0", "lit-element": "^2.5.1", + "lodash.get": "4.4.2", + "lodash.set": "4.3.2", "markdown-it": "^12.3.2", + "node-mocks-http": "1.12.1", + "nunjucks": "3.2.3", + "piscina": "^3.2.0", + "purgecss": "5.0.0", "querystring": "^0.2.1", "striptags": "^3.1.1" }, "engines": { - "node": "14.x" + "node": ">=14" + }, + "peerDependencies": { + "@mdn/browser-compat-data": "5.2.x" + }, + "peerDependenciesMeta": { + "@mdn/browser-compat-data": { + "optional": false + } + } + }, + "node_modules/webdev-infra/node_modules/@mdn/browser-compat-data": { + "version": "5.2.67", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.67.tgz", + "integrity": "sha512-AoLSQvglknsEyYoDHbDMGvMVt78PopMz4Kzzp+cQNlge0zGXn+QtwmIizAU+n0htMXSjNFfQOk2GgpQIrOZu0w==" + }, + "node_modules/webdev-infra/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/webdev-infra/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/webdev-infra/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webdev-infra/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/webdev-infra/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/webdev-infra/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/webdev-infra/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/webdev-infra/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/webdev-infra/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/webdev-infra/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webdev-infra/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/webdev-infra/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/webdev-infra/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "node_modules/webdev-infra/node_modules/minimatch": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.4.tgz", + "integrity": "sha512-U0iNYXt9wALljzfnGkhFSy5sAC6/SCR3JrHrlsdJz4kF8MvhTRQNiC59iUi1iqsitV7abrNAJWElVL9pdnoUgw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webdev-infra/node_modules/purgecss": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-5.0.0.tgz", + "integrity": "sha512-RAnuxrGuVyLLTr8uMbKaxDRGWMgK5CCYDfRyUNNcaz5P3kGgD2b7ymQGYEyo2ST7Tl/ScwFgf5l3slKMxHSbrw==", + "dependencies": { + "commander": "^9.0.0", + "glob": "^8.0.3", + "postcss": "^8.4.4", + "postcss-selector-parser": "^6.0.7" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/webdev-infra/node_modules/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/webidl-conversions": { @@ -28366,6 +30003,11 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -28416,16 +30058,11 @@ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", "dev": true }, - "node_modules/wicg-inert": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", - "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" - }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "devOptional": true, + "dev": true, "dependencies": { "string-width": "^1.0.2 || 2" } @@ -28434,7 +30071,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "devOptional": true, + "dev": true, "engines": { "node": ">=4" } @@ -28443,7 +30080,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "devOptional": true, + "dev": true, "engines": { "node": ">=4" } @@ -28452,7 +30089,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "devOptional": true, + "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -28465,7 +30102,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "devOptional": true, + "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, @@ -28485,73 +30122,39 @@ } }, "node_modules/winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", + "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", "dependencies": { + "@colors/colors": "1.5.0", "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "winston-transport": "^4.5.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", "dependencies": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" }, "engines": { "node": ">= 6.4.0" } }, - "node_modules/winston-transport/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/winston-transport/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/winston-transport/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/winston/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, "node_modules/with": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", @@ -28595,6 +30198,78 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -28713,6 +30388,11 @@ "node": ">=8" } }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, "node_modules/xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", @@ -28729,14 +30409,6 @@ "node": ">=0.4.0" } }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "engines": { - "node": "*" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -28762,6 +30434,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, "engines": { "node": ">= 6" } @@ -28787,17 +30460,17 @@ } }, "node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" @@ -28980,10 +30653,42 @@ "decamelize": "^1.2.0" } }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { "node": ">=12" } @@ -28998,16 +30703,10 @@ "fd-slicer": "~1.1.0" } }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -29016,17 +30715,67 @@ } }, "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" }, "engines": { "node": ">= 10" } + }, + "node_modules/zip-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zip-stream/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } } }, "dependencies": { @@ -29036,30 +30785,30 @@ "integrity": "sha512-5R+DsT9LJ9tXiSQ4y+KLFppCkQyXhzAm1AIuBWE/sbU0hSXY5pkhoqQYEcPJQFg/nglL+wD55iv2j+7O96UAvg==" }, "@11ty/eleventy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-1.0.1.tgz", - "integrity": "sha512-2fJDHVBkRr1SB7CqBexwoLdiOGUE0f22O+Ie1TT/FI65XQZWshgHVZzvmZfmtKvQW4qtaC/FuJG3wMxkXfel7w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-1.0.2.tgz", + "integrity": "sha512-03ER4zukR6BgwppI5DHRE11lc+8B0fWsBrqacVWo3o49QkdEFXnEWjhyI9qd9LrPlgQHK2/MYyxuOvNwecyCLQ==", "requires": { "@11ty/dependency-tree": "^2.0.1", "@11ty/eleventy-utils": "^1.0.1", "@iarna/toml": "^2.2.5", "@sindresorhus/slugify": "^1.1.2", - "browser-sync": "^2.27.9", + "browser-sync": "^2.27.10", "chokidar": "^3.5.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "dependency-graph": "^0.11.0", - "ejs": "^3.1.6", + "ejs": "^3.1.8", "fast-glob": "^3.2.11", "graceful-fs": "^4.2.10", "gray-matter": "^4.0.3", "hamljs": "^0.6.2", "handlebars": "^4.7.7", "is-glob": "^4.0.3", - "kleur": "^4.1.4 ", - "liquidjs": "^9.36.1", + "kleur": "^4.1.5", + "liquidjs": "^9.40.0", "lodash": "^4.17.21", - "luxon": "^2.3.2", + "luxon": "^2.5.0", "markdown-it": "^12.3.2", "minimist": "^1.2.6", "moo": "^0.5.1", @@ -29067,7 +30816,7 @@ "mustache": "^4.2.0", "normalize-path": "^3.0.0", "nunjucks": "^3.2.3", - "path-to-regexp": "^6.2.0", + "path-to-regexp": "^6.2.1", "please-upgrade-node": "^3.2.0", "pretty": "^2.0.0", "pug": "^3.0.2", @@ -29085,14 +30834,14 @@ } }, "luxon": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.4.0.tgz", - "integrity": "sha512-w+NAwWOUL5hO0SgwOHsMBAmZ15SoknmQXhSO0hIbJCAmPKSsGeK8MlmhYh2w6Iib38IxN2M+/ooXWLbeis7GuA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz", + "integrity": "sha512-Yg7/RDp4nedqmLgyH0LwgGRvMEKVzKbUdkBYyCosbHgJ+kaOUx0qzSiSatVc3DFygnirTPYnMM2P5dg2uH1WvA==" }, "path-to-regexp": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", - "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" } } }, @@ -29136,12 +30885,30 @@ } }, "@actions/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", - "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", + "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", "dev": true, "requires": { - "@actions/http-client": "^1.0.11" + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "@actions/http-client": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", + "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", + "dev": true, + "requires": { + "tunnel": "^0.0.6" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } } }, "@actions/github": { @@ -29281,9 +31048,9 @@ } }, "@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", "requires": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.6", @@ -29306,6 +31073,11 @@ } } }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" + }, "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", @@ -29499,9 +31271,9 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" }, "@babel/runtime": { "version": "7.14.6", @@ -29563,10 +31335,15 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + }, "@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "requires": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -30118,18 +31895,18 @@ } }, "@google-cloud/paginator": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.5.tgz", - "integrity": "sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", + "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", "requires": { "arrify": "^2.0.0", "extend": "^3.0.2" } }, "@google-cloud/precise-date": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.3.tgz", - "integrity": "sha512-+SDJ3ZvGkF7hzo6BGa8ZqeK3F6Z4+S+KviC9oOK+XCs3tfMyJCh/4j93XIWINgMMDIh9BgEvlw4306VxlXIlYA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-3.0.1.tgz", + "integrity": "sha512-crK2rgNFfvLoSgcKJY7ZBOLW91IimVNmPfi1CL+kMTf78pTJYd29XqEVedAeBu4DwCJc0EDIp1MpctLgoPq+Uw==" }, "@google-cloud/projectify": { "version": "2.1.0", @@ -30142,25 +31919,369 @@ "integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==" }, "@google-cloud/pubsub": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-2.15.1.tgz", - "integrity": "sha512-avBYmN1n9BsY8RzntkEP3SG1gSfEm0iOoUwoWjtrmWAk+6QZw0C093HJCGClteo+EwIQDhgyn2cXc5QInegSeg==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@google-cloud/pubsub/-/pubsub-3.7.5.tgz", + "integrity": "sha512-4Qrry4vIToth5mqduVslltWVsyb7DR8OhnkBA3F7XiE0jgQsiuUfwp/RB2F559aXnRbwcfmjvP4jSuEaGcjrCQ==", "requires": { - "@google-cloud/paginator": "^3.0.0", - "@google-cloud/precise-date": "^2.0.0", - "@google-cloud/projectify": "^2.0.0", + "@google-cloud/paginator": "^4.0.0", + "@google-cloud/precise-date": "^3.0.0", + "@google-cloud/projectify": "^3.0.0", "@google-cloud/promisify": "^2.0.0", - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/semantic-conventions": "^0.22.0", + "@opentelemetry/api": "^1.6.0", + "@opentelemetry/semantic-conventions": "~1.3.0", "@types/duplexify": "^3.6.0", "@types/long": "^4.0.0", "arrify": "^2.0.0", "extend": "^3.0.2", - "google-auth-library": "^7.0.0", - "google-gax": "^2.12.0", + "google-auth-library": "^8.0.2", + "google-gax": "^3.6.1", + "heap-js": "^2.2.0", "is-stream-ended": "^0.1.4", "lodash.snakecase": "^4.1.1", "p-defer": "^3.0.0" + }, + "dependencies": { + "@google-cloud/projectify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==" + }, + "@grpc/grpc-js": { + "version": "1.8.21", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", + "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "requires": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.4", + "yargs": "^17.7.2" + } + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + } + }, + "gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "requires": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "google-gax": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", + "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "requires": { + "@grpc/grpc-js": "~1.8.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.2.4", + "protobufjs-cli": "1.1.1", + "retry-request": "^5.0.0" + } + }, + "google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "requires": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "proto3-json-serializer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", + "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", + "requires": { + "protobufjs": "^7.0.0" + } + }, + "protobufjs": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, + "protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "requires": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "retry-request": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", + "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", + "requires": { + "debug": "^4.1.1", + "extend": "^3.0.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": 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==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "@google-cloud/secret-manager": { @@ -30238,6 +32359,71 @@ "md5": "^2.2.1" } }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "optional": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "optional": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "optional": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "optional": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "optional": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "optional": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "optional": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -30248,6 +32434,14 @@ "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" }, + "@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "requires": { + "lodash": "^4.17.21" + } + }, "@justinribeiro/lite-youtube": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@justinribeiro/lite-youtube/-/lite-youtube-0.9.2.tgz", @@ -30259,9 +32453,9 @@ "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" }, "@mdn/browser-compat-data": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.1.5.tgz", - "integrity": "sha512-B86Pr/KsXRl/AG68KySjBWjrS3JlzhA0otCHnkDAfnePEveOTa6j//6pWp9RZvDcsAL1DJTvADcTkt2xX7xjDw==" + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.9.tgz", + "integrity": "sha512-J7lLtHMEizYbI5T0Xlqpg1JXCz9JegZBeb7y3v/Nm8ScRw8TL9v3n+I3g1TFm+bLrRtwA33FKwX5znDwz+WzAQ==" }, "@minify-html/node": { "version": "0.9.2", @@ -30294,22 +32488,13 @@ "fastq": "^1.6.0" } }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "optional": true, "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true - } + "semver": "^7.3.5" } }, "@oclif/command": { @@ -30687,14 +32872,14 @@ } }, "@opentelemetry/api": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.1.tgz", - "integrity": "sha512-H5Djcc2txGAINgf3TNaq4yFofYSIK3722PM89S/3R8FuI/eqi1UscajlXk7EBkG9s2pxss/q6SHlpturaavXaw==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.6.0.tgz", + "integrity": "sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==" }, "@opentelemetry/semantic-conventions": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.22.0.tgz", - "integrity": "sha512-t4fKikazahwNKmwD+CE/icHyuZldWvNMupJhjxdk9T/KxHFx3zCGjHT3MKavwYP6abzgAAm5WwzD1oHlmj7dyg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.1.tgz", + "integrity": "sha512-wU5J8rUoo32oSef/rFpOT1HIjLjAv3qIDHkw1QIhODV3OpAVHi5oVzlouozg9obUmZKtbZ0qUe/m7FP0y0yBzA==" }, "@percy/cli": { "version": "1.0.0-beta.71", @@ -30995,6 +33180,35 @@ "@percy/logger": "1.0.0-beta.71" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "requires": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -31102,7 +33316,8 @@ "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true }, "@sindresorhus/slugify": { "version": "1.1.2", @@ -31142,14 +33357,113 @@ "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" }, "@socket.io/component-emitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", - "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "@swc/html": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html/-/html-0.0.18.tgz", + "integrity": "sha512-EiA134Oa5sneQqMfsWcEcDaEVX1Grtb82S6nUqPUI/t7LQzg4lO7Wcp3Fqy2UwpVsL4otWM03gD65qEr5ZPf2A==", + "requires": { + "@swc/html-android-arm-eabi": "0.0.18", + "@swc/html-android-arm64": "0.0.18", + "@swc/html-darwin-arm64": "0.0.18", + "@swc/html-darwin-x64": "0.0.18", + "@swc/html-freebsd-x64": "0.0.18", + "@swc/html-linux-arm-gnueabihf": "0.0.18", + "@swc/html-linux-arm64-gnu": "0.0.18", + "@swc/html-linux-arm64-musl": "0.0.18", + "@swc/html-linux-x64-gnu": "0.0.18", + "@swc/html-linux-x64-musl": "0.0.18", + "@swc/html-win32-arm64-msvc": "0.0.18", + "@swc/html-win32-ia32-msvc": "0.0.18", + "@swc/html-win32-x64-msvc": "0.0.18" + } + }, + "@swc/html-android-arm-eabi": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-android-arm-eabi/-/html-android-arm-eabi-0.0.18.tgz", + "integrity": "sha512-2/76+aJnzgoE2U+gaKfj/2Qbkx7OHTJyfP7qFdfvMb6zQsc6gQMqp3KDPXK3wmt4aPTifryl/QzIBAYFVyGXvQ==", + "optional": true + }, + "@swc/html-android-arm64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-android-arm64/-/html-android-arm64-0.0.18.tgz", + "integrity": "sha512-7bVCnuJvqPUghLaBgWuZUG4fayR8UZCcnBb9PAktL2a/r97KlKgHOwN7Z9T5d7PdXu3af3x3jN7c2gSKe1Zpmw==", + "optional": true + }, + "@swc/html-darwin-arm64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-0.0.18.tgz", + "integrity": "sha512-fBHsO5+qfxvKulFuEIpoo32UOPN1N3478lRfcimENp9Cu0wWe4coLZVGKMaDdRJpMR0U8DEzeybrocpns89R2Q==", + "optional": true + }, + "@swc/html-darwin-x64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-0.0.18.tgz", + "integrity": "sha512-5hFbhf1ghUW1uZq2yHMp9GewmSf/1IAH5x7MlC+LhuBjEFDlTyY9ax2fK5YVwZwbMJh4LfgtN7ydFVUfNvHB1g==", + "optional": true + }, + "@swc/html-freebsd-x64": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-freebsd-x64/-/html-freebsd-x64-0.0.18.tgz", + "integrity": "sha512-AHBEiIqyy4FD2yUxtfPG5yopXh7tDCKV1OSXavdaAqikx8EwG3ok85WsgbPPBAfZMttHkp/mvYmxE2MZE1dhDQ==", + "optional": true + }, + "@swc/html-linux-arm-gnueabihf": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-0.0.18.tgz", + "integrity": "sha512-en0EokMYRY6kB/BqGDwGY56xe7bPbN+I6VhHho1FTy0UPuh8FhYDpev/J7qgmwVlh6Ch27SDzGF8ly0tXbjQWA==", + "optional": true + }, + "@swc/html-linux-arm64-gnu": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-0.0.18.tgz", + "integrity": "sha512-gXsdpv6RVEhZYWj4CV4t9D+DWQ4iPx1fFt2ICxtvbo6dkuwNOszr/CoF+K+YwoE2DGUInmD8o4VT915n92NABQ==", + "optional": true + }, + "@swc/html-linux-arm64-musl": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-0.0.18.tgz", + "integrity": "sha512-im/vFj2OOG+yqNfn4AMxOolo3b9L3QfJY0sJ9BOFqXDGzQjj6DYfNV03HpRHtP8+LKlDAcbmaH9K84PN1U3xZg==", + "optional": true + }, + "@swc/html-linux-x64-gnu": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-0.0.18.tgz", + "integrity": "sha512-OCpMpFmeJTWFaFo6BkcTfHU5kx1AIU/Ad9g3LpzFyr5a/oBb1UCUVuV2Y6kUOkj93JmepsZnRkb9cr43cR6Hrg==", + "optional": true + }, + "@swc/html-linux-x64-musl": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-0.0.18.tgz", + "integrity": "sha512-D0aiWk6yXQSk05ZH2gKrclT5VA5iAQfKaujmzQr+MZ+iSdMpCp+BHNi4xPuOCEnAbQ38qv6PfSY+zuszjC/utA==", + "optional": true + }, + "@swc/html-win32-arm64-msvc": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-0.0.18.tgz", + "integrity": "sha512-8dE0Q8g5pIP+u8aFZmKZzud7/JH1evcRLLEktdICDj5cO67eC8yTfxpQ8NwyAmf6VFVaOaCELSjX2RaYYsEViw==", + "optional": true + }, + "@swc/html-win32-ia32-msvc": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-0.0.18.tgz", + "integrity": "sha512-HxuBUmDc7xuTn7JD+VU7LfxP5X1XzgBbskomb8/9yoZglqpPNT200DIf8/JbP9Kv692VP5ACNIpJ6jpCfbF1kA==", + "optional": true + }, + "@swc/html-win32-x64-msvc": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-0.0.18.tgz", + "integrity": "sha512-pZ93lqOtFdalit3EGinbbmFdT+sACo+QG6uiVsAU6tynjkJjeJxKq3TC6D3m8QQDRnEe8BViTwoEAyZ00ouuhA==", + "optional": true }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "requires": { "defer-to-connect": "^1.0.1" } @@ -31159,13 +33473,10 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, - "@types/archiver": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.1.1.tgz", - "integrity": "sha512-heuaCk0YH5m274NOLSi66H1zX6GtZoMsdE6TYFcpFFjBjg0FoU4i4/M/a/kNlgNg26Xk3g364mNOYe1JaiEPOQ==", - "requires": { - "@types/glob": "*" - } + "@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" }, "@types/chai": { "version": "4.3.0", @@ -31189,9 +33500,9 @@ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "@types/duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-5zOA53RUlzN74bvrSGwjudssD9F3a797sDZQkiYpUOxW+WHaXTCPz4/d5Dgi6FKnOqZ2CpaTo0DhgIfsXAOE/A==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.2.tgz", + "integrity": "sha512-2/0R4riyD/OS6GNJLIhwRaj+8ZbxHUZl3I0a3PHwH7zhZEEAACUWjzaBrY1qVWckueZ5pouDRP0UxX6P8Hzfww==", "requires": { "@types/node": "*" } @@ -31226,18 +33537,18 @@ "@types/node": "*" } }, - "@types/google.analytics": { - "version": "0.0.40", - "resolved": "https://registry.npmjs.org/@types/google.analytics/-/google.analytics-0.0.40.tgz", - "integrity": "sha512-R3HpnLkqmKxhUAf8kIVvDVGJqPtaaZlW4yowNwjOZUTmYUQEgHh8Nh5wkSXKMroNAuQM8gbXJHmNbbgA8tdb7Q==", - "dev": true - }, "@types/grecaptcha": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/grecaptcha/-/grecaptcha-3.0.3.tgz", "integrity": "sha512-osLqWRzsRsDtCfiCl1lbtUY8ANGCQsG/hhht3E7g1pVT7fD5SXgAg53S2grKjjSkXcm0fvMDbhUeL9NyAJvzGQ==", "dev": true }, + "@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "dev": true + }, "@types/gulp": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", @@ -31249,12 +33560,6 @@ "chokidar": "^3.3.1" } }, - "@types/highlight.js": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", - "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", - "dev": true - }, "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -31269,8 +33574,7 @@ "@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", - "dev": true + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" }, "@types/long": { "version": "4.0.1", @@ -31278,12 +33582,10 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/markdown-it": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.3.tgz", - "integrity": "sha512-MIhDl8e64vKJv3GX8irH5I/cNarX18edtdfg/+lbS92mArVl5VeaL4WKf8i06Zt2vsNuze2Vc8ELqrjoWO6hDQ==", - "dev": true, + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", "requires": { - "@types/highlight.js": "^9.7.0", "@types/linkify-it": "*", "@types/mdurl": "*" } @@ -31291,8 +33593,7 @@ "@types/mdurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" }, "@types/minimatch": { "version": "3.0.5", @@ -31362,6 +33663,20 @@ "@types/node": "*" } }, + "@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "@types/triple-beam": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", + "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==" + }, "@types/trusted-types": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", @@ -31569,12 +33884,12 @@ } }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -31586,15 +33901,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -31604,13 +33912,11 @@ } }, "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "optional": true, "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", "humanize-ms": "^1.2.1" } }, @@ -31618,7 +33924,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, + "devOptional": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -31628,7 +33934,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true + "devOptional": true } } }, @@ -31643,6 +33949,32 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, "ajv-keywords": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", @@ -31720,9 +34052,19 @@ } }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + } + } }, "ansi-gray": { "version": "0.1.1", @@ -31753,7 +34095,7 @@ "ansicolors": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" }, "any-promise": { "version": "0.1.0", @@ -31778,30 +34120,23 @@ } }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "optional": true }, "archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "requires": { "archiver-utils": "^2.1.0", - "async": "^3.2.0", + "async": "^3.2.4", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", + "readdir-glob": "^1.1.2", "tar-stream": "^2.2.0", "zip-stream": "^4.1.0" - }, - "dependencies": { - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - } } }, "archiver-utils": { @@ -31821,15 +34156,10 @@ "readable-stream": "^2.0.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -31861,51 +34191,13 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "optional": true, "requires": { "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "readable-stream": "^3.6.0" } }, "argparse": { @@ -32040,12 +34332,6 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -32054,7 +34340,7 @@ "as-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", - "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc=" + "integrity": "sha512-1Sd1LrodN0XYxYeZcN1J4xYZvmvTwD5tDWaPUGPIzH1mFsmzsPnVtd2exWhecMjtZk/wYWjNZJiD3b1SLCeJqg==" }, "asap": { "version": "2.0.6", @@ -32105,9 +34391,9 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "async-done": { "version": "1.3.2", @@ -32128,13 +34414,12 @@ "async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=" + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==" }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true + "async-lock": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.3.2.tgz", + "integrity": "sha512-phnXdS3RP7PPcmP6NWWzWMU0sLTeyvtZCxBPpZdkYE3seGLKSQZs9FrmVO/qwypq98FUtWWUEYxziLkdGk5nnA==" }, "async-settle": { "version": "1.0.0", @@ -32144,6 +34429,11 @@ "async-done": "^1.2.2" } }, + "async-transforms": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/async-transforms/-/async-transforms-1.0.9.tgz", + "integrity": "sha512-PCZEV8XLKoJTYovmfbXN5bZU2b8jf2d22hM7gl3xYmNRsVBt0khvHsgOdbd8UZj0xM9Tv1eWt5qrzeThgR2Alw==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -32269,11 +34559,6 @@ "now-and-later": "^2.0.0" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, "bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -32363,12 +34648,17 @@ "basic-auth-connect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", - "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=" + "integrity": "sha512-kiV+/DTgVro4aZifY/hwRwALBISViL5NP4aReaR2EVJEObpbUBHIkdJh/YpcoEiYt7nBodZ6U2ajZeZvSxUCCg==" + }, + "basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==" }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -32384,20 +34674,6 @@ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -32408,15 +34684,6 @@ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -32441,38 +34708,28 @@ "readable-stream": "^3.4.0" } }, - "blakejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", - "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -32483,48 +34740,28 @@ "ms": "2.0.0" } }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "ee-first": "1.1.1" } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -32534,18 +34771,18 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "requires": { "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { "ansi-styles": { @@ -32556,10 +34793,15 @@ "color-convert": "^2.0.1" } }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -32590,11 +34832,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, @@ -32627,12 +34864,12 @@ "dev": true }, "browser-sync": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.9.tgz", - "integrity": "sha512-3zBtggcaZIeU9so4ja9yxk7/CZu9B3DOL6zkxFpzHCHsQmkGBPVXg61jItbeoa+WXgNLnr1sYES/2yQwyEZ2+w==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.11.tgz", + "integrity": "sha512-U5f9u97OYJH66T0MGWWzG9rOQTW6ZmDMj97vsmtqwNS03JAwdLVES8eel2lD3rvAqQCNAFqaJ74NMacBI57vJg==", "requires": { - "browser-sync-client": "^2.27.9", - "browser-sync-ui": "^2.27.9", + "browser-sync-client": "^2.27.11", + "browser-sync-ui": "^2.27.11", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^3.5.1", @@ -32649,8 +34886,8 @@ "localtunnel": "^2.0.1", "micromatch": "^4.0.2", "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", + "portscanner": "2.2.0", + "qs": "^6.11.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", @@ -32666,7 +34903,7 @@ "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^3.0.0", @@ -32676,20 +34913,21 @@ } }, "browser-sync-client": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.9.tgz", - "integrity": "sha512-FHW8kydp7FXo6jnX3gXJCpHAHtWNLK0nx839nnK+boMfMI1n4KZd0+DmTxHBsHsF3OHud4V4jwoN8U5HExMIdQ==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.11.tgz", + "integrity": "sha512-okMNfD2NasL/XD1/BclP3onXjhahisk3e/kTQ5HPDT/lLqdBqNDd6QFcjI5I1ak7na2hxKQSLjryql+7fp5gKQ==", "requires": { "etag": "1.8.1", "fresh": "0.5.2", "mitt": "^1.1.3", - "rxjs": "^5.5.6" + "rxjs": "^5.5.6", + "typescript": "^4.6.2" } }, "browser-sync-ui": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.9.tgz", - "integrity": "sha512-rsduR2bRIwFvM8CX6iY/Nu5aWub0WB9zfSYg9Le/RV5N5DEyxJYey0VxdfWCnzDOoelassTDzYQo+r0iJno3qw==", + "version": "2.27.11", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.11.tgz", + "integrity": "sha512-1T/Y8Pp1R68aUL7zVSFq0nxtr258xWd/nTasCAHX2M6EsGaswVOFtXsw3bKqsr35z+J+LfVfOdz1HFLYKxdgrA==", "requires": { "async-each-series": "0.1.1", "connect-history-api-fallback": "^1", @@ -32714,12 +34952,12 @@ "bs-recipes": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=" + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==" }, "bs-snippet-injector": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", - "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=" + "integrity": "sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw==" }, "buffer": { "version": "5.7.1", @@ -32730,22 +34968,6 @@ "ieee754": "^1.1.13" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -32761,36 +34983,20 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - }, "builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "c8": { "version": "7.7.3", @@ -32867,69 +35073,82 @@ } }, "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "optional": true, "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "optional": true, "requires": { - "yallist": "^4.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "optional": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "optional": true }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "optional": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "optional": true } } @@ -32954,6 +35173,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -32967,7 +35187,8 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true } } }, @@ -32981,9 +35202,9 @@ } }, "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" }, "caller-callsite": { "version": "2.0.0", @@ -33001,12 +35222,6 @@ "caller-callsite": "^2.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", @@ -33015,7 +35230,8 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "camelcase-keys": { "version": "6.2.2", @@ -33047,7 +35263,7 @@ "cardinal": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "requires": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -33063,6 +35279,14 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "requires": { + "lodash": "^4.17.15" + } + }, "ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -33083,14 +35307,6 @@ "type-detect": "^4.0.5" } }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -33427,12 +35643,6 @@ } } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -33606,7 +35816,8 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "chrome-launcher": { "version": "0.15.0", @@ -33648,7 +35859,7 @@ "cjson": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", - "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=", + "integrity": "sha512-yKNcXi/Mvi5kb1uK0sahubYiyfUO2EUgOp4NcY9+8NX5Xmc+4yeNogZuLFkpLBBj7/QI9MjRUIuXrV9XOw5kVg==", "requires": { "json-parse-helpfulerror": "^1.0.3" } @@ -33696,36 +35907,23 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, - "cli-color": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", - "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", - "requires": { - "ansi-regex": "^2.1.1", - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.5" - } - }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==" }, "cli-table": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz", - "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", "requires": { "colors": "1.0.3" }, @@ -33733,14 +35931,90 @@ "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" + } + } + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } } } }, "cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true }, "cliui": { "version": "7.0.4", @@ -33781,6 +36055,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -33800,11 +36075,6 @@ "readable-stream": "^2.3.5" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -33881,12 +36151,12 @@ } }, "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" } }, "color-convert": { @@ -33903,9 +36173,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -33924,14 +36194,15 @@ "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true }, "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { - "color": "3.0.x", + "color": "^3.1.3", "text-hex": "1.0.x" } }, @@ -33958,48 +36229,21 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "compare-semver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/compare-semver/-/compare-semver-1.1.0.tgz", - "integrity": "sha1-fAp5onu4C2xplERfgpWCWdPQIVM=", - "requires": { - "semver": "^5.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, "compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "requires": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -34032,7 +36276,7 @@ "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, "debug": { "version": "2.6.9", @@ -34045,7 +36289,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "safe-buffer": { "version": "5.1.2", @@ -34070,11 +36314,6 @@ "typedarray": "^0.0.6" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -34195,7 +36434,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "optional": true }, "console-log-level": { @@ -34213,18 +36452,11 @@ } }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } + "safe-buffer": "5.2.1" } }, "content-type": { @@ -34310,18 +36542,14 @@ } }, "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "requires": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -34348,9 +36576,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "which": { "version": "1.3.1", @@ -34727,13 +36955,10 @@ "cssom": "0.3.x" } }, - "csv-streamify": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/csv-streamify/-/csv-streamify-3.0.4.tgz", - "integrity": "sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho=", - "requires": { - "through2": "2.0.1" - } + "csv-parse": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.0.tgz", + "integrity": "sha512-RxruSK3M4XgzcD7Trm2wEN+SJ26ChIb903+IWxNOcB5q4jT2Cs+hFr6QP39J05EohshRFEvyzEBoZ/466S2sbw==" }, "custom-event": { "version": "1.0.1", @@ -34759,14 +36984,14 @@ } }, "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==" }, "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true }, "debug": { @@ -34809,6 +37034,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -34830,7 +37056,7 @@ "deep-freeze": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=" + "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==" }, "deep-is": { "version": "0.1.3", @@ -34863,9 +37089,9 @@ "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" }, @@ -34873,14 +37099,15 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" } } }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "define-lazy-prop": { "version": "2.0.0", @@ -34933,13 +37160,13 @@ } }, "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" } }, "delayed-stream": { @@ -34950,7 +37177,7 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "optional": true }, "depd": { @@ -34982,7 +37209,7 @@ "dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=" + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==" }, "devtools-protocol": { "version": "0.0.937139", @@ -35120,52 +37347,11 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "duplexify": { "version": "4.1.1", @@ -35187,6 +37373,12 @@ "object.defaults": "^1.1.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "devOptional": true + }, "easy-extender": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", @@ -35249,11 +37441,11 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "requires": { - "jake": "^10.6.1" + "jake": "^10.8.5" } }, "electron-to-chromium": { @@ -35341,19 +37533,15 @@ } }, "engine.io-client": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", - "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.3.tgz", + "integrity": "sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==", "requires": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", + "engine.io-parser": "~5.0.3", "ws": "~8.2.3", - "xmlhttprequest-ssl": "~2.0.0", - "yeast": "0.1.2" + "xmlhttprequest-ssl": "~2.0.0" }, "dependencies": { "ws": { @@ -35558,57 +37746,26 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } } } }, @@ -35976,6 +38133,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, "requires": { "d": "1", "es5-ext": "~0.10.14" @@ -35986,6 +38144,11 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -36018,86 +38181,65 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } } } }, "exegesis": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-2.5.7.tgz", - "integrity": "sha512-Y0gEY3hgoLa80aMUm8rhhlIW3/KWo4uqN5hKJqok2GLh3maZjRLRC+p0gj33Jw3upAOKOXeRgScT5rtRoMyxwQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/exegesis/-/exegesis-4.1.1.tgz", + "integrity": "sha512-PvSqaMOw2absLBgsthtJyVOeCHN4lxQ1dM7ibXb6TfZZJaoXtGELoEAGJRFvdN16+u9kg8oy1okZXRk8VpimWA==", "requires": { "@apidevtools/json-schema-ref-parser": "^9.0.3", - "ajv": "^6.12.2", + "ajv": "^8.3.0", + "ajv-formats": "^2.1.0", "body-parser": "^1.18.3", "content-type": "^1.0.4", "deep-freeze": "0.0.1", "events-listener": "^1.1.0", "glob": "^7.1.3", - "json-ptr": "^2.2.0", + "json-ptr": "^3.0.1", "json-schema-traverse": "^1.0.0", "lodash": "^4.17.11", - "openapi3-ts": "^2.0.1", - "promise-breaker": "^5.0.0", + "openapi3-ts": "^3.1.1", + "promise-breaker": "^6.0.0", "pump": "^3.0.0", "qs": "^6.6.0", "raw-body": "^2.3.3", "semver": "^7.0.0" }, "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "requires": { - "side-channel": "^1.0.4" - } } } }, "exegesis-express": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-2.0.1.tgz", - "integrity": "sha512-8ORl1YRygYGPdR+zcClMqzaU+JQuvdNIw/s0RNwYluxNecEHkDEcXFmO6A5T79p7e48KI8iXJYt6KIn4Z9z4bg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exegesis-express/-/exegesis-express-4.0.0.tgz", + "integrity": "sha512-V2hqwTtYRj0bj43K4MCtm0caD97YWkqOUHFMRCBW5L1x9IjyqOEc7Xa4oQjjiFbeFOSQzzwPV+BzXsQjSz08fw==", "requires": { - "exegesis": "^2.5.7" + "exegesis": "^4.1.0" } }, - "exit-code": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/exit-code/-/exit-code-1.0.2.tgz", - "integrity": "sha1-zhZYEcnxF69qX4gpQLlq5/muzDQ=" - }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -36166,12 +38308,6 @@ "kind-of": "^3.0.2" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", @@ -36200,47 +38336,54 @@ "homedir-polyfill": "^1.0.1" } }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "optional": true + }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, "debug": { "version": "2.6.9", @@ -36250,17 +38393,27 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" } }, @@ -36272,60 +38425,58 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.18.0" } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -36458,9 +38609,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -36479,11 +38630,6 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" - }, "fast-text-encoding": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", @@ -36544,14 +38690,14 @@ } }, "fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } @@ -36572,11 +38718,29 @@ "optional": true }, "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.4.tgz", + "integrity": "sha512-U0iNYXt9wALljzfnGkhFSy5sAC6/SCR3JrHrlsdJz4kF8MvhTRQNiC59iUi1iqsitV7abrNAJWElVL9pdnoUgw==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "filename-regex": { @@ -36825,94 +38989,111 @@ } }, "firebase-tools": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-9.16.0.tgz", - "integrity": "sha512-H/zyDDrQuZKM6ZFyI8t2kDEC+/Ewhk771sM8NLZyEXIQnX5qKAwhi3sJUB+5yrXt+SJQYqUYksBLK6/gqxe9Eg==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-12.6.1.tgz", + "integrity": "sha512-/b6Ix9gSmltmDXJvHDTAe6y8yh7C6f5rjYwlHULAzNDQGZv5S4reIUgc06D7XuAdNK+4gNjy7vZoVVpqJ32J4A==", "requires": { - "@google-cloud/pubsub": "^2.7.0", - "@types/archiver": "^5.1.0", + "@google-cloud/pubsub": "^3.0.1", "abort-controller": "^3.0.0", "ajv": "^6.12.6", "archiver": "^5.0.0", + "async-lock": "1.3.2", "body-parser": "^1.19.0", "chokidar": "^3.0.2", "cjson": "^0.3.1", - "cli-color": "^1.2.0", - "cli-table": "^0.3.1", + "cli-table": "0.3.11", + "colorette": "^2.0.19", "commander": "^4.0.1", "configstore": "^5.0.1", "cors": "^2.8.5", "cross-env": "^5.1.3", - "cross-spawn": "^7.0.1", - "csv-streamify": "^3.0.4", - "dotenv": "^6.1.0", - "exegesis": "^2.5.7", - "exegesis-express": "^2.0.0", - "exit-code": "^1.0.2", + "cross-spawn": "^7.0.3", + "csv-parse": "^5.0.4", + "exegesis": "^4.1.0", + "exegesis-express": "^4.0.0", "express": "^4.16.4", "filesize": "^6.1.0", - "fs-extra": "^5.0.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", "glob": "^7.1.2", - "google-auth-library": "^6.1.3", - "inquirer": "~6.3.1", + "google-auth-library": "^7.11.0", + "inquirer": "^8.2.0", "js-yaml": "^3.13.1", - "JSONStream": "^1.2.1", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.0", "leven": "^3.1.0", + "libsodium-wrappers": "^0.7.10", "lodash": "^4.17.21", - "marked": "^0.7.0", - "marked-terminal": "^3.3.0", + "marked": "^4.0.14", + "marked-terminal": "^5.1.1", "mime": "^2.5.2", "minimatch": "^3.0.4", "morgan": "^1.10.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.7", "open": "^6.3.0", - "ora": "^3.4.0", - "portfinder": "^1.0.23", + "ora": "^5.4.1", + "p-limit": "^3.0.1", + "portfinder": "^1.0.32", "progress": "^2.0.3", - "proxy-agent": "^4.0.0", + "proxy-agent": "^6.3.0", "request": "^2.87.0", + "retry": "^0.13.1", "rimraf": "^3.0.0", - "semver": "^5.7.1", - "superstatic": "^7.1.0", - "tar": "^4.3.0", - "tcp-port-used": "^1.0.1", - "tmp": "0.0.33", + "semver": "^7.5.2", + "stream-chain": "^2.2.4", + "stream-json": "^1.7.3", + "strip-ansi": "^6.0.1", + "superstatic": "^9.0.3", + "tar": "^6.1.11", + "tcp-port-used": "^1.0.2", + "tmp": "^0.2.1", "triple-beam": "^1.3.0", - "tweetsodium": "0.0.5", - "universal-analytics": "^0.4.16", - "unzipper": "^0.10.10", - "update-notifier": "^5.1.0", - "uuid": "^3.0.0", + "universal-analytics": "^0.5.3", + "update-notifier-cjs": "^5.1.6", + "uuid": "^8.3.2", "winston": "^3.0.0", "winston-transport": "^4.4.0", "ws": "^7.2.3" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } }, "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, "google-auth-library": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.6.tgz", - "integrity": "sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", + "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -36926,11 +39107,12 @@ } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, "lru-cache": { @@ -36942,14 +39124,43 @@ } }, "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "yallist": { "version": "4.0.0", @@ -36980,49 +39191,6 @@ } } }, - "flat-arguments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flat-arguments/-/flat-arguments-1.0.2.tgz", - "integrity": "sha1-m6p4Ct8FAfKC1ybJxqA426ROp28=", - "requires": { - "array-flatten": "^1.0.0", - "as-array": "^1.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isobject": "^3.0.0" - }, - "dependencies": { - "as-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-array/-/as-array-1.0.0.tgz", - "integrity": "sha1-KKbu6qVynx9OyiBH316d4avaDtE=", - "requires": { - "lodash.isarguments": "2.4.x", - "lodash.isobject": "^2.4.1", - "lodash.values": "^2.4.1" - }, - "dependencies": { - "lodash.isarguments": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-2.4.1.tgz", - "integrity": "sha1-STGpwIJTrfCRrnyhkiWKlzh27Mo=" - }, - "lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "requires": { - "lodash._objecttypes": "~2.4.1" - } - } - } - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=" - } - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -37033,9 +39201,9 @@ } }, "flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==" + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "flush-write-stream": { "version": "1.1.1", @@ -37046,11 +39214,6 @@ "readable-stream": "^2.3.6" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -37091,11 +39254,6 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, - "focus-visible": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/focus-visible/-/focus-visible-5.2.0.tgz", - "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==" - }, "follow-redirects": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", @@ -37198,12 +39356,20 @@ } }, "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "optional": true, "requires": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true + } } }, "fs-mkdirp-stream": { @@ -37215,11 +39381,6 @@ "through2": "^2.0.3" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -37269,59 +39430,6 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -37334,39 +39442,43 @@ "dev": true }, "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "optional": true, "requires": { - "number-is-nan": "^1.0.0" + "ansi-regex": "^5.0.1" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } } } @@ -37448,27 +39560,29 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "requires": { "pump": "^3.0.0" } }, "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "dependencies": { - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } } } }, @@ -37545,12 +39659,12 @@ "glob-slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", - "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=" + "integrity": "sha512-ZwFh34WZhZX28ntCMAP1mwyAJkn8+Omagvt/GvA+JQM/qgT0+MR2NPF3vhvgdshfdvDyGZXs8fPXW84K32Wjuw==" }, "glob-slasher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", - "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", + "integrity": "sha512-5MUzqFiycIKLMD1B0dYOE4hGgLLUZUNGGYO4BExdwT32wUwW3DBOE7lMQars7vB1q43Fb3Tyt+HmgLKsJhDYdg==", "requires": { "glob-slash": "^1.0.0", "lodash.isobject": "^2.4.1", @@ -37591,11 +39705,6 @@ "is-extglob": "^2.1.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -37804,11 +39913,6 @@ } } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -37878,17 +39982,17 @@ } }, "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "requires": { - "ini": "1.3.7" + "ini": "2.0.0" }, "dependencies": { "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" } } }, @@ -38036,6 +40140,7 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -38054,6 +40159,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -38116,15 +40222,6 @@ "write-file-atomic": "^3.0.3" }, "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -38150,15 +40247,6 @@ "supports-color": "^7.1.0" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -38180,15 +40268,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -38216,37 +40295,6 @@ "through": "^2.3.6" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -38279,12 +40327,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true } } }, @@ -38621,20 +40663,6 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -38648,7 +40676,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "optional": true }, "has-value": { @@ -38708,22 +40736,37 @@ "resolved": "https://registry.npmjs.org/hash-string/-/hash-string-1.0.0.tgz", "integrity": "sha1-w/oV8Hjd0WvBULQXb95wkWIPLH8=" }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "heap-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/heap-js/-/heap-js-2.3.0.tgz", + "integrity": "sha512-E5303mzwQ+4j/n2J0rDvEPBN7GKjhis10oHiYOgjxsmxYgqG++hz9NyLLOXttzH8as/DyiBHYpUrJTZWYaMo8Q==" + }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, - "home-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/home-dir/-/home-dir-1.0.0.tgz", - "integrity": "sha1-KRfrRL3JByztqUJXlUOEfjAX/k4=" - }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -38764,9 +40807,10 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "devOptional": true }, "http-equiv-refresh": { "version": "1.0.0", @@ -38774,21 +40818,26 @@ "integrity": "sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=" }, "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -38850,7 +40899,7 @@ "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "optional": true, "requires": { "ms": "^2.0.0" @@ -39060,7 +41109,7 @@ "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==" }, "import-cwd": { "version": "3.0.0", @@ -39115,18 +41164,6 @@ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -39147,88 +41184,112 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "requires": { - "tslib": "^1.9.0" + "tslib": "^2.1.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "ansi-regex": "^5.0.1" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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==", "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - } + "has-flag": "^4.0.0" } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } } } }, "install-artifact-from-github": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz", - "integrity": "sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.3.3.tgz", + "integrity": "sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ==", "optional": true }, "interpret": { @@ -39261,9 +41322,9 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, "ip-regex": { "version": "4.3.0", @@ -39522,25 +41583,23 @@ "dev": true }, "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "dependencies": { - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - } + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, "is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "optional": true }, "is-module": { @@ -39578,9 +41637,9 @@ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" }, "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" }, "is-number": { "version": "7.0.0", @@ -39611,6 +41670,11 @@ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -39714,6 +41778,11 @@ "unc-path-regex": "^0.1.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -39762,9 +41831,9 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "is2": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", - "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", + "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", "requires": { "deep-is": "^0.1.3", "ip-regex": "^4.1.0", @@ -39772,19 +41841,15 @@ } }, "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true }, "isexe": { "version": "2.0.0", @@ -39801,15 +41866,24 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "requires": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" }, "istanbul-lib-instrument": { "version": "4.0.3", @@ -39858,9 +41932,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -39877,9 +41951,9 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -39894,21 +41968,69 @@ } } }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "optional": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", + "async": "^3.2.3", + "chalk": "^4.0.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" }, "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -39940,12 +42062,12 @@ "jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" }, "join-path": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz", - "integrity": "sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU=", + "integrity": "sha512-jnt9OC34sLXMLJ6YfPQ2ZEKrR9mB5ZbSnQb4LPaOx1c5rTzxpR33L18jjp0r75mGGTJmsil3qwN1B5IBeTnSSA==", "requires": { "as-array": "^2.0.0", "url-join": "0.0.1", @@ -40002,11 +42124,59 @@ "esprima": "^4.0.0" } }, + "js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "requires": { + "xmlcreate": "^2.0.4" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "requires": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "requires": {} + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -40023,7 +42193,8 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true }, "json-parse-better-errors": { "version": "1.0.2", @@ -40039,18 +42210,15 @@ "json-parse-helpfulerror": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", "requires": { "jju": "^1.1.0" } }, "json-ptr": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-2.2.0.tgz", - "integrity": "sha512-w9f6/zhz4kykltXMG7MLJWMajxiPj0q+uzQPR1cggNAE/sXoq/C5vjUb/7QNcC3rJsVIIKy37ALTXy1O+3c8QQ==", - "requires": { - "tslib": "^2.2.0" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-ptr/-/json-ptr-3.1.1.tgz", + "integrity": "sha512-SiSJQ805W1sDUCD1+/t1/1BIrveq2Fe9HJqENxZmMCILmrPI7WhS/pePpIOx85v6/H2z1Vy7AI08GV2TzfXocg==" }, "json-schema": { "version": "0.2.3", @@ -40103,30 +42271,16 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, "jsonpointer": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -40137,7 +42291,7 @@ "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.5.4" }, "dependencies": { "jwa": { @@ -40158,11 +42312,6 @@ "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -40197,11 +42346,6 @@ "set-immediate-shim": "~1.0.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -40261,124 +42405,73 @@ } }, "karma": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", - "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.0.0", - "colors": "^1.1.0", - "connect": "^3.6.0", + "chokidar": "^3.5.1", + "connect": "^3.7.0", "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.14", - "log4js": "^4.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.1.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.3.0" + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" }, "dependencies": { - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { - "ms": "2.0.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" } }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "ms": "2.0.0" } }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, "mime": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", @@ -40388,120 +42481,57 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, - "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - } - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "rimraf": "^3.0.0" } }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "ua-parser-js": { + "version": "0.7.32", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", + "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, "requires": { "which": "^1.2.1" @@ -40519,34 +42549,47 @@ } }, "karma-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.3.tgz", - "integrity": "sha512-atDvLQqvPcLxhED0cmXYdsPMCQuh6Asa9FMZW1bhNqlVEhJoB9qyZ2BY1gu7D/rr5GLGb5QzYO4siQskxaWP/g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", "dev": true, "requires": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", "minimatch": "^3.0.4" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "karma-mocha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", - "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", + "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", "dev": true, "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "minimist": "^1.2.3" } }, "karma-sourcemap-loader": { @@ -40559,18 +42602,19 @@ } }, "karma-spec-reporter": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz", - "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=", + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.34.tgz", + "integrity": "sha512-l5H/Nh9q4g2Ysx2CDU2m+NIPyLQpCVbk9c4V02BTZHw3NM6RO1dq3eRpKXCSSdPt4RGfhHk8jDt3XYkGp+5PWg==", "dev": true, "requires": { - "colors": "^1.1.2" + "colors": "1.4.0" } }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "requires": { "json-buffer": "3.0.0" } @@ -40580,10 +42624,18 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==" + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" }, "known-css-properties": { "version": "0.3.0", @@ -40609,6 +42661,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "requires": { "package-json": "^6.3.0" } @@ -40621,11 +42674,6 @@ "readable-stream": "^2.0.5" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -40686,6 +42734,19 @@ "type-check": "~0.4.0" } }, + "libsodium": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.13.tgz", + "integrity": "sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==" + }, + "libsodium-wrappers": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", + "integrity": "sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==", + "requires": { + "libsodium": "^0.7.13" + } + }, "lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -40804,6 +42865,12 @@ "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.7.0.tgz", "integrity": "sha512-ggLg9V6Hs31Qcn29L2fwKsaQq8L5t+mIv3lNqwd85bc7zFxpMVybK71b4w2OeBLpa0H8gATIi9fxPlP+9moMDA==" }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, "limiter": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", @@ -40850,20 +42917,262 @@ } } }, + "lint-staged": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.2.tgz", + "integrity": "sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==", + "dev": true, + "requires": { + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.2" + }, + "dependencies": { + "chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true + } + } + }, "liquidjs": { - "version": "9.37.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-9.37.0.tgz", - "integrity": "sha512-qDj9iiNdB+QNZTR4iKjiQzoHQma7V8Itx5oZG/ZCP7xjebh1LI+s5IG2ZYUbs1ALO6hBzmW36Ptd8RR4eohuDA==" + "version": "9.43.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-9.43.0.tgz", + "integrity": "sha512-qZZuL5Emja2UgCqiLewiw9bvwZQwm19TTGFxDkonVzB4YSTOZ8tuTVo/7Uu/AeW1cL2Qb/at3DSoV8wwyFXQCw==" }, "list-to-array": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", "integrity": "sha1-yn3/ZAYGQzysdcvoRGrNhksVv28=" }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + "listr2": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", + "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } }, "lit": { "version": "2.2.2", @@ -41008,23 +43317,10 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash._isnative": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", - "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=" - }, "lodash._objecttypes": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=" - }, - "lodash._shimkeys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", - "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", - "requires": { - "lodash._objecttypes": "~2.4.1" - } + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==" }, "lodash.camelcase": { "version": "4.3.0", @@ -41050,17 +43346,17 @@ "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" }, "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" }, "lodash.get": { "version": "4.4.2", @@ -41070,17 +43366,12 @@ "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, "lodash.isequal": { "version": "4.5.0", @@ -41090,22 +43381,22 @@ "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=" + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" }, "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, "lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, "lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", "requires": { "lodash._objecttypes": "~2.4.1" } @@ -41113,12 +43404,12 @@ "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "lodash.kebabcase": { "version": "4.1.1", @@ -41126,16 +43417,6 @@ "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", "dev": true }, - "lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" - } - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -41150,7 +43431,7 @@ "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "lodash.set": { "version": "4.3.2", @@ -41160,12 +43441,7 @@ "lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=" - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" }, "lodash.truncate": { "version": "4.4.2", @@ -41176,25 +43452,18 @@ "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "lodash.values": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", - "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", - "requires": { - "lodash.keys": "~2.4.1" - } - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, "requires": { "chalk": "^2.0.1" } @@ -41243,35 +43512,39 @@ } }, "log4js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", - "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", + "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==", "dev": true, "requires": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.4", - "streamroller": "^1.0.6" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.3" }, "dependencies": { - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } } } }, "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", + "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" } }, @@ -41294,7 +43567,8 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "lru-cache": { "version": "4.1.5", @@ -41305,14 +43579,6 @@ "yallist": "^2.1.2" } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "requires": { - "es5-ext": "~0.10.2" - } - }, "luxon": { "version": "1.28.0", "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", @@ -41342,42 +43608,70 @@ } }, "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "optional": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "optional": true, "requires": { - "yallist": "^4.0.0" + "ms": "2.1.2" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "optional": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "optional": true + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "optional": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } } } }, @@ -41476,21 +43770,41 @@ "dev": true }, "marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" }, "marked-terminal": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", - "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", "requires": { - "ansi-escapes": "^3.1.0", + "ansi-escapes": "^6.2.0", "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "cli-table": "^0.3.1", - "node-emoji": "^1.4.1", - "supports-hyperlinks": "^1.0.1" + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "requires": { + "type-fest": "^3.0.0" + } + }, + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + }, + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } } }, "marky": { @@ -41739,28 +44053,6 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - }, - "dependencies": { - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - } - } - }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -41862,12 +44154,12 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -41876,27 +44168,28 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.52.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, "min-indent": { "version": "1.0.1", @@ -41937,14 +44230,28 @@ } }, "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "optional": true, "requires": { - "yallist": "^4.0.0" + "minipass": "^3.0.0" }, "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -41953,25 +44260,24 @@ } } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, "minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "optional": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true + } } }, "minipass-flush": { @@ -41981,6 +44287,23 @@ "optional": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } } }, "minipass-pipeline": { @@ -41990,6 +44313,23 @@ "optional": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } } }, "minipass-sized": { @@ -41999,23 +44339,46 @@ "optional": true, "requires": { "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + } } }, "minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" }, "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -42352,7 +44715,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -42384,20 +44747,20 @@ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", "optional": true }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "nanomatch": { "version": "1.2.13", @@ -42436,17 +44799,6 @@ } } }, - "nash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/nash/-/nash-3.0.0.tgz", - "integrity": "sha512-M5SahEycXUmko3zOvsBkF6p94CWLhnyy9hfpQ9Qzp+rQkQ8D1OaTlfTl1OBWktq9Fak3oDXKU+ev7tiMaMu+1w==", - "requires": { - "async": "^1.3.0", - "flat-arguments": "^1.0.0", - "lodash": "^4.17.5", - "minimist": "^1.1.0" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -42460,9 +44812,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -42479,17 +44831,33 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "optional": true + }, "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "requires": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "node-environment-flags": { @@ -42511,9 +44879,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } @@ -42524,57 +44892,58 @@ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "node-gyp": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.1.0.tgz", - "integrity": "sha512-o2elh1qt7YUp3lkMwY3/l4KF3j/A3fI/Qt4NH+CQQgPJdqGE9y7qnP84cjIWN27Q0jJkrSAhCVDg+wBVNBYdBg==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "optional": true, "requires": { "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^8.0.14", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.0", + "tar": "^6.1.2", "which": "^2.0.2" }, "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "optional": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "abbrev": "^1.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true } } }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "optional": true + }, + "node-mocks-http": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.12.1.tgz", + "integrity": "sha512-jrA7Sn3qI6GsHgWtUW3gMj0vO6Yz0nJjzg3jRZYjcfj4tzi8oWPauDK1qHVJoAxTbwuDHF1JiM9GISZ/ocI/ig==", + "requires": { + "accepts": "^1.3.7", + "content-disposition": "^0.5.3", + "depd": "^1.1.0", + "fresh": "^0.5.2", + "merge-descriptors": "^1.0.1", + "methods": "^1.1.2", + "mime": "^1.3.4", + "parseurl": "^1.3.3", + "range-parser": "^1.2.0", + "type-is": "^1.6.18" + } + }, "node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", @@ -42619,7 +44988,8 @@ "normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true }, "now-and-later": { "version": "2.0.1", @@ -42740,15 +45110,15 @@ } }, "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" } }, "nth-check": { @@ -42789,12 +45159,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -42829,9 +45193,9 @@ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-keys": { "version": "1.1.1", @@ -42965,11 +45329,11 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "open": { @@ -42981,11 +45345,18 @@ } }, "openapi3-ts": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.1.tgz", - "integrity": "sha512-v6X3iwddhi276siej96jHGIqTx3wzVfMTmpGJEQDt7GPI7pI6sywItURLzpEci21SBRpPN/aOWSF5mVfFVNmcg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-3.2.0.tgz", + "integrity": "sha512-/ykNWRV5Qs0Nwq7Pc0nJ78fgILvOT/60OxEmB3v7yQ8a8Bwcm43D4diaYazG/KBn6czA+52XYy931WFLMCUeSg==", "requires": { - "yaml": "^1.10.0" + "yaml": "^2.2.1" + }, + "dependencies": { + "yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==" + } } }, "opencollective-postinstall": { @@ -42997,7 +45368,7 @@ "openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=" + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==" }, "opn": { "version": "5.3.0", @@ -43007,30 +45378,6 @@ "is-wsl": "^1.1.0" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -43046,29 +45393,84 @@ } }, "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "dependencies": { "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" } } } @@ -43081,11 +45483,6 @@ "readable-stream": "^2.0.1" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -43137,7 +45534,8 @@ "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true }, "p-defer": { "version": "3.0.0", @@ -43171,7 +45569,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, + "devOptional": true, "requires": { "aggregate-error": "^3.0.0" } @@ -43200,35 +45598,71 @@ "dev": true }, "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + } } }, "pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "requires": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^2.0.1" + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" } }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -43239,7 +45673,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -43360,16 +45795,6 @@ "parse5": "^6.0.1" } }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -43425,6 +45850,24 @@ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "optional": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "optional": true + } + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -43453,10 +45896,15 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pidtree": { "version": "0.3.1", @@ -43481,6 +45929,17 @@ "pinkie": "^2.0.0" } }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -43552,19 +46011,19 @@ "dev": true }, "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" }, "dependencies": { "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } @@ -43576,16 +46035,34 @@ "requires": { "ms": "^2.1.1" } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } } } }, "portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", "requires": { - "async": "1.5.2", + "async": "^2.6.0", "is-number-like": "^1.0.3" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + } } }, "posix-character-classes": { @@ -43594,13 +46071,13 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, "postcss-calc": { @@ -44754,9 +47231,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -44884,7 +47361,8 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true }, "preserve": { "version": "0.2.0", @@ -44921,11 +47399,6 @@ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - }, "prismjs": { "version": "1.28.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", @@ -44950,9 +47423,9 @@ } }, "promise-breaker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz", - "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", + "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==" }, "promise-each": { "version": "2.2.0", @@ -44962,12 +47435,6 @@ "any-promise": "^0.1.0" } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "optional": true - }, "promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -44976,6 +47443,14 @@ "requires": { "err-code": "^2.0.2", "retry": "^0.12.0" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true + } } }, "promise.series": { @@ -45023,32 +47498,58 @@ } }, "proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", + "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" }, "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "requires": { - "yallist": "^3.0.2" + "debug": "^4.3.4" } }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" } } }, @@ -45230,11 +47731,6 @@ "stream-shift": "^1.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", @@ -45354,9 +47850,12 @@ "dev": true }, "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } }, "querystring": { "version": "0.2.1", @@ -45440,12 +47939,12 @@ } }, "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -45469,14 +47968,14 @@ } }, "re2": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/re2/-/re2-1.16.0.tgz", - "integrity": "sha512-eizTZL2ZO0ZseLqfD4t3Qd0M3b3Nr0MBWpX81EbPMIud/1d/CSfUIx2GQK8fWiAeHoSekO5EOeFib2udTZLwYw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/re2/-/re2-1.20.3.tgz", + "integrity": "sha512-g5j4YjygwGEccP9SCuDI90uPlgALLEYLotfL0K+kqL3XKB4ht7Nm1JuXfOTG96c7JozpvCUxTz1T7oTNwwMI6w==", "optional": true, "requires": { - "install-artifact-from-github": "^1.2.0", - "nan": "^2.14.2", - "node-gyp": "^8.0.0" + "install-artifact-from-github": "^1.3.3", + "nan": "^2.17.0", + "node-gyp": "^9.4.0" } }, "read-pkg": { @@ -45541,11 +48040,29 @@ } }, "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.1.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "readdirp": { @@ -45631,7 +48148,7 @@ "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "requires": { "esprima": "~4.0.0" } @@ -45689,6 +48206,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, "requires": { "rc": "^1.2.8" } @@ -46099,12 +48617,6 @@ "kind-of": "^3.0.2" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz", @@ -47339,11 +49851,6 @@ "through2": "^2.0.3" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -47463,8 +49970,7 @@ "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "2.0.0", @@ -47516,6 +50022,14 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "requires": { + "lodash": "^4.17.21" + } + }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -47555,7 +50069,7 @@ "resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", "requires": { "debug": "^2.2.0", "minimatch": "^3.0.2" @@ -47572,7 +50086,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -47580,16 +50094,17 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "requires": { "lowercase-keys": "^1.0.0" } }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -47599,10 +50114,9 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "optional": true + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" }, "retry-request": { "version": "4.2.2", @@ -47844,9 +50358,9 @@ } }, "router": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz", - "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", + "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", "requires": { "array-flatten": "3.0.0", "debug": "2.6.9", @@ -47873,20 +50387,10 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -47903,7 +50407,7 @@ "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==" }, "rx-lite": { "version": "3.1.2", @@ -47937,6 +50441,11 @@ "ret": "~0.1.10" } }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -48206,12 +50715,6 @@ "number-is-nan": "^1.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -48444,9 +50947,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" }, @@ -48531,7 +51034,7 @@ "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -48542,12 +51045,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "setprototypeof": { "version": "1.1.0", @@ -48629,7 +51132,7 @@ "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -48651,7 +51154,7 @@ "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -48662,12 +51165,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "setprototypeof": { "version": "1.1.0", @@ -48677,7 +51180,7 @@ "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, @@ -48695,7 +51198,7 @@ "server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" }, "set-blocking": { "version": "2.0.0", @@ -48718,15 +51221,10 @@ "split-string": "^3.0.1" } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shebang-command": { "version": "1.2.0", @@ -48782,14 +51280,14 @@ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "requires": { "is-arrayish": "^0.3.1" }, @@ -48855,9 +51353,9 @@ "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" }, "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "snapdragon": { "version": "0.8.2", @@ -48981,31 +51479,23 @@ } } }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, "socket.io-client": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", - "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.4.tgz", + "integrity": "sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==", "requires": { - "@socket.io/component-emitter": "~3.0.0", - "backo2": "~1.0.2", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.1.1", - "parseuri": "0.0.6", - "socket.io-parser": "~4.1.1" + "engine.io-client": "~6.2.3", + "socket.io-parser": "~4.2.1" }, "dependencies": { "socket.io-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", - "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", + "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", "requires": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" } } @@ -49022,22 +51512,47 @@ } }, "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + } } }, "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + } } }, "source-map": { @@ -49046,9 +51561,9 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-resolve": { "version": "0.5.3", @@ -49180,12 +51695,20 @@ } }, "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "optional": true, "requires": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true + } } }, "stable": { @@ -49228,6 +51751,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, + "stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==" + }, "stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -49241,6 +51769,14 @@ "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" }, + "stream-json": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", + "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", + "requires": { + "stream-chain": "^2.2.5" + } + }, "stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", @@ -49249,7 +51785,7 @@ "stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", "requires": { "commander": "^2.2.0", "limiter": "^1.0.5" @@ -49263,54 +51799,23 @@ } }, "streamroller": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", - "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", + "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", "dev": true, "requires": { - "async": "^2.6.2", - "date-format": "^2.0.0", - "debug": "^3.2.6", - "fs-extra": "^7.0.1", - "lodash": "^4.17.14" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "ms": "2.1.2" } } } @@ -49323,19 +51828,17 @@ "safe-buffer": "~5.2.0" } }, + "string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true + }, "string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "requires": { - "strip-ansi": "^3.0.0" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -49361,6 +51864,34 @@ } } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "optional": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "string.prototype.padend": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", @@ -49410,6 +51941,23 @@ "ansi-regex": "^2.0.0" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true + } + } + }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -49441,8 +51989,7 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "striptags": { "version": "3.2.0", @@ -49505,76 +52052,94 @@ } }, "superstatic": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-7.1.0.tgz", - "integrity": "sha512-yBU8iw07nM3Bu4jFc8lnKwLey0cj61OaGmFJZcYC2X+kEpXVmXzERJ3OTAHZAESe1OTeNIuWadt81U5IULGGAA==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-9.0.3.tgz", + "integrity": "sha512-e/tmW0bsnQ/33ivK6y3CapJT0Ovy4pk/ohNPGhIAGU2oasoNLRQ1cv6enua09NU9w6Y0H/fBu07cjzuiWvLXxw==", "requires": { "basic-auth-connect": "^1.0.0", - "chalk": "^1.1.3", - "compare-semver": "^1.0.0", + "commander": "^10.0.0", "compression": "^1.7.0", - "connect": "^3.6.2", + "connect": "^3.7.0", "destroy": "^1.0.4", "fast-url-parser": "^1.1.3", - "fs-extra": "^8.1.0", "glob-slasher": "^1.0.1", - "home-dir": "^1.0.0", "is-url": "^1.2.2", "join-path": "^1.1.1", "lodash": "^4.17.19", - "mime-types": "^2.1.16", - "minimatch": "^3.0.4", + "mime-types": "^2.1.35", + "minimatch": "^6.1.6", "morgan": "^1.8.2", - "nash": "^3.0.0", "on-finished": "^2.2.0", "on-headers": "^1.0.0", "path-to-regexp": "^1.8.0", - "re2": "^1.15.8", + "re2": "^1.17.7", "router": "^1.3.1", - "rsvp": "^4.8.5", - "string-length": "^1.0.0", - "update-notifier": "^4.1.1" + "update-notifier-cjs": "^5.1.6" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "balanced-match": "^1.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "requires": { - "color-name": "~1.1.4" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "minimatch": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "path-to-regexp": { "version": "1.8.0", @@ -49584,57 +52149,10 @@ "isarray": "0.0.1" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } - } + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" } } }, @@ -49647,18 +52165,26 @@ } }, "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "dependencies": { "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -49769,7 +52295,7 @@ "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + "integrity": "sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==" }, "table": { "version": "6.7.1", @@ -49821,48 +52347,50 @@ } }, "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "dependencies": { - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } } }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -49928,11 +52456,6 @@ } } }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" - }, "terser": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", @@ -49989,12 +52512,12 @@ "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -50006,7 +52529,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" } } }, @@ -50029,11 +52552,6 @@ "xtend": "~4.0.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -50078,15 +52596,6 @@ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", @@ -50109,12 +52618,6 @@ "is-negated-glob": "^1.0.0" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -50141,7 +52644,8 @@ "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true }, "to-regex": { "version": "3.0.2", @@ -50189,11 +52693,6 @@ "through2": "^2.0.3" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -50251,9 +52750,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "token-stream": { "version": "1.0.0", @@ -50287,11 +52786,6 @@ "resolved": "https://registry.npmjs.org/transfob/-/transfob-1.0.0.tgz", "integrity": "sha1-x/wnpbVDCtSGJnrmZtkj90oKsyA=" }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -50311,9 +52805,9 @@ "dev": true }, "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, "trough": { "version": "1.0.5", @@ -50370,22 +52864,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, - "tweetsodium": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tweetsodium/-/tweetsodium-0.0.5.tgz", - "integrity": "sha512-T3aXZtx7KqQbutTtBfn+P5By3HdBuB1eCoGviIrRJV2sXeToxv2X2cv5RvYqgG26PSnN5m3fYixds22Gkfd11w==", - "requires": { - "blakejs": "^1.1.0", - "tweetnacl": "^1.0.1" - }, - "dependencies": { - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - } - } - }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -50434,10 +52912,9 @@ } }, "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" }, "ua-parser-js": { "version": "1.0.2", @@ -50452,20 +52929,13 @@ "uglify-js": { "version": "3.13.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", - "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", - "optional": true + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==" }, "uhyphen": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.1.0.tgz", "integrity": "sha512-o0QVGuFg24FK765Qdd5kk0zU/U4dEsCtN/GSiwNI9i8xsSVtjIAOdTaVhLwZ1nrbWxFVMxNDDl+9fednsOMsBw==" }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -50492,6 +52962,11 @@ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "undertaker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", @@ -50607,15 +53082,6 @@ "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } } } }, @@ -50661,18 +53127,18 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" }, "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "optional": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "^4.0.0" } }, "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "optional": true, "requires": { "imurmurhash": "^0.1.4" @@ -50783,13 +53249,19 @@ "integrity": "sha512-2Aa4eX0Ua1umyiI3Eai6Li+wXYOHgaDBGOPB3Hvw7PAVuD30TAyh5kS4yNKb2fLDbQgizvPhKQRcYnOdfsm4VQ==" }, "universal-analytics": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", - "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.5.3.tgz", + "integrity": "sha512-HXSMyIcf2XTvwZ6ZZQLfxfViRm/yTGoRgDeTbojtq6rezeyKB0sTBcKH2fhddnteAHRcHiKgr/ACpbgjGOC6RQ==", "requires": { - "debug": "^4.1.1", - "request": "^2.88.2", - "uuid": "^3.0.0" + "debug": "^4.3.1", + "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "universal-user-agent": { @@ -50846,11 +53318,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, @@ -50863,62 +53330,6 @@ "os-homedir": "^1.0.0" } }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - }, - "dependencies": { - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -50928,6 +53339,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, "requires": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -50949,34 +53361,16 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } }, - "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -50986,6 +53380,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -50993,45 +53388,92 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": 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==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "update-notifier-cjs": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/update-notifier-cjs/-/update-notifier-cjs-5.1.6.tgz", + "integrity": "sha512-wgxdSBWv3x/YpMzsWz5G4p4ec7JWD0HCl8W6bmNB6E5Gwo+1ym5oN4hiXpLf0mPySVEJEIsYlkshnplkg2OP9A==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "isomorphic-fetch": "^3.0.0", + "pupa": "^2.1.1", + "registry-auth-token": "^5.0.1", + "registry-url": "^5.1.0", + "semver": "^7.3.7", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "ini": "2.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "@pnpm/npm-conf": "^2.1.0" } }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -51058,12 +53500,13 @@ "url-join": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" + "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==" }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "requires": { "prepend-http": "^2.0.0" } @@ -51082,16 +53525,6 @@ "os-homedir": "^1.0.0" } }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, "utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", @@ -51176,7 +53609,7 @@ "valid-url": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -51374,11 +53807,6 @@ "vinyl-sourcemap": "^1.1.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -51457,29 +53885,174 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "requires": { "defaults": "^1.0.3" } }, "web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.0.tgz", + "integrity": "sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w==" }, "webdev-infra": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/webdev-infra/-/webdev-infra-1.0.31.tgz", - "integrity": "sha512-Z+8Z4UB8SjJJDX2FRdmNBuGlQ1ezcm37s1kCgwI2IczryGDqgP1Soxa5idPOfFwbOPh/wyh2hO3EQTlgzAkxZg==", + "version": "1.0.54", + "resolved": "https://registry.npmjs.org/webdev-infra/-/webdev-infra-1.0.54.tgz", + "integrity": "sha512-RDNUe5ttd8L2Kxd9bfGOa8NukevvTQub6LGtdaljiUx69ignK2uQnkOGdwK8TFM03RisXFgpWG54puuOdZbkrg==", "requires": { + "@11ty/eleventy": "1.0.2", + "@11ty/eleventy-cache-assets": "^2.3.0", "@imgix/js-core": "^3.1.3", "@justinribeiro/lite-youtube": "^0.9.1", + "@mdn/browser-compat-data": "5.2.x", + "@swc/html": "0.0.18", + "async-transforms": "^1.0.9", "browser-media-mime-type": "^1.0.0", + "chalk": "4.1.2", "common-tags": "^1.8.0", + "csso": "5.0.5", + "express": "4.18.2", + "fast-glob": "3.2.12", + "js-yaml": "4.1.0", "lit-element": "^2.5.1", + "lodash.get": "4.4.2", + "lodash.set": "4.3.2", "markdown-it": "^12.3.2", + "node-mocks-http": "1.12.1", + "nunjucks": "3.2.3", + "piscina": "^3.2.0", + "purgecss": "5.0.0", "querystring": "^0.2.1", "striptags": "^3.1.1" + }, + "dependencies": { + "@mdn/browser-compat-data": { + "version": "5.2.67", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.67.tgz", + "integrity": "sha512-AoLSQvglknsEyYoDHbDMGvMVt78PopMz4Kzzp+cQNlge0zGXn+QtwmIizAU+n0htMXSjNFfQOk2GgpQIrOZu0w==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + }, + "css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "requires": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + } + }, + "csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "requires": { + "css-tree": "~2.2.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "minimatch": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.4.tgz", + "integrity": "sha512-U0iNYXt9wALljzfnGkhFSy5sAC6/SCR3JrHrlsdJz4kF8MvhTRQNiC59iUi1iqsitV7abrNAJWElVL9pdnoUgw==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "purgecss": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-5.0.0.tgz", + "integrity": "sha512-RAnuxrGuVyLLTr8uMbKaxDRGWMgK5CCYDfRyUNNcaz5P3kGgD2b7ymQGYEyo2ST7Tl/ScwFgf5l3slKMxHSbrw==", + "requires": { + "commander": "^9.0.0", + "glob": "^8.0.3", + "postcss": "^8.4.4", + "postcss-selector-parser": "^6.0.7" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "webidl-conversions": { @@ -51502,6 +54075,11 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" }, + "whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -51543,16 +54121,11 @@ "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", "dev": true }, - "wicg-inert": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", - "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "devOptional": true, + "dev": true, "requires": { "string-width": "^1.0.2 || 2" }, @@ -51561,19 +54134,19 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "devOptional": true + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "devOptional": true + "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "devOptional": true, + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -51583,7 +54156,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "devOptional": true, + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -51599,69 +54172,31 @@ } }, "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", + "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", "requires": { + "@colors/colors": "1.5.0", "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", + "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.2.0", + "logform": "^2.4.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" - }, - "dependencies": { - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - } + "winston-transport": "^4.5.0" } }, "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" } }, "with": { @@ -51731,6 +54266,58 @@ } } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "optional": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrap-fn": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", @@ -51783,6 +54370,11 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, + "xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, "xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", @@ -51793,11 +54385,6 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -51816,7 +54403,8 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yaml-front-matter": { "version": "4.1.1", @@ -51835,23 +54423,46 @@ } }, "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } } }, @@ -52011,25 +54622,59 @@ "fd-slicer": "~1.1.0" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", "readable-stream": "^3.6.0" + }, + "dependencies": { + "archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "requires": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } } } } diff --git a/package.json b/package.json index 40fc1a40584..0e709efa5ca 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,12 @@ "rollup": "rollup -c", "snapshots": "percy exec --config ./tools/percy/.percy.conf.yml -- node tools/percy/snapshots.js", "snapshots:firebase": "firebase emulators:exec 'npm run snapshots'", + "stage": "ELEVENTY_ENV=prod npm-run-all build stage:up", + "stage:up": "firebase hosting:channel:deploy staging", + "stage:down": "firebase hosting:channel:delete staging", "start": "firebase emulators:start", - "test:integration": "mocha ./test/integration", - "test:lib": "npx gulp sass && ELEVENTY_ENV=test npm-run-all rollup karma", + "test:integration": "NODE_OPTIONS='--max-old-space-size=8192' ELEVENTY_ENV=staging npm-run-all build && mocha ./test/integration", + "test:lib": "ELEVENTY_ENV=test npm-run-all gulp rollup karma", "test:unit": "mocha ./test/unit", "test": "npm-run-all test:unit test:lib test:integration", "translated": "node ./tools/update-translated/index.js", @@ -61,7 +64,7 @@ "@google-cloud/cloudbuild": "^2.6.0", "@google-cloud/error-reporting": "^2.0.3", "@google-cloud/secret-manager": "^3.10.0", - "@mdn/browser-compat-data": "^5.1.5", + "@mdn/browser-compat-data": "5.3.9", "@minify-html/node": "^0.9.2", "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-node-resolve": "^13.1.3", @@ -75,8 +78,7 @@ "dotenv": "^8.2.0", "fast-glob": "^3.2.7", "firebase": "^9.0.0-beta.7", - "firebase-tools": "^9.3.0", - "focus-visible": "^5.0.2", + "firebase-tools": "^12.6.1", "gorko": "^0.8.0", "gray-matter": "^4.0.3", "gulp": "^4.0.0", @@ -111,19 +113,18 @@ "terser": "^5.9.0", "truncate-utf8-bytes": "^1.0.2", "unistore": "^3.4.1", - "web-vitals": "^2.1.4", - "webdev-infra": "^1.0.31", - "wicg-inert": "^3.0.1", + "web-vitals": "^3.5.0", + "webdev-infra": "1.0.54", "yaml-front-matter": "^4.0.0" }, "devDependencies": { - "@actions/core": "^1.6.0", + "@actions/core": "^1.9.1", "@actions/github": "^5.0.0", "@percy/cli": "^1.0.0-beta.71", "@percy/puppeteer": "^2.0.0", "@types/chai": "^4.3.0", - "@types/google.analytics": "0.0.40", "@types/grecaptcha": "^3.0.3", + "@types/gtag.js": "^0.0.12", "@types/gulp": "^4.0.8", "@types/markdown-it": "^12.0.3", "@types/mocha": "^9.0.0", @@ -137,12 +138,13 @@ "eslint-plugin-lit-a11y": "^1.0.1", "gts": "^3.1.0", "husky": "^4.2.3", - "karma": "^4.2.0", - "karma-chrome-launcher": "^3.0.0", - "karma-coverage": "^2.0.2", - "karma-mocha": "^1.3.0", - "karma-sourcemap-loader": "^0.3.7", - "karma-spec-reporter": "0.0.32", + "karma": "6.4.0", + "karma-chrome-launcher": "3.1.1", + "karma-coverage": "2.2.0", + "karma-mocha": "2.0.1", + "karma-sourcemap-loader": "0.3.8", + "karma-spec-reporter": "0.0.34", + "lint-staged": "13.2.2", "mocha": "^6.2.0", "proxyquire": "^2.1.3", "puppeteer": "^12.0.1", diff --git a/redirects.yaml b/redirects.yaml index c8d5d1e22d8..a2837e5b417 100644 --- a/redirects.yaml +++ b/redirects.yaml @@ -39,6 +39,9 @@ redirects: - source: /fast/serve-images-webp/codelab-serve-images-webp destination: /codelab-serve-images-webp + - source: /security + destination: /secure + - source: /fast/remove-unused-code/codelab-remove-unused-code destination: /codelab-remove-unused-code @@ -186,6 +189,11 @@ redirects: destination: /speed-index # Redirects Progressive Web App content + - source: /wasm + destination: /webassembly/ + + - source: /opfs + destination: /origin-private-file-system/ - source: /pwa destination: /progressive-web-apps/ @@ -199,7 +207,7 @@ redirects: - source: /progressive-web-apps/#installable destination: /progressive-web-apps/#make-it-installable - - source: /push-notifications/ + - source: /push-notifications destination: /push-notifications-overview/ # Redirect for spec name changes @@ -251,6 +259,8 @@ redirects: # Redirects for vanity URLs - source: /scale-on-web destination: /tags/scale-on-web + - source: /wordpress-on-wasm + destination: /wordpress-playground # Redirect for the renamed WebTransport API. - source: /quictransport @@ -302,6 +312,8 @@ redirects: destination: https://developer.chrome.com/blog/third-party-origin-trials/ - source: /fugu-status destination: https://developer.chrome.com/blog/fugu-status/ + - source: /fugu-showcase + destination: https://developer.chrome.com/fugu-showcase/ - source: /conversion-measurement destination: https://developer.chrome.com/docs/privacy-sandbox/attribution-reporting/ - source: /using-conversion-measurement @@ -312,6 +324,8 @@ redirects: destination: https://developer.chrome.com/docs/web-platform/launch-handler/ - source: /gpu destination: https://developer.chrome.com/docs/web-platform/webgpu/ + - source: /webgpu + destination: https://developer.chrome.com/docs/web-platform/webgpu/ - source: /storage-foundation destination: https://developer.chrome.com/docs/web-platform/storage-foundation/ - source: /app-history-api @@ -326,10 +340,114 @@ redirects: destination: https://developer.chrome.com/docs/web-platform/handwriting-recognition/ - source: /virtualkeyboard destination: https://developer.chrome.com/docs/web-platform/virtual-keyboard/ + - source: /workingoffthegrid + destination: https://developer.chrome.com/docs/workbox/service-worker-overview/ + - source: /bluetooth + destination: https://developer.chrome.com/articles/bluetooth/ + - source: /usb + destination: https://developer.chrome.com/articles/usb/ + - source: /periodic-background-sync + destination: https://developer.chrome.com/articles/periodic-background-sync/ + - source: /eyedropper + destination: https://developer.chrome.com/articles/eyedropper/ + - source: /cors-rfc1918-feedback + destination: https://developer.chrome.com/articles/cors-rfc1918-feedback/ + - source: /file-handling + destination: https://developer.chrome.com/articles/file-handling/ + - source: /hid + destination: https://developer.chrome.com/articles/hid/ + - source: /isinputpending + destination: https://developer.chrome.com/articles/isinputpending/ + - source: /webcodecs + destination: https://developer.chrome.com/articles/webcodecs + - source: /mediastreamtrack-insertable-media-processing + destination: https://developer.chrome.com/articles/mediastreamtrack-insertable-media-processing/ + - source: /pwa-url-handler + destination: https://developer.chrome.com/articles/pwa-url-handler/ + - source: /reporting-api-migration + destination: https://developer.chrome.com/articles/reporting-api-migration/ + - source: /reporting-api + destination: https://developer.chrome.com/articles/reporting-api/ + - source: /urlpattern + destination: https://developer.chrome.com/articles/urlpattern/ + - source: /contact-picker + destination: https://developer.chrome.com/articles/contact-picker/ + - source: /multi-screen-window-placement + destination: https://developer.chrome.com/articles/multi-screen-window-placement/ + - source: /shape-detection + destination: https://developer.chrome.com/articles/shape-detection/ + - source: /url-protocol-handler + destination: https://developer.chrome.com/articles/url-protocol-handler/ + - source: /websocketstream + destination: https://developer.chrome.com/articles/websocketstream/ + - source: /web-share-target + destination: https://developer.chrome.com/articles/web-share-target/ + - source: /local-fonts + destination: https://developer.chrome.com/articles/local-fonts/ + - source: /notification-triggers + destination: https://developer.chrome.com/docs/web-platform/notification-triggers/ + - source: /badging-api + destination: https://developer.chrome.com/articles/badging-api/ + - source: /content-indexing-api + destination: https://developer.chrome.com/articles/content-indexing-api/ + - source: /generic-sensor + destination: https://developer.chrome.com/articles/generic-sensor/ + - source: /idle-detection + destination: https://developer.chrome.com/articles/idle-detection/ + - source: /keyboard-lock + destination: https://developer.chrome.com/articles/keyboard-lock/ + - source: /reporting-observer + destination: https://developer.chrome.com/articles/reporting-observer/ + - source: /serial + destination: https://developer.chrome.com/articles/serial/ + - source: /wake-lock + destination: https://developer.chrome.com/articles/wake-lock/ + - source: /user-agent-client-hints + destination: https://developer.chrome.com/articles/user-agent-client-hints/ + - source: /browser-fs-access + destination: https://developer.chrome.com/articles/browser-fs-access/ + - source: /display-override + destination: https://developer.chrome.com/articles/display-override/ + - source: /file-system-access + destination: https://developer.chrome.com/articles/file-system-access/ + - source: /user-agent-client-hints + destination: https://developer.chrome.com/articles/user-agent-client-hints/ + - source: /nfc + destination: https://developer.chrome.com/articles/nfc/ + - source: /build-for-webusb + destination: https://developer.chrome.com/articles/build-for-webusb/ # Redirect for Aurora - source: /aurora - destination: /introducing-aurora + destination: https://developer.chrome.com/blog/introducing-aurora/ + - source: /introducing-aurora + destination: https://developer.chrome.com/blog/introducing-aurora/ + - source: /inp-in-frameworks + destination: https://developer.chrome.com/blog/inp-in-frameworks/ + - source: /script-component + destination: https://developer.chrome.com/blog/script-component/ + - source: /image-component + destination: https://developer.chrome.com/blog/image-component/ + - source: /aurora-resource-inlining + destination: https://developer.chrome.com/blog/aurora-resource-inlining/ + - source: /conformance + destination: https://developer.chrome.com/blog/conformance/ + - source: /tags/aurora-project + destination: https://developer.chrome.com/tags/aurora-project/ + - source: /declarative-shadow-dom + destination: https://developer.chrome.com/articles/declarative-shadow-dom/ + - source: /gpu-compute + destination: https://developer.chrome.com/articles/gpu-compute/ + - source: /web-bundles + destination: https://developer.chrome.com/docs/web-platform/web-bundles/ + - source: /webtransport + destination: https://developer.chrome.com/articles/webtransport/ + - source: /web-otp + destination: https://developer.chrome.com/articles/web-otp/ + - source: /hid-examples + destination: https://developer.chrome.com/articles/hid-examples/ + + # Design system - source: /design-system/component/action @@ -352,15 +470,368 @@ redirects: destination: /browser-level-image-lazy-loading/ # Redirects an old performance guides to more recent documentation - - source: /performance-get-started/ + - source: /performance-get-started destination: /fast/ - - source: /performance-get-started-graphicalcontent-4/ + - source: /performance-get-started-graphicalcontent-4 destination: /choose-the-right-image-format/ - - source: /performance-get-started-httpcaching-6/ + - source: /performance-get-started-httpcaching-6 destination: /http-cache/ - - source: /performance-get-started-httprequests-5/ + - source: /performance-get-started-httprequests-5 destination: /optimizing-content-efficiency-eliminate-downloads/ - - source: /performance-get-started-textcontent-3/ + - source: /performance-get-started-textcontent-3 destination: /optimizing-content-efficiency-optimize-encoding-and-transfer/ - - source: /performance-get-started-wrapup-7/ + - source: /performance-get-started-wrapup-7 destination: /fast/ + - source: /speed-txt-compression + destination: /reduce-network-payloads-using-text-compression/ + - source: /webperformance-basics + destination: /navigation-and-resource-timing/ + - source: /priority-hints + destination: /fetch-priority/ + + # Redirects scrolling performance post to the Intersection Observer post + - source: /speed-scrolling + destination: /intersectionobserver/ + + # Redirects for outdated usage of "Web Vitals" + - source: /learn-web-vitals + destination: /learn-core-web-vitals/ + - source: /debug-web-vitals-in-the-field + destination: /debug-performance-in-the-field/ + + # Redirects for patterns + - source: /patterns/web-apps/audio-effects/demo.html + destination: /patterns/media/audio-effects/demo.html + - source: /patterns/web-apps/audio-effects + destination: /patterns/media/audio-effects + + # Redirects for Lighthouse performance content. + - source: /lighthouse-performance + destination: https://developer.chrome.com/docs/lighthouse/performance/ + - source: /performance-scoring + destination: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/ + - source: /bootup-time + destination: https://developer.chrome.com/docs/lighthouse/performance/bootup-time/ + - source: /critical-request-chains + destination: https://developer.chrome.com/docs/lighthouse/performance/critical-request-chains/ + - source: /dom-size + destination: https://developer.chrome.com/docs/lighthouse/performance/dom-size/ + - source: /efficient-animated-content + destination: https://developer.chrome.com/docs/lighthouse/performance/efficient-animated-content/ + - source: /first-contentful-paint + destination: https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/ + - source: /first-cpu-idle + destination: https://developer.chrome.com/docs/lighthouse/performance/first-cpu-idle/ + - source: /first-meaningful-paint + destination: https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/ + - source: /font-display + destination: https://developer.chrome.com/docs/lighthouse/performance/font-display/ + - source: /interactive + destination: https://developer.chrome.com/docs/lighthouse/performance/interactive/ + - source: /lighthouse-largest-contentful-paint + destination: https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/ + - source: /lighthouse-max-potential-fid + destination: https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/ + - source: /lighthouse-total-blocking-time + destination: https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/ + - source: /mainthread-work-breakdown + destination: https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/ + - source: /non-composited-animations + destination: https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/ + - source: /offscreen-images + destination: https://developer.chrome.com/docs/lighthouse/performance/offscreen-images/ + - source: /redirects + destination: https://developer.chrome.com/docs/lighthouse/performance/redirects/ + - source: /render-blocking-resources + destination: https://developer.chrome.com/docs/lighthouse/performance/render-blocking-resources/ + - source: /resource-summary + destination: https://developer.chrome.com/docs/lighthouse/performance/resource-summary/ + - source: /speed-index + destination: https://developer.chrome.com/docs/lighthouse/performance/speed-index/ + - source: /third-party-facades + destination: https://developer.chrome.com/docs/lighthouse/performance/third-party-facades/ + - source: /third-party-summary + destination: https://developer.chrome.com/docs/lighthouse/performance/third-party-summary/ + - source: /time-to-first-byte + destination: https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/ + - source: /total-byte-weight + destination: https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/ + - source: /unminified-css + destination: https://developer.chrome.com/docs/lighthouse/performance/unminified-css/ + - source: /unminified-javascript + destination: https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/ + - source: /unused-css-rules + destination: https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/ + - source: /unused-javascript + destination: https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/ + - source: /user-timings + destination: https://developer.chrome.com/docs/lighthouse/performance/user-timings/ + - source: /uses-long-cache-ttl + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl/ + - source: /uses-optimized-images + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-optimized-images/ + - source: /uses-rel-preconnect + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/ + - source: /uses-rel-preload + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preload/ + - source: /uses-responsive-images + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-responsive-images/ + - source: /uses-text-compression + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-text-compression/ + - source: /uses-webp-images + destination: https://developer.chrome.com/docs/lighthouse/performance/uses-webp-images/ + + + # Redirects for Lighthouse accessibility content. + - source: /lighthouse-accessibility + destination: https://developer.chrome.com/docs/lighthouse/accessibility/ + - source: /accessibility-scoring + destination: https://developer.chrome.com/docs/lighthouse/accessibility/scoring/ + # Redirects accessibility audits, now deferring to axe docs. + - source: /accesskeys + destination: https://dequeuniversity.com/rules/axe/4.4/accesskeys + - source: /bypass + destination: https://dequeuniversity.com/rules/axe/4.4/bypass + - source: /duplicate-id-active + destination: https://dequeuniversity.com/rules/axe/4.4/duplicate-id-active + - source: /heading-order + destination: https://dequeuniversity.com/rules/axe/4.4/heading-order + - source: /tabindex + destination: https://dequeuniversity.com/rules/axe/4.4/tabindex + - source: /aria-allowed-attr + destination: https://dequeuniversity.com/rules/axe/4.4/aria-allowed-attr + - source: /aria-hidden-body + destination: https://dequeuniversity.com/rules/axe/4.4/aria-hidden-body + - source: /aria-hidden-focus + destination: https://dequeuniversity.com/rules/axe/4.4/aria-hidden-focus + - source: /aria-required-attr + destination: https://dequeuniversity.com/rules/axe/4.4/aria-required-attr + - source: /aria-required-children + destination: https://dequeuniversity.com/rules/axe/4.4/aria-required-children + - source: /aria-required-parent + destination: https://dequeuniversity.com/rules/axe/4.4/aria-required-parent + - source: /aria-roles + destination: https://dequeuniversity.com/rules/axe/4.4/aria-roles + - source: /aria-valid-attr-value + destination: https://dequeuniversity.com/rules/axe/4.4/aria-valid-attr-value + - source: /aria-valid-attr + destination: https://dequeuniversity.com/rules/axe/4.4/aria-valid-attr + - source: /duplicate-id-aria + destination: https://dequeuniversity.com/rules/axe/4.4/duplicate-id-aria + - source: /button-name + destination: https://dequeuniversity.com/rules/axe/4.4/button-name + - source: /document-title + destination: https://dequeuniversity.com/rules/axe/4.4/document-title + - source: /form-field-multiple-labels + destination: https://dequeuniversity.com/rules/axe/4.4/form-field-multiple-labels + - source: /frame-title + destination: https://dequeuniversity.com/rules/axe/4.4/frame-title + - source: /image-alt + destination: https://dequeuniversity.com/rules/axe/4.4/image-alt + - source: /input-image-alt + destination: https://dequeuniversity.com/rules/axe/4.4/input-image-alt + - source: /label + destination: https://dequeuniversity.com/rules/axe/4.4/label + - source: /link-name + destination: https://dequeuniversity.com/rules/axe/4.4/link-name + - source: /object-alt + destination: https://dequeuniversity.com/rules/axe/4.4/object-alt + - source: /color-contrast + destination: https://dequeuniversity.com/rules/axe/4.4/color-contrast + - source: /definition-list + destination: https://dequeuniversity.com/rules/axe/4.4/definition-list + - source: /dlitem + destination: https://dequeuniversity.com/rules/axe/4.4/dlitem + - source: /list + destination: https://dequeuniversity.com/rules/axe/4.4/list + - source: /listitem + destination: https://dequeuniversity.com/rules/axe/4.4/listitem + - source: /layout-table + destination: https://dequeuniversity.com/rules/axe/3.5/layout-table + - source: /td-headers-attr + destination: https://dequeuniversity.com/rules/axe/4.4/td-headers-attr + - source: /th-has-data-cells + destination: https://dequeuniversity.com/rules/axe/4.4/th-has-data-cells + - source: /meta-refresh + destination: https://dequeuniversity.com/rules/axe/4.4/meta-refresh + - source: /meta-viewport + destination: https://dequeuniversity.com/rules/axe/4.4/meta-viewport + - source: /audio-caption + destination: https://dequeuniversity.com/rules/axe/3.5/audio-caption + - source: /video-caption + destination: https://dequeuniversity.com/rules/axe/4.4/video-caption + - source: /video-description + destination: https://dequeuniversity.com/rules/axe/3.3/video-description + - source: /html-has-lang + destination: https://dequeuniversity.com/rules/axe/4.4/html-has-lang + - source: /html-lang-valid + destination: https://dequeuniversity.com/rules/axe/4.4/html-lang-valid + - source: /valid-lang + destination: https://dequeuniversity.com/rules/axe/4.4/valid-lang + - source: /aria-name + destination: https://dequeuniversity.com/rules/axe/4.4 + - source: /duplicate-id + destination: https://dequeuniversity.com/rules/axe/4.4/duplicate-id-active + - source: /heading-levels + destination: https://dequeuniversity.com/rules/axe/4.4/heading-order + # "Manual" Lighthouse accessibility audits, separate from axe docs. + - source: /logical-tab-order + destination: https://developer.chrome.com/docs/lighthouse/accessibility/logical-tab-order/ + - source: /focusable-controls + destination: https://developer.chrome.com/docs/lighthouse/accessibility/focusable-controls/ + - source: /interactive-element-affordance + destination: https://developer.chrome.com/docs/lighthouse/accessibility/interactive-element-affordance/ + - source: /managed-focus + destination: https://developer.chrome.com/docs/lighthouse/accessibility/managed-focus/ + - source: /focus-traps + destination: https://developer.chrome.com/docs/lighthouse/accessibility/focus-traps/ + - source: /custom-controls-labels + destination: https://developer.chrome.com/docs/lighthouse/accessibility/custom-controls-labels/ + - source: /custom-control-roles + destination: https://developer.chrome.com/docs/lighthouse/accessibility/custom-control-roles/ + - source: /visual-order-follows-dom + destination: https://developer.chrome.com/docs/lighthouse/accessibility/visual-order-follows-dom/ + - source: /offscreen-content-hidden + destination: https://developer.chrome.com/docs/lighthouse/accessibility/offscreen-content-hidden/ + - source: /use-landmarks + destination: https://developer.chrome.com/docs/lighthouse/accessibility/use-landmarks/ + + # Redirects for Lighthouse best practices content. + - source: /lighthouse-best-practices + destination: https://developer.chrome.com/docs/lighthouse/best-practices/ + - source: /appcache-manifest + destination: https://developer.chrome.com/docs/lighthouse/best-practices/appcache-manifest/ + - source: /charset + destination: https://developer.chrome.com/docs/lighthouse/best-practices/charset/ + - source: /csp-xss + destination: https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/ + - source: /deprecations + destination: https://developer.chrome.com/docs/lighthouse/best-practices/deprecations/ + - source: /doctype + destination: https://developer.chrome.com/docs/lighthouse/best-practices/doctype/ + - source: /errors-in-console + destination: https://developer.chrome.com/docs/lighthouse/best-practices/errors-in-console/ + - source: /external-anchors-use-rel-noopener + destination: https://developer.chrome.com/docs/lighthouse/best-practices/external-anchors-use-rel-noopener/ + - source: /geolocation-on-start + destination: https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/ + - source: /image-aspect-ratio + destination: https://developer.chrome.com/docs/lighthouse/best-practices/image-aspect-ratio/ + - source: /js-libraries + destination: https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/ + - source: /no-document-write + destination: https://developer.chrome.com/docs/lighthouse/best-practices/no-document-write/ + - source: /no-vulnerable-libraries + destination: https://developer.chrome.com/docs/lighthouse/best-practices/no-vulnerable-libraries/ + - source: /notification-on-start + destination: https://developer.chrome.com/docs/lighthouse/best-practices/notification-on-start/ + - source: /password-inputs-can-be-pasted-into + destination: https://developer.chrome.com/docs/lighthouse/best-practices/password-inputs-can-be-pasted-into/ + - source: /uses-http2 + destination: https://developer.chrome.com/docs/lighthouse/best-practices/uses-http2/ + - source: /uses-passive-event-listeners + destination: https://developer.chrome.com/docs/lighthouse/best-practices/uses-passive-event-listeners/ + + # Redirects for Lighthouse SEO content. + - source: /lighthouse-seo + destination: https://developer.chrome.com/docs/lighthouse/seo/ + - source: /canonical + destination: https://developer.chrome.com/docs/lighthouse/seo/canonical/ + - source: /font-size + destination: https://developer.chrome.com/docs/lighthouse/seo/font-size/ + - source: /hreflang + destination: https://developer.chrome.com/docs/lighthouse/seo/hreflang/ + - source: /http-status-code + destination: https://developer.chrome.com/docs/lighthouse/seo/http-status-code/ + - source: /is-crawlable + destination: https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/ + - source: /link-text + destination: https://developer.chrome.com/docs/lighthouse/seo/link-text/ + - source: /meta-description + destination: https://developer.chrome.com/docs/lighthouse/seo/meta-description/ + - source: /plugins + destination: https://developer.chrome.com/docs/lighthouse/seo/plugins/ + - source: /robots-txt + destination: https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/ + - source: /structured-data + destination: https://developer.chrome.com/docs/lighthouse/seo/structured-data/ + - source: /tap-targets + destination: https://developer.chrome.com/docs/lighthouse/seo/tap-targets/ + + # Redirects for Lighthouse PWA content. + - source: /lighthouse-pwa + destination: https://developer.chrome.com/docs/lighthouse/pwa/ + - source: /apple-touch-icon + destination: https://developer.chrome.com/docs/lighthouse/pwa/apple-touch-icon/ + - source: /content-width + destination: https://developer.chrome.com/docs/lighthouse/pwa/content-width/ + - source: /installable-manifest + destination: https://developer.chrome.com/docs/lighthouse/pwa/installable-manifest/ + - source: /is-on-https + destination: https://developer.chrome.com/docs/lighthouse/pwa/is-on-https/ + - source: /load-fast-enough-for-pwa + destination: https://developer.chrome.com/docs/lighthouse/pwa/load-fast-enough-for-pwa/ + - source: /maskable-icon-audit + destination: https://developer.chrome.com/docs/lighthouse/pwa/maskable-icon-audit/ + - source: /offline-start-url + destination: https://developer.chrome.com/docs/lighthouse/pwa/offline-start-url/ + - source: /pwa-cross-browser + destination: https://developer.chrome.com/docs/lighthouse/pwa/pwa-cross-browser/ + - source: /pwa-each-page-has-url + destination: https://developer.chrome.com/docs/lighthouse/pwa/pwa-each-page-has-url/ + - source: /pwa-page-transitions + destination: https://developer.chrome.com/docs/lighthouse/pwa/pwa-page-transitions/ + - source: /redirects-http + destination: https://developer.chrome.com/docs/lighthouse/pwa/redirects-http/ + - source: /service-worker + destination: https://developer.chrome.com/docs/lighthouse/pwa/service-worker/ + - source: /splash-screen + destination: https://developer.chrome.com/docs/lighthouse/pwa/splash-screen/ + - source: /themed-omnibox + destination: https://developer.chrome.com/docs/lighthouse/pwa/themed-omnibox/ + - source: /viewport + destination: https://developer.chrome.com/docs/lighthouse/pwa/viewport/ + - source: /without-javascript + destination: https://developer.chrome.com/docs/lighthouse/pwa/without-javascript/ + - source: /works-offline + destination: https://developer.chrome.com/docs/lighthouse/pwa/works-offline/ + + # CrUX guides + - source: /chrome-ux-report-api + destination: https://developer.chrome.com/blog/chrome-ux-report-api/ + - source: /chrome-ux-report-bigquery + destination: https://developer.chrome.com/blog/chrome-ux-report-bigquery/ + - source: /chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/es/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/es/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/es/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/es/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/ja/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/ja/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/ko/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/ko/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/pt/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/pt/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/ru/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/ru/chrome-ux-report-looker-studio-dashboard/ + - source: /i18n/zh/chrome-ux-report-data-studio-dashboard + destination: https://developer.chrome.com/blog/zh/chrome-ux-report-looker-studio-dashboard/ + - source: /chrome-ux-report-pagespeed-insights + destination: https://developer.chrome.com/blog/chrome-ux-report-pagespeed-insights/ + + # Redirects for blogs + - source: /blog/native-hardware-click-to-call + destination: /blog/click-to-call + - source: /blog/native-hardware-device-orientation + destination: /blog/device-orientation + - source: /blog/native-hardware-fullscreen + destination: /blog/fullscreen + - source: /blog/native-hardware-user-location + destination: /blog/user-location + - source: /speculative-prerendering + destination: https://developer.chrome.com/blog/prerender-pages/ + - source: /blog/javascript-async-functions + destination: /blog/async-functions + - source: /blog/enabling-https-on-your-servers + destination: /secure/enable-https diff --git a/rollup.config.js b/rollup.config.js index d9829ecc2b6..303f0bc11b4 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -29,7 +29,9 @@ const isProd = process.env.ELEVENTY_ENV === 'prod'; const buildVirtualJSON = require('./src/build/virtual-json'); const virtualImports = { webdev_analytics: { - id: isProd ? site.analytics.ids.prod : site.analytics.ids.staging, + ids: { + GTM: site.analytics.ids.gtm, + }, dimensions: site.analytics.dimensions, version: site.analytics.version, }, diff --git a/src/component-library/aside/aside.json b/src/component-library/aside/aside.json index 9dfed2f52ec..7d0eddb15b9 100644 --- a/src/component-library/aside/aside.json +++ b/src/component-library/aside/aside.json @@ -141,6 +141,19 @@ "main": "bg-state-good-bg color-state-good-text" } } + }, + { + "name": "update", + "title": "Update", + "context": { + "content": "Use the update aside in select cases where updates concerning a developing situation around a certain API or metric can be effectively communicated.", + "type": "update", + "title": "Update", + "icon": "update.svg", + "utilities": { + "main": "bg-state-update-bg color-state-update-text" + } + } } ] } diff --git a/src/component-library/authors/variants/multiple/multiple.njk b/src/component-library/authors/variants/multiple/multiple.njk index f8d09f31939..c203453bc6b 100644 --- a/src/component-library/authors/variants/multiple/multiple.njk +++ b/src/component-library/authors/variants/multiple/multiple.njk @@ -23,12 +23,12 @@
- {{ item.name }} + {{ item.name }} diff --git a/src/component-library/form-fields/variants/checkbox/checkbox.njk b/src/component-library/form-fields/variants/checkbox/checkbox.njk index 80d05b67115..7faf3d74afa 100644 --- a/src/component-library/form-fields/variants/checkbox/checkbox.njk +++ b/src/component-library/form-fields/variants/checkbox/checkbox.njk @@ -4,5 +4,5 @@ name="{{ data.name }}" type="checkbox" /> - +
diff --git a/src/component-library/form-fields/variants/select/select.njk b/src/component-library/form-fields/variants/select/select.njk index ab3ce5c6b69..fcf25d341a0 100644 --- a/src/component-library/form-fields/variants/select/select.njk +++ b/src/component-library/form-fields/variants/select/select.njk @@ -1,9 +1,8 @@ - + diff --git a/src/lib/components/LearnFilter/index.js b/src/lib/components/LearnFilter/index.js index 5202b0fe414..32efd30e77f 100644 --- a/src/lib/components/LearnFilter/index.js +++ b/src/lib/components/LearnFilter/index.js @@ -49,7 +49,7 @@ class LearnFilter extends BaseElement { /** @type {(filter: {id?: string, title: string}) => any} */ const filtersMap = (filter) => html` - ${this.expanded && this.user ? this.expandedTemplate : ''} - `; - } - - firstUpdated() { - // Close the profile switcher if it's open and the user presses escape. - this.addEventListener('keyup', (e) => { - if (e.key === 'Escape') { - if (this.expanded) { - this.expanded = false; - } - } - }); - - // Close the profile switcher if it's open and the user clicks outside. - document.addEventListener( - 'click', - /** - * @param {WMouseEvent} e - */ - (e) => { - if (this.expanded && !this.contains(e.target)) { - this.expanded = false; - } - }, - ); - } - - shouldUpdate(changedProperties) { - if (!changedProperties.has('user')) { - return true; - } - - this.expanded = false; - - if (!this.user) { - this.photoPromise = null; - return true; - } - - this.photoPromise = new Promise((resolve) => { - const image = new Image(); - image.src = this.user.photoURL; - image.className = 'w-profile-toggle__photo'; - image.onload = () => resolve(image); - - // Ignore errors and don't display a photo at all. - image.onerror = () => resolve(emptyFrag); - }); - return true; - } - - get expandedTemplate() { - /** - * Note, the Google One Bar will also display a blurb at the top if the - * user is signed in with a G Suite account. It does this using the - * hosted domain property of the Google Sign-in User object. - * https://developers.google.com/identity/sign-in/web/reference#googleusergethosteddomain - * - * I don't think this data is made available by Firebase auth so we don't - * implement this feature. - */ - return html` -
-
-
- -
-
-
${this.user.displayName}
- - - Privacy - - -
-
-
- - -
-
- `; - } -} - -customElements.define('web-profile-switcher', ProfileSwitcher); diff --git a/src/lib/components/ProfileSwitcherContainer/index.js b/src/lib/components/ProfileSwitcherContainer/index.js deleted file mode 100644 index bf5df67ac28..00000000000 --- a/src/lib/components/ProfileSwitcherContainer/index.js +++ /dev/null @@ -1,48 +0,0 @@ -import {html} from 'lit'; -import {initialize, signIn} from '../../fb'; -import {store} from '../../store'; -import {BaseStateElement} from '../BaseStateElement'; -import '../ProfileSwitcher'; - -/* eslint-disable require-jsdoc */ -class ProfileSwitcherContainer extends BaseStateElement { - static get properties() { - return { - isSignedIn: {type: Boolean}, - user: {type: Object}, - }; - } - - constructor() { - super(); - - // Initialize Firebase auth eagerly if the user was previously signed in. - // Otherwise auth will be initialized when clicking the sign-in button. - if (store.getState().isSignedIn) { - initialize(); - } - } - - render() { - if (this.isSignedIn) { - // nb. web-profile-switcher allows a null user - return html` - - `; - } - - return html` - - `; - } - - onStateChanged({isSignedIn, user}) { - this.isSignedIn = isSignedIn; - this.user = user; - } -} - -customElements.define( - 'web-profile-switcher-container', - ProfileSwitcherContainer, -); diff --git a/src/lib/components/ProgressBar/_styles.scss b/src/lib/components/ProgressBar/_styles.scss deleted file mode 100644 index 37fad6d9bad..00000000000 --- a/src/lib/components/ProgressBar/_styles.scss +++ /dev/null @@ -1,37 +0,0 @@ -@import '../../../styles/settings/colors'; - -// animate transforms instead of left/right -@keyframes indeterminate { - 0% { - transform: translateX(0) scaleX(0); - } - 40% { - transform: translateX(0) scaleX(0.4); - } - 100% { - transform: translateX(100%) scaleX(0.5); - } -} - -web-progress-bar { - display: block; -} - -.web-progress-bar-wrapper { - position: relative; - height: 4px; - display: block; - width: 100%; - background-color: transparentize($WEB_EXTENDED_TERTIARY_COLOR, .8); - border-radius: 2px; - overflow: hidden; - contain: strict; -} - -.web-progress-bar-indeterminate { - background-color: $WEB_EXTENDED_TERTIARY_COLOR; - width: 100%; - height: 100%; - animation: indeterminate 1s infinite linear; - transform-origin: 0% 50%; -} diff --git a/src/lib/components/ProgressBar/index.js b/src/lib/components/ProgressBar/index.js deleted file mode 100644 index b7b130ab9c2..00000000000 --- a/src/lib/components/ProgressBar/index.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @fileoverview An indeterminate progress bar. - */ - -import {html} from 'lit'; -import {BaseElement} from '../BaseElement'; -import './_styles.scss'; - -/** - * An indeterminate progress bar. - * @extends {BaseElement} - * @final - */ -class ProgressBar extends BaseElement { - render() { - return html` -
-
-
- `; - } - - firstUpdated() { - this.setAttribute('role', 'progressbar'); - } -} - -customElements.define('web-progress-bar', ProgressBar); diff --git a/src/lib/components/ResponseThinkAndCheck/_styles.scss b/src/lib/components/ResponseThinkAndCheck/_styles.scss deleted file mode 100644 index 5b321bfb6ca..00000000000 --- a/src/lib/components/ResponseThinkAndCheck/_styles.scss +++ /dev/null @@ -1,11 +0,0 @@ -@import '../../../styles/tools/mixins'; - -[state=completed] .web-response-tac__option-rationale { - @include w-body-text(); - background: rgba($SUCCESS_COLOR, .08); - border-radius: $GLOBAL_RADIUS; - color: var(--color-mid-text); - display: block; - line-height: 1.778 !important; // Override w-body-text mixin - padding: 1.125rem; -} diff --git a/src/lib/components/ResponseThinkAndCheck/index.js b/src/lib/components/ResponseThinkAndCheck/index.js index deee9b31d57..17a35a08bb4 100644 --- a/src/lib/components/ResponseThinkAndCheck/index.js +++ b/src/lib/components/ResponseThinkAndCheck/index.js @@ -1,6 +1,5 @@ import {html} from 'lit'; import {BaseResponseElement} from '../BaseResponseElement'; -import './_styles.scss'; export class ResponseThinkAndCheck extends BaseResponseElement { constructor() { diff --git a/src/lib/components/ScrollSpy/index.js b/src/lib/components/ScrollSpy/index.js index 8ae6342813f..176154d7230 100644 --- a/src/lib/components/ScrollSpy/index.js +++ b/src/lib/components/ScrollSpy/index.js @@ -26,8 +26,8 @@ class ScrollSpy extends BaseElement { constructor() { super(); this.scrollSpy = this.scrollSpy.bind(this); - this.tocActiveClass = 'w-scroll-spy__active'; - this.tocVisibleClass = 'w-scroll-spy__visible'; + this.tocActiveClass = 'scroll-spy__active'; + this.tocVisibleClass = 'scroll-spy__visible'; } connectedCallback() { diff --git a/src/lib/components/Search/index.js b/src/lib/components/Search/index.js index e9583ffedcd..2f02fc31cb8 100644 --- a/src/lib/components/Search/index.js +++ b/src/lib/components/Search/index.js @@ -6,8 +6,7 @@ import {html} from 'lit'; import {BaseStateElement} from '../BaseStateElement'; import {store} from '../../store'; import {debounce} from '../../utils/debounce'; -import {trackError} from '../../analytics'; -import 'focus-visible'; +import {logError} from '../../analytics'; let algoliaIndexPromise; @@ -263,7 +262,7 @@ class Search extends BaseStateElement { const settings = { hitsPerPage: 10, attributesToHighlight: ['title'], - attributesToRetrieve: ['url'], + attributesToRetrieve: ['url', 'parentTitle'], highlightPreTag: '', highlightPostTag: '', facetFilters: [`locales:${this.locale}`], @@ -280,7 +279,7 @@ class Search extends BaseStateElement { } catch (err) { console.error(err); console.error(err.debugData); - trackError(err, 'search'); + logError(err, 'search'); } } @@ -320,7 +319,7 @@ class Search extends BaseStateElement { onFocusIn() { loadAlgoliaLibrary().catch((err) => { console.error('failed to load Algolia', err); - trackError(err, 'algolia load'); + logError(err, 'algolia load'); }); this.expanded = true; diff --git a/src/lib/components/SearchResults/index.js b/src/lib/components/SearchResults/index.js index 58b51405476..e09519a7a2c 100644 --- a/src/lib/components/SearchResults/index.js +++ b/src/lib/components/SearchResults/index.js @@ -6,7 +6,6 @@ import {html} from 'lit'; import {unsafeHTML} from 'lit/directives/unsafe-html.js'; import {BaseElement} from '../BaseElement'; import {allowHtml, escapeHtml} from '../../../lib/utils/escape-html'; -import 'focus-visible'; /** * An Algolia search box. @@ -188,8 +187,14 @@ export class SearchResults extends BaseElement { aria-selected="${idx === this.cursor}" tabindex="-1" href="${hit.url}" - >${unsafeHTML(title)} + ${unsafeHTML(title)} + ${hit.parentTitle !== null + ? html`
+ ${unsafeHTML(hit.parentTitle)} +
` + : ''} + `; }); diff --git a/src/lib/components/SelectGroup/_styles.scss b/src/lib/components/SelectGroup/_styles.scss deleted file mode 100644 index cbd57d20316..00000000000 --- a/src/lib/components/SelectGroup/_styles.scss +++ /dev/null @@ -1,176 +0,0 @@ -@import '../../../styles/tools/mixins'; - -.web-select-group { - border: 0; // Reset default fieldset style - margin: 1.5rem 0; - padding: 0; // Reset default fieldset style -} - -.web-select-group__options-wrapper { - display: grid; - gap: 1em; - justify-items: start; -} - -// Need the specificity to avoid affecting nested SelectGroups -// (e.g., the AssessmentFeedbackForm selections in AssessmentQuestion). -[columns] > fieldset > .web-select-group__options-wrapper { - grid-template-columns: repeat(auto-fit, minmax(30ch, 1fr)); - justify-items: stretch; -} - -.web-select-group__option { - @include w-article-text(); - -webkit-tap-highlight-color: transparent; - align-items: center; - cursor: pointer; - display: flex; - line-height: 1.5 !important; // Override w-article-text mixin - margin: 0 !important; // Override w-article-text mixin - padding: 0 1rem; - position: relative; - z-index: 1; // Ensure selector states are always visible -} - -// A standalone selector with no visible text label. -.w-selectgroup__option--standalone { - justify-content: center; -} - -.web-select-group__option[disabled] { - pointer-events: none; -} - -.web-select-group__option-content { - transition: opacity .12s cubic-bezier(0, 0, .2, 1); -} - -// Use opacity rather than changing the color -// to account for image-based option content. -.web-select-group__option[disabled] .web-select-group__option-content { - opacity: .5; -} - -.web-select-group__input { - cursor: inherit; - left: 0; - margin: 0; - opacity: 0; - padding: 0; - position: absolute; - top: 0; -} - -// Style checkboxes. -.web-select-group__selector { - align-items: center; - border: 2px solid $WEB_PRIMARY_COLOR; - border-radius: 2px; - display: inline-flex; - flex: 0 0 auto; - height: 18px; - justify-content: center; - margin: .4375rem 1.5625rem .4375rem .3125rem; - position: relative; - transition: - border .12s cubic-bezier(0, 0, .2, 1), - background .12s cubic-bezier(0, 0, .2, 1); - width: 18px; -} - -.w-selectgroup__option--standalone ~ .w-selectgroup__selector { - margin: .4375rem; -} - -// Style radio buttons. -input[type='radio'] ~ .web-select-group__selector { - border-radius: $GLOBAL_ROUNDED; - height: 20px; - margin: .375rem 1.5rem .375rem .25rem; - width: 20px; -} - -.w-selectgroup__option--standalone input[type='radio'] ~ .w-selectgroup__selector { - margin: .375rem; -} - -// Handles hover, active, and focus states. -.web-select-group__selector::before { - background: none; - border: 1px solid transparent; - border-radius: $GLOBAL_ROUNDED; - content: ''; - display: block; - height: 40px; - left: 50%; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); - transition: - background .12s cubic-bezier(0, 0, .2, 1), - border .12s cubic-bezier(0, 0, .2, 1); - width: 40px; - z-index: -1; // Position behind the selector. -} - -// Checkbox check -.web-select-group__selector::after { - @include font-material-icon(); - color: $WHITE; - content: ''; - display: block; - font-size: 18px; -} - -// Radio button dot -input[type='radio'] ~ .web-select-group__selector::after { - border: 5px solid $WEB_PRIMARY_COLOR; - border-radius: $GLOBAL_ROUNDED; - height: 0; - transform: scale(0); - transition: transform .12s cubic-bezier(0, 0, .2, 1); - width: 0; -} - -@include hover() { - .web-select-group__option:hover .web-select-group__selector::before, - .web-select-group__input:focus ~ .web-select-group__selector::before { - background: rgba(55, 64, 255, 0.11); - } -} - -.web-select-group__option:active .web-select-group__selector::before { - background: rgba(55, 64, 255, 0.26); -} - -.web-select-group__input:focus ~ .web-select-group__selector::before { - border-color: $FOCUS_COLOR; -} - -.js-focus-visible .web-select-group__input:focus:not(.focus-visible) ~ .web-select-group__selector::before { - border-color: transparent; -} - -input[type='radio']:checked ~ .web-select-group__selector::after { - transform: scale(1); -} - -input[type='checkbox']:checked ~ .web-select-group__selector { - background: $WEB_PRIMARY_COLOR; -} - -input[type='checkbox']:checked ~ .web-select-group__selector::after { - content: 'check'; -} - -.web-select-group__input[disabled] ~ .web-select-group__selector { - border-color: $GREY_400; -} - -input[type='checkbox'][disabled]:checked ~ .web-select-group__selector { - background: $GREY_400; -} - -.web-select-group__input[disabled] ~ .web-select-group__selector::after { - border-color: $GREY_400; -} diff --git a/src/lib/components/SelectGroup/index.js b/src/lib/components/SelectGroup/index.js index 9bb0d1c7b5b..74b54bf1cf3 100644 --- a/src/lib/components/SelectGroup/index.js +++ b/src/lib/components/SelectGroup/index.js @@ -1,7 +1,6 @@ import {html} from 'lit'; import {BaseElement} from '../BaseElement'; import {generateIdSalt} from '../../utils/generate-salt'; -import 'focus-visible'; /** * Element that renders a radio group or checkbox group. diff --git a/src/lib/components/SigninButton/index.js b/src/lib/components/SigninButton/index.js index 36d3845f1f6..dfc7b5067e9 100644 --- a/src/lib/components/SigninButton/index.js +++ b/src/lib/components/SigninButton/index.js @@ -24,13 +24,13 @@ class SigninButton extends BaseStateElement { return html` + + `; } diff --git a/src/lib/components/SnackbarContainer/_styles.scss b/src/lib/components/SnackbarContainer/_styles.scss deleted file mode 100644 index 712e92c7e87..00000000000 --- a/src/lib/components/SnackbarContainer/_styles.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import '../../../styles/tools/mixins'; - -web-snackbar-container { - bottom: 0; - display: block; - left: 0; - margin: 0; - pointer-events: none; - position: fixed; - right: 0; - z-index: 1000; - - @include bp(sm) { - margin: 8px; - } -} diff --git a/src/lib/components/SnackbarContainer/index.js b/src/lib/components/SnackbarContainer/index.js index a78ebfe16d7..2da66454dcf 100644 --- a/src/lib/components/SnackbarContainer/index.js +++ b/src/lib/components/SnackbarContainer/index.js @@ -21,7 +21,11 @@ import {html} from 'lit'; import {BaseElement} from '../BaseElement'; import {store} from '../../store'; -import {setUserAcceptsCookies, checkIfUserAcceptsCookies} from '../../actions'; +import { + setUserAcceptsCookies, + setUserRejectsCookies, + checkIfUserAcceptsCookies, +} from '../../actions'; import '../Snackbar'; class SnackbarContainer extends BaseElement { @@ -57,7 +61,7 @@ class SnackbarContainer extends BaseElement { } onBeforeInstallPrompt(e) { - if (!this.acceptedCookies) { + if (!this.cookiePreference) { e.preventDefault(); } } @@ -66,15 +70,17 @@ class SnackbarContainer extends BaseElement { const state = store.getState(); this.open = state.showingSnackbar; this.type = state.snackbarType; - this.acceptedCookies = state.userAcceptsCookies; + this.cookiePreference = state.cookiePreference; } render() { - let action; + let onAccept; + let onReject; let isStacked; switch (this.type) { case 'cookies': - action = setUserAcceptsCookies; + onAccept = setUserAcceptsCookies; + onReject = setUserRejectsCookies; isStacked = true; break; default: @@ -86,7 +92,8 @@ class SnackbarContainer extends BaseElement { .type="${this.type}" .open="${this.open}" .stacked="${isStacked}" - .action="${action}" + .onAccept="${onAccept}" + .onReject="${onReject}" > `; } diff --git a/src/lib/components/Subscribe/index.js b/src/lib/components/Subscribe/index.js index 7f36fdf8710..a471e17f15d 100644 --- a/src/lib/components/Subscribe/index.js +++ b/src/lib/components/Subscribe/index.js @@ -3,7 +3,7 @@ */ import {BaseElement} from '../BaseElement'; -import {trackError, trackEvent} from '../../analytics'; +import {logError, logEvent} from '../../analytics'; const pTagSelector = '.subscribe__error__message'; const hiddenClass = 'hidden-yes'; @@ -33,10 +33,49 @@ class Subscribe extends BaseElement { window['recaptchaSuccess'] = this.captchaCheck.bind(this); } + /** + * Called by the IntersectionObserver defined in this#connectedCallback. + * + * @param {IntersectionObserverEntry[]} entries + */ + onIntersection(entries) { + const entry = entries[0]; + if (!entry.isIntersecting) { + return; + } + + // can safely assume this.intersectionObserver is defined, since onIntersection is being called + this.intersectionObserver.disconnect(); + window.recaptchaLoadCallback = () => { + /** @type {HTMLDivElement} */ + const recaptchaContainerEl = this.querySelector('.g-recaptcha'); + // fix for percy re-executing JavaScript with pre-rendered DOM + recaptchaContainerEl.children[0].remove(); + + window.grecaptcha.render(recaptchaContainerEl, { + sitekey: recaptchaContainerEl.dataset.sitekey, + }); + }; + + window.loadScript( + 'https://www.google.com/recaptcha/api.js?onload=recaptchaLoadCallback&render=explicit', + ); + } + connectedCallback() { + if (!this.classList.contains('unresolved')) { + return; + } + super.connectedCallback(); /** @type {HTMLFormElement} */ this.form = this.querySelector('form'); + this.intersectionObserver = new IntersectionObserver((entries) => + this.onIntersection(entries), + ); + + this.intersectionObserver.observe(this.form); + /** @type HTMLElement */ this.subscribeError = this.querySelector('.subscribe__error'); this.subscribeMessage = this.querySelector('.subscribe__message'); @@ -110,7 +149,7 @@ class Subscribe extends BaseElement { this.subscribeError.classList.toggle(hiddenClass, false); - trackError(error, 'Email form failed to submit because'); + logError(error, 'Email form failed to submit because'); } onSubmit(e) { @@ -144,10 +183,9 @@ class Subscribe extends BaseElement { this.subscribeMessage.textContent = `Thank you! You're all signed up.`; this.form.removeEventListener('submit', this.onSubmit); this.form.parentElement.removeChild(this.form); - trackEvent({ - category: 'web.dev', - action: 'submit', - label: 'subscribe, newsletter', + logEvent('submit', { + event_category: 'web.dev', + event_label: 'subscribe, newsletter', }); } } diff --git a/src/lib/components/Tabs/index.js b/src/lib/components/Tabs/index.js index 3920910aaec..f5db69a6458 100644 --- a/src/lib/components/Tabs/index.js +++ b/src/lib/components/Tabs/index.js @@ -2,7 +2,6 @@ import {html} from 'lit'; import {BaseElement} from '../BaseElement'; import {checkOverflow} from '../../utils/check-overflow'; import {generateIdSalt} from '../../utils/generate-salt'; -import 'focus-visible'; /** * Element that wraps each child element in a tab panel @@ -15,6 +14,7 @@ export class Tabs extends BaseElement { label: {type: String}, activeTab: {type: Number, reflect: true}, overflow: {type: Boolean, reflect: true}, + limit: {type: Number, reflect: true}, }; } @@ -26,6 +26,7 @@ export class Tabs extends BaseElement { this.prerenderedChildren = null; this.tabs = null; this.idSalt = generateIdSalt('web-tab-'); + this.limit = this.children.length; this.onResize = this.onResize.bind(this); this._changeTab = this._changeTab.bind(this); @@ -34,6 +35,7 @@ export class Tabs extends BaseElement { this.nextTab = this.nextTab.bind(this); this.firstTab = this.firstTab.bind(this); this.lastTab = this.lastTab.bind(this); + this.onClickLoadMore = this.onClickLoadMore.bind(this); } render() { @@ -41,8 +43,14 @@ export class Tabs extends BaseElement { this.prerenderedChildren = []; this.tabs = []; let i = 1; - for (const child of this.children) { + if (this.limit && i === this.limit + 1) { + this.tabs.push(this.loadMoreTab()); + this.prerenderedChildren.push( + html``, + ); + } + // Set id and aria-labelledby attributes for each panel for a11y. this.prerenderedChildren.push(this.panelTemplate(i, child)); // Get tab label from child data-label attribute @@ -65,6 +73,27 @@ export class Tabs extends BaseElement { `; } + loadMoreTab() { + return html` + + `; + } + + onClickLoadMore(e) { + const tab = e.currentTarget; + const parentTabs = tab.parentElement; + + const extendTabs = parentTabs.querySelectorAll('.web-tabs__tab.hidden'); + extendTabs.forEach((tab) => tab.classList.remove('hidden')); + + tab.classList.add('hidden'); + } + tabTemplate(i, tabLabel) { switch (tabLabel) { case 'question': @@ -88,7 +117,9 @@ export class Tabs extends BaseElement { @click=${this.onFocus} @focus=${this.onFocus} @keydown=${this.onKeydown} - class="web-tabs__tab gc-analytics-event" + class="web-tabs__tab + gc-analytics-event + ${i > this.limit ? 'hidden' : ''}" role="tab" aria-selected="false" id="web-tab-${this.idSalt}-${i}" diff --git a/src/lib/components/UrlChooser/_styles.scss b/src/lib/components/UrlChooser/_styles.scss deleted file mode 100644 index 22d22f5bf5f..00000000000 --- a/src/lib/components/UrlChooser/_styles.scss +++ /dev/null @@ -1,161 +0,0 @@ -@import '../../../styles/settings/colors'; -@import '../../../styles/settings/dimensions'; -@import '../../../styles/settings/global'; -@import '../../../styles/tools/mixins'; - -// ============================================================================= -// URL CHOOSER -// -// Lets the user select a URL and trigger an audit. -// -// ============================================================================= - -web-url-chooser { - $INPUT_HEIGHT: 56px; - - display: block; - - &:not([switching]) .lh-enterurl--switch { - display: none; - } - - &[switching] .lh-enterurl--selected { - display: none; - } - - .lh-report-header-enterurl { - position: relative; - } - - .lh-enterurl { - position: relative; - align-self: center; - } - - /** The "X" button that appears to the right of a URL. */ - .lh-enterurl__close { - align-items: center; - background: none; - border: 0; - box-shadow: none; - color: $GREY_400; - display: flex; - height: 100%; - justify-content: center; - margin: 0 8px; - padding: 0; - position: absolute; - right: 0; - top: 0; - - &[disabled] { - display: none; - } - - &:focus, - &::-moz-focus-inner { - outline: 0; - } - - &:active, - &:hover { - color: $GREY_900; - } - } - - /** The currently selected URL, not in editing mode. */ - .lh-enterurl--selected { - font-weight: $FONT_WEIGHT_MEDIUM; - border: 1px solid $GREY_400; - // image is duplicated in lh-input.scss - background: url('data:image/svg+xml;utf8,') - no-repeat 2% 50%; - } - - .lh-enterurl__url { - padding: 6px 36px 2px; - height: 50px; - line-height: 40px; - display: grid; - - p { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - } - - .lh-running web-progress-bar { - visibility: visible; - } - - web-progress-bar { - visibility: hidden; - } - - .lh-input { - background-color: $WHITE; - border-radius: 2px; - border: 1px solid $GREY_200; - color: $PRIMARY_TEXT_COLOR; - font: 16px / 20px Roboto, sans-serif; - height: $INPUT_HEIGHT; - margin: 0; - max-width: 100%; - outline: none; - padding: 8px 16px; - transition: box-shadow $TRANSITION_SPEED ease-in-out; - width: 100%; - - &:focus { - box-shadow: inset 0 -2px 0 0 $FOCUS_COLOR; - } - - &::-ms-clear { - display: none; - } - } - - .lh-controls { - display: flex; - flex-wrap: wrap; - margin-top: 8px; - } - - .lh-controls .w-button { - // List all vals so autoprefixer doesn't rewrite this to flex: 1 1 0% - // and make "switch url" text ellipsis. - flex: 1 1 auto; - height: $INPUT_HEIGHT; - justify-content: center; - } - - .lh-controls button + button { - margin-left: 16px; - } -} - -web-url-chooser { - /// @deprecated - // TODO(robdodson): This should be replaced with the @media rules from breakpoints.scss, but the - // Measure page is special and currently does not have a matching value. - @media screen and (min-width: $BREAKPOINT_VALUE_TABLET) { - .lh-report-header-enterurl { - display: flex; - } - - .lh-controls { - margin-top: 0; - flex-wrap: nowrap; - } - - .lh-enterurl { - margin-right: 32px; - flex: auto; - } - - .lh-input { - width: 100%; - } - } -} diff --git a/src/lib/components/UrlChooser/index.js b/src/lib/components/UrlChooser/index.js deleted file mode 100644 index 623dbc5fd09..00000000000 --- a/src/lib/components/UrlChooser/index.js +++ /dev/null @@ -1,203 +0,0 @@ -import {html} from 'lit'; -import {BaseElement} from '../BaseElement'; -import './_styles.scss'; - -/** - * @fileoverview Displays the primary URL chooser for Lighthouse. - */ -class UrlChooser extends BaseElement { - static get properties() { - return { - url: {type: String}, - switching: {type: Boolean, reflect: true}, - hasError: {type: Boolean}, - disabled: {type: Boolean}, - }; - } - - constructor() { - super(); - this.url = null; // when signed out or waiting for Firestore, this is null - this.switching = true; // controls whether the user is editing the URL - this.disabled = false; // disables buttons (because Lighthouse is active) - - // non-properties (stolen DOM nodes) - /** @type HTMLInputElement | null */ - this._urlInput; - /** @type HTMLButtonElement | null */ - this._runLighthouseButton; - this.hasError = false; - } - - render() { - const currentURL = new URL(location.href); - const urlSearchParam = currentURL.searchParams.get('url'); - - return html` -
-
-
-

${this.url}

-
- -
-
- - -
-
- - -
-
- `; - } - - firstUpdated() { - this._urlInput = this.renderRoot.querySelector('input[type="url"]'); - this._runLighthouseButton = this.renderRoot.querySelector('#run-lh-button'); - } - - updated(changedProperties) { - const input = this._urlInput; - - if (changedProperties.has('hasError')) { - if (this.hasError) { - // hasError false -> true implies switching, but not the other way around - this.switching = true; - } - } - if (changedProperties.has('switching') && this.switching) { - input.setSelectionRange(0, input.value.length); - input.focus(); - } - if (changedProperties.has('url')) { - // Note: This behavior can't be performed in a setter as the might not have been - // rendered yet. - const url = this.url; - if (input) { - if (this.switching && url && !input.value) { - // if the user has just signed in, the element was in an initial state, - // AND the user hasn't typed anything, reset element with URL - input.value = url; - this.switching = false; - } else if (url === null && !this.switching) { - // if the user has signed out, clear the href and enter switching mode - input.value = ''; - this.switching = true; - } else if (!this.switching) { - // in all other cases, only update the URL if ther user isn't switching - input.value = url; - } - } - } - } - - onRequestAudit() { - // Even if the user isn't switching URLs, fix and verify the saved URL which is inserted into - // the inside this element. - this.fixUpUrl(); - if (!this._urlInput.value || !this._urlInput.validity.valid) { - const detail = 'Invalid URL.'; - const event = new CustomEvent('web-error', {bubbles: true, detail}); - this.dispatchEvent(event); - return; - } - - // "Request Audit" finishes editing the URL. - this.switching = false; - - const event = new CustomEvent('audit', {detail: this._urlInput.value}); - this.dispatchEvent(event); - - const currentURL = new URL(location.href); - currentURL.searchParams.set('url', this._urlInput.value); - history.replaceState({}, '', currentURL.href); - } - - onSwitchUrl() { - this.switching = true; - - // Focus won't occur if switching is already true, so trigger it here too. - this._urlInput.focus(); - } - - onUrlKeyup(e) { - if (e.key === 'Escape') { - this.onClearInput(); - } else if (e.key === 'Enter') { - this._runLighthouseButton.click(); - } - } - - /** - * Performs basic fixes on the URL in the . - */ - fixUpUrl() { - let url = this._urlInput.value.trim(); - if (!url) { - return; - } - if (!url.startsWith('https://') && !url.startsWith('http://')) { - url = `https://${url}`; - } - if (url !== this._urlInput.value && this._urlInput) { - this._urlInput.value = url; - } - } - - onClearInput() { - if (this._urlInput) { - this._urlInput.value = ''; - } - } -} - -customElements.define('web-url-chooser', UrlChooser); diff --git a/src/lib/components/UrlChooserContainer/index.js b/src/lib/components/UrlChooserContainer/index.js deleted file mode 100644 index 845209c67fd..00000000000 --- a/src/lib/components/UrlChooserContainer/index.js +++ /dev/null @@ -1,60 +0,0 @@ -import {html} from 'lit'; -import {BaseStateElement} from '../BaseStateElement'; -import {requestRunPSI, setLighthouseError} from '../../actions'; -import '../UrlChooser'; - -/** - * @fileoverview Manages state interaction with UrlChooser. - * - * Invokes Lighthouse when the UrlChooser requests it, possibly with an updated URL. - */ -class UrlChooserContainer extends BaseStateElement { - static get properties() { - return { - url: {type: String}, - active: {type: Boolean}, - hasError: {type: Boolean}, - }; - } - - constructor() { - super(); - this.url = null; // when signed out or waiting for Firestore, this is null - this.active = false; - } - - render() { - return html` - - `; - } - - onStateChanged(state) { - // As userUrl can change (a signed-in user can modify it in another browser - // window), _prefer_ any URL that's currently being run through Lighthouse. - // This will prevent e.g. "foo.com" (after a user has hit "Run Audit") being - // replaced by "bar.com" (which is run in another browser window), and then - // results being approprtioned to the wrong URL. - - this.url = state.activeLighthouseUrl || state.userUrl; - this.active = state.activeLighthouseUrl !== null; - this.hasError = Boolean(state.lighthouseError); - } - - runAudit(e) { - const url = e.detail; - requestRunPSI(url); - } - - onError(e) { - setLighthouseError(e.detail); - } -} - -customElements.define('web-url-chooser-container', UrlChooserContainer); diff --git a/src/lib/components/base.js b/src/lib/components/base.js index f203aa847c5..eb5e56590aa 100644 --- a/src/lib/components/base.js +++ b/src/lib/components/base.js @@ -4,8 +4,8 @@ import 'webdev-infra/web-components/YouTube'; -import './ProfileSwitcherContainer'; import './Header'; +import './DevRelRibbon'; import './LanguageSelect'; import './NavigationDrawer'; import './SnackbarContainer'; diff --git a/src/lib/fb.js b/src/lib/fb.js index d13ea11349e..41c0e94afd6 100644 --- a/src/lib/fb.js +++ b/src/lib/fb.js @@ -16,7 +16,7 @@ import {firebaseConfig} from 'webdev_config'; import {store} from './store'; import {clearSignedInState} from './actions'; -import {trackError} from './analytics'; +import {logError} from './analytics'; let isInitialized = false; @@ -195,7 +195,7 @@ export async function saveUserUrl(url, auditedOn = null) { // Note: We don't plan to do anything here. If we can't write to Firebase, we can still // try to invoke Lighthouse with the new URL. console.warn('could not write URL to Firestore', err); - trackError(err, 'write URL'); + logError(err, 'write URL'); } return auditedOn; @@ -216,7 +216,7 @@ export async function signIn() { user = res.user; } catch (err) { console.error('signIn error', err); - trackError(err, 'signIn'); + logError(err, 'signIn'); } return user; @@ -232,6 +232,6 @@ export async function signOut() { await authSignOut(getAuth()); } catch (err) { console.error('signOut error', err); - trackError(err, 'signOut'); + logError(err, 'signOut'); } } diff --git a/src/lib/pages/explore.js b/src/lib/pages/explore.js new file mode 100644 index 00000000000..63c3764df0a --- /dev/null +++ b/src/lib/pages/explore.js @@ -0,0 +1,7 @@ +/** + * @fileoveriew Entrypoint for Explore page. + */ + +import '../components/LearnFilter'; + +import '../components/base'; diff --git a/src/lib/pages/home.js b/src/lib/pages/home.js index 0720e30f8fe..6aec00d974c 100644 --- a/src/lib/pages/home.js +++ b/src/lib/pages/home.js @@ -2,7 +2,7 @@ * @fileoveriew Entrypoint for Home page. */ -import '../components/Carousel'; import '../components/Subscribe'; +import '../components/LearnFilter'; import '../components/base'; diff --git a/src/lib/pages/learn.js b/src/lib/pages/learn.js index b5285196c6b..fc4f0295600 100644 --- a/src/lib/pages/learn.js +++ b/src/lib/pages/learn.js @@ -2,7 +2,4 @@ * @fileoveriew Entrypoint for Learn page. */ -import '../components/Carousel'; -import '../components/LearnFilter'; - import '../components/base'; diff --git a/src/lib/pages/measure.js b/src/lib/pages/measure.js index a600d1efcf0..ffe40d4f9dc 100644 --- a/src/lib/pages/measure.js +++ b/src/lib/pages/measure.js @@ -3,9 +3,4 @@ * Web Components from the rest of web.dev. */ -import '../components/ProgressBar'; -import '../components/LighthouseViewer'; -import '../components/UrlChooser'; -import '../components/UrlChooserContainer'; - import '../components/base'; diff --git a/src/lib/patterns.js b/src/lib/patterns.js index 1ece3b85549..7fadb8aea50 100644 --- a/src/lib/patterns.js +++ b/src/lib/patterns.js @@ -26,14 +26,37 @@ const path = require('path'); const matter = require('gray-matter'); const stripDot = /^\./; -const basePath = path.join(__dirname, '../../src/site/content/en/patterns'); -const files = glob.sync(path.join(basePath, '**', 'index.md')); + +const contentRoot = path.join( + __dirname, + '..', + '..', + 'src', + 'site', + 'content', + 'en', +); +const basePath = path.join(contentRoot, 'patterns'); + +const patternPaths = [ + path.join(contentRoot, 'patterns', '**', 'index.md'), + path.join( + contentRoot, + 'handbook', + 'content-types', + 'example-pattern', + '**', + 'index.md', + ), +]; + +const patterns = glob.sync(patternPaths); /** @type {CodePatternSets} */ const allPatternSets = {}; /** @type {CodePatterns} */ -const allPatterns = files.reduce((patterns, file) => { +const allPatterns = patterns.reduce((patterns, file) => { const id = path.relative(basePath, path.dirname(file)); const fileContents = matter(fs.readFileSync(file, 'utf-8')); const suite = path.dirname(id); @@ -59,8 +82,13 @@ const allPatterns = files.reduce((patterns, file) => { } const assetsPaths = glob.sync(path.join(path.dirname(file), 'assets', '*')); + /** @type {CodePatternAssets} */ const assets = assetsPaths.reduce((out, assetPath) => { + // Ignore images. + if (/\.(?:png|jpe?g|avif|webp|gif|svg)$/.test(assetPath)) { + return out; + } const basename = path.basename(assetPath); const type = path.extname(assetPath).replace(stripDot, ''); const content = fs.readFileSync(assetPath, 'utf-8'); diff --git a/src/lib/store.js b/src/lib/store.js index 04e26371b23..2dc12f108a0 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -49,7 +49,7 @@ const initialState = { // cookie policy. // We automatically accept cookies in dev and test environments so the cookie // banner doesn't interfere with tests. - userAcceptsCookies: !isProd, + cookiePreference: isProd ? null : 'accepts', // Handle hiding/showing the snackbar. showingSnackbar: false, @@ -61,6 +61,7 @@ const initialState = { // Data for the current web.dev/LIVE event. eventDays: [], activeEventDay: null, // livestream shown for this day + gtmScriptLoaded: false, }; let store; diff --git a/src/lib/utils/is-design-system-context.js b/src/lib/utils/is-design-system-context.js deleted file mode 100644 index e175b873fe2..00000000000 --- a/src/lib/utils/is-design-system-context.js +++ /dev/null @@ -1,5 +0,0 @@ -/* global __designSystemPaths */ - -// Attempts to find passed path in generated design system -// compatible paths, which are a Set -module.exports = (path) => __designSystemPaths.has(path); diff --git a/src/lib/utils/language.js b/src/lib/utils/language.js index ee2d04975eb..47806a30981 100644 --- a/src/lib/utils/language.js +++ b/src/lib/utils/language.js @@ -21,6 +21,25 @@ const languageNames = { fr: 'Français', }; +/** + * When we display a list of translations available for a given page, + * use this ordering for the names of the languages. + * See https://github.com/GoogleChrome/web.dev/issues/7430 + * @const + */ +const languageOrdering = [ + 'de', + 'en', + 'es', + 'fr', + 'pl', + 'pt', + 'ru', + 'zh', + 'ja', + 'ko', +]; + /** * A default language for the site. * @const @@ -43,8 +62,9 @@ function isValidLanguage(lang) { } module.exports = { - languageNames, defaultLanguage, isValidLanguage, + languageNames, + languageOrdering, supportedLanguages, }; diff --git a/src/lib/utils/router.js b/src/lib/utils/router.js index 6f3222346d6..f71ae60431c 100644 --- a/src/lib/utils/router.js +++ b/src/lib/utils/router.js @@ -1,6 +1,6 @@ import './abort-controller-polyfill'; import {addPageToContentIndex} from '../content-indexing'; -import {trackError} from '../analytics'; +import {logError} from '../analytics'; let globalHandler; let recentActiveUrl; // current URL not including hash @@ -205,7 +205,7 @@ export function route(url) { scrollToHashOrTop(u.hash); addPageToContentIndex(u.href).catch((error) => { console.warn('could not index page', u.href, error); - trackError(error, 'Content Indexing error'); + logError(error, 'Content Indexing error'); }); } }); diff --git a/src/scss/_config.scss b/src/scss/_config.scss index 3e7f3ea6844..1d5473fa92b 100644 --- a/src/scss/_config.scss +++ b/src/scss/_config.scss @@ -203,5 +203,6 @@ $gorko-config: ( 'md': '(min-width: 50em)', 'lg': '(min-width: 80em)', 'xl': '(min-width: 106em)', + 'md-max': '(max-width: 591px)', /* For temporary compatibility with DCC */ ), ); diff --git a/src/scss/_rollout.scss b/src/scss/_rollout.scss deleted file mode 100644 index 866e6e655e8..00000000000 --- a/src/scss/_rollout.scss +++ /dev/null @@ -1,102 +0,0 @@ -/// ROLLOUT PATCHES -/// These styles must be removed when the rollout is complete. -/// They tweak existing, difficult to change, elements but should -/// be completely useless once those elements have been changed - -.w-callout { - max-width: $global-prose-element-max-width; - border: 1px solid get-utility-value('color', 'stroke'); -} - -.w-callout__lockup::before { - display: none; -} - -/// The assesment component recreates inputs, so we need to pull that out -.web-select-group__input { - opacity: 1 !important; -} - -.web-select-group__selector { - display: none !important; -} - -.web-select-group__option-content { - padding-inline-start: $global-gutter-narrow; -} - -/// SITE HEADER SIGN IN -.site-header .w-profile-signin { - display: inline-block; - padding: 1.5em $global-gutter-narrow; - text-decoration: none; - text-transform: none; - font: inherit; - flex: none; - - @include apply-utility('color', 'mid-text'); -} - -/// Strong-arm the Google branded dialog -.site-header .w-profile-dialog__account:link, -.site-header .w-profile-dialog__account:visited { - color: #fff; - text-decoration: none; -} - -.site-header .w-profile-dialog__account:hover { - background: #4d90fe; -} - -.site-header .w-profile-dialog__privacy:hover { - background: none; -} - -/// RESPONSIVE OVERRIDES -@include media-query('md') { - web-profile-switcher-container { - margin-left: 0 !important; - } -} - -web-url-chooser { - /// Temporary button styles, as the class "button" cannot be safely added as it used by the old css. - .w-button { - text-transform: uppercase; - letter-spacing: 0.03ch; - border-radius: 3px; - padding: 1.4em 1em; - display: inline-flex; - align-items: center; - border: none; - text-decoration: none; - cursor: pointer; - position: relative; - overflow: hidden; - background: var(--color-action-bg); - color: var(--color-action-text); - font-weight: 500; - line-height: 1.2; - } - - .w-button[data-type='primary'] { - border-color: var(--color-action-bg-primary); - background: var(--color-action-bg-primary); - color: var(--color-action-text-primary); - } - - .w-button[disabled] { - filter: invert(0.2) !important; - box-shadow: none !important; - transform: none !important; - cursor: not-allowed !important; - } -} - -.w-label + web-copy-code { - --flow-space: 0.5rem; -} - -share-action.fab { - gap: unset; -} diff --git a/src/scss/blocks/_author.scss b/src/scss/blocks/_author.scss index ba84d694adb..f0eea8985ca 100644 --- a/src/scss/blocks/_author.scss +++ b/src/scss/blocks/_author.scss @@ -34,3 +34,76 @@ .author__bio + .author__links { --flow-space: 0.8em; } + +.author-profile { + &__name { + flex-wrap: nowrap; + margin-bottom: 30px; + + .headline__title { + font-size: 24px; + } + + .avatar, + .avatar > img { + width: 80px; + height: 80px; + } + } + + &__socials { + margin: 2rem 0; + } + + &__bio { + display: none; + } + + &__detail { + display: flex; + flex-direction: column-reverse; + + > details { + display: block; + } + } + + a:not(:hover) > svg { + @include apply-utility('color', 'mid-text'); + } + + @include media-query('md') { + &__name { + flex-wrap: nowrap; + + .headline__title { + font-size: 36px; + } + + .avatar, + .avatar > img { + width: 120px; + height: 120px; + } + } + + &__detail { + display: flex; + flex-direction: column; + margin-top: 0 !important; + + > details { + display: none; + } + } + + &__socials { + margin: 1.25rem 0 1rem; + } + + &__bio { + display: block; + } + } +} + diff --git a/src/scss/blocks/_baseline.scss b/src/scss/blocks/_baseline.scss new file mode 100644 index 00000000000..b433c56ae79 --- /dev/null +++ b/src/scss/blocks/_baseline.scss @@ -0,0 +1,66 @@ +.baseline { + border: 1px solid get-color('state-good'); + border-radius: $global-radius-base; + padding: $global-gutter; + + + summary::before { + background-color: transparent; + border: none; + } + + summary::after { + color: get-color('state-good'); + } + + summary:hover::before, + summary:focus::before { + background: get-color('state-good-bright'); + outline: none; + } + + &__title { + display: flex; + gap: 0.5em; + } + + &__icon { + display: inline-block; + vertical-align: sub; + } + + &__keyword { + font-weight: 500; + } + + &__browser { + background: get-color('state-good-bright'); + padding: 0.4rem; + border-radius: 1.4rem; + margin-inline-end: 8px; + + img { + width: 1.4rem; + height: 1.4rem; + background-color: transparent; + display: inline-block; + vertical-align: sub; + } + + img + img { + margin-left: 0.4rem; + } + } + + a { + text-transform: uppercase; + letter-spacing: .03ch; + font-size: 1rem; + font-weight: 500; + text-decoration: none; + } + + a:hover { + text-decoration: underline; + } +} diff --git a/src/scss/blocks/_brand.scss b/src/scss/blocks/_brand.scss index dd59ecdb22d..f3eef3af136 100644 --- a/src/scss/blocks/_brand.scss +++ b/src/scss/blocks/_brand.scss @@ -6,6 +6,7 @@ svg { width: 100%; max-width: 8rem; + fill: var(--color-mid-text); } } diff --git a/src/scss/blocks/_browser-compat.scss b/src/scss/blocks/_browser-compat.scss deleted file mode 100644 index 69cebab5060..00000000000 --- a/src/scss/blocks/_browser-compat.scss +++ /dev/null @@ -1,111 +0,0 @@ -/// PATTERN LIBRARY LOCATION -/// https://web.dev/design-system/pattern/browser-compat -.browser-compat { - --gutter: 1rem #{get-utility-value('pad-block', 'size-2')}; - align-items: center; - color: get-utility-value('color', 'mid-text'); - display: flex; - flex-wrap: wrap; - - @include media-query('md') { - flex-wrap: nowrap; - } -} - -// Icons -.browser-compat__icon { - height: 24px; - width: 24px; - margin-left: 24px; - margin-right: 6px; - display: inline-block; - background: content-box no-repeat transparent; - - &[data-browser='chrome'] { - background-image: url('/images/icons/chrome.svg'); - margin-left: 0; - - @include media-query('md') { - margin-left: 24px; - } - } - - &[data-browser='firefox'] { - background-image: url('/images/icons/firefox.svg'); - } - - &[data-browser='edge'] { - background-image: url('/images/icons/edge.svg'); - } - - &[data-browser='safari'] { - background-image: url('/images/icons/safari_24x24.png'); - } -} - -.browser-compat__items { - display: flex; - align-items: center; - margin: 1rem 1rem 1rem 0; -} - -// Version -.browser-compat__version { - border-radius: 100%; - font-size: get-size('size-0'); - height: 20px; - line-height: 20px; - text-align: center; - min-width: 20px; - display: inline-block; - - &[data-compat='yes'] { - background: get-utility-value('bg', 'state-good-bg'); - color: get-utility-value('color', 'state-good-text'); - } - - &[data-compat='preview'] { - background: get-utility-value('bg', 'state-warn-bg'); - color: get-utility-value('color', 'state-warn-text'); - } - - &[data-compat='flag'] { - background: get-utility-value('bg', 'state-warn-bg'); - color: get-utility-value('color', 'state-warn-text'); - } - - &[data-compat='deprecated'] { - background: get-utility-value('bg', 'state-bad-bg'); - color: get-utility-value('color', 'state-bad-text'); - } - - &[data-compat='no'] { - background: get-utility-value('bg', 'state-bad-bg'); - color: get-utility-value('color', 'state-bad-text'); - } -} - -.browser-compat__label { - color: get-utility-value('color', 'mid-text'); - flex: 0 0 100%; - font-style: normal; - margin-right: 1rem; - width: 100%; - - @include media-query('md') { - margin-bottom: 0; - flex: none; - width: auto; - } -} - -.browser-compat__link { - flex: 0 0 100%; - margin-left: 0; - - @include media-query('md') { - flex: none; - margin-left: 24px; - } -} - diff --git a/src/scss/blocks/_button.scss b/src/scss/blocks/_button.scss index adf4724b29b..8998236c827 100644 --- a/src/scss/blocks/_button.scss +++ b/src/scss/blocks/_button.scss @@ -7,4 +7,8 @@ padding: 1.4em 1em; @include button-base-styles(); + + &__round { + border-radius: 8px; + } } diff --git a/src/scss/blocks/_card.scss b/src/scss/blocks/_card.scss index 23cc18d23e7..584c8b44bda 100644 --- a/src/scss/blocks/_card.scss +++ b/src/scss/blocks/_card.scss @@ -105,6 +105,7 @@ .card__header { width: 100%; margin-bottom: get-space('size-1'); + font-size: 0.875rem; } .card__hero { diff --git a/src/scss/blocks/_counter.scss b/src/scss/blocks/_counter.scss index 412a296160e..a74f37a80c2 100644 --- a/src/scss/blocks/_counter.scss +++ b/src/scss/blocks/_counter.scss @@ -10,7 +10,6 @@ font-size: get-size('size-0'); text-decoration: none; - @include apply-utility('bg', 'mid-bg'); @include apply-utility('color', 'action-text'); svg { diff --git a/src/scss/blocks/_devrel-ribbon.scss b/src/scss/blocks/_devrel-ribbon.scss new file mode 100644 index 00000000000..42f6e04f484 --- /dev/null +++ b/src/scss/blocks/_devrel-ribbon.scss @@ -0,0 +1,62 @@ +// DEVREL RIBBON + +.devrel-ribbon { + align-items: flex-end; + display: flex; + height: 100vh; + left: 0; + position: absolute; + z-index: 9; + + @media (min-width: 1000px) { + align-items: center; + justify-content: center; + left: auto; + right: 0; + } + + &__ribbon { + display: flex; + align-items: center; + position: fixed; + padding: 4px 6px; + text-decoration: none; + transform: translateY(100%); + transition: transform 0.2s ease; + + @media (min-width: 1000px) { + bottom: auto; + left: auto; + right: 14px; + top: calc(50% - 60px); + transform-origin: right; + transform: rotate(-90deg) translateY(100%); + } + + &.--visible { + transform: translate(0);; + + @media (min-width: 1000px) { + transform: rotate(-90deg); + } + } + + svg { + height: 12px; + width: 12px; + margin: 0 4px; + } + + span { + font-size: 12px; + font-family: inherit; + color: get-color('shades-light-bright'); + } + + &:hover, + &:focus, + &:active { + background: get-color('shades-charcoal'); + } + } +} diff --git a/src/scss/blocks/_feature-card.scss b/src/scss/blocks/_feature-card.scss index 836a3915091..bca763fd5c6 100644 --- a/src/scss/blocks/_feature-card.scss +++ b/src/scss/blocks/_feature-card.scss @@ -12,7 +12,12 @@ color: get-color('shades-dark'); } - > img { + > :not(img) { + z-index: 1; + } + + > img, + > video { position: absolute; inset: 0 0 0 0; width: 100%; @@ -22,9 +27,6 @@ z-index: 0; } - > :not(img) { - z-index: 1; - } } .feature-card__eyebrow { diff --git a/src/scss/blocks/_icon-button.scss b/src/scss/blocks/_icon-button.scss index 3328caaec0d..67edecf5362 100644 --- a/src/scss/blocks/_icon-button.scss +++ b/src/scss/blocks/_icon-button.scss @@ -23,4 +23,8 @@ &:hover svg { filter: invert(0.2); } + + &__round { + border-radius: 8px; + } } diff --git a/src/scss/blocks/_post-credits.scss b/src/scss/blocks/_post-credits.scss new file mode 100644 index 00000000000..9c5c3c55493 --- /dev/null +++ b/src/scss/blocks/_post-credits.scss @@ -0,0 +1,33 @@ +.post-credits { + border-top: 1px solid get-color('shades-gray-glare'); + display: flex; + flex-direction: column; + font-size: 0.875rem; + font-weight: 400; + padding-top: 2rem; + + div { + margin-bottom: 2rem; + width: 100%; + } + + h3 { + color: get-color('shades-gray'); + font-size: 0.875rem; + line-height: 170%; + } + + a{ + width: fit-content; + } + + &__editors, &__credits { + display: flex; + flex-direction: column; + } + + @include media-query('md'){ + flex-direction: row; + flex: 1 1 0; + } +} \ No newline at end of file diff --git a/src/scss/blocks/_site-footer.scss b/src/scss/blocks/_site-footer.scss index 5bd97639e29..dc07a4fe802 100644 --- a/src/scss/blocks/_site-footer.scss +++ b/src/scss/blocks/_site-footer.scss @@ -1,5 +1,6 @@ /// SITE FOOTER /// The main, global footer that is on each page + .site-footer { padding: $global-gutter; border-block-start: 1px solid get-utility-value('color', 'stroke'); @@ -25,14 +26,40 @@ } } +.site-footer__brand { + margin-bottom: 1.2rem; + display: block; +} + .site-footer__primary-nav { + grid-template-columns: repeat(1, 1fr); + --auto-grid-placement: auto-fit; + + @media (min-width: 865px) { + grid-template-columns: repeat(2, 1fr); + } +} + +.site-footer__primary-nav-links { --auto-grid-placement: auto-fit; + @media (min-width: 865px) { + grid-template-columns: repeat(3, 1fr); + } + li + li { margin-top: 0.5rem; } } +.site-footer__primary-nav-content { + margin-bottom: 0.75rem; + + p { + max-width: 65ch; + } +} + .site-footer__brand-nav { border-block: 1px solid get-utility-value('color', 'stroke'); padding: get-space('base') 0; diff --git a/src/scss/blocks/_site-header.scss b/src/scss/blocks/_site-header.scss index 9013d5be931..bd82b6dc35a 100644 --- a/src/scss/blocks/_site-header.scss +++ b/src/scss/blocks/_site-header.scss @@ -98,11 +98,17 @@ color: currentColor; } - .web-search-popout__heading { + &__heading { padding: $global-gutter-narrow; @include apply-utility('bg', 'core-bg'); } + + &__parent-title { + @include apply-utility('color', 'mid-text'); + font-size: 0.9rem; + margin-top: 4px; + } } } diff --git a/src/scss/blocks/_skip-link.scss b/src/scss/blocks/_skip-link.scss index 823d9dac2ac..56462861b79 100644 --- a/src/scss/blocks/_skip-link.scss +++ b/src/scss/blocks/_skip-link.scss @@ -2,7 +2,7 @@ /// It exists so when a user hits tab on load, they can quickly /// skip to the main content of the site—avoiding navigation etc .skip-link { - z-index: 10; + z-index: 11; width: max-content; inset: $global-gutter-narrow auto auto $global-gutter; position: absolute; diff --git a/src/scss/blocks/_spinner.scss b/src/scss/blocks/_spinner.scss new file mode 100644 index 00000000000..c0fd16df6d2 --- /dev/null +++ b/src/scss/blocks/_spinner.scss @@ -0,0 +1,22 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/spinner +.spinner { + fill: none; + animation: cubic-bezier(0.25, 0, 0.6, 1) infinite both 1.5s spinner__spin; + stroke: var(--color, black); + stroke-width: 0.5px; +} + +@keyframes spinner__spin { + 0% { + transform: rotate(0); + stroke-dasharray: 1px, 15px; + stroke-dashoffset: 1px; + } + + 100% { + transform: rotate(360deg); + stroke-dasharray: 15px, 15px; + stroke-dashoffset: -15px; + } +} \ No newline at end of file diff --git a/src/scss/blocks/_toc.scss b/src/scss/blocks/_toc.scss index 08e843dccbb..c7ce85eb38b 100644 --- a/src/scss/blocks/_toc.scss +++ b/src/scss/blocks/_toc.scss @@ -46,13 +46,13 @@ font-size: get-size('size-1'); } -.toc .w-scroll-spy__active, .toc .toc__active { +.toc .scroll-spy__active, .toc .toc__active { @include apply-utility('color', 'action-text'); @include apply-utility('weight', 'bold'); } /// An active style for nested list items -.toc__list .toc__list li .w-scroll-spy__active::before, +.toc__list .toc__list li .scroll-spy__active::before, .toc__list .toc__list li .toc__active::before { /// The list element is the relative parent, allowing /// this additional border style to "break out" of the diff --git a/src/scss/blocks/_tooltip.scss b/src/scss/blocks/_tooltip.scss index dd711a7e380..493b15bedb3 100644 --- a/src/scss/blocks/_tooltip.scss +++ b/src/scss/blocks/_tooltip.scss @@ -1,6 +1,6 @@ /// PATTERN LIBRARY LOCATION /// https://web.dev/design-system/pattern/tooltip -$tooltip-aligned-side-space: calc(100% + 1rem); +$tooltip-aligned-side-space: calc(100% + 2.5rem); .tooltip { position: relative; width: max-content; @@ -37,7 +37,7 @@ $tooltip-aligned-side-space: calc(100% + 1rem); } /// ALIGNMENT EXCEPTIONS -.tooltip[data-alignment='left'] { +.tooltip[role='tooltip'][data-alignment='left'] { .tooltip__content { top: 50%; right: $tooltip-aligned-side-space; @@ -46,7 +46,7 @@ $tooltip-aligned-side-space: calc(100% + 1rem); } } -.tooltip[data-alignment='right'] { +.tooltip[role='tooltip'][data-alignment='right'] { .tooltip__content { top: 50%; left: $tooltip-aligned-side-space; diff --git a/src/scss/blocks/_widget.scss b/src/scss/blocks/_widget.scss new file mode 100644 index 00000000000..f3837e9e94f --- /dev/null +++ b/src/scss/blocks/_widget.scss @@ -0,0 +1,19 @@ +/// COMPONENT LIBRARY LOCATION +/// https://web.dev/design-system/component/widget +.widget { + + &__actions { + display: flex; + justify-content: end; + gap: 0.2em; + } + + iframe { + border: 1px solid var(--color-stroke); + } + + share-action { + display: block; + color: var(--color-highlight-text); + } +} \ No newline at end of file diff --git a/src/scss/next.scss b/src/scss/next.scss index 6195e4d595e..1de0d8adf52 100644 --- a/src/scss/next.scss +++ b/src/scss/next.scss @@ -7,6 +7,8 @@ $generate-utility-classes: false; // Next: pull in gorko for design token and custom property generation @import '../../node_modules/gorko/gorko.scss'; +@import 'node_modules/webdev-infra/shortcodes/BrowserCompat/styles'; + @import 'reset'; @import 'fonts'; @@ -17,7 +19,7 @@ $global-gutter-narrow: 1.25rem; $global-stroke: 1px solid get-utility-value('color', 'stroke'); /// Elements that feature in prose contexts need to have a consistent max width -$global-prose-element-max-width: 50rem; +$global-prose-element-max-width: min(50rem, 100%); // NOTE: there are more design token-led global variables in _tokens.scss @@ -395,7 +397,12 @@ h6 code, margin: 0; padding: 0; white-space: normal; - word-break: break-all; + overflow-wrap: break-word +} + +p code, +li code { + overflow-wrap: break-word; } /// Sub and sup @@ -430,7 +437,7 @@ details summary { font-size: get-size('size-2'); list-style: none; cursor: pointer; - padding-right: get-space('size-1'); // Prevent overlap with ::before element + padding-right: 28px; // Prevent overlap with ::before element @include apply-utility('color', 'action-text'); @include apply-utility('weight', 'regular'); @@ -718,15 +725,16 @@ video, @import 'blocks/audio-player'; @import 'blocks/author'; @import 'blocks/banner'; +@import 'blocks/baseline'; @import 'blocks/brand'; @import 'blocks/breadcrumbs'; -@import 'blocks/browser-compat'; @import 'blocks/button'; @import 'blocks/callout'; @import 'blocks/card'; @import 'blocks/carousel'; @import 'blocks/compare'; @import 'blocks/counter'; +@import 'blocks/devrel-ribbon'; @import 'blocks/ellipsis'; @import 'blocks/eyebrow'; @import 'blocks/fab'; @@ -742,11 +750,13 @@ video, @import 'blocks/numbered-headers'; @import 'blocks/pagination'; @import 'blocks/pill'; +@import 'blocks/post-credits'; @import 'blocks/preview-pagination'; @import 'blocks/prose'; @import 'blocks/site-footer'; @import 'blocks/site-header'; @import 'blocks/skip-link'; +@import 'blocks/spinner'; @import 'blocks/stack-nav'; @import 'blocks/stats'; @import 'blocks/status-list'; @@ -755,6 +765,8 @@ video, @import 'blocks/toc'; @import 'blocks/toggle-switch'; @import 'blocks/tooltip'; +@import 'blocks/widget'; + /// WEB COMPONENTS @import 'web-components/web-assessment'; @@ -787,27 +799,14 @@ video, @import 'pages/homepage'; @import 'pages/landing-page'; @import 'pages/learn'; +@import 'pages/explore'; @import 'pages/measure'; -@import 'pages/path'; +@import 'pages/collection'; @import 'pages/pattern'; @import 'pages/spaces'; -// Temporary rollout patches -@import 'rollout'; - // Import unresolved states for lit-elements @import 'unresolved'; -/// LEGACY EXTENSIONS -/// These elements are everywhere and to replace them site-wide would be -/// a massive project, so they use @extend to pick up new styles -.w-visually-hidden { - @extend .visually-hidden; -} - -.w-columns { - @extend .switcher; -} - // Render gorko utilities @include generate-utility-classes(); diff --git a/src/scss/pages/_about.scss b/src/scss/pages/_about.scss index cc9608dba09..fd24f8b6656 100644 --- a/src/scss/pages/_about.scss +++ b/src/scss/pages/_about.scss @@ -1,114 +1,84 @@ -.about__columns { - display: flex; - flex-direction: column; - align-items: center; - gap: #{get-space('size-2')} #{$global-gutter}; +@include media-query('lg') { + .about { + .hero__title { + margin-bottom: 20px; + } + .hero__content { + margin-block-start: get-space('size-4'); + } + } } -.about__pod { - --cluster-horizontal-alignment: center; - - padding: $global-gutter; - border-radius: $global-radius-large; - box-shadow: 2px 14px 24px rgba(0, 0, 0, 0.1); - max-width: 68rem; - margin-inline: auto; - text-align: center; +.about__teams { + border-block-start: 1px solid var(--color-stroke); - @include apply-utility('bg', 'core-bg'); - - p { - max-width: 45ch; + .card { + padding-block: get-space('size-1'); } - h2, - p { - margin-inline: auto; + .card > img { + width: 192px; + height: 192px; + border-radius: 50%; } - a, - a:visited { - @include apply-utility('font', 'brand'); - @include apply-utility('color', 'action-text'); - } - - > svg { - display: block; - } -} + .authors { + display: grid; + gap: 2rem; + grid-template-columns: repeat(auto-fill, minmax(15em, 1fr)); -.about__pod-columns { - display: grid; - grid-template-columns: 1fr; - margin-block-start: get-space('base'); - gap: $global-gutter; + @include media-query('lg') { + grid-template-columns: repeat(3, 1fr); + } - img { - margin-inline: auto; + @include media-query('xs') { + grid-template-columns: repeat(1, 1fr); + } } } -.about__article { - text-align: center; - max-width: 28rem; - - > img { - margin-inline: auto; - } - +.about__developers { p { - @include apply-utility('color', 'mid-text'); + max-width: 75ch; } -} - -.about__pairs { - dd { - margin: 0; - - @include apply-utility('color', 'mid-text'); + .button { + margin-top: 2.5em; } - dd + dt { - border-block-start: 1px solid var(--color-stroke); - margin-block-start: get-space('size-1'); - padding-block-start: get-space('size-1'); - } - - a, - a:visited { - font-weight: normal; - @include apply-utility('font', 'brand'); - @include apply-utility('color', 'action-text'); + .headline__title { + margin-top: 1.5em; } } -@include media-query('md') { - .about__pod { - --cluster-horizontal-alignment: start; - text-align: left; +.about__coupled-column { + display: grid; + grid-template-columns: repeat(2, 1fr); - h2, - p { - margin-inline-start: 0; - } + @include media-query('xs') { + grid-template-columns: repeat(1, 1fr); } - .about__pod-columns { - grid-template-columns: 20rem 1fr; + h5 { + margin: 0.5em; } - .about__columns { - flex-direction: row; - align-items: flex-end; - justify-content: space-between; - column-gap: get-space('size-2'); + div:first-child { + border-right: 1px solid get-utility-value('color', 'stroke'); + padding-right: get-space('size-2'); + + @include media-query('xs') { + border-right: 0; + padding-right: 0; + } } - .about__article { - text-align: left; + div:last-child { + padding-left: get-space('size-2'); - > img { - margin-inline-end: 0; + @include media-query('xs') { + border-top: 1px solid get-utility-value('color', 'stroke'); + margin-top: get-space('size-2'); + padding: 2.5em 0 0; } } } diff --git a/src/scss/pages/_collection.scss b/src/scss/pages/_collection.scss new file mode 100644 index 00000000000..92549ba749a --- /dev/null +++ b/src/scss/pages/_collection.scss @@ -0,0 +1,262 @@ +.collection { + hr { + max-width: 100%; + } + + .path__topic { + .prose > * { + margin-inline: initial; + } + } + + .path__toc--item { + display: flex; + flex-direction: row; + + svg { + fill: get-color('core-primary'); + flex-shrink: 0; + margin-right: 6px; + } + } +} + +.collection__cards { + border-top: 1px solid var(--color-stroke); + margin-top: 30px; + + .wrapper { + padding-top: 2.5rem; + } +} + +.collection__layout { + margin-top: 40px; + + @include media-query('md') { + display: grid; + grid-gap: 30px; + margin-top: 60px; + grid-template-columns: repeat(3, 1fr); + } + + .card { + margin-top: 25px; + + @include media-query('md') { + margin-top: 0; + } + } + + .card > img { + width: 100%; + height: 220px; + border-radius: 5px; + + @include media-query('md') { + width: 100%; + } + } + + .card, p { + max-width: 100%; + } + + .card__eyebrow { + align-items: center; + display: flex; + } + + .card__content { + margin: 25px 0; + } + + svg { + fill: var(--color-mid-text); + height: 20px; + margin-right: 10px; + } + + span { + margin-top: 0; + } + + h4 { + font-size: 1.25rem; + + @include media-query('md') { + font-size: 1.5rem; + } + + @include media-query('lg') { + font-size: 1.75rem; + } + } + + p { + margin-top: 15px; + } + + .card-horizontal { + .card__eyebrow { + margin-top: 25px; + } + + .content { + padding-right: 0; + } + + @include media-query('lg') { + .content { + padding-right: 25px; + } + } + + @include media-query('md') { + display: flex; + flex-flow: row-reverse; + align-items: center; + gap: 30px; + grid-column: 1 / span 2; + + .content { + width: 50%; + padding-right: 0; + } + + img { + width: 50%; + } + + .card__eyebrow { + margin-top: 0; + } + } + + &.col-1 { + @include media-query('md') { + grid-column: 1 / span 2; + } + } + + &.col-2 { + @include media-query('md') { + grid-column: 2 / span 2; + } + } + } + + .card-vertical { + .card__eyebrow { + margin-top: 25px; + } + + @include media-query('md') { + grid-row: 1 / span 2; + } + + &.col-1 { + @include media-query('md') { + grid-column: 1 / span 1; + } + } + + &.col-2 { + @include media-query('md') { + grid-column: 2 / span 1; + } + } + + &.col-3 { + @include media-query('md') { + grid-column: 3 / span 1; + } + } + + &.row-1 { + @include media-query('md') { + grid-row: 1 / span 2; + } + } + + &.row-2 { + @include media-query('md') { + grid-row: 2 / span 2; + } + } + + &.row-3 { + @include media-query('md') { + grid-row: 3 / span 2; + } + } + } + + .bg-tertiary, + .bg-quaternary, + .bg-pink, + .bg-dark, + .bg-blue { + svg { + fill: get-color('shades-light-bright'); + } + + p, span, h4 { + color: get-color('shades-light-bright'); + } + } + + .bg-quaternary { + $CORE_QUATERNARY: get-color('core-quaternary'); + background-color: $CORE_QUATERNARY; + + &:hover, + &:focus, + &:active { + background-color: rgba($CORE_QUATERNARY, .9); + } + } + + .bg-dark { + background-color: #26373D; + + &:hover, + &:focus, + &:active { + background-color: rgba(#26373D, .9); + } + } + + .bg-tertiary { + $CORE_TERTIARY: get-color('core-tertiary'); + background-color: $CORE_TERTIARY; + + &:hover, + &:focus, + &:active { + background-color: rgba($CORE_TERTIARY, .9); + } + } + + .bg-pink { + $CORE_SECONDARY_SHADE: get-color('core-secondary-shade'); + background-color: $CORE_SECONDARY_SHADE; + + &:hover, + &:focus, + &:active { + background-color: rgba($CORE_SECONDARY_SHADE, .9); + } + } + + .bg-blue { + $CORE_PRIMARY: get-color('core-primary'); + background-color: $CORE_PRIMARY; + + &:hover, + &:focus, + &:active { + background-color: rgba($CORE_PRIMARY, .9); + } + } +} diff --git a/src/scss/pages/_design-system.scss b/src/scss/pages/_design-system.scss index 721c732550f..e608e342aa1 100644 --- a/src/scss/pages/_design-system.scss +++ b/src/scss/pages/_design-system.scss @@ -47,7 +47,7 @@ } .design-system .breakout { - max-width: 70rem; + max-width: 52rem; details { margin-inline: auto; diff --git a/src/scss/pages/_explore.scss b/src/scss/pages/_explore.scss new file mode 100644 index 00000000000..05ec768ee14 --- /dev/null +++ b/src/scss/pages/_explore.scss @@ -0,0 +1,18 @@ +.explore__collections { + .pill { + min-width: 4rem; + } + + .cluster { + gap: 1em; + } +} + +.explore__collection { + border-block-start: 1px solid var(--color-stroke); + padding-block: get-space('size-1'); + + .auto-grid { + padding-block-end: get-space('size-2'); + } +} diff --git a/src/scss/pages/_homepage.scss b/src/scss/pages/_homepage.scss index 2cf2308f040..aa355bbf643 100644 --- a/src/scss/pages/_homepage.scss +++ b/src/scss/pages/_homepage.scss @@ -9,140 +9,67 @@ hr + * { --flow-space: unset; } -} - -.homepage__section { - padding-block: get-space('size-3'); -} - -.homepage .repel { - --repel-vertical-alignment: stretch; -} - -.homepage__case-studies { - --switcher-vertical-alignment: stretch; - - max-width: 70rem; - margin-inline: auto; - - > * { - max-width: unset; - } -} -/// Specific cards for shows and podcasts -.homepage__shows { - display: flex; - flex-direction: column; - gap: $global-gutter; + .headline__title { + max-width: 100%; - &:link, - &:visited { - color: get-color('shades-light'); + @include media-query('md') { + margin-top: 50px; + } } -} -.homepage__show { - display: flex; - flex-direction: column; - justify-content: flex-end; - position: relative; - border: 0; - overflow: hidden; - aspect-ratio: 0.84; - min-height: 400px; - max-width: 100%; - padding: $global-gutter; - border-radius: $global-radius-large; - text-decoration: none; + .cluster { + gap: 0.5rem 0.8rem; - > img { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; - z-index: 0; - transition: transform $global-transition-movement; + .pill { + padding: 0.5rem 0.8rem; + } } - .flow { - position: relative; - z-index: 1; + web-subscribe { + border-top: none; } +} - /// Assures the focus ring isn't clipped - &:focus { - z-index: 1; - } +.homepage__section { + padding-block: get-space('size-3'); +} - &:hover, - &:focus { - > img { - transform: scale(1.05); - } - } +.homepage__developers svg { + fill: var(--color-mid-text); } -/// Code patterns section -.homepage__patterns { - --cluster-horizontal-alignment: center; - --cluster-vertical-alignment: stretch; +.homepage__news { + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-auto-rows: 2fr; + grid-column-gap: 30px; + max-width: 70rem; + margin: auto; .card { - border: none; - font-size: 0.9em; - max-width: 25rem; - padding: get-space('size-1'); + justify-self: center; + margin-bottom: 30px; + } - @include apply-utility('bg', 'mid-bg'); + @include media-query('md') { + grid-template-columns: repeat(2, 1fr); + grid-auto-rows: 1fr; - img { - background-color: transparent; + .card { + margin-bottom: 0; } } } -@include media-query('md') { - .homepage__shows { - width: max-content; - margin-inline: auto; - } - - .homepage__show { - max-width: 40rem; - min-height: 500px; - } +.homepage .repel { + --repel-vertical-alignment: stretch; } -/// Specific overrides for the page-speed hero that are not consistent -/// with the main hero pattern -@include media-query('lg') { - .homepage__page-speed-hero { - .hero__content { - margin-block-start: get-space('size-4'); - } - } - - .homepage__shows { - flex-direction: row; - gap: 0; - width: unset; - max-width: 75rem; - } - - .homepage__show { - max-width: unset; - width: 50%; +.homepage__collection { + border-top: 1px solid var(--color-stroke); - &:first-child { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - &:last-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } + .wrapper { + padding-top: 2.5rem; } } diff --git a/src/scss/pages/_learn.scss b/src/scss/pages/_learn.scss index 82b186b5117..749d8a155f2 100644 --- a/src/scss/pages/_learn.scss +++ b/src/scss/pages/_learn.scss @@ -1,14 +1,13 @@ -.learn { - .learn__collection { - border-block-start: 1px solid var(--color-stroke); - padding-block: get-space('size-1'); - } - - .auto-grid { - padding-block-end: get-space('size-2'); +.learn__collection { + .card[data-style=branded] { + min-height: 25.625rem; + max-width: 37rem; + min-width: auto; } +} - .pill { - min-width: 4rem; +.learn__hero { + p { + max-width: 74ch; } -} +} \ No newline at end of file diff --git a/src/scss/pages/_measure.scss b/src/scss/pages/_measure.scss index a2ae4feb390..65f05d89220 100644 --- a/src/scss/pages/_measure.scss +++ b/src/scss/pages/_measure.scss @@ -1,44 +1,11 @@ -.measure-faq { - details { - border-inline: 1px solid var(--color-stroke); - padding-inline: 1rem; - - summary { - color: inherit; - - @include apply-utility('font', 'brand'); - - &::before { - border: 1px solid var(--color-stroke); - - @include apply-utility('bg', 'core-bg'); - } - - &::after { - @include apply-utility('color', 'action-text'); - } - } - - &:first-of-type { - border-top-right-radius: $global-radius-large; - border-top-left-radius: $global-radius-large; - } - - &:last-of-type { - border-bottom-right-radius: $global-radius-large; - border-bottom-left-radius: $global-radius-large; - } - } +.measure__section { + padding-block: clamp(3.75rem, 3.21rem + 2.68vw, 5.625rem); } -.measure-tool { - min-height: 280px; -} - -.measure-steps { - --cluster-vertical-alignment: top; - - .numbered-headers__heading { - flex: initial; +@include media-query('lg') { + .measure__page-speed-hero { + .hero__content { + margin-block-start: get-space('size-4'); + } } } diff --git a/src/scss/pages/_path.scss b/src/scss/pages/_path.scss deleted file mode 100644 index d1aa31735c3..00000000000 --- a/src/scss/pages/_path.scss +++ /dev/null @@ -1,15 +0,0 @@ -.path__topic { - .prose > * { - margin-inline: initial; - } -} - -.path__toc--item { - display: flex; - flex-direction: row; - - svg { - fill: get-color('core-primary'); - margin-right: 6px; - } -} diff --git a/src/scss/utilities/_avatar.scss b/src/scss/utilities/_avatar.scss index 385f372a9e9..269859d2206 100644 --- a/src/scss/utilities/_avatar.scss +++ b/src/scss/utilities/_avatar.scss @@ -13,3 +13,8 @@ .avatar[data-size='large'] > img { --avatar-size: 192px; } + +.avatar[data-size='medium'], +.avatar[data-size='medium'] > img { + --avatar-size: 120px; +} diff --git a/src/scss/utilities/_wrapper.scss b/src/scss/utilities/_wrapper.scss index 1d0f411266c..05fcdcc8ea1 100644 --- a/src/scss/utilities/_wrapper.scss +++ b/src/scss/utilities/_wrapper.scss @@ -15,6 +15,16 @@ padding-inline: 0; } +.wrapper[data-size='extra-narrow'] { + width: 46rem; // For no clamp support + width: clamp(16rem, 95vw, 46rem); + padding-inline: $global-gutter; + + @include media-query('lg') { + padding-inline: 0; + } +} + .wrapper[data-flush] { padding-inline: 0; } diff --git a/src/scss/web-components/_web-copy-code.scss b/src/scss/web-components/_web-copy-code.scss index f54e753f8cd..9a90c36a9fb 100644 --- a/src/scss/web-components/_web-copy-code.scss +++ b/src/scss/web-components/_web-copy-code.scss @@ -31,7 +31,7 @@ web-copy-code { } // We should use these classes in the web component itself - [role='tooltip'] { + [role='tooltip'] .tooltip__content { @extend .tooltip__content; } } diff --git a/src/scss/web-components/_web-navigation-drawer.scss b/src/scss/web-components/_web-navigation-drawer.scss index 3caa72c0463..cf300bbb51e 100644 --- a/src/scss/web-components/_web-navigation-drawer.scss +++ b/src/scss/web-components/_web-navigation-drawer.scss @@ -47,7 +47,6 @@ web-navigation-drawer::before { background: rgb(0 0 0 / 40%); backdrop-filter: blur(5px); opacity: 0; - // transition: opacity $TRANSITION_SPEED cubic-bezier(.4, 0, .2, 1); } web-navigation-drawer[open] { @@ -59,14 +58,11 @@ web-navigation-drawer[open]::before { opacity: 1; } -web-navigation-drawer[open] [data-drawer-container] { +web-navigation-drawer[open] [data-drawer-container], +web-navigation-drawer[open]:focus-within [data-drawer-container] { transform: none; } web-navigation-drawer[animating] [data-drawer-container] { transition: transform $global-transition-movement; } - -web-navigation-drawer[open][animating] [data-drawer-container] { - transition: transform $global-transition-movement; -} diff --git a/src/scss/web-components/_web-snackbar.scss b/src/scss/web-components/_web-snackbar.scss index b33a5079b96..1dd3edadced 100644 --- a/src/scss/web-components/_web-snackbar.scss +++ b/src/scss/web-components/_web-snackbar.scss @@ -21,6 +21,15 @@ web-snackbar { justify-content: center; } + .button--action { + background: get-color('core-primary-glare'); + color: get-color('shades-charcoal'); + } + + a { + color: get-color('core-primary-glare'); + } + @include media-query('md') { inset: auto auto $global-gutter $global-gutter; border-radius: $global-radius-large; diff --git a/src/scss/web-components/_web-subscribe.scss b/src/scss/web-components/_web-subscribe.scss index 6f51a98d263..7e7a5afa207 100644 --- a/src/scss/web-components/_web-subscribe.scss +++ b/src/scss/web-components/_web-subscribe.scss @@ -23,7 +23,24 @@ web-subscribe { max-width: unset; } - .g-recaptcha { + .captcha { height: 78px; + + &__placeholder { + width: 100%; + display: flex; + justify-content: center; + color: var(--color-action-bg); + align-items: center; + max-width: 304px; + height: 100%; + background-color: var(--color-mid-text); + border-radius: 5px; + } + + .spinner { + width: 30px; + --color: #3740ff; + } } } diff --git a/src/scss/web-components/_web-tabs.scss b/src/scss/web-components/_web-tabs.scss index 2ac402b9a46..364e9db89cb 100644 --- a/src/scss/web-components/_web-tabs.scss +++ b/src/scss/web-components/_web-tabs.scss @@ -42,6 +42,10 @@ web-tabs:not(:defined) { @include apply-utility('color', 'mid-text'); @include apply-utility('font', 'brand'); + &.hidden { + display: none; + } + &:hover { @include apply-utility('bg', 'highlight-interact-bg'); } diff --git a/src/site/_collections/authors.js b/src/site/_collections/authors.js index 1d832217353..a9c703f3749 100644 --- a/src/site/_collections/authors.js +++ b/src/site/_collections/authors.js @@ -75,7 +75,7 @@ module.exports = (collections) => { if (elements.length > 0) { date = elements.slice(-1).pop().data.date; const tempUpdated = elements.slice(0, 1).pop().data.date; - if (date !== tempUpdated) { + if (tempUpdated && date !== tempUpdated) { updated = tempUpdated; } } @@ -93,16 +93,26 @@ module.exports = (collections) => { href, image, key, + bio: `i18n.authors.${key}.bio`, title: `i18n.authors.${key}.title`, url: href, }; // If author has no posts, point to their Twitter - if (author.elements.length === 0 && author.twitter) { - author.href = `https://twitter.com/${author.twitter}`; + if (author.elements.length === 0) { + if (author.twitter) { + author.href = `https://twitter.com/${author.twitter}`; + } else if (author.homepage) { + author.href = author.homepage; + } } - if (author.elements.length > 0 || !collections || author.twitter) { + if ( + author.elements.length > 0 || + !collections || + author.twitter || + author.homepage + ) { authors[author.key] = author; } }); diff --git a/src/site/_collections/blog-posts-descending.js b/src/site/_collections/blog-posts-descending.js index 4f1c3a14a38..7ffa2d3d880 100644 --- a/src/site/_collections/blog-posts-descending.js +++ b/src/site/_collections/blog-posts-descending.js @@ -21,6 +21,5 @@ const {isLive} = require('../_filters/is-live'); * @returns {EleventyCollectionItem[]} */ module.exports = (collection) => { - const tag = process.env.PERCY ? 'test-post' : 'blog'; - return collection.getFilteredByTag(tag).filter(isLive).reverse(); + return collection.getFilteredByTag('blog').filter(isLive).reverse(); }; diff --git a/src/site/_collections/hooks/authors.js b/src/site/_collections/hooks/authors.js index f4bae2351b3..99ecbc57743 100644 --- a/src/site/_collections/hooks/authors.js +++ b/src/site/_collections/hooks/authors.js @@ -45,7 +45,7 @@ const authorsIndex = (authors) => { * @param {string} lang * @return {Paginated[]} */ -const authorsIndividual = (authors, lang) => individual(authors, lang); +const authorsIndividual = (authors, lang) => individual(authors, lang, true); module.exports = { feed: authorsFeed, diff --git a/src/site/_collections/hooks/utils.js b/src/site/_collections/hooks/utils.js index a927a929115..56bb7b0f7fe 100644 --- a/src/site/_collections/hooks/utils.js +++ b/src/site/_collections/hooks/utils.js @@ -68,15 +68,21 @@ const index = (items, href, testItems) => { /** * @param {VirtualCollectionItem[]} items * @param {string} lang + * @param {boolean} indexedOnly * @return {Paginated[]} */ -const individual = (items, lang) => { +const individual = (items, lang, indexedOnly = false) => { let paginated = []; for (const item of items) { - if (item.elements.length > 0) { + let elements = item.elements; + if (indexedOnly) { + elements = elements.filter((element) => element.data.noindex !== true); + } + + if (elements.length > 0) { paginated = paginated.concat( - addPagination(filterByLang(item.elements, lang), item), + addPagination(filterByLang(elements, lang), item), ); } } diff --git a/src/site/_data/authorsData.json b/src/site/_data/authorsData.json index a2345ebaeb2..89e31ffff34 100644 --- a/src/site/_data/authorsData.json +++ b/src/site/_data/authorsData.json @@ -26,6 +26,12 @@ "twitter": "duhroach", "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/YT88zCOqYHewnehPUatW.png" }, + "adamzielinski": { + "twitter": "adamzielin", + "github": "adamziel", + "homepage": "https://adamadam.blog/", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/qNsFHO1nZ3FxmYd3PwWL.webp" + }, "marcinwichary": { "homepage": "http://www.aresluna.org/", "twitter": "mwichary", @@ -284,6 +290,11 @@ "paulkinlan": { "homepage": "https://paul.kinlan.me/", "twitter": "paul_kinlan", + "github": "PaulKinlan", + "glitch": "PaulKinlan", + "dcc": "paulkinlan", + "mastodon": "https://status.kinlan.me/@paul", + "linkedin": "https://uk.linkedin.com/in/paulkinlan", "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/0O1ZGr2P0l9oTKabyUK5.jpeg" }, "dalecurtis": { @@ -299,6 +310,10 @@ "twitter": "devnook", "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/K5zWxdTH5JagItd1w8Vm.jpeg" }, + "alispivak": { + "twitter": "alispivak", + "image": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/epjaUBZaBUz4esC6C7n5.png" + }, "alexdanilo": { "twitter": "alexanderdanilo", "image": "image/T4FyVKpzu4WKF1kBNvXepbi08t52/3EIOmsgE36khub8NbZgE.jpeg" @@ -548,6 +563,18 @@ "country": "DE", "image": "image/admin/8PLpVmFef6mj72MVWeiN.jpg" }, + "pliao": { + "country": "US", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/2FRO4kPII2vh8tfjLtsw.jpg" + }, + "conwayt": { + "country": "UK", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/JcsexdcJ6OkCV9UUYW7X.jpg" + }, + "chuijun": { + "country": "CN", + "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/JISOQ86K4Eo8akasdS5S.png" + }, "surma": { "country": "UK", "twitter": "DasSurma", @@ -575,6 +602,7 @@ }, "rviscomi": { "country": "USA", + "homepage": "https://rviscomi.dev/", "twitter": "rick_viscomi", "github": "rviscomi", "image": "image/admin/oWRqaR6XXwIdNXPLpUMn.jpg" @@ -1272,7 +1300,7 @@ "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/Mpe7GGUwnUsy9Gx7UxZK.jpg" }, "saurabhrajpal": { - "twitter": "saurabhrajpal", + "twitter": "imsaurabhrajpal", "image": "image/ZDZVuXt6QqfXtxkpXcPGfnygYjd2/pgfTCNTb5C2ThMcZCzPQ.jpg" }, "arturjanc": { @@ -1385,11 +1413,10 @@ }, "jlwagner": { "github": "malchata", - "twitter": "malchata", "linkedin": "https://www.linkedin.com/in/malchata/", "homepage": "https://jlwagner.net/", "country": "US", - "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/R2HoNXU2ROjJSpY0uIFB.jpg" + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/YROiiX412sAFeV58NStI.jpg" }, "cédricbazureau": { "github": "cbazureau", @@ -1442,7 +1469,8 @@ "country": "US", "github": "heyawhite", "twitter": "heyawhite", - "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/zTnfwJRcRiKepGLRlu7t.jpeg" + "homepage": "https://heyawhite.com", + "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/Fg3QPnZnoZh2LbVOs8mK.jpg" }, "svenmay": { "country": "DE", @@ -1558,13 +1586,13 @@ "linkedin": "https://www.linkedin.com/in/nikilmat/", "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/mc2N7pSjT8K7WBi8PR6L.jpeg" }, - "jhey": { + "jheyy": { "country": "UK", "twitter": "jh3yy", "github": "jh3y", "linkedin": "https://www.linkedin.com/in/jheytompkins/", "homepage": "https://jhey.dev/links", - "image": "image/Dyx9FwYgMyNqy1kMGx8Orz6q0qC3/JMkAJAgH01auU1FiapGg.jpeg" + "image": "image/Dyx9FwYgMyNqy1kMGx8Orz6q0qC3/JjwUlxDMTmjyFEvBC8wG.jpeg" }, "patrickkettner": { "country": "US", @@ -1597,9 +1625,9 @@ "image": "image/Xyvh8LLq27V5yRjH5iS1dbf64pE2/M2E7ke6rO6ZpIabYeizX.jpg" }, "alexeyrodionov": { - "country": "RU", "twitter": "alexey_rodionov", "github": "FluorescentHallucinogen", + "linkedin": "https://linkedin.com/in/alexey-rodionov", "image": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/n6mW0LtLb2NtYAoQSCx7.png" }, "twifkak": { @@ -1650,5 +1678,181 @@ "country": "US", "twitter": "atopal", "image": "image/HodOHWjMnbNw56hvNASHWSgZyAf2/locu2HN2Xf0XCE3kqoLl.jpeg" + }, + "michellebarker": { + "country": "GB", + "twitter": "michebarks", + "homepage": "https://css-irl.info/", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/TXk0tkZHdsVgSI0XlYMo.jpeg" + }, + "daviddarnes": { + "country": "UK", + "twitter": "DavidDarnes", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/D4RF9eRlpsL0byFo3nTu.jpeg" + }, + "linhduong": { + "country": "JP", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/49yMNi8zYI3ufLHlPL2S.png", + "github": "duongkhlinh" + }, + "jecelynyeen": { + "homepage": "https://jec.fyi", + "twitter": "jecfish", + "github": "jecfish", + "country": "MY", + "image": "image/dPDCek3EhZgLQPGtEG3y0fTn4v82/VrTsk9Vt9SuOzvFZKvOK.jpg" + }, + "shogokashiwase": { + "country": "JP", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/65uId5WZmSmGVf4iNFjS.png" + }, + "hayounglee": { + "country": "JP", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mrDD7FK1dMWyzJCD4EBy.png" + }, + "ryunosukeakiba": { + "country": "JP", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/x1WXJeBxlPZftTHVnSmP.png" + }, + "mmatuzo": { + "country": "AT", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/X3PNOGXB6wYGEqGEjoWd.jpeg", + "twitter": "mmatuzo" + }, + "estelleweyl": { + "country": "US", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/tdK5bAeVqsW0WEJNyvUg.jpeg", + "twitter": "estellevw" + }, + "davideast": { + "homepage": "https://davidea.st", + "twitter": "_davideast", + "image": "image/vS06HQ1YTsbMKSFTIPl2iogUQP73/S8CN1AfcJpoUJvYqrfeT.jpeg" + }, + "cariefisher": { + "homepage": "https://cariefisher.com/", + "twitter": "cariefisher", + "country": "US", + "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/eurEFMIkwaNmX7HpnGJg.png" + }, + "marksteadman": { + "homepage": "https://dev.to/steady5063", + "twitter": "Steady5063", + "country": "US", + "image": "image/VbsHyyQopiec0718rMq2kTE1hke2/zyOtFQPQnT8ZGKdo14EG.jpeg" + }, + "superhighfives": { + "homepage": "https://charliegleason.com", + "twitter": "superhighfives", + "image": "image/vS06HQ1YTsbMKSFTIPl2iogUQP73/yFI6NAn66sh1FZF5yfFK.jpg", + "github": "https://github.com/superhighfives" + }, + "sriramkrishnan": { + "country": "US", + "image": "image/1L2RBhCLSnXjCnSlevaDjy3vba73/6anAlrMu2HmIplZiOguG.jpeg" + }, + "matmarquis": { + "country": "US", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/sR0Qflm2JCrHYywcDMVP.jpeg", + "homepage": "https://hire.wil.to/" + }, + "aaronforinton": { + "country": "UK", + "image": "image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/uiiy89r72VrVR9lgrDb5.jpeg", + "github": "https://github.com/aaronforinton" + }, + "sil": { + "country": "UK", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/xj60ht9o33rZ846tU3e7.png", + "twitter": "sil" + }, + "anslo": { + "country": "UK", + "twitter": "anslogen", + "homepage": "https://anslo.dev", + "image": "image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hAkxOPvCiyOG1TZn7R05.jpg" + }, + "amitkumar": { + "country": "IN", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/02ULDoUejjQD0HozJsvG.jpg", + "homepage": "https://amitkumar-v.medium.com/" + }, + "daya": { + "country": "IN", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/0UD8AsknXR40nTFeuh5u.JPG", + "linkedin": "https://www.linkedin.com/in/daya-yadav-41731a1a/" + }, + "barunkumar": { + "country": "IN", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/0fDWYdhK8RVDKLvhQv69.jpg", + "linkedin": "https://www.linkedin.com/in/kumarbarun89/", + "github": "kumar-barun" + }, + "jhuoponen": { + "country": "US", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m4DVyjMLVB2tOQu8g92S.jpg", + "linkedin": "https://www.linkedin.com/in/janihuoponen/" + }, + "vignesh": { + "country": "US", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8c6t6kea6QWzRJ1oEIal.jpg" + }, + "ddworken": { + "country": "US", + "image": "image/udVScdcCFAdRjZwFdLk2jWAFQyr1/n7JbFJPZgqVm1n60t62o.jpeg" + }, + "ramona": { + "country": "DE", + "image": "image/dPDCek3EhZgLQPGtEG3y0fTn4v82/JjZvG1rUMq9DRil4MnIT.jpeg", + "twitter": "leichteckig", + "github": "leichteckig", + "linkedin": "https://www.linkedin.com/in/ramona-schwering/", + "homepage": "https://www.ramona.codes/" + }, + "mitchgalavan": { + "country": "US", + "image": "image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FeU9BLJudtXgBy873ZVP.jpg", + "linkedin": "https://www.linkedin.com/in/mitchellgalavan/", + "twitter": "mitchgalavan" + }, + "cjacinic": { + "country": "US", + "image": "image/YLflGBAPWecgtKJLqCJHSzHqe2J2/CJwGxU6Ml9Eoj2EI3j8W.png" + }, + "silviaconvento": { + "country": "US", + "image": "image/YLflGBAPWecgtKJLqCJHSzHqe2J2/D7aLMO2nHDOmZ3xFctGX.jpg" + }, + "yurikohirota": { + "country": "JP", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/gWQBNNc7xafsHz7KBrE1.jpg", + "twitter": "yuriko_fuuu" + }, + "thiernothiam": { + "country": "UK", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/G39Wqf36XLYM27LOrexr.jpg", + "twitter": "localhost_droid", + "github": "thierhost", + "linkedin": "https://www.linkedin.com/in/thierno-thiam-9753489b/" + }, + "guilhermems": { + "country": "BR", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WM20YjI0H9jhcAPlwzoZ.jpg", + "twitter": "mobtec", + "github": "gui-poa", + "linkedin": "https://www.linkedin.com/in/guilhermems/" + }, + "nandunair": { + "country": "US", + "image": "image/kheDArv5csY6rvQUJDbWRscckLr1/kUDOtUFzBKmIAhlLjefO.jpg", + "twitter": "_nairnm", + "github": "nairnandu", + "linkedin": "https://www.linkedin.com/in/nmnair/" + }, + "markusbordihn": { + "country": "DE", + "image": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/XQRAhPqZMiqUHeoteyuZ.jpg", + "github": "MarkusBordihn", + "linkedin": "https://www.linkedin.com/in/MarkusBordihn" } } diff --git a/src/site/_data/courses/accessibility/meta.yml b/src/site/_data/courses/accessibility/meta.yml new file mode 100644 index 00000000000..8c13b25d7d1 --- /dev/null +++ b/src/site/_data/courses/accessibility/meta.yml @@ -0,0 +1,19 @@ +# The date is used to organize the courses on the /learn page. +# This should be the initial publish date of the course. When new pages are +# added to the course the site will check if they are <30 days old, and if they +# are, it will give them a "New" badge. However, when you first launch a course +# you don't want every entry to have a "New" badge, so anything that existed +# on or before this date will not receive the "New" badge. +date: 2022-09-23 +url: /learn/accessibility +draft: false +title: i18n.courses.learn_accessibility.title +description: i18n.courses.learn_accessibility.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/accessibility/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/accessibility/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/accessibility/card.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/VbsHyyQopiec0718rMq2kTE1hke2/03dCg7PsCbcwblqRHYMB.png' diff --git a/src/site/_data/courses/accessibility/toc.yml b/src/site/_data/courses/accessibility/toc.yml new file mode 100644 index 00000000000..78c99acd98e --- /dev/null +++ b/src/site/_data/courses/accessibility/toc.yml @@ -0,0 +1,21 @@ +- url: /learn/accessibility +- url: /learn/accessibility/why +- url: /learn/accessibility/measure +- url: /learn/accessibility/aria-html +- url: /learn/accessibility/structure +- url: /learn/accessibility/more-html +- url: /learn/accessibility/focus +- url: /learn/accessibility/javascript +- url: /learn/accessibility/images +- url: /learn/accessibility/color-contrast +- url: /learn/accessibility/motion +- url: /learn/accessibility/typography +- url: /learn/accessibility/video-audio +- url: /learn/accessibility/forms +- url: /learn/accessibility/patterns +- url: /learn/accessibility/design-ux +- url: /learn/accessibility/test-automated +- url: /learn/accessibility/test-manual +- url: /learn/accessibility/test-assistive-technology +- url: /learn/accessibility/conclusion +- url: /learn/accessibility/glossary diff --git a/src/site/_data/courses/example/meta.yml b/src/site/_data/courses/example/meta.yml new file mode 100644 index 00000000000..461d676f283 --- /dev/null +++ b/src/site/_data/courses/example/meta.yml @@ -0,0 +1,21 @@ +# The date is used to organize the courses on the /learn page. +# This should be the initial publish date of the course. When new pages are +# added to the course the site will check if they are <30 days old, and if they +# are, it will give them a "New" badge. However, when you first launch a course +# you don't want every entry to have a "New" badge, so anything that existed +# on or before this date will not receive the "New" badge. +date: 2022-01-17 +url: /handbook/content-types/example-course/ +draft: false +# When true the course will not be listed on the /learn page +invisible: true +title: i18n.courses.example.title +description: i18n.courses.example.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/example/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/example/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/example/card.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/VbsHyyQopiec0718rMq2kTE1hke2/03dCg7PsCbcwblqRHYMB.png' diff --git a/src/site/_data/courses/example/toc.yml b/src/site/_data/courses/example/toc.yml new file mode 100644 index 00000000000..c95cc1f18fc --- /dev/null +++ b/src/site/_data/courses/example/toc.yml @@ -0,0 +1,3 @@ +- url: /handbook/content-types/example-course +- url: /handbook/content-types/example-course/example-section +- url: /handbook/content-types/example-course/example-section-2 diff --git a/src/site/_data/courses/html/meta.yml b/src/site/_data/courses/html/meta.yml new file mode 100644 index 00000000000..0b0ba92bfad --- /dev/null +++ b/src/site/_data/courses/html/meta.yml @@ -0,0 +1,23 @@ +# The date is used to organize the courses on the /learn page. +# This should be the initial publish date of the course. When new pages are +# added to the course the site will check if they are <30 days old, and if they +# are, it will give them a "New" badge. However, when you first launch a course +# you don't want every entry to have a "New" badge, so anything that existed +# on or before this date will not receive the "New" badge. +date: 2022-09-08 +url: /learn/html/ +draft: false +title: i18n.courses.learn_html.title +description: i18n.courses.learn_html.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/html/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/html/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/html/card.svg' +# Abstract decorative image that's used in some card contexts +decor: '/images/courses/html/card-decor.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/kheDArv5csY6rvQUJDbWRscckLr1/YDxKJ14tckrLzMXYZquR.png' +# This is used to color the card module count +highlight: 'purple' \ No newline at end of file diff --git a/src/site/_data/courses/html/toc.yml b/src/site/_data/courses/html/toc.yml new file mode 100644 index 00000000000..f51061af07f --- /dev/null +++ b/src/site/_data/courses/html/toc.yml @@ -0,0 +1,22 @@ +- url: /learn/html +- url: /learn/html/overview +- url: /learn/html/document-structure +- url: /learn/html/metadata +- url: /learn/html/semantic-html +- url: /learn/html/headings-and-sections +- url: /learn/html/attributes +- url: /learn/html/text-basics +- url: /learn/html/links +- url: /learn/html/lists +- url: /learn/html/navigation +- url: /learn/html/tables +- url: /learn/html/forms +- url: /learn/html/images +- url: /learn/html/audio-video +- url: /learn/html/template +- url: /learn/html/apis +- url: /learn/html/focus +- url: /learn/html/inline-text +- url: /learn/html/details +- url: /learn/html/dialog +- url: /learn/html/conclusion diff --git a/src/site/_data/courses/images/meta.yml b/src/site/_data/courses/images/meta.yml new file mode 100644 index 00000000000..87d70a7b50e --- /dev/null +++ b/src/site/_data/courses/images/meta.yml @@ -0,0 +1,23 @@ +# The date is used to organize the courses on the /learn page. +# This should be the initial publish date of the course. When new pages are +# added to the course the site will check if they are <30 days old, and if they +# are, it will give them a "New" badge. However, when you first launch a course +# you don't want every entry to have a "New" badge, so anything that existed +# on or before this date will not receive the "New" badge. +date: 2022-02-01 +url: /learn/images/ +draft: false +title: i18n.courses.learn_images.title +description: i18n.courses.learn_images.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/images/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/images/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/images/card.svg' +# Abstract decorative image that's used in some card contexts +decor: '/images/courses/images/card-decor.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/kheDArv5csY6rvQUJDbWRscckLr1/MadRbq0upSrYMQ1ksYrQ.png' +# This is used to color the card module count +highlight: 'magenta' diff --git a/src/site/_data/courses/images/toc.yml b/src/site/_data/courses/images/toc.yml new file mode 100644 index 00000000000..c6c7afcc11c --- /dev/null +++ b/src/site/_data/courses/images/toc.yml @@ -0,0 +1,23 @@ +- url: /learn/images + sections: + - title: i18n.courses.images_and_performance.title + - url: /learn/images/history + - url: /learn/images/performance-issues + - title: i18n.courses.image_formats.title + - url: /learn/images/vector-images + - url: /learn/images/raster-images + - url: /learn/images/gif + - url: /learn/images/png + - url: /learn/images/jpeg + - url: /learn/images/webp + - url: /learn/images/avif + - title: i18n.courses.responsive_images.title + - url: /learn/images/responsive-images + - url: /learn/images/descriptive + - url: /learn/images/prescriptive + - title: i18n.courses.image_workflows.title + - url: /learn/images/automating + - url: /learn/images/cms + - url: /learn/images/cdn + - url: /learn/images/conclusion + \ No newline at end of file diff --git a/src/site/_data/courses/privacy/meta.yml b/src/site/_data/courses/privacy/meta.yml new file mode 100644 index 00000000000..7962ca3f059 --- /dev/null +++ b/src/site/_data/courses/privacy/meta.yml @@ -0,0 +1,19 @@ +# The date is used to organize the courses on the /learn page. +# This should be the initial publish date of the course. When new pages are +# added to the course the site will check if they are <30 days old, and if they +# are, it will give them a "New" badge. However, when you first launch a course +# you don't want every entry to have a "New" badge, so anything that existed +# on or before this date will not receive the "New" badge. +date: 2023-02-22 +url: /learn/privacy +draft: false +title: i18n.courses.learn_privacy.title +description: i18n.courses.learn_privacy.description +# This is the logo that appears in the navigation drawer and header. +logo: '/images/courses/privacy/logo.svg' +# This is used to provide the background for the navigation drawer and header. +background: '/images/courses/privacy/background.svg' +# This provides the cover image for the card on /learn/ +card: '/images/courses/privacy/card.svg' +# This is used for the social media thumbnail. +thumbnail: 'image/kheDArv5csY6rvQUJDbWRscckLr1/E10gLEyQQ7GKqaJwUJn4.png' diff --git a/src/site/_data/courses/privacy/toc.yml b/src/site/_data/courses/privacy/toc.yml new file mode 100644 index 00000000000..7829885624b --- /dev/null +++ b/src/site/_data/courses/privacy/toc.yml @@ -0,0 +1,6 @@ +- url: /learn/privacy +- url: /learn/privacy/data +- url: /learn/privacy/third-parties +- url: /learn/privacy/fingerprinting +- url: /learn/privacy/encryption +- url: /learn/privacy/best-practices diff --git a/src/site/_data/design/components.js b/src/site/_data/design/components.js index d16fe0dc730..4912ecafdee 100644 --- a/src/site/_data/design/components.js +++ b/src/site/_data/design/components.js @@ -52,7 +52,7 @@ module.exports = { // Parses out the component name from the last segment in its path const getComponentName = (componentPath) => { - const pathParts = componentPath.split('/').filter((x) => x.length); + const pathParts = componentPath.split(path.sep).filter((x) => x.length); return pathParts[pathParts.length - 1]; }; diff --git a/src/site/_data/design/themes.js b/src/site/_data/design/themes.js index 3c0223bfb99..6d7a2e874e1 100644 --- a/src/site/_data/design/themes.js +++ b/src/site/_data/design/themes.js @@ -37,6 +37,7 @@ module.exports = { CHECK_FG: 'check-fg', CHECK_BG: 'check-bg', CHECK_BG_ACTIVE: 'check-bg-active', + FLOATING_RIBBON_BG: 'floating-ribbon-bg', FOCUS_RING: 'focus-ring', IMG_BACKDROP: 'img-backdrop', PRIMARY_BOX_BG: 'primary-box-bg', @@ -57,6 +58,8 @@ module.exports = { STATE_GOOD_BG: 'state-good-bg', STATE_BAD_TEXT: 'state-bad-text', STATE_BAD_BG: 'state-bad-bg', + STATE_UPDATE_BG: 'state-update-bg', + STATE_UPDATE_TEXT: 'state-update-text', SYNTAX_PRIMARY: 'syntax-primary', SYNTAX_PRIMARY_GLARE: 'syntax-primary-glare', SYNTAX_SECONDARY: 'syntax-secondary', @@ -96,6 +99,7 @@ module.exports = { CHECK_FG: 'shades-light', CHECK_BG: 'shades-gray', CHECK_BG_ACTIVE: 'core-tertiary-glare', + FLOATING_RIBBON_BG: 'core-primary-dim', FOCUS_RING: 'core-primary-glare', IMG_BACKDROP: 'shades-light', PRIMARY_BOX_BG: 'core-primary-dim', @@ -116,6 +120,8 @@ module.exports = { STATE_GOOD_BG: 'state-good-dim', STATE_BAD_TEXT: 'state-bad-glare', STATE_BAD_BG: 'state-bad-dim', + STATE_UPDATE_BG: 'state-update-dim', + STATE_UPDATE_TEXT: 'state-update-bright', SYNTAX_PRIMARY: 'code-primary-bright', SYNTAX_PRIMARY_GLARE: 'code-primary-bright', SYNTAX_SECONDARY: 'code-secondary-bright', @@ -156,6 +162,7 @@ module.exports = { CHECK_FG: 'shades-light', CHECK_BG: 'shades-gray-glare', CHECK_BG_ACTIVE: 'core-tertiary-glare', + FLOATING_RIBBON_BG: 'core-primary-dim', FOCUS_RING: 'core-primary', IMG_BACKDROP: 'shades-light-bright', PRIMARY_BOX_BG: 'core-primary-bright', @@ -176,6 +183,8 @@ module.exports = { STATE_GOOD_BG: 'state-good-bright', STATE_BAD_TEXT: 'state-bad', STATE_BAD_BG: 'state-bad-bright', + STATE_UPDATE_BG: 'state-update-bright', + STATE_UPDATE_TEXT: 'state-update', STROKE: 'shades-gray-glare', SYNTAX_PRIMARY: 'code-primary', SYNTAX_PRIMARY_GLARE: 'code-primary-glare', diff --git a/src/site/_data/design/tokens.json b/src/site/_data/design/tokens.json index be3ae83516b..13bc7b79443 100644 --- a/src/site/_data/design/tokens.json +++ b/src/site/_data/design/tokens.json @@ -143,6 +143,22 @@ { "name": "Bad Glare", "value": "#ffe9e8" + }, + { + "name": "Update", + "value": "#3740ff" + }, + { + "name": "Update Glare", + "value": "#9da2ff" + }, + { + "name": "Update Bright", + "value": "#f8faff" + }, + { + "name": "Update Dim", + "value": "#2c333f" } ] }, diff --git a/src/site/_data/event.js b/src/site/_data/event.js index 6dcd83f72ec..85c1a4a482d 100644 --- a/src/site/_data/event.js +++ b/src/site/_data/event.js @@ -561,7 +561,7 @@ const qAndAs = [ { category: 'Web Vitals', question: '#webdevLIVE how do you get field values and how do you get lab values for core web vitals?', - answer: 'For field data you can look at Chrome UX Report data, available in tools like PageSpeed Insights, DataStudio and the CrUX API. For lab data, you can use Lighthouse (either in the Lighthouse panel in DevTools, via the CLI, or in PageSpeed Insights).', + answer: 'For field data you can look at Chrome UX Report data, available in tools like PageSpeed Insights, DataStudio and the CrUX API. For lab data, you can use Lighthouse (either in the Lighthouse panel in DevTools, via the CLI, or in PageSpeed Insights).', }, { category: 'Web Vitals', diff --git a/src/site/_data/i18n/authors.yml b/src/site/_data/i18n/authors.yml index c52b6eb521a..55854684b50 100644 --- a/src/site/_data/i18n/authors.yml +++ b/src/site/_data/i18n/authors.yml @@ -22,6 +22,12 @@ zgoddard: description: en: Game Developer at Gradient Studios, Inc. +adamzielinski: + title: + en: Adam Zieliński + description: + en: WordPress core committer at Automattic + tomwiltzius: title: en: Tom Wiltzius @@ -356,7 +362,12 @@ paulkinlan: title: en: Paul Kinlan description: - en: Paul is a Developer Advocate + en: Developer Advocate + bio: + en: + - I lead the Chrome Developer Relations team at Google. + - We want people to have the best experience possible on the web without having to install a native app or produce content in a walled garden. + - Our team tries to make it easier for developers to build on the web by supporting every Chrome release, creating great content to support developers on web.dev, contributing to MDN, helping to improve browser compatibility, and some of the best developer tools like Lighthouse, Workbox, Squoosh to name just a few. dalecurtis: title: @@ -1054,6 +1065,60 @@ thomassteiner: ru: Том — Developer Advocate zh: Tom 是一名开发技术推广工程师 +pliao: + title: + en: Palances Liao + es: Palances Liao + ja: Palances Liao + ko: Palances Liao + pt: Palances Liao + ru: Palances Liao + zh: Palances Liao + description: + en: Palances is a Web Ecosystem Consultant + es: Palances es un Consultor de Ecosistemas Web + ja: Palances は Web エコシステム コンサルタントです。 + ko: Palances는 웹 생태계 컨설턴트입니다. + pt: Palances é um Consultor de Ecossistemas Web + ru: Palances — консультант по веб-экосистеме + zh: Palances 是一名网络生态系统顾问 + +conwayt: + title: + en: Tony Conway + es: Tony Conway + ja: Tony Conway + ko: Tony Conway + pt: Tony Conway + ru: Tony Conway + zh: Tony Conway + description: + en: Tony is a Web Ecosystem Consultant + es: Tony es un Consultor de Ecosistemas Web + ja: Tony は Web エコシステム コンサルタントです。 + ko: Tony는 웹 생태계 컨설턴트입니다. + pt: Tony é um Consultor de Ecossistemas Web + ru: Tony — консультант по веб-экосистеме + zh: Tony 是一名网络生态系统顾问 + +chuijun: + title: + en: Cecilia Cong + es: Cecilia Cong + ja: Cecilia Cong + ko: Cecilia Cong + pt: Cecilia Cong + ru: Cecilia Cong + zh: Cecilia Cong + description: + en: Cecilia is a Web Ecosystem Consultant + es: Cecilia es una Consultora de Ecosistemas Web + ja: Cecilia は Web エコシステム コンサルタントです。 + ko: Cecilia는 웹 생태계 컨설턴트입니다. + pt: Cecilia é uma Consultora de Ecossistemas Web + ru: Cecilia — консультант по веб-экосистеме + zh: Cecilia 是一名网络生态系统顾问 + surma: title: en: Surma @@ -1180,7 +1245,6 @@ tunetheweb: ru: Developer Advocate по вопросам Google zh: 负责 Google 的开发技术推广工程师 - ekharvey: title: en: Lizzi Harvey @@ -4135,7 +4199,7 @@ nikilmathew: description: en: Lead Software engineer at Mishipay -jhey: +jheyy: title: en: Jhey Tompkins es: Jhey Tompkins @@ -4220,8 +4284,8 @@ alexeyrodionov: en: Alexey Rodionov ru: Алексей Родионов description: - en: PWA developer. UI/UX engineer. Web platform advocate. PWA, Web Components, GraphQL evangelist. PWA Russian-speaking community organizer. Chromium contributor. Lead front-end developer at Mercury Development. - ru: Разработчик PWA. UI/UX-инженер. Адвокат веб-платформы. Евангелист PWA, Web Components, GraphQL. Организатор русскоязычного сообщества PWA. Контрибьютор Chromium. Ведущий фронтенд-разработчик в Mercury Development. + en: PWA developer. UX/DX engineer. Web platform advocate. Google Developer Expert (GDE) in Web Technologies. PWA, Web Components, GraphQL evangelist. PWA Russian-speaking community organizer. Chromium contributor. Lead front-end developer at Mercury Development. + ru: Разработчик PWA. UX/DX-инженер. Адвокат веб-платформы. Официально признанный Google эксперт в области веб-технологий. Евангелист PWA, Web Components, GraphQL. Организатор русскоязычного сообщества PWA. Контрибьютор Chromium. Ведущий фронтенд-разработчик в Mercury Development. twifkak: title: @@ -4288,3 +4352,207 @@ kadirtopal: en: Kadir Topal description: en: Kadir is a product manager on the Web Developer Platform team. + +michellebarker: + title: + en: Michelle Barker + description: + en: Michelle is a senior front-end developer at Ada Mode. + +daviddarnes: + title: + en: David Darnes + description: + en: David is a senior front-end developer at Nordhealth. + +linhduong: + title: + en: Linh Duong + description: + en: Front-end Engineer at Rakuten Group, Inc. + +shogokashiwase: + title: + en: Shogo Kashiwase + description: + en: Designer at Rakuten Group, Inc. + +hayounglee: + title: + en: Hayoung Lee + description: + en: Front-end Engineer at Rakuten Group, Inc. + +jecelynyeen: + title: + en: Jecelyn Yeen + description: + en: DevRel Engineer at Google Chrome. + +ryunosukeakiba: + title: + en: Ryunosuke Akiba + description: + en: Creative Director at Rakuten Group, Inc. + +mmatuzo: + title: + en: Manuel Matuzović + description: + en: Front-end developer. + +estelleweyl: + title: + en: Estelle Weyl + description: + en: Open-source maintainer. Front-end engineer. Technical writer. + +davideast: + title: + en: David East + description: + en: Web Developer + +cariefisher: + title: + en: Carie Fisher + description: + en: Senior Accessibility Consultant and developer + +marksteadman: + title: + en: Mark Steadman + description: + en: Principal Accessibility Engineer + +superhighfives: + title: + en: Charlie Gleason + description: + en: Designer and Developer + +sriramkrishnan: + title: + en: 'Sriram Krishnan' + description: + en: 'Tech Lead and Manager on YouTube Web' + +alispivak: + title: + en: 'Ali Spivak' + description: + en: 'Member of Chrome DevRel, lead for Extensions.' + +matmarquis: + title: + en: 'Mat Marquis' + description: + en: 'Independent consultant specializing in inclusive web development.' + +aaronforinton: + title: + en: 'Aaron Forinton' + description: + en: 'Technical Writer' + +sil: + title: + en: 'Stuart Langridge' + description: + en: 'Web consultant and developer.' + +anslo: + title: + en: Anslo + description: + en: Exploring creative development and digital craft + +amitkumar: + title: + en: Amit Kumar + description: + en: Senior Engineering Manager at redBus + +daya: + title: + en: Daya Ram Yadav + description: + en: Senior Engineering Manager at Times Internet + +barunkumar: + title: + en: Barun Kumar + description: + en: Senior Frontend Developer at Times Internet + +jhuoponen: + title: + en: Jani Huoponen + description: + en: Group Product Manager at Google + +vignesh: + title: + en: Vignesh Venkatasubramanian + description: + en: Staff Software Engineer at Google + +ddworken: + title: + en: David Dworken + description: + en: Information Security Engineer, Google Security Team + +ramona: + title: + en: Ramona Schwering + description: + en: A frontend developer who ❤️ Test Automation and JavaScript. + +mitchgalavan: + title: + en: Mitchell Galavan + description: + en: Interaction Designer at Google + +cjacinic: + title: + en: Court Jacinic + description: + en: Senior UX Writer at Google + +silviaconvento: + title: + en: Silvia Convento + description: + en: User Experience Researcher at Google + +yurikohirota: + title: + en: Yuriko Hirota + description: + en: Web Ecosystem Consultant at Google + +thiernothiam: + title: + en: Thierno Thiam + description: + en: Web Ecosystem Consultant at Google + +guilhermems: + title: + en: Guilherme Moser de Souza + description: + en: IT Manager for Vivo + +nandunair: + title: + en: Nandu Nair + description: + en: Technical Program Manager + +markusbordihn: + title: + en: Markus Bordihn + description: + en: Senior Technical Solution Consultant at Google diff --git a/src/site/_data/i18n/baseline.yml b/src/site/_data/i18n/baseline.yml new file mode 100644 index 00000000000..1069de2f94f --- /dev/null +++ b/src/site/_data/i18n/baseline.yml @@ -0,0 +1,8 @@ +widely_supported: + en: Widely supported + +definition: + en: Baseline support is determined by this web feature being supported on the current and the previous version of major browsers. + +learn_more: + en: Learn more diff --git a/src/site/_data/i18n/browser_compat.yml b/src/site/_data/i18n/browser_compat.yml deleted file mode 100644 index b772477db5d..00000000000 --- a/src/site/_data/i18n/browser_compat.yml +++ /dev/null @@ -1,50 +0,0 @@ -browser_support: - en: Browser support - es: Compatibilidad con los navegadores - ja: ブラウザのサポート - ko: 브라우저 지원 - pt: Suporte pelo navegador - ru: Поддержка в браузерах - zh: 浏览器支持 - -source: - en: Source - es: Fuente - ja: ソース - ko: 소스 - pt: Fonte - ru: Источник - zh: 源代码 - -supported: - en: Supported - es: Compatible - ja: サポート済み - ko: 지원됨 - pt: Suportado - ru: Поддерживается - zh: 支持 - -not_supported: - en: Not supported - es: No compatible - ja: 未サポート - ko: 지원되지 않음 - pt: Não suportado - ru: Не поддерживается - zh: 不支持 - -preview: - en: Preview - es: Avance - ja: プレビュー - ko: 시사 - pt: Visualizar - ru: Предварительный просмотр - zh: 预览 - -flag: - en: Behind a flag - -deprecated: - en: Deprecated diff --git a/src/site/_data/i18n/common.yml b/src/site/_data/i18n/common.yml index 8f2a4f670cc..ea7671f22c5 100644 --- a/src/site/_data/i18n/common.yml +++ b/src/site/_data/i18n/common.yml @@ -88,6 +88,15 @@ important: ru: Важный zh: 重要的 +update: + en: Update + es: Actualizar + ja: 更新 + ko: 업데이트 + pt: Atualizar + ru: Обновлять + zh: 更新 + do: en: Do es: Hacer @@ -172,3 +181,12 @@ see_all: more: en: More + +by: + en: By + +chrome_devrel: + en: Chrome DevRel + +skip_link: + en: Skip to content diff --git a/src/site/_data/i18n/courses.yml b/src/site/_data/i18n/courses.yml index c28b92fe84a..7b125428ffd 100644 --- a/src/site/_data/i18n/courses.yml +++ b/src/site/_data/i18n/courses.yml @@ -74,8 +74,60 @@ learn_design: en: Learn Responsive Design! description: en: "Let's explore all aspects of responsive design, learning how to make sites that look great and work well for everyone." + learn_pwa: title: en: Learn PWA! description: en: "A course that breaks down every aspect of modern progressive web app development." + +learn_accessibility: + title: + en: Learn Accessibility + description: + en: "Discover how to make your websites and web apps more accessible." + +learn_html: + title: + en: Learn HTML! + description: + en: "This HTML course for web developers provides a solid overview for developers, from novice to expert level HTML." + +learn_privacy: + title: + en: Learn Privacy! + description: + en: "A course to help you build more privacy-preserving websites." + +learn_images: + title: + en: Learn Images! + description: + en: "A course covering everything from selecting the right formats, to responsive images, and performance." +images_and_performance: + title: + en: Images and performance + description: + en: "Learn how images can impact the performance of your site." +image_formats: + title: + en: Image formats and compression + description: + en: "A detailed explanation of the different image formats and compression types." +responsive_images: + title: + en: Responsive images + description: + en: "A modern approach to responsive image use." +image_workflows: + title: + en: High performance image workflows + description: + en: "How to integrate the advice from this course into your workflow, CMS, CDN, and automation tools." + +example: + title: + en: Example course + description: + en: This page is used for visual testing of the courses layout and also showcases it's capabilities" + diff --git a/src/site/_data/i18n/explore.yml b/src/site/_data/i18n/explore.yml new file mode 100644 index 00000000000..656ea54b0c7 --- /dev/null +++ b/src/site/_data/i18n/explore.yml @@ -0,0 +1,68 @@ +header: + en: "Explore our structured learning paths to discover everything you need to know about building for the modern web." + es: "Explore nuestras rutas de aprendizaje estructuradas para descubrir todo lo que necesita saber sobre cómo crear para la Web moderna." + ja: "体系的なラーニングパスを経由することにより、最新の Web 環境の構築に必要なすべての知識を学ぶことができます。" + ko: "잘 짜여진 학습 경로를 따라 최신 웹 구축에 대해 알아야 할 모든 사항을 찾아보세요." + pt: "Explore nossos caminhos de aprendizagem estruturados para descobrir tudo o que você precisa saber sobre como criar para a web moderna." + ru: "Ознакомьтесь с нашими структурированными курсами, которые научат вас всему необходимому для создания современных сайтов." + zh: "探索我们的结构化学习路径,发掘您为现代网络构建时的所有须知事项。" + +resources: + en: resources + es: recursos + ja: 件のリソース + ko: 리소스 + pt: recursos + ru: (ресурсы) + zh: 个资源 + +performance: + en: Performance + es: Performance + ja: パフォーマンス + ko: 성능 + pt: Desempenho + ru: Производительность + zh: 性能 + +build_excellent: + en: Build excellent websites + es: Crea sitios web excelentes + ja: 優れた Web サイトを構築する + ko: 우수한 웹사이트 구축 + pt: Crie sites excelentes + ru: Создание качественных сайтов + zh: 构建优秀的网站 + +frameworks: + en: Frameworks + es: Frameworks + ja: フレームワーク + ko: 프레임워크 + pt: Frameworks + ru: Фреймворки + zh: 框架 + +lighthouse: + en: Lighthouse + es: Lighthouse + ja: Lighthouse + ko: Lighthouse + pt: Lighthouse + ru: Lighthouse + zh: Lighthouse + +explorations: + en: Explorations + es: Exploraciones + ja: 探求 + ko: 탐색 + pt: Explorações + ru: Дополнительно + zh: 探索 + +collections: + en: Collections + +web_dev_basics: + en: Web Dev Basics diff --git a/src/site/_data/i18n/footer.yml b/src/site/_data/i18n/footer.yml index e95d5481254..d2b8dc9bf59 100644 --- a/src/site/_data/i18n/footer.yml +++ b/src/site/_data/i18n/footer.yml @@ -1,3 +1,7 @@ +contribute: + en: Contribute + pt: Contribua + file_a_bug: en: File a bug es: Presentar un error @@ -108,3 +112,6 @@ shows: developer_chrome_com: en: developer.chrome.com + +mission: + en: We want to help you build beautiful, accessible, fast, and secure websites that work cross-browser, and for all of your users. This site is our home for content to help you on that journey, written by members of the Chrome team, and external experts. diff --git a/src/site/_data/i18n/header.yml b/src/site/_data/i18n/header.yml index 968ee02ca0c..184662bab72 100644 --- a/src/site/_data/i18n/header.yml +++ b/src/site/_data/i18n/header.yml @@ -7,13 +7,31 @@ learn: ru: Обучение zh: 学习 +explore: + en: Explore + es: Explorar + ja: 探検 + ko: 탐구하다 + pt: Explorar + ru: Исследовать + zh: 探索 + +patterns: + en: Patterns + es: patrones + ja: パターン + ko: 패턴 + pt: padrões + ru: Паттерны + zh: 模式 + measure: en: Measure es: Medir ja: 測定する ko: 측정 pt: Medir - ru: Измерение + ru: Измерить zh: 衡量 blog: diff --git a/src/site/_data/i18n/learn.yml b/src/site/_data/i18n/learn.yml index 30c2d646fb7..49c8ef27ffe 100644 --- a/src/site/_data/i18n/learn.yml +++ b/src/site/_data/i18n/learn.yml @@ -1,11 +1,5 @@ header: - en: "Explore our structured learning paths to discover everything you need to know about building for the modern web." - es: "Explore nuestras rutas de aprendizaje estructuradas para descubrir todo lo que necesita saber sobre cómo crear para la Web moderna." - ja: "体系的なラーニングパスを経由することにより、最新の Web 環境の構築に必要なすべての知識を学ぶことができます。" - ko: "잘 짜여진 학습 경로를 따라 최신 웹 구축에 대해 알아야 할 모든 사항을 찾아보세요." - pt: "Explore nossos caminhos de aprendizagem estruturados para descobrir tudo o que você precisa saber sobre como criar para a web moderna." - ru: "Ознакомьтесь с нашими структурированными курсами, которые научат вас всему необходимому для создания современных сайтов." - zh: "探索我们的结构化学习路径,发掘您为现代网络构建时的所有须知事项。" + en: "Explore our growing collection of courses on key web design and development subjects. An industry expert has written each course, helped by members of the Chrome team. Follow the modules sequentially, or dip into the topics you most want to learn about." resources: en: resources @@ -15,72 +9,3 @@ resources: pt: recursos ru: (ресурсы) zh: 个资源 - -course: - en: Course - es: Curso - ja: コース - ko: 과정 - pt: Curso - ru: Курс - zh: 课程 - -courses: - en: Courses - es: Cursos - ja: コース - ko: 과정 - pt: Cursos - ru: Курсы - zh: 课程 - -performance: - en: Performance - es: Performance - ja: パフォーマンス - ko: 성능 - pt: Desempenho - ru: Производительность - zh: 性能 - -build_excellent: - en: Build excellent websites - es: Crea sitios web excelentes - ja: 優れた Web サイトを構築する - ko: 우수한 웹사이트 구축 - pt: Crie sites excelentes - ru: Создание качественных сайтов - zh: 构建优秀的网站 - -frameworks: - en: Frameworks - es: Frameworks - ja: フレームワーク - ko: 프레임워크 - pt: Frameworks - ru: Фреймворки - zh: 框架 - -lighthouse: - en: Lighthouse - es: Lighthouse - ja: Lighthouse - ko: Lighthouse - pt: Lighthouse - ru: Lighthouse - zh: Lighthouse - -explorations: - en: Explorations - es: Exploraciones - ja: 探求 - ko: 탐색 - pt: Explorações - ru: Дополнительно - zh: 探索 - -collections: - en: Collections - -web_dev_basics: - en: Web Dev Basics diff --git a/src/site/_data/i18n/paths/fast.yml b/src/site/_data/i18n/paths/fast.yml index 0ef5ebd396b..3c76d05219e 100644 --- a/src/site/_data/i18n/paths/fast.yml +++ b/src/site/_data/i18n/paths/fast.yml @@ -35,6 +35,15 @@ topics: ru: Введение zh: 介绍 + core_web_vitals: + en: Core Web Vitals + es: Core Web Vitals + ja: Core Web Vitals + ko: Core Web Vitals + pt: Core Web Vitals + ru: Core Web Vitals + zh: Core Web Vitals + set_performance_budgets: en: Set performance budgets es: Definir los presupuestos de rendimiento diff --git a/src/site/_data/i18n/paths/how_to_optimize_inp.yaml b/src/site/_data/i18n/paths/how_to_optimize_inp.yaml new file mode 100644 index 00000000000..44ee7fd020a --- /dev/null +++ b/src/site/_data/i18n/paths/how_to_optimize_inp.yaml @@ -0,0 +1,21 @@ +title: + en: How to Optimize Interaction to Next Paint (INP) + +description: + en: Learn how to optimize for the Interaction to Next Paint metric. + +overview: + en: Interaction to Next Paint (INP) is an important responsiveness metric that measures how quickly a page responds to user interactions. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. Optimizing INP is an involved process, requiring knowledge of various aspects that drive interactivity. Fortunately, the collection of guides below will help you to understand how INP works, how to find slow interactions in the field, how to reproduce them in the lab, and then fix them. + +topics: + familiarize: + en: Familiarize yourself with INP and how to optimize it + + troubleshooting: + en: Troubleshooting + + javascript: + en: Optimize poor INP caused by JavaScript + + rendering: + en: Optimize poor INP caused by rendering diff --git a/src/site/_data/i18n/paths/identity.yml b/src/site/_data/i18n/paths/identity.yml index 8a89a59c9d5..2d2337876a6 100644 --- a/src/site/_data/i18n/paths/identity.yml +++ b/src/site/_data/i18n/paths/identity.yml @@ -6,20 +6,20 @@ description: overview: en: A curated collection of high-quality resources that will help you understand authentication basics and how to build your own authentication systems with modern APIs. - + topics: understand_authentication_basics: en: Understand authentication basics - + build_authentication_systems_with_modern_APIs: en: Build authentication systems with modern APIs - strenghten_security_with_two-factor_authentication: + strengthen_security_with_two-factor_authentication: en: Strengthen security with two-factor authentication build_advanced_authentication_systems: en: Build advanced authentication systems - + build_authentication_with_identity_federation: en: Build authentication with identity federation diff --git a/src/site/_data/i18n/paths/learn_core_web_vitals.yml b/src/site/_data/i18n/paths/learn_core_web_vitals.yml new file mode 100644 index 00000000000..82b25552427 --- /dev/null +++ b/src/site/_data/i18n/paths/learn_core_web_vitals.yml @@ -0,0 +1,81 @@ +title: + en: Core Web Vitals + es: Core Web Vitals + ja: Core Web Vitals + ko: Core Web Vitals + pt: Core Web Vitals + ru: Core Web Vitals + zh: Core Web Vitals + +description: + en: Essential metrics for a healthy site. + es: Métricas esenciales para mantener un sitio en excelente estado. + ja: サイトの健全性の評価に不可欠となる指標。 + ko: 건전한 사이트를 위한 필수 메트릭. + pt: Métricas essenciais para um site saudável. + ru: Ключевые показатели, отражающие здоровье сайта. + zh: 健康网站的关键指标。 + +overview: + en: An initiative to provide unified guidance for quality signals that are essential to delivering a great user experience on the web. + es: Una iniciativa para proporcionar una guía unificada para las señales de calidad que son esenciales para ofrecer una gran experiencia de usuario en la web. + ja: Web 上での優れたユーザーエクスペリエンスの提供に不可欠な品質シグナルに関する統一されたガイダンスを提供するためのイニシアチブです。 + ko: 웹에서 훌륭한 사용자 경험을 제공하는 데 필수적인 품질 신호와 관련하여 통합적 가이드를 제공하는 이니셔티브입니다. + pt: Uma iniciativa que proporciona orientação unificada para sinais de qualidade que são essenciais para oferecer uma ótima experiência ao usuário na web. + ru: Инициатива по предоставлению унифицированных сигналов качества для повышения удобства пользователей сайтов. + zh: 一项旨在为质量信号提供统一指导的计划,这些信号对于提供出色的网络用户体验至关重要。 + +topics: + overview: + en: Overview + es: Panorama general + ja: 概要 + ko: 개요 + pt: Visão geral + ru: Краткий обзор + zh: 概览 + + core_web_vitals_metrics: + en: Core Web Vitals Metrics + es: Métricas de Core Web Vitals + ja: Core Web Vitals 指標 + ko: Core Web Vitals 메트릭 + pt: Métricas Core Web Vitals + ru: Показатели Core Web Vitals + zh: 网页指标 + + measure_core_web_vitals: + en: Measure Core Web Vitals + es: Medir Core Web Vitals + ja: Core Web Vitals を測定する + ko: Core Web Vitals 측정 + pt: Medição das Core Web Vitals + ru: Измерение Core Web Vitals + zh: 衡量网页指标 + + improve_core_web_vitals: + en: Improve Core Web Vitals + es: Mejorar Core Web Vitals + ja: Core Web Vitals を改善する + ko: Core Web Vitals 개선 + pt: Melhoria das Core Web Vitals + ru: Улучшение Core Web Vitals + zh: 改善网页指标 + + debug_core_web_vitals: + en: Debug Core Web Vitals + es: Depurar Core Web Vitals + ja: Core Web Vitals のデバッグを行う + ko: Core Web Vitals 디버깅 + pt: Depuração das Core Web Vitals + ru: Отладка Core Web Vitals + zh: 调试网页指标 + + best_practices: + en: Best Practices + es: Prácticas recomendadas + ja: ベストプラクティス + ko: 모범 사례 + pt: Práticas recomendadas + ru: Рекомендации + zh: 最佳做法 diff --git a/src/site/_data/i18n/paths/learn_web_vitals.yml b/src/site/_data/i18n/paths/learn_web_vitals.yml deleted file mode 100644 index cc5503a3ab4..00000000000 --- a/src/site/_data/i18n/paths/learn_web_vitals.yml +++ /dev/null @@ -1,81 +0,0 @@ -title: - en: Web Vitals - es: Web Vitals - ja: Web Vitals - ko: Web Vitals - pt: Web Vitals - ru: Web Vitals - zh: Web Vitals - -description: - en: Essential metrics for a healthy site. - es: Métricas esenciales para mantener un sitio en excelente estado. - ja: サイトの健全性の評価に不可欠となる指標。 - ko: 건전한 사이트를 위한 필수 메트릭. - pt: Métricas essenciais para um site saudável. - ru: Ключевые показатели, отражающие здоровье сайта. - zh: 健康网站的关键指标。 - -overview: - en: An initiative to provide unified guidance for quality signals that are essential to delivering a great user experience on the web. - es: Una iniciativa para proporcionar una guía unificada para las señales de calidad que son esenciales para ofrecer una gran experiencia de usuario en la web. - ja: Web 上での優れたユーザーエクスペリエンスの提供に不可欠な品質シグナルに関する統一されたガイダンスを提供するためのイニシアチブです。 - ko: 웹에서 훌륭한 사용자 경험을 제공하는 데 필수적인 품질 신호와 관련하여 통합적 가이드를 제공하는 이니셔티브입니다. - pt: Uma iniciativa que proporciona orientação unificada para sinais de qualidade que são essenciais para oferecer uma ótima experiência ao usuário na web. - ru: Инициатива по предоставлению унифицированных сигналов качества для повышения удобства пользователей сайтов. - zh: 一项旨在为质量信号提供统一指导的计划,这些信号对于提供出色的网络用户体验至关重要。 - -topics: - overview: - en: Overview - es: Panorama general - ja: 概要 - ko: 개요 - pt: Visão geral - ru: Краткий обзор - zh: 概览 - - web_vitals_metrics: - en: Web Vitals Metrics - es: Métricas de Web Vitals - ja: Web Vitals 指標 - ko: Web Vitals 메트릭 - pt: Métricas Web Vitals - ru: Показатели Web Vitals - zh: 网页指标 - - measure_web_vitals: - en: Measure Web Vitals - es: Medir Web Vitals - ja: Web Vitals を測定する - ko: Web Vitals 측정 - pt: Medição das Web Vitals - ru: Измерение Web Vitals - zh: 衡量网页指标 - - improve_web_vitals: - en: Improve Web Vitals - es: Mejorar Web Vitals - ja: Web Vitals を改善する - ko: Web Vitals 개선 - pt: Melhoria das Web Vitals - ru: Улучшение Web Vitals - zh: 改善网页指标 - - debug_web_vitals: - en: Debug Web Vitals - es: Depurar Web Vitals - ja: Web Vitals のデバッグを行う - ko: Web Vitals 디버깅 - pt: Depuração das Web Vitals - ru: Отладка Web Vitals - zh: 调试网页指标 - - best_practices: - en: Best Practices - es: Prácticas recomendadas - ja: ベストプラクティス - ko: 모범 사례 - pt: Práticas recomendadas - ru: Рекомендации - zh: 最佳做法 diff --git a/src/site/_data/i18n/paths/lighthouse_accessibility.yml b/src/site/_data/i18n/paths/lighthouse_accessibility.yml deleted file mode 100644 index 926e77ebaf2..00000000000 --- a/src/site/_data/i18n/paths/lighthouse_accessibility.yml +++ /dev/null @@ -1,120 +0,0 @@ -title: - en: Accessibility audits - es: Auditorías de accesibilidad - ja: アクセシビリティの監査 - ko: 접근성 감사 - pt: Auditorias de acessibilidade - ru: Аудиты доступности - zh: 无障碍功能审核 - -description: - en: Can all users access content and navigate your site effectively? - es: '¿Todos los usuarios pueden acceder al contenido y navegar por su sitio de manera eficaz?' - ja: すべてのユーザーがコンテンツにアクセスし、サイトを効果的に操作することができていますか? - ko: 모든 사용자가 콘텐츠에 액세스하고 사이트를 효과적으로 탐색할 수 있습니까? - pt: Todos os usuários podem acessar conteúdo e navegar em seu site de forma eficaz? - ru: Могут ли любые пользователи эффективно перемещаться и просматривать контент на вашем сайте? - zh: 所有用户是否都能有效地访问内容并浏览您的网站? - -overview: - en: These checks highlight opportunities to improve the accessibility of your web app. Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged. - es: Estas revisiones destacan las oportunidades de mejorar la accesibilidad de su aplicación web. Solo se puede detectar automáticamente un subconjunto de problemas de accesibilidad, por lo que se recomienda realizar pruebas manuales. - ja: これらを確認することにより、Web アプリケーションのアクセシビリティを向上させることができる改善項目が浮き彫りになります。アクセシビリティに関する問題の中で自動的に検出できるものは一部に限られているため、手動によるテストの実施も推奨されています。 - ko: 이러한 검사는 웹 앱의 접근성을 개선할 수 있는 기회를 드러내 줍니다. 접근성 문제의 일부는 자동으로 감지되지 않을 수 있으므로 수동 테스트도 권장합니다. - pt: Essas verificações destacam oportunidades para melhorar a acessibilidade da sua aplicação web. Apenas um subconjunto de problemas de acessibilidade pode ser detectado automaticamente, portanto, o teste manual também é incentivado. - ru: Эти тесты выявляют возможности для повышения доступности веб-приложения. Только часть проблем с доступностью можно диагностировать автоматически, поэтому рекомендуется также проводить ручные тесты. - zh: 这些检查能够突出可以改进您的 Web 应用无障碍功能的机会。只有一部分无障碍功能问题可以被自动检测到,所以我们也鼓励您进行人工测试。 - -topics: - a11y_overview: - en: Accessibility Overview - - audit_scoring: - en: Audit scoring - es: Puntuación de la auditoría - ja: 監査スコア - ko: 감사 점수 - pt: Pontuação de auditoria - ru: Оценка результатов аудита - zh: 审核得分 - - navigation: - en: Navigation - es: Navegación - ja: ナビゲーション - ko: 탐색 - pt: Navegação - ru: Навигация - zh: 导航 - - aria: - en: ARIA - es: ARIA - ja: ARIA - ko: ARIA - pt: ARIA - ru: ARIA - zh: ARIA - - names_and_labels: - en: Names and labels - es: Nombres y etiquetas - ja: 名前とラベル - ko: 이름 및 레이블 - pt: Nomes e etiquetas - ru: Названия и подписи - zh: 名称和标签 - - contrast: - en: Contrast - es: Contraste - ja: コントラスト - ko: 대비 - pt: Contraste - ru: Контрастность - zh: 对比度 - - tables_and_lists: - en: Tables and lists - es: Tablas y listas - ja: 表とリスト - ko: 테이블 및 목록 - pt: Tabelas e listas - ru: Таблицы и списки - zh: 表格和列表 - - best_practices: - en: Best practices - es: Prácticas recomendadas - ja: ベストプラクティス - ko: 모범 사례 - pt: Práticas recomendadas - ru: Рекомендации - zh: 最佳做法 - - audio_and_video: - en: Audio and video - es: Audio y video - ja: 音声と動画 - ko: 오디오 및 비디오 - pt: Áudio e vídeo - ru: Аудио и видео - zh: 音频和视频 - - internationalization_and_localization: - en: Internationalization and localization - es: Internacionalización y localización - ja: 国際化とローカライゼーション - ko: 국제화 및 현지화 - pt: Internacionalização e localização - ru: Интернационализация и локализация - zh: 国际化和本地化 - - additional_items_to_manually_check: - en: Additional items to manually check - es: Elementos adicionales para revisar manualmente - ja: 手動で確認する場合の追加項目 - ko: 수동으로 확인할 추가 항목 - pt: Itens adicionais para verificar manualmente - ru: Дополнительные пункты для ручной проверки - zh: 其他需要手动检查的项目 diff --git a/src/site/_data/i18n/paths/lighthouse_best_practices.yml b/src/site/_data/i18n/paths/lighthouse_best_practices.yml deleted file mode 100644 index 49ec65757e8..00000000000 --- a/src/site/_data/i18n/paths/lighthouse_best_practices.yml +++ /dev/null @@ -1,81 +0,0 @@ -title: - en: Best Practices audits - es: Auditorías de las prácticas recomendadas - ja: 監査のベストプラクティス - ko: 모범 사례 감사 - pt: Auditorias de práticas recomendadas - ru: Аудиты соблюдения рекомендаций - zh: 最佳做法审核 - -description: - en: Improve code health of your web page following these best practices - es: Mejore el estado del código de su página web siguiendo estas prácticas recomendadas - ja: 以下のベストプラクティスに従って Web ページのコードの健全性を改善します。 - ko: 다음 모범 사례에 따라 웹 페이지의 코드 상태를 개선하세요. - pt: Melhore a qualidade do código da sua página web seguindo essas práticas recomendadas - ru: Повысьте качество кода своей веб-страницы, следуя этим рекомендациям - zh: 遵循这些最佳做法,改善您网页的代码健康状况 - -overview: - en: These checks highlight opportunities to improve the overall code health of your web app. - es: Estas revisiones destacan las oportunidades de mejorar el estado general del código de su aplicación web. - ja: これらを確認することにより、Web アプリのコードの健全性を全体的に向上させるために必要となる改善項目を浮き彫りにします。 - ko: 이러한 검사는 웹 앱의 전반적인 코드 상태를 개선할 수 있는 기회를 드러내 줍니다. - pt: Essas verificações destacam oportunidades para melhorar a qualidade geral do código da sua aplicação web. - ru: Эти тесты позволяют выявить возможности для повышения общего качества кода вашего веб-приложения. - zh: 这些检查突出了可以改善您的 Web 应用整体代码健康状况的机会。 - -topics: - general_best_practices: - en: General best practices - es: Mejores prácticas generales - ja: 一般的なベストプラクティス - ko: 일반적인 모범 사례 - pt: Práticas recomendadas gerais - ru: Общие рекомендации - zh: 常见的最佳做法 - - make_your_page_fast: - en: Make your page fast - es: Haga que su página sea rápida - ja: ページを高速化する - ko: 페이지를 빠르게 만들기 - pt: Deixe a sua página rápida - ru: Ускорение работы страницы - zh: 使您的网页变快 - - make_your_page_secure: - en: Make your page secure - es: Haga que su página sea segura - ja: ページのセキュリティを向上させる - ko: 페이지를 안전하게 만들기 - pt: Deixe sua página segura - ru: Повышение безопасности страницы - zh: 使您的网页安全 - - create_a_good_user_experience: - en: Create a good user experience - es: Crear una buena experiencia de usuario - ja: 優れたユーザーエクスペリエンスを作り上げる - ko: 훌륭한 사용자 경험 만들기 - pt: Crie uma boa experiência de usuário - ru: Повышение удобства пользователей - zh: 创造良好的用户体验 - - avoid_deprecated_technologies: - en: Avoid deprecated technologies - es: Evitar tecnologías obsoletas - ja: 非推奨の技術の使用を避ける - ko: 더 이상 사용되지 않는 기술 피하기 - pt: Evite tecnologias obsoletas - ru: Отказ от устаревших технологий - zh: 避免已弃用的技术 - - diagnostic_audits: - en: Diagnostic audits - es: Auditorias de diagnóstico - ja: 診断的監査 - ko: 진단 감사 - pt: Auditorias de diagnóstico - ru: Диагностические аудиты - zh: 诊断性审核 diff --git a/src/site/_data/i18n/paths/lighthouse_performance.yml b/src/site/_data/i18n/paths/lighthouse_performance.yml deleted file mode 100644 index 499135057ad..00000000000 --- a/src/site/_data/i18n/paths/lighthouse_performance.yml +++ /dev/null @@ -1,63 +0,0 @@ -title: - en: Performance audits - es: Auditorías de rendimiento - ja: パフォーマンスの監査 - ko: 성능 감사 - pt: Auditorias de desempenho - ru: Аудиты производительности - zh: 性能审核 - -description: - en: Measure performance and find opportunities to speed up page loads. - es: Mida el rendimiento y encuentre oportunidades para acelerar la carga de las páginas. - ja: パフォーマンスを測定し、ページの読み込みを高速化するために必要な改善項目を見つけ出します。 - ko: 성능을 측정하고 페이지 로드 속도를 높일 수 있는 기회를 찾으세요. - pt: Meça o desempenho e encontre oportunidades para acelerar o carregamento das páginas. - ru: Измерьте производительность, и найдите способы ускорить загрузку страниц. - zh: 衡量性能并寻找机会加快网页加载速度。 - -overview: - en: These checks ensure that your page is optimized for users to be able to see and interact with page content. - es: Estas revisiones garantizan que su página esté optimizada para que los usuarios puedan ver e interactuar con el contenido de la misma. - ja: これらを確認することにより、ユーザーがページ内のコンテンツを閲覧したり操作したりすることができるようにページが最適化されているかどうかを確認することができます。 - ko: 이러한 검사는 사용자가 페이지 콘텐츠를 보고 상호 작용하는 데 페이지가 최적화되었는지 확인합니다. - pt: Essas verificações garantem que sua página seja otimizada para que os usuários possam ver e interagir com o conteúdo da página. - ru: Эти тесты позволяют убедиться, что ваша страница оптимизирована для просмотра контента и взаимодействия с ним. - zh: 这些检查可以确保您的网页已经过优化,使用户能够看到网页内容并与之互动。 - -topics: - performance_audit_scoring: - en: Performance audit scoring - es: Puntuación de la auditoría de rendimiento - ja: パフォーマンスの監査スコア - ko: 성능 감사 점수 - pt: Pontuação da auditoria de desempenho - ru: Оценка результатов аудита производительности - zh: 性能审核得分 - - metrics: - en: Metrics - es: Métricas - ja: 指標 - ko: 메트릭 - pt: Métricas - ru: Показатели - zh: 指标 - - opportunities: - en: Opportunities - es: Oportunidades - ja: 改善項目 - ko: 기회 - pt: Oportunidades - ru: Возможности - zh: 机会 - - diagnostics: - en: Diagnostics - es: Diagnósticos - ja: 診断 - ko: 진단 - pt: Diagnóstico - ru: Диагностика - zh: 诊断 diff --git a/src/site/_data/i18n/paths/lighthouse_pwa.yml b/src/site/_data/i18n/paths/lighthouse_pwa.yml deleted file mode 100644 index 690da2418a1..00000000000 --- a/src/site/_data/i18n/paths/lighthouse_pwa.yml +++ /dev/null @@ -1,63 +0,0 @@ -title: - en: PWA audits - es: Auditorias de las PWA - ja: PWA の監査 - ko: PWA 감사 - pt: Auditorias de PWA - ru: PWA-аудиты - zh: PWA 审核 - -description: - en: Measure if your site is fast, reliable and installable. - es: Miden si su sitio web es rápido, confiable e instalable. - ja: あなたのサイトの高速性、信頼性、インストール可能性を測定します。 - ko: 사이트가 빠르고 안정적이며 설치 가능한지 측정합니다. - pt: Meça se o seu site é rápido, confiável e instalável. - ru: Проверьте свой сайт на предмет скорости, надежности и возможности установки. - zh: 衡量您的网站是否迅速、可靠且可安装。 - -overview: - en: These checks validate the aspects of a Progressive Web App. - es: Estas revisiones validan las características de una aplicación web progresiva. - ja: これらを確認することにより、プログレッシブウェブアプリの様々な側面を検証することができます。 - ko: 이러한 검사는 프로그레시브 웹 앱의 다양한 측면을 확인합니다. - pt: Essas verificações validam os aspectos de uma Aplicação Web Progressiva (PWA). - ru: Эти тесты позволяют проверить различные аспекты прогрессивного веб-приложения. - zh: 这些检查可以验证渐进式 Web 应用的各个方面。 - -topics: - fast_and_reliable: - en: Fast and reliable - es: Rápida y confiable - ja: 高速性と安定性 - ko: 빠르고 안정적 - pt: Rápido e confiável - ru: Скорость и надежность - zh: 快速且可靠 - - installable: - en: Installable - es: Instalable - ja: インストール可能性 - ko: 설치 가능 - pt: Instalável - ru: Возможность установки - zh: 可安装 - - pwa_optimized: - en: PWA optimized - es: PWA optimizada - ja: PWA 最適化 - ko: PWA 최적화 - pt: Otimizado para PWA - ru: Оптимизация для PWA - zh: 已优化的 PWA - - additional_items_to_manually_check: - en: Additional items to manually check - es: Elementos adicionales para revisar manualmente - ja: 手動で確認する場合の追加項目 - ko: 수동으로 확인할 추가 항목 - pt: Itens adicionais para verificar manualmente - ru: Дополнительные пункты для ручной проверки - zh: 其他需要手动检查的项目 diff --git a/src/site/_data/i18n/paths/lighthouse_seo.yml b/src/site/_data/i18n/paths/lighthouse_seo.yml deleted file mode 100644 index 619f3e4cf62..00000000000 --- a/src/site/_data/i18n/paths/lighthouse_seo.yml +++ /dev/null @@ -1,63 +0,0 @@ -title: - en: SEO audits - es: Auditorias SEO - ja: SEO の監査 - ko: SEO 감사 - pt: Auditorias de SEO - ru: SEO-аудиты - zh: SEO 审核 - -description: - en: How well can search engines understand your content? - es: '¿Hasta qué punto los motores de búsqueda pueden comprender su contenido?' - ja: 検索エンジンは、どの程度あなたのコンテンツの内容を理解できているのでしょうか? - ko: 검색 엔진이 귀하의 콘텐츠를 얼마나 잘 이해할 수 있을까요? - pt: Até que ponto os mecanismos de busca são capazes de entender seu conteúdo? - ru: Насколько хорошо поисковые системы индексируют ваш контент? - zh: 搜索引擎对您的内容的理解程度是怎样的? - -overview: - en: These checks ensure that your page is optimized for search engine results ranking. - es: Estas revisiones garantizan que su página esté optimizada para clasificar los resultados de los motores de búsqueda. - ja: これらを確認することにより、あなたのページが検索エンジンによる検索結果の順位付けに最適化されているかどうかを確認することができます。 - ko: 이러한 검사를 통해 검색 엔진 결과 순위에 페이지를 최적화시키세요. - pt: Essas verificações garantem que sua página seja otimizada para a classificação de resultados do mecanismo de busca. - ru: Эти тесты позволяют убедиться, что ваша страница оптимизирована для продвижения в результатах поиска. - zh: 这些检查可以确保您的网页针对搜索引擎结果排名进行优化。 - -topics: - make_sure_search_engines_understand_your_content: - en: Make sure search engines understand your content - es: Asegúrese de que los motores de búsqueda comprendan su contenido - ja: 検索エンジンがあなたのコンテンツの内容を確実に理解できるようにする - ko: 검색 엔진이 내 콘텐츠를 이해하도록 만들기 - pt: Garanta que os mecanismos de busca entendam seu conteúdo - ru: Оформление контента для поисковых систем - zh: 确保搜索引擎理解您的内容 - - make_sure_search_engines_can_crawl_and_index_your_page: - en: Make sure search engines can crawl and index your page - es: Asegúrese de que los motores de búsqueda puedan rastrear e indexar su página - ja: 検索エンジンがあなたのページを確実にクロールし、インデックス登録できるようにする - ko: 검색 엔진이 내 페이지를 크롤링하고 인덱싱하도록 만들기 - pt: Garanta que os mecanismos de busca sejam capazes de rastrear e indexar sua página - ru: Обеспечение возможности обхода и индексирования страниц поисковыми системами - zh: 确保搜索引擎能够抓取您的网页并将其编入索引 - - make_your_page_mobile_friendly: - en: Make your page mobile-friendly - es: Haga que su página sea compatible con los dispositivos móviles - ja: ページをモバイルに対応させる - ko: 내 페이지를 모바일 친화적으로 만들기 - pt: Deixe sua página compatível com dispositivos móveis - ru: Адаптация страницы для мобильных устройств - zh: 使您的网页适合在移动设备上浏览 - - things_to_check_manually: - en: Things to check manually - es: Cosas que se deben revisar manualmente - ja: 手動で確認する項目 - ko: 수동으로 확인해야 할 사항 - pt: Itens a verificar manualmente - ru: Что следует проверить вручную - zh: 需要手动检查的事项 diff --git a/src/site/_data/i18n/paths/mini_apps.yml b/src/site/_data/i18n/paths/mini_apps.yml index 8721e9ef2af..97a2b80ee5f 100644 --- a/src/site/_data/i18n/paths/mini_apps.yml +++ b/src/site/_data/i18n/paths/mini_apps.yml @@ -2,7 +2,7 @@ title: en: Mini apps es: Mini aplicaciones ja: ミニアプリ - ko: 미니 앱 + ko: 미니앱 pt: Miniaplicativos ru: Мини-приложения zh: 小程序 @@ -11,7 +11,7 @@ description: en: A web developer's exploration into mini apps—apps that are built with web technologies but that do not run in browsers. es: Un desarrollador web explora las mini aplicaciones, es decir, las aplicaciones creadas con tecnologías web pero que no se ejecutan en los navegadores. ja: ある Web 開発者によるミニアプリの探求 — ミニアプリとは、Web 技術を用いて構築されているもののブラウザーでは動作しないアプリケーションのことを指します。 - ko: 웹 기술로 구축되었지만 브라우저에서 실행되지 않는 앱인 미니 앱에 대한 웹 개발자 탐색. + ko: 웹 기술로 구축되었지만 브라우저에서 실행되지 않는, 미니앱을 향한 웹 개발자의 여정. pt: 'Uma introdução, para desenvolvedores web, aos miniaplicativos: aplicações que são construídas com tecnologias web mas que não rodam em navegadores.' ru: Введение для веб-разработчиков в мини-приложения — приложения, основанные на веб-технологиях, но работающие не в браузере. zh: 一个网站开发者对小程序(利用网页技术构建但不在浏览器中运行的应用)的探索。 @@ -20,7 +20,7 @@ overview: en: Learn more about the thriving ecosystem of mini apps and what web developers can learn from it. es: Obtenga más información sobre el próspero ecosistema de las mini aplicaciones y lo que los desarrolladores web pueden aprender de él. ja: 活性化を続けるミニアプリのエコシステムと、Web 開発者がそこから学ぶことができる内容についてご紹介します。 - ko: 미니 앱의 번창하는 생태계와 웹 개발자가 이를 통해 배울 수 있는 점에 대해 자세히 알아보세요. + ko: 미니앱의 번창하는 생태계와, 웹 개발자가 이를 통해 배울 수 있는 점에 대해 자세히 알아보세요. pt: Saiba mais sobre o vibrante ecossistema dos miniaplicativos e o que os desenvolvedores web podem aprender com eles. ru: Узнайте подробнее о бурно развивающейся экосистеме мини-приложений и о том, что могут из нее извлечь веб-разработчики. zh: 详细了解蓬勃发展的小程序生态系统,以及网站开发者可以从中学习的东西。 @@ -30,7 +30,7 @@ topics: en: Welcome to the world of mini apps es: Bienvenido al mundo de las mini aplicaciones ja: ミニアプリの世界へようこそ - ko: 미니 앱의 세계에 오신 것을 환영합니다 + ko: 미니앱의 세상에 오신 것을 환영해요 pt: Bem-vindo ao mundo dos miniaplicativos ru: Знакомство с миром мини-приложений zh: 欢迎来到小程序的世界 @@ -39,7 +39,7 @@ topics: en: The developer experience of mini apps es: La experiencia de los desarrolladores de mini aplicaciones ja: ミニアプリの開発者エクスペリエンス - ko: 미니 앱의 개발자 경험 + ko: 미니앱의 개발자 경험 pt: A experiência dos desenvolvedores de miniaplicativos ru: Процесс разработки мини-приложений zh: 小程序开发者体验 @@ -48,7 +48,7 @@ topics: en: The wider mini apps ecosystem es: El amplio ecosistema de las mini aplicaciones ja: 幅広いミニアプリのエコシステム - ko: 더 넓어진 미니 앱 생태계 + ko: 더 넓어진 미니앱 생태계 pt: O amplo ecossistema dos miniaplicativos ru: Глобальная экосистема мини-приложений zh: 更广泛的小程序生态系统 @@ -57,7 +57,7 @@ topics: en: Learning from mini apps es: Aprender de las mini aplicaciones ja: ミニアプリから学ぶ - ko: 미니 앱에서 배우기 + ko: 미니앱에서 배울 점 pt: Como aprender com os miniaplicativos ru: Чему можно научиться у мини-приложений zh: 从小程序中汲取经验 diff --git a/src/site/_data/i18n/paths/react.yml b/src/site/_data/i18n/paths/react.yml index 0d6921dd436..95439bd69f8 100644 --- a/src/site/_data/i18n/paths/react.yml +++ b/src/site/_data/i18n/paths/react.yml @@ -2,7 +2,7 @@ title: en: React es: React ja: React - ko: 반응 + ko: React pt: React ru: React zh: React @@ -38,8 +38,8 @@ topics: create_react_app: en: Create React App es: Create React App - ja: React アプリを構築する - ko: React 앱 만들기 - pt: Criação de uma aplicação React - ru: Создание приложения на основе React - zh: 创建 React 应用 + ja: Create React App + ko: Create React App + pt: Create React App + ru: Create React App + zh: Create React App diff --git a/src/site/_data/i18n/paths/sample.yml b/src/site/_data/i18n/paths/sample.yml new file mode 100644 index 00000000000..612cc2b9c78 --- /dev/null +++ b/src/site/_data/i18n/paths/sample.yml @@ -0,0 +1,9 @@ +title: + en: Sample collection + +description: + en: Lorem ipsum dolor sit amet consectetur adipisicing elit + +topics: + a: + en: Lorem ipsum diff --git a/src/site/_data/i18n/paths/webassembly.yaml b/src/site/_data/i18n/paths/webassembly.yaml new file mode 100644 index 00000000000..4fdf5bab16f --- /dev/null +++ b/src/site/_data/i18n/paths/webassembly.yaml @@ -0,0 +1,22 @@ +title: + en: WebAssembly + +description: + en: Enable high-performance applications on web pages. + +overview: + en:

WebAssembly (sometimes abbreviated Wasm) defines a portable binary-code format and a corresponding text format for executable programs and software interfaces for facilitating interactions between such programs and their host environment.

The main goal of WebAssembly is to enable high-performance applications on web pages, "but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well", according to the spec.

It is an open standard and aims to support any language on any operating system, and in practice all of the most popular languages already have at least some level of support.

+ +topics: + introduction: + en: Introduction + debugging: + en: WebAssembly debugging + coding: + en: Coding with WebAssembly + practice: + en: WebAssembly in practice + case-studies: + en: WebAssembly case studies + emscripten: + en: Emscripten diff --git a/src/site/_data/i18n/patterns.yml b/src/site/_data/i18n/patterns.yml index 31918f0ab29..517ae25e6e3 100644 --- a/src/site/_data/i18n/patterns.yml +++ b/src/site/_data/i18n/patterns.yml @@ -6,3 +6,6 @@ all_patterns: pt: Todos os padrões ru: Все шаблоны zh: 所有模式 + +supporting: + en: Supporting diff --git a/src/site/_data/i18n/post.yml b/src/site/_data/i18n/post.yml index 325b0bd6c5c..d5b5ad29d14 100644 --- a/src/site/_data/i18n/post.yml +++ b/src/site/_data/i18n/post.yml @@ -30,3 +30,12 @@ appears_in: available_in: en: Available in # Refers to language, e.g. in "available in English" + +latest: + en: Latest + +editors: + en: Editors + +credits: + en: Credits \ No newline at end of file diff --git a/src/site/_data/i18n/subscribe.yml b/src/site/_data/i18n/subscribe.yml index 21bf9db9363..0edb09abc52 100644 --- a/src/site/_data/i18n/subscribe.yml +++ b/src/site/_data/i18n/subscribe.yml @@ -77,7 +77,7 @@ add_me: ko: web.dev 수신자 목록에 추가해주세요. pt: Adicione-me à lista de discussão web.dev. ru: Подписаться на рассылку web.dev. - zh: 将我加入 web.dev 邮寄名单。 + zh: 将我加入 web.dev 邮件列表。 i_accept_terms: en: I accept Google's Terms and Conditions and acknowledge that my information will be used in accordance with Google's Privacy Policy. diff --git a/src/site/_data/i18n/tags.yml b/src/site/_data/i18n/tags.yml index 935650d7d7f..3c068189999 100644 --- a/src/site/_data/i18n/tags.yml +++ b/src/site/_data/i18n/tags.yml @@ -406,23 +406,23 @@ engineering-blog: ru: Последние новости и статьи от нашей команды инженеров. zh: 来自我们工程团队的最新资讯、动态和故事。 -feature-policy: - title: - en: Feature Policy - es: Política de las funciones - ja: Feature Policy - ko: 기능 정책 - pt: Política de Recursos - ru: Политика функций - zh: 功能政策 - description: - en: Our latest news, updates, and stories about Feature Policy. - es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Política de las funciones. - ja: Feature Policy に関する最新のニュース、アップデート情報、記事などをご紹介します。 - ko: 기능 정책에 관한 최신 뉴스, 업데이트 및 스토리. - pt: Nossas últimas notícias, atualizações e histórias sobre a Política de Recursos. - ru: Последние новости и статьи о политике функций. - zh: 我们关于功能政策的最新资讯、动态和故事。 +permissions-policy: + title: + en: Permissions Policy + es: Política de permisos + ja: Permissions Policy + ko: 권한 정책 + pt: Política de Permissões + ru: Политика разрешений + zh: 權限政策 + description: + en: Our latest news, updates, and stories about Permissions Policy. + es: Consulte nuestras últimas noticias, actualizaciones e historias publicadas sobre la Política de las permisos. + ja: Permissions Policy に関する最新のニュース、アップデート情報、記事などをご紹介します。 + ko: 권한 정책책에 관한 최신 뉴스, 업데이트 및 스토리. + pt: Nossas últimas notícias, atualizações e histórias sobre a Política de Permissões. + ru: Последние новости и статьи о политике разрешений. + zh: 我们关于权限政策的最新消息、更新和故事。 file-system: title: @@ -771,7 +771,7 @@ mini-apps: en: Mini apps es: Mini aplicaciones ja: ミニアプリ - ko: 미니 앱 + ko: 미니앱 pt: Miniaplicativos ru: Мини-приложения zh: 小程序 @@ -1162,6 +1162,12 @@ service-worker: ru: Последние новости и статьи о Service Worker. zh: 我们关于 Service Worker 的最新资讯、动态和故事。 +sourcemap: + title: + en: Source maps + description: + en: Our latest news, updates, and stories about source maps. + storage: title: en: Storage @@ -1216,6 +1222,12 @@ testing: ru: Последние новости и статьи о тестировании. zh: 我们关于测试的最新资讯、动态和故事。 +test-automation: + title: + en: Test automation + description: + en: Test automation + tools: title: en: Tools diff --git a/src/site/_data/paths/fast.json b/src/site/_data/paths/fast.json index f765e039950..d7c8ba08baf 100644 --- a/src/site/_data/paths/fast.json +++ b/src/site/_data/paths/fast.json @@ -2,7 +2,7 @@ "slug": "fast", "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/fjFJRFnHXiem8yF0GGQ9.svg", "title": "i18n.paths.fast.title", - "updated": "July 17, 2020", + "updated": "January 6, 2022", "description": "i18n.paths.fast.description", "overview": "i18n.paths.fast.overview", "topics": [ @@ -12,8 +12,24 @@ "why-speed-matters", "what-is-speed", "how-to-measure-speed", - "how-to-stay-fast", - "rail" + "how-to-stay-fast" + ] + }, + { + "title": "i18n.paths.fast.topics.core_web_vitals", + "pathItems": [ + "vitals", + "user-centric-performance-metrics", + "defining-core-web-vitals-thresholds", + "lcp", + "cls", + "fid", + "inp", + "optimize-lcp", + "optimize-cls", + "optimize-fid", + "optimize-inp", + "vitals-tools" ] }, { @@ -55,6 +71,7 @@ { "title": "i18n.paths.fast.topics.optimize_your_javascript", "pathItems": [ + "optimize-long-tasks", "apply-instant-loading-with-prpl", "reduce-javascript-payloads-with-code-splitting", "remove-unused-code", @@ -72,7 +89,8 @@ "preload-critical-assets", "preconnect-and-dns-prefetch", "link-prefetch", - "fast-playback-with-preload" + "fast-playback-with-preload", + "optimize-ttfb" ] }, { @@ -89,12 +107,14 @@ "pathItems": [ "third-party-javascript", "identify-slow-third-party-javascript", - "efficiently-load-third-party-javascript" + "efficiently-load-third-party-javascript", + "tag-best-practices" ] }, { "title": "i18n.paths.fast.topics.optimize_webfonts", "pathItems": [ + "font-best-practices", "avoid-invisible-text", "optimize-webfont-loading", "reduce-webfont-size" @@ -110,10 +130,8 @@ "title": "i18n.paths.fast.topics.measure_performance_in_the_field", "pathItems": [ "chrome-ux-report", - "chrome-ux-report-data-studio-dashboard", - "chrome-ux-report-pagespeed-insights", - "chrome-ux-report-bigquery", - "chrome-ux-report-api" + "lab-and-field-data-differences", + "crux-and-rum-differences" ] }, { diff --git a/src/site/_data/paths/handbook.json b/src/site/_data/paths/handbook.json index 6f04caed11f..806f09be375 100644 --- a/src/site/_data/paths/handbook.json +++ b/src/site/_data/paths/handbook.json @@ -39,6 +39,7 @@ "pathItems": [ "handbook/author-profile", "handbook/markup-post-codelab", + "handbook/markup-cards-collection", "handbook/web-dev-components", "handbook/markup-media", "handbook/markup-code", diff --git a/src/site/_data/paths/how-to-optimize-inp.json b/src/site/_data/paths/how-to-optimize-inp.json new file mode 100644 index 00000000000..eb792ef8004 --- /dev/null +++ b/src/site/_data/paths/how-to-optimize-inp.json @@ -0,0 +1,42 @@ +{ + "slug": "how-to-optimize-inp", + "cover": "image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1AtWWHLH0bovMgv44FBU.svg", + "title": "i18n.paths.how_to_optimize_inp.title", + "updated": "May 10, 2023", + "description": "i18n.paths.how_to_optimize_inp.description", + "overview": "i18n.paths.how_to_optimize_inp.overview", + "topics": [ + { + "title": "i18n.paths.how_to_optimize_inp.topics.familiarize", + "pathItems": [ + "inp", + "optimize-inp" + ] + }, + { + "title": "i18n.paths.how_to_optimize_inp.topics.troubleshooting", + "pathItems": [ + "find-slow-interactions-in-the-field", + "diagnose-slow-interactions-in-the-lab" + ] + }, + { + "title": "i18n.paths.how_to_optimize_inp.topics.javascript", + "pathItems": [ + "optimize-long-tasks", + "optimize-input-delay", + "script-evaluation-and-long-tasks", + "off-main-thread" + ] + }, + { + "title": "i18n.paths.how_to_optimize_inp.topics.rendering", + "pathItems": [ + "avoid-large-complex-layouts-and-layout-thrashing", + "reduce-the-scope-and-complexity-of-style-calculations", + "dom-size-and-interactivity", + "client-side-rendering-of-html-and-interactivity" + ] + } + ] +} diff --git a/src/site/_data/paths/identity.json b/src/site/_data/paths/identity.json index 08f7e6b9264..a62a9eea281 100644 --- a/src/site/_data/paths/identity.json +++ b/src/site/_data/paths/identity.json @@ -12,12 +12,12 @@ "sign-in-form-best-practices", { "title": "[Codelab] Use cross-platform browser features to build a sign-in form", - "url": "codelab-sign-in-form-best-practices" + "url": "https://web.dev/codelab-sign-in-form-best-practices/" }, "sign-up-form-best-practices", { "title": "[Codelab] Sign-up form best practices codelab", - "url": "codelab-sign-up-form-best-practices" + "url": "https://web.dev/codelab-sign-up-form-best-practices/" } ] }, @@ -29,7 +29,7 @@ ] }, { - "title": "i18n.paths.identity.topics.strenghten_security_with_two-factor_authentication", + "title": "i18n.paths.identity.topics.strengthen_security_with_two-factor_authentication", "pathItems": [ { "title": "SMS OTP form for two-step verification", @@ -45,9 +45,11 @@ "title": "i18n.paths.identity.topics.build_advanced_authentication_systems", "pathItems": [ { - "title": "FIDO Authentication with passkeys", - "url": "https://developers.google.com/identity/fido/" + "title": "Passwordless login with passkeys", + "url": "https://developers.google.com/identity/passkeys/" }, + "passkey-registration", + "passkey-form-autofill", { "title": "[Codelab] Set up a biometric re-authentication functionality with WebAuthn", "url": "https://developers.google.com/codelabs/webauthn-reauth/" diff --git a/src/site/_data/paths/index.js b/src/site/_data/paths/index.js index 3c44196ce37..bb94a85a932 100644 --- a/src/site/_data/paths/index.js +++ b/src/site/_data/paths/index.js @@ -3,12 +3,7 @@ const angular = require('./angular.json'); const devices = require('./devices.json'); const discoverable = require('./discoverable.json'); const fast = require('./fast.json'); -const learnWebVitals = require('./learn-web-vitals.json'); -const lighthouseAccessibility = require('./lighthouse-accessibility.json'); -const lighthouseBestPractices = require('./lighthouse-best-practices.json'); -const lighthousePerformance = require('./lighthouse-performance.json'); -const lighthousePwa = require('./lighthouse-pwa.json'); -const lighthouseSeo = require('./lighthouse-seo.json'); +const learnCoreWebVitals = require('./learn-core-web-vitals.json'); const media = require('./media.json'); const metrics = require('./metrics.json'); const notifications = require('./notifications.json'); @@ -21,6 +16,8 @@ const secure = require('./secure.json'); const animations = require('./animations.json'); const identity = require('./identity.json'); const webDevBasicsOne = require('./web-dev-basics-one.json'); +const webassembly = require('./webassembly.json'); +const howToOptimizeINP = require('./how-to-optimize-inp.json'); module.exports = { accessible, @@ -29,12 +26,7 @@ module.exports = { devices, discoverable, fast, - 'learn-web-vitals': learnWebVitals, - 'lighthouse-accessibility': lighthouseAccessibility, - 'lighthouse-best-practices': lighthouseBestPractices, - 'lighthouse-performance': lighthousePerformance, - 'lighthouse-pwa': lighthousePwa, - 'lighthouse-seo': lighthouseSeo, + 'learn-core-web-vitals': learnCoreWebVitals, identity, media, metrics, @@ -46,4 +38,6 @@ module.exports = { secure, 'mini-apps': miniApps, 'web-dev-basics-one': webDevBasicsOne, + webassembly, + 'how-to-optimize-inp': howToOptimizeINP, }; diff --git a/src/site/_data/paths/learn-core-web-vitals.json b/src/site/_data/paths/learn-core-web-vitals.json new file mode 100644 index 00000000000..27fb1122f63 --- /dev/null +++ b/src/site/_data/paths/learn-core-web-vitals.json @@ -0,0 +1,71 @@ +{ + "slug": "learn-core-web-vitals", + "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dYAbN2LdttJ1qYk1gssh.svg", + "title": "i18n.paths.learn_core_web_vitals.title", + "description": "i18n.paths.learn_core_web_vitals.description", + "overview": "i18n.paths.learn_core_web_vitals.overview", + "topics": [ + { + "title": "i18n.paths.learn_core_web_vitals.topics.overview", + "pathItems": [ + "vitals", + "vitals-business-impact" + ] + }, + { + "title": "i18n.paths.learn_core_web_vitals.topics.core_web_vitals_metrics", + "pathItems": [ + "lcp", + "cls", + "fid", + "inp", + "defining-core-web-vitals-thresholds" + ] + }, + { + "title": "i18n.paths.learn_core_web_vitals.topics.measure_core_web_vitals", + "pathItems": [ + "vitals-measurement-getting-started", + "vitals-tools", + "vitals-field-measurement-best-practices", + "crux-and-rum-differences" + ] + }, + { + "title": "i18n.paths.learn_core_web_vitals.topics.debug_core_web_vitals", + "pathItems": [ + "lab-and-field-data-differences", + "debug-layout-shifts", + "debug-performance-in-the-field" + ] + }, + { + "title": "i18n.paths.learn_core_web_vitals.topics.improve_core_web_vitals", + "pathItems": [ + "optimize-lcp", + "optimize-cls", + "optimize-fid", + "optimize-inp" + ] + }, + { + "title": "i18n.paths.learn_core_web_vitals.topics.best_practices", + "pathItems": [ + { + "title": "UX patterns optimized for Core Web Vitals", + "url": "/patterns/web-vitals-patterns" + }, + "carousel-best-practices", + "cookie-notice-best-practices", + "font-best-practices", + "tag-best-practices", + "embed-best-practices", + { + "title": "Infinite scroll without layout shifts", + "url": "https://addyosmani.com/blog/infinite-scroll-without-layout-shifts/" + }, + "css-web-vitals" + ] + } + ] +} diff --git a/src/site/_data/paths/learn-web-vitals.json b/src/site/_data/paths/learn-web-vitals.json deleted file mode 100644 index 123f45c88b3..00000000000 --- a/src/site/_data/paths/learn-web-vitals.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "slug": "learn-web-vitals", - "cover": "image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dYAbN2LdttJ1qYk1gssh.svg", - "title": "i18n.paths.learn_web_vitals.title", - "description": "i18n.paths.learn_web_vitals.description", - "overview": "i18n.paths.learn_web_vitals.overview", - "topics": [ - { - "title": "i18n.paths.learn_web_vitals.topics.overview", - "pathItems": [ - "vitals", - "vitals-business-impact" - ] - }, - { - "title": "i18n.paths.learn_web_vitals.topics.web_vitals_metrics", - "pathItems": [ - "lcp", - "fid", - "cls", - "defining-core-web-vitals-thresholds" - ] - }, - { - "title": "i18n.paths.learn_web_vitals.topics.measure_web_vitals", - "pathItems": [ - "vitals-measurement-getting-started", - "vitals-tools", - "vitals-field-measurement-best-practices", - "crux-and-rum-differences" - ] - }, - { - "title": "i18n.paths.learn_web_vitals.topics.debug_web_vitals", - "pathItems": [ - "lab-and-field-data-differences", - "debug-layout-shifts", - "debug-web-vitals-in-the-field" - ] - }, - { - "title": "i18n.paths.learn_web_vitals.topics.improve_web_vitals", - "pathItems": [ - "optimize-lcp", - "optimize-fid", - "optimize-cls" - ] - }, - { - "title": "i18n.paths.learn_web_vitals.topics.best_practices", - "pathItems": [ - { - "title": "UX patterns optimized for Core Web Vitals", - "url": "/patterns/web-vitals-patterns" - }, - "carousel-best-practices", - "cookie-notice-best-practices", - "font-best-practices", - "tag-best-practices", - "embed-best-practices", - { - "title": "Infinite scroll without layout shifts", - "url": "https://addyosmani.com/blog/infinite-scroll-without-layout-shifts/" - }, - "css-web-vitals" - ] - } - ] -} diff --git a/src/site/_data/paths/lighthouse-accessibility.json b/src/site/_data/paths/lighthouse-accessibility.json deleted file mode 100644 index c3c5303aba3..00000000000 --- a/src/site/_data/paths/lighthouse-accessibility.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "slug": "lighthouse-accessibility", - "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/84Wscf0ndzfe8Ri59fsW.svg", - "title": "i18n.paths.lighthouse_accessibility.title", - "description": "i18n.paths.lighthouse_accessibility.description", - "overview": "i18n.paths.lighthouse_accessibility.overview", - "topics": [ - { - "title": "i18n.paths.lighthouse_accessibility.topics.a11y_overview", - "pathItems": [ - "accessible" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.audit_scoring", - "pathItems": [ - "accessibility-scoring" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.navigation", - "pathItems": [ - "accesskeys", - "bypass", - "duplicate-id-active", - "heading-order", - "tabindex" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.aria", - "pathItems": [ - "aria-allowed-attr", - "aria-hidden-body", - "aria-hidden-focus", - "aria-input-field-name", - "aria-required-attr", - "aria-required-children", - "aria-required-parent", - "aria-roles", - "aria-toggle-field-name", - "aria-valid-attr-value", - "aria-valid-attr", - "duplicate-id-aria" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.names_and_labels", - "pathItems": [ - "button-name", - "document-title", - "form-field-multiple-labels", - "frame-title", - "image-alt", - "input-image-alt", - "label", - "link-name", - "object-alt" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.contrast", - "pathItems": [ - "color-contrast" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.tables_and_lists", - "pathItems": [ - "definition-list", - "dlitem", - "list", - "listitem", - "layout-table", - "td-headers-attr", - "th-has-data-cells" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.best_practices", - "pathItems": [ - "meta-refresh", - "meta-viewport" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.audio_and_video", - "pathItems": [ - "audio-caption", - "video-caption", - "video-description" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.internationalization_and_localization", - "pathItems": [ - "html-has-lang", - "html-lang-valid", - "valid-lang" - ] - }, - { - "title": "i18n.paths.lighthouse_accessibility.topics.additional_items_to_manually_check", - "pathItems": [ - "logical-tab-order", - "focusable-controls", - "interactive-element-affordance", - "managed-focus", - "focus-traps", - "custom-controls-labels", - "custom-control-roles", - "visual-order-follows-dom", - "offscreen-content-hidden", - "use-landmarks" - ] - } - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/lighthouse-best-practices.json b/src/site/_data/paths/lighthouse-best-practices.json deleted file mode 100644 index c3d80d7b848..00000000000 --- a/src/site/_data/paths/lighthouse-best-practices.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "slug": "lighthouse-best-practices", - "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/WRBPLiZWj2BTEZIyRlqh.svg", - "description": "i18n.paths.lighthouse_best_practices.description", - "title": "i18n.paths.lighthouse_best_practices.title", - "overview": "i18n.paths.lighthouse_best_practices.overview", - "topics": [ - { - "title": "i18n.paths.lighthouse_best_practices.topics.general_best_practices", - "pathItems": ["doctype","errors-in-console","image-aspect-ratio"] - }, - { - "title": "i18n.paths.lighthouse_best_practices.topics.make_your_page_fast", - "pathItems": ["uses-http2","no-document-write","uses-passive-event-listeners"] - }, - { - "title": "i18n.paths.lighthouse_best_practices.topics.make_your_page_secure", - "pathItems": [ - "is-on-https", - "external-anchors-use-rel-noopener", - "no-vulnerable-libraries", - "csp-xss" - ] - }, - { - "title": "i18n.paths.lighthouse_best_practices.topics.create_a_good_user_experience", - "pathItems": [ - "geolocation-on-start", - "notification-on-start", - "password-inputs-can-be-pasted-into" - ] - }, - { - "title": "i18n.paths.lighthouse_best_practices.topics.avoid_deprecated_technologies", - "pathItems": ["appcache-manifest","deprecations"] - }, - {"title": "i18n.paths.lighthouse_best_practices.topics.diagnostic_audits","pathItems": ["js-libraries"]} - ] -} diff --git a/src/site/_data/paths/lighthouse-performance.json b/src/site/_data/paths/lighthouse-performance.json deleted file mode 100644 index aab8d41b20d..00000000000 --- a/src/site/_data/paths/lighthouse-performance.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "slug": "lighthouse-performance", - "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/wpGZrgY08B0x6jbLnWPU.svg", - "title": "i18n.paths.lighthouse_performance.title", - "description": "i18n.paths.lighthouse_performance.description", - "overview": "i18n.paths.lighthouse_performance.overview", - "topics": [ - { - "title": "i18n.paths.lighthouse_performance.topics.performance_audit_scoring", - "pathItems": ["performance-scoring"] - }, - { - "title": "i18n.paths.lighthouse_performance.topics.metrics", - "pathItems": [ - "first-contentful-paint", - "first-meaningful-paint", - "speed-index", - "first-cpu-idle", - "interactive", - "lighthouse-max-potential-fid", - "lighthouse-total-blocking-time", - "lighthouse-largest-contentful-paint" - ] - }, - { - "title": "i18n.paths.lighthouse_performance.topics.opportunities", - "pathItems": [ - "render-blocking-resources", - "uses-responsive-images", - "offscreen-images", - "unminified-css", - "unminified-javascript", - "unused-css-rules", - "uses-optimized-images", - "uses-webp-images", - "uses-text-compression", - "uses-rel-preconnect", - "time-to-first-byte", - "redirects", - "uses-rel-preload", - "efficient-animated-content", - "third-party-summary", - "non-composited-animations", - "third-party-facades" - ] - }, - { - "title": "i18n.paths.lighthouse_performance.topics.diagnostics", - "pathItems": [ - "total-byte-weight", - "uses-long-cache-ttl", - "dom-size", - "critical-request-chains", - "user-timings", - "bootup-time", - "mainthread-work-breakdown", - "font-display", - "resource-summary" - ] - } - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/lighthouse-pwa.json b/src/site/_data/paths/lighthouse-pwa.json deleted file mode 100644 index a8d2540c8f1..00000000000 --- a/src/site/_data/paths/lighthouse-pwa.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "slug": "lighthouse-pwa", - "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/rLOdIP2q5ASla8qjoclm.svg", - "title": "i18n.paths.lighthouse_pwa.title", - "description": "i18n.paths.lighthouse_pwa.description", - "overview": "i18n.paths.lighthouse_pwa.overview", - "topics": [ - { - "title": "i18n.paths.lighthouse_pwa.topics.fast_and_reliable", - "pathItems": ["load-fast-enough-for-pwa","works-offline","offline-start-url"] - }, - { - "title": "i18n.paths.lighthouse_pwa.topics.installable", - "pathItems": ["is-on-https","service-worker","installable-manifest"] - }, - { - "title": "i18n.paths.lighthouse_pwa.topics.pwa_optimized", - "pathItems": [ - "redirects-http", - "splash-screen", - "themed-omnibox", - "content-width", - "viewport", - "without-javascript", - "apple-touch-icon" - ] - }, - { - "title": "i18n.paths.lighthouse_pwa.topics.additional_items_to_manually_check", - "pathItems": ["pwa-cross-browser","pwa-page-transitions","pwa-each-page-has-url"] - } - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/lighthouse-seo.json b/src/site/_data/paths/lighthouse-seo.json deleted file mode 100644 index 1eb8037be84..00000000000 --- a/src/site/_data/paths/lighthouse-seo.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "slug": "lighthouse-seo", - "cover": "image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/owTB2vcxeuTvfCUf9xhq.svg", - "title": "i18n.paths.lighthouse_seo.title", - "description": "i18n.paths.lighthouse_seo.description", - "overview": "i18n.paths.lighthouse_seo.overview", - "topics": [ - { - "title": "i18n.paths.lighthouse_seo.topics.make_sure_search_engines_understand_your_content", - "pathItems": [ - "document-title", - "meta-description", - "link-text", - "hreflang", - "canonical" - ] - }, - { - "title": "i18n.paths.lighthouse_seo.topics.make_sure_search_engines_can_crawl_and_index_your_page", - "pathItems": [ - "http-status-code", - "is-crawable", - "robots-txt", - "plugins" - ] - }, - { - "title": "i18n.paths.lighthouse_seo.topics.make_your_page_mobile_friendly", - "pathItems": [ - "viewport", - "font-size", - "tap-targets" - ] - }, - {"title": "i18n.paths.lighthouse_seo.topics.things_to_check_manually","pathItems": ["structured-data"]} - ] -} \ No newline at end of file diff --git a/src/site/_data/paths/progressive-web-apps.json b/src/site/_data/paths/progressive-web-apps.json index 1704e1b743c..38d1c14171b 100644 --- a/src/site/_data/paths/progressive-web-apps.json +++ b/src/site/_data/paths/progressive-web-apps.json @@ -28,7 +28,8 @@ "offline-fallback-page", "customize-install", "promote-install", - "using-a-pwa-in-your-android-app" + "using-a-pwa-in-your-android-app", + "pwas-in-app-stores" ] }, { diff --git a/src/site/_data/paths/secure.json b/src/site/_data/paths/secure.json index 74919c71098..c587f9ab491 100644 --- a/src/site/_data/paths/secure.json +++ b/src/site/_data/paths/secure.json @@ -39,12 +39,13 @@ }, { "title": "i18n.paths.secure.topics.protect_websites_from_xss", - "pathItems": ["trusted-types", "strict-csp"] + "pathItems": ["trusted-types", "strict-csp", "securely-hosting-user-data"] }, { "title": "i18n.paths.secure.topics.protect_users_from_tracking", "pathItems": [ "digging-into-the-privacy-sandbox", + "understanding-cookies", "samesite-cookies-explained", "samesite-cookie-recipes", "first-party-cookie-recipes", diff --git a/src/site/_data/paths/webassembly.json b/src/site/_data/paths/webassembly.json new file mode 100644 index 00000000000..76f5e103c37 --- /dev/null +++ b/src/site/_data/paths/webassembly.json @@ -0,0 +1,82 @@ +{ + "slug": "webassembly", + "cover": "image/8WbTDNrhLsU0El80frMBGE4eMCD3/8Gm7xljiB4j6K5VeQNMV.svg", + "title": "i18n.paths.webassembly.title", + "updated": "April 28, 2023", + "description": "i18n.paths.webassembly.description", + "overview": "i18n.paths.webassembly.overview", + "topics": [ + { + "title": "i18n.paths.webassembly.topics.introduction", + "pathItems": [ + "what-is-webassembly", + "compiling-mkbitmap-to-webassembly" + ] + }, + { + "title": "i18n.paths.webassembly.topics.emscripten", + "pathItems": [ + "drawing-to-canvas-in-emscripten", + "embind", + "emscripten-embedding-js-snippets", + "emscripten-npm" + ] + }, + { + "title": "i18n.paths.webassembly.topics.coding", + "pathItems": [ + "webassembly-threads", + "webassembly-feature-detection", + "loading-wasm", + "asyncify", + { + "title": "Using WebGPU with Emscripten", + "url": "https://developer.chrome.com/blog/webgpu-cross-platform/" + } + ] + }, + { + "title": "i18n.paths.webassembly.topics.debugging", + "pathItems": [ + { + "title": "Debugging WebAssembly with modern tools", + "url": "https://developer.chrome.com/blog/wasm-debugging-2020/" + }, + { + "title": "Debugging WebAssembly faster", + "url": "https://developer.chrome.com/blog/faster-wasm-debugging/" + }, + { + "title": "WebAssembly memory inspection", + "url": "https://developer.chrome.com/docs/devtools/memory-inspector/#wasm" + }, + "webassembly-memory-debugging" + ] + }, + { + "title": "i18n.paths.webassembly.topics.practice", + "pathItems": [ + "wasm-libraries", + { + "title": "SQLite Wasm in the browser backed by the Origin Private File System", + "url": "https://developer.chrome.com/blog/sqlite-wasm-in-the-browser-backed-by-the-origin-private-file-system/" + }, + { + "title": "Replacing a hot path in your app's JavaScript with WebAssembly", + "url": "https://developer.chrome.com/blog/hotpath-with-wasm/" + }, + "emscripting-a-c-library", + "wasm-av1" + ] + }, + { + "title": "i18n.paths.webassembly.topics.case-studies", + "pathItems": [ + "wordpress-playground", + "porting-libusb-to-webusb", + "porting-gphoto2-to-the-web", + "earth-webassembly" + ] + } + ] +} diff --git a/src/site/_data/site.js b/src/site/_data/site.js index 2662b22c28e..5206ab7fe6b 100644 --- a/src/site/_data/site.js +++ b/src/site/_data/site.js @@ -20,6 +20,7 @@ const {PAGINATION_COUNT} = require('../_utils/constants'); module.exports = { env: process.env.ELEVENTY_ENV || 'dev', + isProd: () => process.env.ELEVENTY_ENV === 'prod', percy: process.env.PERCY || false, contentDir: path.join('src/site/content/', process.env.ELEVENTY_LANG || ''), title: 'web.dev', @@ -32,28 +33,18 @@ module.exports = { subscribeForm: 'https://services.google.com/fb/submissions/591768a1-61a6-4f16-8e3c-adf1661539da/', thumbnail: 'image/FNkVSAX8UDTTQWQkKftSgGe9clO2/uZ3hQS2EPrA9csOgkoXI.png', - isBannerEnabled: false, - banner: '', + isBannerEnabled: true, + banner: + 'Thanks for tuning in to Google I/O. [Watch the Chrome content on-demand.](https://io.google/2023/program/?q=web-topic,web/&utm_source=web&utm_medium=embedded_marketing&utm_campaign=hpp_ondemand_banner&utm_content=)', paginationCount: PAGINATION_COUNT, imgixDomain: 'web-dev.imgix.net', bucket: 'web-dev-uploads', gitlocalize: 'https://gitlocalize.com/repo/6062/', analytics: { ids: { - prod: 'UA-126406676-2', - // TODO (robdodson): These properties exist in GA but we don't use them. - // Adding a note to inject these into pages when we create a fancier - // staging environment. - staging: 'UA-126406676-3', - notFound: 'UA-126406676-4', + gtm: 'GTM-MZWCJPP', }, - dimensions: { - SIGNED_IN: 'dimension1', - TRACKING_VERSION: 'dimension5', - NAVIGATION_TYPE: 'dimension6', - COLOR_SCHEME_PREFERENCE: 'dimension7', - }, - version: 10, + version: 15, }, firebase: { prod: { diff --git a/src/site/_drafts/_template-post/index.md b/src/site/_drafts/_template-post/index.md index b0d776c7761..867d89f872b 100644 --- a/src/site/_drafts/_template-post/index.md +++ b/src/site/_drafts/_template-post/index.md @@ -501,8 +501,9 @@ quam sem. -
- +
+ + {% include "icons/download.svg" %} Download case study
diff --git a/src/site/_drafts/build-a-custom-performance-analysis-tool/index.md b/src/site/_drafts/build-a-custom-performance-analysis-tool/index.md index 57d5026d855..51b9b3ede2d 100644 --- a/src/site/_drafts/build-a-custom-performance-analysis-tool/index.md +++ b/src/site/_drafts/build-a-custom-performance-analysis-tool/index.md @@ -53,7 +53,7 @@ You can now return the FCP in the response text. The new code will look like thi ![image](step1.png) -Now reload `labtest.html` and click the button. You should see the time taken to [First Contentful Paint](https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint) (FCP) of the first load in a window alert. If you feel that the FCP is still quite fast, this is because you haven't throttled the network and CPU yet. Insert this before the two lines you just added: +Now reload `labtest.html` and click the button. You should see the time taken to [First Contentful Paint](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/) (FCP) of the first load in a window alert. If you feel that the FCP is still quite fast, this is because you haven't throttled the network and CPU yet. Insert this before the two lines you just added: ```js //throttle network and CPU @@ -122,7 +122,7 @@ We strongly recommend that you build measurement scripts like this for your most ## Build the field test While lab data is always helpful, you need to collect the same metrics from real usage, and potentially also make the data visible to stakeholders and decision makers. -In your project, open the empty file `perfoverlay.js`. You'll start by creating a new [PerformanceObserver](https://developers.google.com/web/updates/2016/06/performance-observer) and tell it what to measure. For simplicity you'll stick to the same metrics you collected in the lab test, but you can easily extend this for your own projects. For now you'll listen for FCP, long tasks and load events. Add the following code to the empty file `perfoverlay.js`: +In your project, open the empty file `perfoverlay.js`. You'll start by creating a new [PerformanceObserver](https://developer.chrome.com/blog/performance-observer) and tell it what to measure. For simplicity you'll stick to the same metrics you collected in the lab test, but you can easily extend this for your own projects. For now you'll listen for FCP, long tasks and load events. Add the following code to the empty file `perfoverlay.js`: ```js const observer = new PerformanceObserver((list) => { diff --git a/src/site/_filters/algolia-item.js b/src/site/_filters/algolia-item.js index fef8ade7c1a..a73628add47 100644 --- a/src/site/_filters/algolia-item.js +++ b/src/site/_filters/algolia-item.js @@ -19,6 +19,18 @@ const md5 = require('./md5'); const {getDefaultUrl} = require('./urls'); const {defaultLocale} = require('../_data/site'); const {generateImgixSrc} = require('../_includes/components/Img'); +const {findByUrl} = require('./find-by-url'); + +/** + * Returns the parent URL of a post. For example: + * /en/blog/example-post -> /en/blog/ + * + * @param {EleventyCollectionItem} post + * @returns {string} + */ +function getPostParentUrl(post) { + return `${post.data.page.filePathStem.split('/').slice(0, -2).join('/')}/`; +} /** * @param {EleventyCollectionItem} post @@ -26,6 +38,21 @@ const {generateImgixSrc} = require('../_includes/components/Img'); */ function algoliaItem(post) { const data = post.data; + + let parent; + try { + parent = findByUrl(getPostParentUrl(post)); + } catch (e) { + if ( + e instanceof Error && + e.message === 'No collection has been memoized yet.' + ) { + parent = null; + } else { + throw e; + } + } + return { content: striptags(/** @type {string} */ (post.templateContent)), createdOn: data.date, @@ -41,7 +68,8 @@ function algoliaItem(post) { title: data.renderData?.title || data.title, updatedOn: data.updated, url: getDefaultUrl(post.url), + parentTitle: parent?.data?.title, }; } -module.exports = algoliaItem; +module.exports = {algoliaItem, getPostParentUrl}; diff --git a/src/site/_filters/expand-authors.js b/src/site/_filters/expand-authors.js index c74261f5137..525ab88b1b9 100644 --- a/src/site/_filters/expand-authors.js +++ b/src/site/_filters/expand-authors.js @@ -13,7 +13,7 @@ module.exports = (authorSlugs = [], authorsCollection, lang) => { const profile = authorsCollection[authorKey]; if (!profile) { - console.log(`Author '${authorKey}'pages`); + console.log(`Cannot find author '${authorKey}' in authorsCollection`); } else if (profile.twitter) { authors.push(`@${profile.twitter}`); } else { diff --git a/src/site/_filters/i18n.js b/src/site/_filters/i18n.js index 4d555bc3b98..43e7bea0dfc 100644 --- a/src/site/_filters/i18n.js +++ b/src/site/_filters/i18n.js @@ -64,9 +64,10 @@ const data = {i18n: walk(path.join(__dirname, '..', '_data', 'i18n'))}; * Looks for the i18n string that matches the path and locale. * @param {string} path A dot separated path * @param {string} [locale] A locale prefix (example: 'en', 'pl') + * @param {boolean} [ignoreMissing] Some i18n paths are expected to not exist, and should not throw an error * @return {string} */ -const i18n = (path, locale = defaultLocale) => { +function i18n(path, locale = defaultLocale, ignoreMissing = false) { locale = locale.split('_')[0]; try { const out = get(data, path)[locale] ?? get(data, path)[defaultLocale]; @@ -74,10 +75,13 @@ const i18n = (path, locale = defaultLocale) => { return out; } } catch (err) { - // ignore, throw below + if (!ignoreMissing) { + throw new Error(`Could not find i18n result for: ${path}`); + } } - throw new Error(`Could not find i18n result for: ${path}`); -}; + + return ''; +} /** * Infer the page locale using page's filePathStem. Usually for 11ty pages diff --git a/src/site/_filters/language-list.js b/src/site/_filters/language-list.js new file mode 100644 index 00000000000..730e35530ac --- /dev/null +++ b/src/site/_filters/language-list.js @@ -0,0 +1,69 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const { + languageNames, + defaultLanguage, + languageOrdering, +} = require('../../lib/utils/language'); + +const { + getDefaultUrl, + getTranslatedUrls, + getLocaleSpecificUrl, +} = require('../_filters/urls'); + +/** + * Look up all supported languages for a specific post + * + * @param {String} lang The current lang of a post to look up. + * @param {EleventyCollectionItem} post The post to look up. + * @return {String[][]} The list of supported languages for a specific post + */ + +const supportedLanguages = (post, lang) => { + const url = post.url; + const languages = getTranslatedUrls(url).filter( + (langHref) => langHref[0] !== lang, + ); + + // Exit early if there are no translations. + if (languages.length === 0) return []; + + languages.map((langHref) => { + langHref.push(languageNames[langHref[0]]); + }); + + // Ensure that the default (English) translation is added as well. + const defaultHref = getLocaleSpecificUrl(defaultLanguage, getDefaultUrl(url)); + languages.push([ + defaultLanguage, + defaultHref, + languageNames[defaultLanguage], + ]); + + // Sort the list of languages with a specific ordering. + // C.f. https://github.com/GoogleChrome/web.dev/issues/7430 + languages.sort((a, b) => { + const indexOfA = languageOrdering.indexOf(a[0]); + const indexOfB = languageOrdering.indexOf(b[0]); + return indexOfA > indexOfB ? 1 : -1; + }); + + return languages; +}; + +module.exports = {supportedLanguages}; diff --git a/src/site/_filters/latest-post-by-tags.js b/src/site/_filters/latest-post-by-tags.js new file mode 100644 index 00000000000..1da3a273b3a --- /dev/null +++ b/src/site/_filters/latest-post-by-tags.js @@ -0,0 +1,56 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Return the latest post by specific tags. + */ + +const {findByUrl} = require('./find-by-url'); + +/** + * @param {EleventyCollectionObject} _ An eleventy posts object. + * @param {string[]} tags Array of tag name. + * @return {EleventyCollectionItem} Latest post filter by tag. + */ + +function latestPostByTags(_, tags) { + let latestPost = null; + for (const tag of tags) { + // @ts-ignore + const tagPosts = this.ctx.collections[tag]; + if (!tagPosts.length) continue; + + const candidatePost = tagPosts[tagPosts.length - 1]; + if (!latestPost) { + latestPost = candidatePost; + continue; + } + + if (new Date(candidatePost.date) > new Date(latestPost.date)) { + latestPost = candidatePost; + } + } + + if (!latestPost) { + // @ts-ignore + const blogPosts = this.ctx.collections.all; + latestPost = blogPosts[blogPosts.length - 1]; + } + + return findByUrl(latestPost.url); +} + +module.exports = {latestPostByTags}; diff --git a/src/site/_filters/minify-json.js b/src/site/_filters/minify-json.js new file mode 100644 index 00000000000..b47df4ad01b --- /dev/null +++ b/src/site/_filters/minify-json.js @@ -0,0 +1,36 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Do a simple minify JSON using stringify to strip whitespaces + * + * @param {string} code + */ +function minifyJSON(code) { + if (process.env.ELEVENTY_ENV !== 'prod') { + return code; + } + + try { + return JSON.stringify(JSON.parse(code)); + } catch (err) { + console.error('JSON error: ', err); + // Fail gracefully. + return code; + } +} + +module.exports = {minifyJSON}; diff --git a/src/site/_filters/slugify.js b/src/site/_filters/slugify.js index 6463d1bc94c..4e13f6b2eb8 100644 --- a/src/site/_filters/slugify.js +++ b/src/site/_filters/slugify.js @@ -31,7 +31,7 @@ module.exports = (str) => { return slugify(str, { replacement: '-', - remove: /[$*_+~.()'"!\-:@]+/g, + remove: /[$*_+~.()'"!/\-:@?]+/g, lower: true, }); }; diff --git a/src/site/_filters/urls.js b/src/site/_filters/urls.js index 04e99a842ae..7a0036b44d4 100644 --- a/src/site/_filters/urls.js +++ b/src/site/_filters/urls.js @@ -42,20 +42,34 @@ const getRelativePath = (url, pathPrefix) => path.relative(pathPrefix, url); /** * Find i18n equivalents of the current url and check if they exist. * @param {string} url Url of the original article. - * @returns {Array} Array of language and url pairs. + * @returns {Array>} Array of language and url pairs. */ const getTranslatedUrls = (url) => { url = getDefaultUrl(url); return ( supportedLocales - .map((locale) => [locale, path.join('/', 'i18n', locale, url)]) + .map((locale) => [locale, getLocaleSpecificUrl(locale, url)]) // Filter out i18n urls that do not have an existing translated file. - .filter((langhref) => !!findByUrl(langhref[1])) + .filter((langHref) => !!findByUrl(langHref[1])) ); }; +/** + * Generate a URL that includes the locale-specific prefix. + * @param {string} locale One of the support locale codes. + * @param {string} defaultUrl Default URL of the page. + * @returns {string} The locale-specific prefix followed by the default URL. + */ +const getLocaleSpecificUrl = (locale, defaultUrl) => { + if (!defaultUrl.startsWith('/')) { + defaultUrl = '/' + defaultUrl; + } + return `/i18n/${locale}${defaultUrl}`; +}; + module.exports = { getDefaultUrl, + getLocaleSpecificUrl, getRelativePath, getTranslatedUrls, }; diff --git a/src/site/_includes/about-next.njk b/src/site/_includes/about-next.njk deleted file mode 100644 index c7db657de1b..00000000000 --- a/src/site/_includes/about-next.njk +++ /dev/null @@ -1,70 +0,0 @@ ---- -layout: 'default-next' -CSS_ORIGIN: 'next' -pageScripts: - - '/js/about.js' ---- -{% from 'macros/icon.njk' import icon, svg with context %} - -
- - {# Intro and pods start #} -
-
-
-

{{ intro.title }}

- {{ intro.summary | md | safe }} -
-

{{ intro.sectionHeading }}

-
-
-
- {% for item in pods %} -
- {{ svg('../../images/' + item.brand , {label: item.alt}) }} -
-
- {% Img src=item.decor.src, alt="", width=item.decor.width, height=item.decor.height %} -
-
-

{{ item.title }}

-

{{ item.summary }}

-
- {% for action in item.actions %} - {{ action.text }} - {% endfor %} -
-
-
-
- {% endfor %} -
-
-
- {# Intro and pods end #} - - {# Other resources start #} -
-
-
-
- {% Img src=otherResources.decor.src, alt="", width=otherResources.decor.width, height=otherResources.decor.height %} -

{{ otherResources.title }}

- {{ otherResources.summary | md | safe }} -
-
- {% for item in otherResources.pairs %} -
- {{ item.title }} -
-
{{ item.summary }}
- {% endfor %} -
-
-
-
- {# Other resources end #} - - {% include 'partials/subscribe.njk' %} - -
diff --git a/src/site/_includes/about.njk b/src/site/_includes/about.njk new file mode 100644 index 00000000000..76b864a190b --- /dev/null +++ b/src/site/_includes/about.njk @@ -0,0 +1,115 @@ +--- +layout: default +pageScripts: + - '/js/about.js' +--- +{% from 'macros/icon.njk' import icon, svg with context %} + +
+
+
+
+
+ {% Img + src=banner.image, + width="546", + height="421", + alt=banner.title, + loading="lazy", + class="hero__decor" + %} +
+
+ +
+

{{ banner.title }}

+
{{ banner.summary }}
+
+
+
+
+
+ + {# Intro start #} +
+
+

{{ intro.title }}

+ {% for paragraph in intro.summary %} +

{{ paragraph.paragraph | safe }}

+ {% endfor %} +
+
+ {# Intro end #} + + {# The teams start #} +
+
+

{{ theTeam.title }}

+

{{ theTeam.subTitle }}

+
+ {% for author in theTeam.authors %} + {% set data = collections.authors[author.name] %} + + {% if data %} +
+ {% Img + src=data.image, + width="192", + height="192", + alt=data.title | i18n(locale), + decoding="async", + loading="lazy" + %} +
+

+ {% if data.homepage %} + {{ data.title | i18n(locale) }} + {% else %} + {{ data.title | i18n(locale) }} + {% endif %} +

+

{{ author.role }}

+
+
+ {% endif %} + {% endfor %} +
+ +
+
+ {# The teams end #} + + {# Chrome developers start #} +
+
+
{% include "icons/chrome.svg" %}
+ +

{{ developers.title }}

+

{{ developers.summary | safe }}

+ +
+
+ {# Chrome developers end #} + + {# Coupled Column start #} +
+
+
+ {% for column in coupledColumn %} +
+ {% include column.icon %} +
{{ column.title }}
+

{{ column.summary | safe }}

+
+ {% endfor %} +
+
+
+ {# Coupled Column end #} +
diff --git a/src/site/_includes/base.njk b/src/site/_includes/base.njk index 9f3f5c6bf8a..147b3750865 100644 --- a/src/site/_includes/base.njk +++ b/src/site/_includes/base.njk @@ -18,5 +18,7 @@ tags: [] {{ content | safe }} + + {% include 'partials/devrel-ribbon.njk' %} diff --git a/src/site/_includes/blog.njk b/src/site/_includes/blog.njk index a6e5512cc63..c209f422779 100644 --- a/src/site/_includes/blog.njk +++ b/src/site/_includes/blog.njk @@ -5,4 +5,4 @@ eleventyComputed: noindex: "{{ paged.index > 0 }}" --- -{% include 'partials/paged-next.njk' %} +{% include 'partials/paged.njk' %} diff --git a/src/site/_includes/codelab.njk b/src/site/_includes/codelab.njk index 6d8e3378edd..987ecdd84db 100644 --- a/src/site/_includes/codelab.njk +++ b/src/site/_includes/codelab.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default permalink: "/{{lang}}/{{page.fileSlug}}/index.html" show_banner: false pageScripts: @@ -29,7 +29,7 @@ pageScripts:
{% endif %} - {% SignPosts page.fileSlug %} + {% include 'partials/sign-post.njk' %} {% if authors %}
diff --git a/src/site/_includes/collection.njk b/src/site/_includes/collection.njk new file mode 100644 index 00000000000..f439acc5721 --- /dev/null +++ b/src/site/_includes/collection.njk @@ -0,0 +1,105 @@ +--- +layout: default +algolia_priority: 1.1 +eleventyComputed: + title: "{{paths[pathName].title | i18n(locale)}}" + description: "{{paths[pathName].description | i18n(locale)}}" + hero: "{{paths[pathName].cover}}" +--- + +{% from 'macros/icon.njk' import icon, svg with context %} +{% set path = paths[pathName] %} +{% set topics = path.topics | removeDrafts %} + +
+
+
+
+

{{ title }}

+

{{path.description | i18n(locale)}}

+
+ {% if path.cover %} +
+ {% Img + fetchpriority="high", + height=220, + width=330, + src=path.cover, + alt="Collection cover image", + class="hero__content__img" + %} +
+ {% endif %} +
+
+
+ +
+{% if path.draft and site.env === 'dev' %} + +{% endif %} + +
+ +
+ +
+ +
+{% for topic in topics %} +
+ {% include 'partials/topic.njk' %} +
+{% endfor %} +
+ +{% if cards %} +
+
+
On this topic
+
+ {% include 'partials/cards-collection.njk' %} +
+
+
+{% endif %} +
diff --git a/src/site/_includes/components/Aside.js b/src/site/_includes/components/Aside.js index 244c28e296f..85a68151f3b 100644 --- a/src/site/_includes/components/Aside.js +++ b/src/site/_includes/components/Aside.js @@ -119,6 +119,12 @@ function Aside(content, type = 'note') { icon = 'celebration.svg'; title = i18n(`i18n.common.${type}`, locale); break; + + case 'update': + icon = 'update.svg'; + title = i18n(`i18n.common.${type}`, locale); + utilities.main = 'bg-state-update-bg color-state-update-text'; + break; } // Make sure that we don't insert multiple newlines when this component is diff --git a/src/site/_includes/components/Banner.js b/src/site/_includes/components/Banner.js index 70ec88fcfcc..9179f521410 100644 --- a/src/site/_includes/components/Banner.js +++ b/src/site/_includes/components/Banner.js @@ -14,49 +14,27 @@ * limitations under the License. */ -const {html} = require('common-tags'); const md = require('markdown-it')({ html: true, // Allow full links, e.g. with _target=blank. }); -const isDesignSystemContext = require('../../../lib/utils/is-design-system-context'); +function Banner(content, type = 'info') { + let utilityClasses = 'bg-state-info-bg color-core-text'; -/* NOTE: This component is in a transition period to support both new design system contexts -and the existing system. Once the new design system has been *fully* rolled out, this component -can be cleaned up with the following: - -1. The isDesignSystemContext conditional can be removed and code in that block should run as normal -2. Everything from the '/// DELETE THIS WHEN ROLLOUT COMPLETE' comment *downwards* can be removed -*/ - -function Banner(content, type = 'info', location) { - if (isDesignSystemContext(this.page.filePathStem)) { - let utilityClasses = 'bg-state-info-bg color-core-text'; - - switch (type) { - case 'caution': - utilityClasses = 'bg-state-bad-bg color-core-text'; - break; - case 'warning': - utilityClasses = 'bg-state-warn-bg color-core-text'; - break; - } - - return ``; + switch (type) { + case 'caution': + utilityClasses = 'bg-state-bad-bg color-core-text'; + break; + case 'warning': + utilityClasses = 'bg-state-warn-bg color-core-text'; + break; } - /// DELETE THIS WHEN ROLLOUT COMPLETE - const locationOverride = location === 'body' ? 'w-banner--body' : ''; - - return html` - - `; + return ``; } module.exports = Banner; diff --git a/src/site/_includes/components/Breadcrumbs.js b/src/site/_includes/components/Breadcrumbs.js deleted file mode 100644 index 24ab64bf86a..00000000000 --- a/src/site/_includes/components/Breadcrumbs.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const path = require('path'); -const site = require('../../_data/site'); -const {html} = require('common-tags'); - -/* eslint-disable max-len */ - -module.exports = ({title, slug}) => { - return html` - - `; -}; diff --git a/src/site/_includes/components/BrowserCompat.js b/src/site/_includes/components/BrowserCompat.js deleted file mode 100644 index 2a98ec9a22b..00000000000 --- a/src/site/_includes/components/BrowserCompat.js +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const bcd = require('../../_utils/browserCompat'); -const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); - -const browsers = ['chrome', 'firefox', 'edge', 'safari']; - -/** - * @param {import('@mdn/browser-compat-data/types').SimpleSupportStatement} support - * @param {import('@mdn/browser-compat-data/types').StatusBlock} status - * @returns {{aria: string, compatProperty: string, icon: string}}} - */ -function getInfoFromSupportStatement(support, status, locale) { - if (status && status.deprecated) { - return { - aria: i18n('i18n.browser_compat.deprecated', locale), - compatProperty: 'deprecated', - icon: '🗑', - }; - } - - if (!support.version_removed) { - if (support.version_added === 'preview') { - return { - aria: i18n('i18n.browser_compat.preview', locale), - compatProperty: 'preview', - icon: '👁', - }; - } - - if (support.flags?.length > 0) { - return { - aria: i18n('i18n.browser_compat.flag', locale), - compatProperty: 'flag', - icon: '⚑', - }; - } - - if (typeof support.version_added === 'string') { - return { - aria: i18n('i18n.browser_compat.supported', locale), - compatProperty: 'yes', - icon: support.version_added, - }; - } - - // See https://github.com/GoogleChrome/web.dev/issues/8333 - if (support.version_added === true) { - return { - aria: i18n('i18n.browser_compat.supported', locale), - compatProperty: 'yes', - icon: '✅', - }; - } - } - - return { - aria: i18n('i18n.browser_compat.not_supported', locale), - compatProperty: 'no', - icon: '×', - }; -} - -/** - * A shortcode for embedding caniuse.com browser compatibility table. - * @this {EleventyPage} - * @param {string} feature Feature id compatible with caniuse.com. - */ -function BrowserCompat(feature) { - const locale = getLocaleFromPath(this.page && this.page.filePathStem); - const data = bcd(); - let compatIcons = []; - - if (data[feature] && data[feature].support) { - compatIcons = browsers.map((browser) => { - /** @type {import('@mdn/browser-compat-data/types').SimpleSupportStatement} */ - const support = Array.isArray(data[feature].support[browser]) - ? data[feature].support[browser][0] - : data[feature].support[browser]; - - const supportInfo = getInfoFromSupportStatement( - support, - data[feature].status, - locale, - ); - - const isSupported = support.version_added && !support.version_removed; - - const ariaLabel = [ - browser, - isSupported ? ` ${support.version_added}, ` : ', ', - supportInfo.aria, - ].join(''); - - return ` - ${ariaLabel} - - - ${supportInfo.icon} - - `; - }); - const source = data[feature].mdn_url; - const sourceLabel = i18n(`i18n.browser_compat.source`, locale); - const sourceLink = source - ? ` - - ${sourceLabel} - - ` - : ''; - const supportLabel = i18n(`i18n.browser_compat.browser_support`, locale); - return `
- ${supportLabel}: - ${compatIcons.join('')}${sourceLink} -
- `; - } - - return ''; -} - -module.exports = BrowserCompat; diff --git a/src/site/_includes/components/CodePattern.js b/src/site/_includes/components/CodePattern.js index 8e055e4857a..294fa288714 100644 --- a/src/site/_includes/components/CodePattern.js +++ b/src/site/_includes/components/CodePattern.js @@ -1,4 +1,6 @@ const Prism = require('prismjs'); +const {i18n} = require('../../_filters/i18n'); +const {defaultLocale} = require('../../_data/site'); const patterns = require('../../_data/patterns').patterns; /** @@ -41,6 +43,11 @@ module.exports = (patternId, height) => { const type = prismTypes.includes(asset.type) ? asset.type : 'text'; assetLines.push(asset.content.split('\n').length); + const isSupportingAsset = asset.name.includes('supporting'); + const tabName = isSupportingAsset + ? `${i18n('i18n.patterns.supporting', defaultLocale)} ${type}` + : asset.type; + // Jake says: // Because Prism outputs preformatted code, it will often contain blank // lines, eg if the source contains blank lines. Unfortunately the @@ -57,7 +64,7 @@ module.exports = (patternId, height) => { type, ).replace(/^(\s*?)$/gm, '$1'); - return ` + return `
${content}
`; }) @@ -73,7 +80,7 @@ module.exports = (patternId, height) => {
- ${assets} + ${assets}
diff --git a/src/site/_includes/components/Compare.js b/src/site/_includes/components/Compare.js index 614cf260bf7..bf28c69e64d 100644 --- a/src/site/_includes/components/Compare.js +++ b/src/site/_includes/components/Compare.js @@ -16,16 +16,6 @@ const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); -const isDesignSystemContext = require('../../../lib/utils/is-design-system-context'); - -/* NOTE: This component is in a transition period to support both new design system contexts -and the existing system. Once the new design system has been *fully* rolled out, this component -can be cleaned up with the following: - -1. The isDesignSystemContext conditional can be removed and code in that block should run as normal -2. Everything from the '/// DELETE THIS WHEN ROLLOUT COMPLETE' comment *downwards* can be removed -*/ - /** * @this {EleventyPage} * @param {string} content Markdown with the content for the compare element. @@ -58,15 +48,8 @@ function Compare(content, type, labelOverride) { } } - if (isDesignSystemContext(this.page.filePathStem)) { - // prettier-ignore - return `

${label}

-${content}
`; - } - // prettier-ignore - return `

${label}

- + return `

${label}

${content}
`; } diff --git a/src/site/_includes/components/CompareCaption.js b/src/site/_includes/components/CompareCaption.js index 8ed8ff780d9..edb1ca83cd6 100644 --- a/src/site/_includes/components/CompareCaption.js +++ b/src/site/_includes/components/CompareCaption.js @@ -14,30 +14,12 @@ * limitations under the License. */ -const isDesignSystemContext = require('../../../lib/utils/is-design-system-context'); - -/* NOTE: This component is in a transition period to support both new design system contexts -and the existing system. Once the new design system has been *fully* rolled out, this component -can be cleaned up with the following: - -1. The isDesignSystemContext conditional can be removed and code in that block should run as normal -2. Everything from the '/// DELETE THIS WHEN ROLLOUT COMPLETE' comment *downwards* can be removed -*/ - /** * @param {string} content Markdown with the content for the compare element. * @return {string} */ function CompareCaption(content) { - // Whitespace is intentional to allow markdown parser to kick back in. - if (isDesignSystemContext(this.page.filePathStem)) { - return `
-${content}
`; - } - - // Whitespace is intentional to allow markdown parser to kick back in. - return `
- + return `
${content}
`; } diff --git a/src/site/_includes/components/Hero.js b/src/site/_includes/components/Hero.js deleted file mode 100644 index e9e0e88c1e9..00000000000 --- a/src/site/_includes/components/Hero.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const {Img} = require('./Img'); - -module.exports = ({hero, alt, heroPosition, heroFit = 'cover'}) => { - const className = `w-hero w-hero--${heroFit}${ - heroPosition ? ` w-hero--${heroPosition}` : '' - }`; - - return Img({ - src: hero, - alt: typeof alt === 'string' ? alt : 'Hero Image', - height: '480', - width: '1600', - sizes: '100vw', - class: className, - decoding: 'auto', - // Don't lazy load hero images - // https://github.com/GoogleChrome/web.dev/issues/5813 - loading: false, - }); -}; diff --git a/src/site/_includes/components/Instruction.js b/src/site/_includes/components/Instruction.js index 009ad607e15..0a0cbe1e4e7 100644 --- a/src/site/_includes/components/Instruction.js +++ b/src/site/_includes/components/Instruction.js @@ -66,9 +66,7 @@ module.exports = function (type, listStyle = 'ul') { // prettier-ignore case 'console': instruction = html` - ${bullet}Click **Tools**. - ${bullet}Click **Logs**. - ${bullet}Click **Console**. + ${bullet}Click **Terminal** (note: if the Terminal button does not show you may need to use the Fullscreen option). `; break; diff --git a/src/site/_includes/components/Label.js b/src/site/_includes/components/Label.js index 57c486aba11..16d2a883f8d 100644 --- a/src/site/_includes/components/Label.js +++ b/src/site/_includes/components/Label.js @@ -18,5 +18,5 @@ const {html} = require('common-tags'); const md = require('markdown-it')(); module.exports = (content) => { - return html`

${md.renderInline(content)}

`; + return html`

${md.renderInline(content)}

`; }; diff --git a/src/site/_includes/components/LanguageList.js b/src/site/_includes/components/LanguageList.js deleted file mode 100644 index c296811da83..00000000000 --- a/src/site/_includes/components/LanguageList.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -const path = require('path'); -const {getTranslatedUrls, getDefaultUrl} = require('../../_filters/urls'); -const {i18n} = require('../../_filters/i18n'); -const {languageNames} = require('../../../lib/utils/language'); - -module.exports = (url, lang) => { - const langhrefs = getTranslatedUrls(url) - .filter((langhref) => langhref[0] !== lang) - .map((langhref) => { - const href = langhref[1]; - return ` - ${languageNames[langhref[0]]}`; - }); - - if (langhrefs.length) { - const enHref = path.join('/', 'i18n', 'en', getDefaultUrl(url)); - langhrefs.push(` - ${languageNames['en']}`); - } - - const availableIn = i18n('i18n.post.available_in', lang); - return langhrefs.length - ? `${availableIn}: - ${langhrefs.join(', ')}` - : ''; -}; diff --git a/src/site/_includes/components/Meta.js b/src/site/_includes/components/Meta.js index a820464864c..8ddc4b5a523 100644 --- a/src/site/_includes/components/Meta.js +++ b/src/site/_includes/components/Meta.js @@ -56,14 +56,19 @@ module.exports = (locale, page, renderData = {}) => { social.description || (social.path && social.path.description), forbiddenCharacters, ); - let thumbnail = social.thumbnail || social.hero; + let thumbnail = social.thumbnail || social.hero || site.thumbnail; const alt = social.alt || site.name; - - thumbnail = generateImgixSrc(thumbnail || site.thumbnail, { - fit: 'max', - w: 1200, - fm: 'auto', - }); + let imgixOptions = {}; + + const IS_SVG_IMG = /\.svg$/i.test(thumbnail); + if (!IS_SVG_IMG) { + imgixOptions = { + fit: 'max', + w: 1200, + fm: 'auto', + }; + } + thumbnail = generateImgixSrc(thumbnail, imgixOptions); return {title, description, thumbnail, alt}; } @@ -168,6 +173,25 @@ module.exports = (locale, page, renderData = {}) => { `; } + function renderPageMeta() { + // Ensure multiple metadata are always reported the same way. + const sortAndDedupe = (list) => { + return list && [...new Set(list.sort())].join(); + }; + + const authors = sortAndDedupe(pageData.authors); + const paths = sortAndDedupe(pageData.postToPaths[page.fileSlug]); + const tags = sortAndDedupe( + pageData.tags?.filter((t) => !['post', 'blog'].includes(t)), + ); + + return html` + ${authors && ``} + ${paths && ``} + ${tags && ``} + `; + } + // prettier-ignore return html` ${strip(pageData.title @@ -182,5 +206,6 @@ module.exports = (locale, page, renderData = {}) => { ${renderFacebookMeta()} ${renderTwitterMeta()} ${renderRSS()} + ${renderPageMeta()} `; }; diff --git a/src/site/_includes/components/PathCard.js b/src/site/_includes/components/PathCard.js deleted file mode 100644 index a0a4618708a..00000000000 --- a/src/site/_includes/components/PathCard.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const {generateImgixSrc} = require('./Img'); -const {html} = require('common-tags'); -const removeDrafts = require('../../_filters/remove-drafts'); - -const {i18n} = require('../../_filters/i18n'); - -/* eslint-disable max-len */ - -/** - * Count the number of posts in a learning path. - * @param {*} learningPath A learning path data object. - * @param {string} lang Language of the page. - * @return {string} - */ -function getPostCount(learningPath, lang) { - // TODO (robdodson): It's annoying to have to removeDrafts both here and - // in path.njk. Ideally we should do this in the learningPath .11ty.js files - // but eleventy hasn't parsed all of the collections when those files get - // initialized so we can't look up posts by slug. - - // Merge subtopic pathItems - const flattenedTopics = learningPath.topics.map((topic) => { - const subPathItems = (topic.subtopics || []).reduce( - (accumulator, subtopic) => { - return [...accumulator, ...subtopic.pathItems]; - }, - [], - ); - return { - ...topic, - pathItems: [...(topic.pathItems || []), ...subPathItems], - }; - }); - - const topics = removeDrafts(flattenedTopics, lang); - const count = topics.reduce((pathItemsCount, topic) => { - return pathItemsCount + topic.pathItems.length; - }, 0); - const label = count > 1 ? 'resources' : 'resource'; - return `${count} ${label}`; -} - -/** - * PathCard used to preview learning paths. - * @param {Object} path A learning path data object. - * @param {string} lang Language of the page. - * @return {string} - */ -module.exports = (path, lang) => { - return html` - <a href="/${path.slug}" class="w-card" role="listitem"> - <div class="w-path-card"> - <div class="w-path-card__info"> - <ul class="w-path-card__info-list"> - <li - class="w-path-card__info-listitem w-path-card__info-listitem--category" - > - Collection - </li> - <li - class="w-path-card__info-listitem w-path-card__info-listitem--more-info" - > - ${getPostCount(path, lang)} - </li> - <li - class="w-path-card__info-listitem w-path-card__info-listitem--updated" - > - Updated <time>${path.date}</time> - </li> - </ul> - </div> - <div class="w-path-card__cover"> - <img - class="w-path-card__cover-image" - src="${generateImgixSrc(path.cover)}" - alt="" - loading="lazy" - width="100%" - height="240" - /> - </div> - <div class="w-path-card__desc"> - <h2 class="w-path-card__headline">${i18n(path.title, lang)}</h2> - <p class="w-path-card__subhead">${i18n(path.description, lang)}</p> - </div> - </div> - </a> - `; -}; diff --git a/src/site/_includes/components/SignPosts.js b/src/site/_includes/components/SignPosts.js deleted file mode 100644 index b9d7cd9b265..00000000000 --- a/src/site/_includes/components/SignPosts.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const {html} = require('common-tags'); -const paths = require('../../_data/paths'); -const postToPaths = require('../../_data/postToPaths'); -const {i18n, getLocaleFromPath} = require('../../_filters/i18n'); - -/** - * @this {EleventyPage} - */ -function SignPosts(slug) { - const locale = getLocaleFromPath(this.page && this.page.filePathStem); - - const postPaths = postToPaths[slug]; - if (!postPaths) { - return ''; - } - const aTags = postPaths - .map((pathName) => { - return html`<a - class="w-post-signpost__link" - href="/${paths[pathName].slug}" - >${i18n(paths[pathName].title, locale)}</a - >`; - }) - .join(html`<span class="w-post-signpost__divider">|</span>`); - - return html` - <div class="w-layout-container--narrow w-post-signpost"> - <span class="w-post-signpost__title"> - ${i18n('i18n.post.appears_in', locale)}: - </span> - ${aTags} - </div> - `; -} - -module.exports = SignPosts; diff --git a/src/site/_includes/components/StackOverflow.js b/src/site/_includes/components/StackOverflow.js index 24f8f7c2c56..638434dc273 100644 --- a/src/site/_includes/components/StackOverflow.js +++ b/src/site/_includes/components/StackOverflow.js @@ -23,7 +23,7 @@ function StackOverflow(tag) { /<TAG>/g, tag, ); - return html` <div class="w-aside w-aside--note">${text}</div> `; + return html` <div class="aside flow">${text}</div> `; } module.exports = StackOverflow; diff --git a/src/site/_includes/components/Tooltip.js b/src/site/_includes/components/Tooltip.js deleted file mode 100644 index 49e71dfb25f..00000000000 --- a/src/site/_includes/components/Tooltip.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const {html} = require('common-tags'); -const md = require('markdown-it')(); - -module.exports = (content, alignment) => { - switch (alignment) { - case 'left': - alignment = 'w-tooltip--left'; - break; - case 'right': - alignment = 'w-tooltip--right'; - break; - default: - alignment = ''; - } - - return html` - <span role="tooltip" class="w-tooltip ${alignment}"> - ${md.renderInline(content)} - </span> - `; -}; diff --git a/src/site/_includes/components/Widget.js b/src/site/_includes/components/Widget.js index a456fa3e777..31361cd94b2 100644 --- a/src/site/_includes/components/Widget.js +++ b/src/site/_includes/components/Widget.js @@ -1,27 +1,73 @@ -const patterns = require('../../_data/patterns').patterns; +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const path = require('path'); +const {findByUrl} = require('../../_filters/find-by-url'); +const site = require('../../_data/site'); /** * @fileoverview A component to display an interactive demo, - * specified as part of a code pattern in /patterns/ directory, * as an iframe embed. */ /** - * @param {string} patternId Id of the Code Pattern to be displayed. + * @param {string} demoUrl Url of the demo to be displayed. It can be + * an external url, or a deep url on web.dev, .e.g. /demos/my-demo-name. * @param {string} height Optional height of the widget with units, e.g. 100px. */ -module.exports = (patternId, height) => { - const pattern = patterns[patternId]; - if (!pattern) { - return ''; +module.exports = function (demoUrl, height) { + let url; + try { + // Check if it's external url. + const externalUrl = new URL(demoUrl); + url = externalUrl.href; + } catch (e) { + // Otherwise, check if internal url exists. + url = path.join('/', demoUrl, '/'); + if (!findByUrl(url)) { + return site.isProd() ? '' : `[No demo found at ${url}.]`; + } } + return `<div class="widget"> <iframe - src="${pattern.demo}" + src="${url}" title="Demo" height="${height}" loading="lazy" width="100%" scrolling="no"></iframe> + <div class="widget__actions"> + <a + href="${url}" + target="_blank" + class="code-pattern__icon" + > + <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" fill="currentColor"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 19H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></svg> + </a> + <share-action class="gc-analytics-event code-pattern__icon" + data-category="web.dev" + data-label="share" + data-action="click" + data-type="primary" + data-icon="share" + tabindex="0" + role="button" + > + <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M18 16.1c-.8 0-1.4.3-2 .8l-7.1-4.2c.1-.2.1-.5.1-.7s0-.5-.1-.7L16 7.2c.5.5 1.2.8 2 .8 1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3c0 .2 0 .5.1.7L8 9.8C7.5 9.3 6.8 9 6 9c-1.7 0-3 1.3-3 3s1.3 3 3 3c.8 0 1.5-.3 2-.8l7.1 4.2c-.1.2-.1.4-.1.6 0 1.6 1.3 2.9 2.9 2.9s2.9-1.3 2.9-2.9-1.2-2.9-2.8-2.9z" fill="currentColor"/></svg> + </share-action> + </div> </div>`; }; diff --git a/src/site/_includes/content/lighthouse-accessibility/about-aria.njk b/src/site/_includes/content/lighthouse-accessibility/about-aria.njk deleted file mode 100644 index e904bb42e6b..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/about-aria.njk +++ /dev/null @@ -1,9 +0,0 @@ -Users of screen readers and other assistive technologies need information -about the behavior and purpose of controls on your web page. -Built-in HTML controls like buttons and radio groups -come with that information [built in](/use-semantic-html). -For custom controls you create, however, you must provide the information with -[ARIA](https://www.w3.org/TR/wai-aria-1.1/#role_definitions) -roles and attributes. -(Learn more in the -[Introduction to ARIA](https://developers.google.com/web/fundamentals/accessibility/semantics-aria/).) diff --git a/src/site/_includes/content/lighthouse-accessibility/accessible-names.njk b/src/site/_includes/content/lighthouse-accessibility/accessible-names.njk deleted file mode 100644 index 1b55931e1c4..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/accessible-names.njk +++ /dev/null @@ -1,7 +0,0 @@ -To be announced properly by assistive technologies, -both -<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element#Forms" rel="noopener">built-in HTML controls</a> -and -<a href="https://www.w3.org/TR/wai-aria-practices-1.1/#aria_ex" rel="noopener">custom ARIA controls</a> -must have [accessible names](/labels-and-text-alternatives) -that convey their purpose. diff --git a/src/site/_includes/content/lighthouse-accessibility/aria-child-parent.njk b/src/site/_includes/content/lighthouse-accessibility/aria-child-parent.njk deleted file mode 100644 index 83ca0f42464..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/aria-child-parent.njk +++ /dev/null @@ -1,45 +0,0 @@ -There are two ways to set up the required relationships -between ARIA parent and child roles. - -### Option 1: Place the child elements within the parent in the DOM -Placing elements with child roles within the parent role element -in your HTML is usually the easiest and most maintainable solution. -For example: - -```html -<div role="tablist"> - <button role="tab" aria-selected="true" aria-controls="tab-1-pane" active> - Tab 1 - </button> - <button role="tab" aria-selected="false" tabindex="-1" aria-controls="tab-2-pane"> - Tab 2 - </button> - <button role="tab" aria-selected="false" tabindex="-1" aria-controls="tab-3-pane"> - Tab 3 - </button> -</div> -``` - -### Option 2: Associate the child roles with the parent role using `aria-owns` -If you can't place child role elements inside the parent role element, -you can use the `aria-owns` attribute to associate them: - -```html/0 -<div role="tablist" aria-owns="tab-1 tab-2 tab-3"></div> -… -<button id="tab-1" role="tab" aria-selected="true" aria-controls="tab-1-pane" active> - Tab 1 -</button> -<button id="tab-2" role="tab" aria-selected="false" tabindex="-1" aria-controls="tab-2-pane"> - Tab 2 -</button> -<button id="tab-3" role="tab" aria-selected="false" tabindex="-1" aria-controls="tab-3-pane"> - Tab 3 -</button> -``` - -{% Aside %} -If an element with the `aria-owns` attribute contains DOM children, -assistive technologies will announce the DOM children before the elements -listed in `aria-owns`. -{% endAside %} diff --git a/src/site/_includes/content/lighthouse-accessibility/fix-duplicate-ids.njk b/src/site/_includes/content/lighthouse-accessibility/fix-duplicate-ids.njk deleted file mode 100644 index a52c6762fb9..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/fix-duplicate-ids.njk +++ /dev/null @@ -1,12 +0,0 @@ -## How to fix duplicate IDs - -Change an ID value if it is used more than once. - -For example, the following code sample includes two elements with the same ID. -One ID should be changed: - -```html/0-1 -<input type="radio" id="huey" name="newphews" value="Huey" checked> -<input type="radio" id="huey" name="newphews" value="Dewey" checked> -<input type="radio" id="louie" name="newphews" value="Louie" checked> -``` diff --git a/src/site/_includes/content/lighthouse-accessibility/fix-lang-attr.njk b/src/site/_includes/content/lighthouse-accessibility/fix-lang-attr.njk deleted file mode 100644 index 4240f58bd87..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/fix-lang-attr.njk +++ /dev/null @@ -1,9 +0,0 @@ -To ensure your page's content is pronounced correctly for screen reader users, -use a <a href="https://www.w3.org/International/questions/qa-choosing-language-tags#question" rel="noopener">valid language code</a> -in the `lang` attribute of the `<html>` element. - -For example, this sample code sets the language of the document to English: - -```html -<html lang="en"> -``` diff --git a/src/site/_includes/content/lighthouse-accessibility/focusable-els.njk b/src/site/_includes/content/lighthouse-accessibility/focusable-els.njk deleted file mode 100644 index 37930b1eedf..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/focusable-els.njk +++ /dev/null @@ -1,19 +0,0 @@ -An element is _focusable_ when keyboard users can navigate to it -using the `Tab` key. -Focusability differs somewhat across browsers, but in general, -the following elements are focusable: -- `<a>` -- `<area>` -- `<audio controls>` -- `<button>` -- `<iframe>` -- `<input>` -- `<select>` -- `<summary>` -- `<textarea>` -- `<video controls>` -- Any element with the `contentEditable` attribute -- Any element with a `tabindex` set to a numeric value other than `-1` - -For a complete breakdown of cross-browser focus behavior, see ally.js's -<a href="https://allyjs.io/data-tables/focusable.html" rel="noopener">Focusable Elements - Browser Compatibility Table</a>. diff --git a/src/site/_includes/content/lighthouse-accessibility/lang-attr.njk b/src/site/_includes/content/lighthouse-accessibility/lang-attr.njk deleted file mode 100644 index 06cbbce2af2..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/lang-attr.njk +++ /dev/null @@ -1,6 +0,0 @@ -To ensure correct pronunciation, -screen readers use a different sound library -for each language they support. -Screen readers can switch between these language libraries easily, -but only if a web page specifies which language to read -for a given piece of content. diff --git a/src/site/_includes/content/lighthouse-accessibility/no-duplicate-ids.njk b/src/site/_includes/content/lighthouse-accessibility/no-duplicate-ids.njk deleted file mode 100644 index 5e142c99577..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/no-duplicate-ids.njk +++ /dev/null @@ -1,4 +0,0 @@ -Each ID in your HTML document must be unique. -Using the same ID on more than one element may cause screen readers and other -assistive technologies to only announce the first element with the shared ID, -preventing users from accessing the later elements. diff --git a/src/site/_includes/content/lighthouse-accessibility/scoring.njk b/src/site/_includes/content/lighthouse-accessibility/scoring.njk deleted file mode 100644 index 6635540dae8..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/scoring.njk +++ /dev/null @@ -1,6 +0,0 @@ -{% Aside 'note' %} - The Lighthouse Accessibility score is a weighted average of all the accessibility audits. - See the - [Lighthouse accessibility scoring](/accessibility-scoring) post - for more information. -{% endAside %} diff --git a/src/site/_includes/content/lighthouse-accessibility/use-built-in.njk b/src/site/_includes/content/lighthouse-accessibility/use-built-in.njk deleted file mode 100644 index 5230d4f14eb..00000000000 --- a/src/site/_includes/content/lighthouse-accessibility/use-built-in.njk +++ /dev/null @@ -1,7 +0,0 @@ -{% Aside 'caution' %} -Most common input types can be created with standardized HTML elements, -which come with built-in behaviors and accessible semantics -that can be time consuming to replicate. -Consider [using built-in elements](/semantics-and-screen-readers/#use-semantic-html) -instead of ARIA roles if possible. -{% endAside %} diff --git a/src/site/_includes/content/lighthouse-best-practices/scoring.njk b/src/site/_includes/content/lighthouse-best-practices/scoring.njk deleted file mode 100644 index 0b3680a4fde..00000000000 --- a/src/site/_includes/content/lighthouse-best-practices/scoring.njk +++ /dev/null @@ -1,5 +0,0 @@ -{% Aside 'note' %} - Each Best Practices audit is weighted equally in the Lighthouse Best Practices - Score. Learn more in [The Best Practices - score](https://developers.google.com/web/tools/lighthouse/v3/scoring#best-practices). -{% endAside %} diff --git a/src/site/_includes/content/lighthouse-performance/improve.njk b/src/site/_includes/content/lighthouse-performance/improve.njk deleted file mode 100644 index eb6027e1b61..00000000000 --- a/src/site/_includes/content/lighthouse-performance/improve.njk +++ /dev/null @@ -1,18 +0,0 @@ -## How to improve your overall Performance score - -Unless you have a specific reason for focusing on a particular metric, it's -usually better to focus on improving your overall Performance score. - -Use the **Opportunities** section of your Lighthouse report to determine which -improvements will have the most value for your page. The more significant the opportunity, -the greater the effect it will have on your Performance score. For example, the Lighthouse -screenshot below shows that [eliminating render-blocking resources](/render-blocking-resources) -will yield the biggest improvement: - -<figure> - <img src="/images/shared/opportunities.png" - alt="Lighthouse: Opportunities section"> -</figure> - -See the [Performance audits landing page](/lighthouse-performance) -to learn how to address the opportunities identified in your Lighthouse report. diff --git a/src/site/_includes/content/lighthouse-performance/js-perf.njk b/src/site/_includes/content/lighthouse-performance/js-perf.njk deleted file mode 100644 index 2af64513f5c..00000000000 --- a/src/site/_includes/content/lighthouse-performance/js-perf.njk +++ /dev/null @@ -1,7 +0,0 @@ -- [Only send the code that your users need by implementing code splitting](/reduce-javascript-payloads-with-code-splitting). -- [Minify and compress your code](/reduce-network-payloads-using-text-compression). -- [Remove unused code](/remove-unused-code). -- [Reduce network trips by caching your code with the PRPL pattern](/apply-instant-loading-with-prpl). - -For other ways to improve page load, check out the -[Performance audits landing page](/lighthouse-performance). diff --git a/src/site/_includes/content/lighthouse-performance/scoring.njk b/src/site/_includes/content/lighthouse-performance/scoring.njk deleted file mode 100644 index 4176529558f..00000000000 --- a/src/site/_includes/content/lighthouse-performance/scoring.njk +++ /dev/null @@ -1,5 +0,0 @@ -{% Aside 'note' %} - See the - [Lighthouse performance scoring](/performance-scoring) post to learn - how your page's overall performance score is calculated. -{% endAside %} diff --git a/src/site/_includes/content/lighthouse-pwa/scoring.njk b/src/site/_includes/content/lighthouse-pwa/scoring.njk deleted file mode 100644 index b01597dd9b4..00000000000 --- a/src/site/_includes/content/lighthouse-pwa/scoring.njk +++ /dev/null @@ -1,4 +0,0 @@ -{% Aside 'note' %} - In the Lighthouse report UI the full PWA badge is given when you pass all of the - audits in all of the PWA subcategories (**Fast and reliable**, **Installable**, and **PWA optimized**). -{% endAside %} diff --git a/src/site/_includes/content/lighthouse-seo/scoring.njk b/src/site/_includes/content/lighthouse-seo/scoring.njk deleted file mode 100644 index 5347e7cb9c2..00000000000 --- a/src/site/_includes/content/lighthouse-seo/scoring.njk +++ /dev/null @@ -1,6 +0,0 @@ -{% Aside 'note' %} - Each SEO audit is weighted equally - in the Lighthouse SEO Score, - except for the manual **[Structured data is valid](/structured-data)** audit. - Learn more in the [Lighthouse Scoring Guide](https://developers.google.com/web/tools/lighthouse/v3/scoring). -{% endAside %} diff --git a/src/site/_includes/content/metrics/metrics-changelog.njk b/src/site/_includes/content/metrics/metrics-changelog.njk index 44fc378d648..48536fa43fe 100644 --- a/src/site/_includes/content/metrics/metrics-changelog.njk +++ b/src/site/_includes/content/metrics/metrics-changelog.njk @@ -1,10 +1,7 @@ ## CHANGELOG -Occasionally, bugs are discovered in the APIs used to measure metrics, and -sometimes in the definitions of the metrics themselves. As a result, changes -must sometimes be made, and these changes can show up as improvements or -regressions in your internal reports and dashboards. +Occasionally, bugs are discovered in the APIs used to measure metrics, and sometimes in the definitions of the metrics themselves. As a result, changes must sometimes be made, and these changes can show up as improvements or regressions in your internal reports and dashboards. -To help you manage this, all changes to either the implementation or definition -of these metrics will be surfaced in this -[CHANGELOG](http://bit.ly/chrome-speed-metrics-changelog). +To help you manage this, all changes to either the implementation or definition of these metrics will be surfaced in this [CHANGELOG](http://bit.ly/chrome-speed-metrics-changelog). + +If you have feedback for these metrics, you can provide it in the [web-vitals-feedback Google group](https://groups.google.com/g/web-vitals-feedback). diff --git a/src/site/_includes/content/lighthouse-accessibility/why-headings.njk b/src/site/_includes/content/why-headings.njk similarity index 100% rename from src/site/_includes/content/lighthouse-accessibility/why-headings.njk rename to src/site/_includes/content/why-headings.njk diff --git a/src/site/_includes/core.njk b/src/site/_includes/core.njk deleted file mode 100644 index 33003af3fd9..00000000000 --- a/src/site/_includes/core.njk +++ /dev/null @@ -1,24 +0,0 @@ ---- -show_banner: true -tags: [] ---- - -{# This is the base layout for all pages that use the new design system. It replaces base.njk #} - -<!DOCTYPE html> -<html lang="{{lang}}"> - <head> - {% set CSS_ORIGIN = 'next' %} - {% include 'partials/head.njk' %} - </head> - <body class="unresolved"> - {# - Make the snackbar the first item in the DOM so we don't have to steal the - user's focus on initial visit to show them a cookie banner. Instead, the - snackbar will be the first stop for the screen reader / focus. - #} - <web-snackbar-container></web-snackbar-container> - - {{ content | safe }} - </body> -</html> diff --git a/src/site/_includes/course.njk b/src/site/_includes/course.njk index 10e5bd6ad67..e7eed512f6c 100644 --- a/src/site/_includes/course.njk +++ b/src/site/_includes/course.njk @@ -4,7 +4,6 @@ pageScripts: - '/js/course.js' inlineScripts: - '../../lib/components/CourseLinks/index.js' -CSS_ORIGIN: 'next' --- {% from 'macros/audio-fab.njk' import audioFab %} diff --git a/src/site/_includes/default-next.njk b/src/site/_includes/default-next.njk deleted file mode 100644 index a72b2380fc5..00000000000 --- a/src/site/_includes/default-next.njk +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: 'base' -CSS_ORIGIN: 'next' ---- -{# This is the standard layout that most pages will use. #} -<a href="#main" class="skip-link button" data-type="primary">Skip to content</a> -{% include 'partials/site-header.njk' %} -<main id="main"> - {% if show_banner %} - {% include 'partials/banner.njk' %} - {% endif %} - {{ content | safe }} -</main> -{% include 'partials/site-footer.njk' %} diff --git a/src/site/_includes/default.njk b/src/site/_includes/default.njk index 0af7dbbacce..66d31b5ea61 100644 --- a/src/site/_includes/default.njk +++ b/src/site/_includes/default.njk @@ -1,16 +1,13 @@ --- -layout: base +layout: 'base' --- - {# This is the standard layout that most pages will use. #} -{% include 'partials/header-default.njk' %} -{% include 'partials/navigation-drawer-default.njk' %} -<main> - <div id="content"> - {% if show_banner %} - {% include 'partials/banner.njk' %} - {% endif %} - {{ content | safe }} - </div> +<a href="#main" class="skip-link button" data-type="primary">{{ 'i18n.common.skip_link' | i18n(locale) }}</a> +{% include 'partials/site-header.njk' %} +<main id="main"> + {% if show_banner %} + {% include 'partials/banner.njk' %} + {% endif %} + {{ content | safe }} </main> -{% include 'partials/footer.njk' %} \ No newline at end of file +{% include 'partials/site-footer.njk' %} diff --git a/src/site/_includes/explore.njk b/src/site/_includes/explore.njk new file mode 100644 index 00000000000..f4df441b200 --- /dev/null +++ b/src/site/_includes/explore.njk @@ -0,0 +1,67 @@ +--- +layout: default +title: Explore +description: | + Learn best practices for the modern web and hone your skills with hands-on + codelabs. +pageScripts: + - '/js/explore.js' +--- +{% from 'macros/icon.njk' import icon with context %} + +<div class="wide-card-index"> + {# Hero starts #} + <header class="region bg-mid-bg"> + <div class="wrapper"> + <div class="headline all-center flow"> + <h1 class="headline__title">{{ title }}</h1> + <p>{{ 'i18n.explore.header' | i18n(locale) }}</p> + </div> + </div> + </header> + {# Hero ends #} + + {# Collections start #} + <div class="wrapper explore__collections"> + <div class="pad-block-size-1 repel"> + <h2 id="{{ 'i18n.explore.collections' | i18n(locale) | slug }}" class="text-size-3">{{ 'i18n.explore.collections' | i18n(locale) }}</h2> + + {% set filterItems = [] %} + {% for category, paths in learn %} + {% set i18nKey = 'i18n.explore.' + category %} + {% set filterItems = (filterItems.push({title: i18nKey | i18n(locale), id: i18nKey | i18n(locale) | slug}), filterItems) %} + {% endfor %} + <web-learn-filter all="{{'i18n.common.all' | i18n(locale)}}" filters="{{filterItems | dump}}"></web-learn-filter> + </div> + </div> + + <div id="learn__collections"> + {% for category, paths in learn %} + {% set i18nKey = 'i18n.explore.' + category %} + <div id="{{ i18nKey | i18n(locale) | slug }}" class="explore__collection"> + <div class="wrapper flow"> + <h2 id="{{ 'i18n.explore.collections' | i18n(locale) | slug }}" class="text-size-2">{{ i18nKey | i18n(locale) }}</h2> + <div class="auto-grid gap-top-size-2"> + {% for path in paths %} + <a href="/{{ path.slug }}" class="card"> + <div class="card__header repel"> + <p class="color-mid-text">Collection</p> + <div class="counter" data-layout="flush"> + <span class="counter__content">{{ path.topics.length }}</span> + {% include 'icons/mortarboard.svg' %} + </div> + </div> + <img src="{{ path.cover | imgix }}" alt="{{ path.title | i18n(locale) }}" /> + <div class="card__content flow"> + <h3 class="card__heading text-size-3">{{ path.title | i18n(locale) }}</h3> + <p class="text-size-1">{{ path.description | i18n(locale) }}</p> + </div> + </a> + {% endfor %} + </div> + </div> + </div> + {% endfor %} + </div> + {# Collections end #} +</div> diff --git a/src/site/_includes/feed.njk b/src/site/_includes/feed.njk index 3d1c3222dbb..4d66c94e08b 100644 --- a/src/site/_includes/feed.njk +++ b/src/site/_includes/feed.njk @@ -20,7 +20,7 @@ <link href="{{ absolutePostUrl }}"/> <updated>{{ post.date | rssDate }}</updated> <id>{{ absolutePostUrl }}</id> - <content type="text/html" mode="escaped">{{ post.templateContent | replace("web-copy-code", "div") | htmlToAbsoluteUrls(absolutePostUrl) }}</content> + <content type="html" mode="escaped">{{ post.templateContent | replace("web-copy-code", "div") | htmlToAbsoluteUrls(absolutePostUrl) }}</content> {% for entry in post.data.authors %} {%- set author = collections.authors[entry] -%} <author> diff --git a/src/site/_includes/handbook.njk b/src/site/_includes/handbook.njk index f3e8d2913e0..a6c3ed5a889 100644 --- a/src/site/_includes/handbook.njk +++ b/src/site/_includes/handbook.njk @@ -1,9 +1,9 @@ --- -layout: default-next +layout: default noindex: true permalink: "/{{lang}}/handbook/{{page.fileSlug}}/index.html" pageScripts: - '/js/content.js' --- -{% include 'partials/post-next.njk' %} +{% include 'partials/post.njk' %} diff --git a/src/site/_includes/homepage-next.njk b/src/site/_includes/homepage-next.njk deleted file mode 100644 index 0f76bf99946..00000000000 --- a/src/site/_includes/homepage-next.njk +++ /dev/null @@ -1,218 +0,0 @@ ---- -layout: 'default-next' -CSS_ORIGIN: 'next' -pageScripts: - - '/js/home.js' ---- -{% from 'macros/icon.njk' import icon with context %} - -<div class="homepage"> - {# Hero starts #} - <header class="hero"> - <div class="wrapper"> - <div class="hero__columns switcher"> - <div> - <span aria-hidden="true" class="hero__eyebrow">{{ intro.eyebrow }}</span> - <div class="hero__content flow"> - <img fetchpriority="high" src="{{ intro.image }}" alt="" aria-hidden="true" class="hero__decor" width="{{ intro.imageWidth }}" height="{{ intro.imageHeight }}" /> - <h1 class="hero__title">{{ intro.title }}</h1> - {{ intro.summary | md | safe }} - <a class="button" data-type="primary" href="{{ intro.buttonUrl }}">{{ intro.buttonText }}</a> - </div> - </div> - <div class="flow"> - <a class="feature-card" href="{{ featureCard.url }}" data-theme="{{ featureCard.theme }}" data-treatment="illustration"> - <span class="feature-card__eyebrow">{{ featureCard.eyebrow }}</span> - <h3 class="{{ 'visually-hidden' if featureCard.hiddenTitle else 'feature-card__title' }}" style="width: 230px;">{{ featureCard.title }}</h3> - <img fetchpriority="high" class="feature-card__background" alt="" aria-hidden="true" src="{{ featureCard.background }}" /> - </a> - {% include "partials/picked-case-study.njk" %} - </div> - </div> - </div> - </header> - {# Hero ends #} - - {# Promo panel starts #} - {# {% if promoPanel %} - <article class="hero" data-type="promo"> - <div class="wrapper"> - <div class="hero__columns switcher" data-direction="rev"> - <div> - <span aria-hidden="true" class="hero__eyebrow">{{ promoPanel.eyebrow }}</span> - <div class="hero__content flow"> - <h2 class="hero__title">{{ promoPanel.title }}</h2> - <p>{{ promoPanel.summary }}</p> - <div class="cluster gutter-base flow-space-size-2"> - <a class="button" data-type="primary" href="{{ promoPanel.primaryButtonUrl }}">{{ promoPanel.primaryButtonText }}</a> - <a class="button" data-type="secondary" href="{{ promoPanel.secondaryButtonUrl }}">{{ promoPanel.secondaryButtonText }}</a> - </div> - </div> - </div> - <div> - <img fetchpriority="high" src="{{ promoPanel.image }}" alt="" aria-hidden="true" class="hero__decor" width="{{ promoPanel.imageWidth }}" height="{{ promoPanel.imageHeight }}" /> - </div> - </div> - </div> - </article> - {% endif %} #} - {# Promo panel ends #} - - {# Optional divider between promo (if both enabled) #} - {# <hr /> #} - - {# Page speed starts #} - <article class="hero bg-core-bg homepage__page-speed-hero"> - <div class="wrapper"> - <div class="hero__columns switcher" data-direction="rev"> - <div class="flow"> - <img src="{{ pageSpeed.image }}" alt="" aria-hidden="true" class="hero__decor" width="{{ pageSpeed.imageWidth }}" height="{{ pageSpeed.imageHeight }}" /> - </div> - <div> - <span aria-hidden="true" class="hero__eyebrow">{{ pageSpeed.eyebrow }}</span> - <div class="hero__content flow gap-top-size-5"> - <h1 class="hero__title">{{ pageSpeed.title }}</h1> - {{ pageSpeed.summary | md | safe }} - <div class="cluster gutter-base flow-space-size-2"> - <a class="button" data-type="primary" href="{{ pageSpeed.primaryButtonUrl }}">{{ pageSpeed.primaryButtonText }}</a> - <a class="button" data-type="secondary" href="{{ pageSpeed.secondaryButtonUrl }}">{{ pageSpeed.secondaryButtonText }}</a> - </div> - </div> - </div> - </div> - </div> - </article> - {# Page speed ends #} - - {# Courses start #} - <div class="homepage__section bg-mid-bg"> - <div class="wrapper"> - <div class="headline all-center flow"> - <h2 class="headline__title">{{ courses.title }}</h2> - <p>{{ courses.summary }}</p> - <div class="headline__action"> - <a href="/learn">{{ 'i18n.common.see_all' | i18n(locale) }}</a> - </div> - </div> - <div class="gap-top-size-2"> - {% include "partials/course-cards-next.njk" %} - </div> - </div> - </div> - {# Courses end #} - - {# Case studies start #} - <div class="homepage__section"> - <div class="wrapper"> - <div class="headline all-center flow"> - <h2 class="headline__title">{{ caseStudies.title }}</h2> - <p>{{ caseStudies.summary }}</p> - <div class="headline__action"> - <a href="/tags/case-study/">{{ 'i18n.common.see_all' | i18n(locale) }}</a> - </div> - </div> - <div class="homepage__case-studies switcher gap-top-size-2"> - {% set cardCount = 0 %} - {% for item in collections['case-study'] | reverse %} - {# See https://github.com/GoogleChrome/web.dev/issues/8121 #} - {% if item.data.lang === 'en' %} - {% if cardCount <= 1 %} - {% if item.data.hero %} - {% if not item.data.alt %} - {% set alt = '' %} - {% else %} - {% set alt = item.data.alt %} - {% endif %} - <article class="card"> - <a href="{{ item.url }}" aria-hidden="true"> - {% Img src=item.data.thumbnail or item.data.hero, alt=item.data.alt, width="570", height="330", class="card__hero" %} - </a> - <div class="card__content flow"> - <h3 class="card__heading text-size-3"> - <a href="{{ item.url }}">{{ item.data.title }}</a> - </h3> - <p>{{ item.data.description }}</p> - </div> - <div class="card__tags cluster gap-top-size-1" aria-label="tags for this case study"> - {% for tagKey in item.data.tags or [] %} - {% if tagKey in collections.tags %} - {% set tag = collections.tags[tagKey] %} - <a class="pill" href="{{ tag.url }}">{{ tag.overrideTitle or tag.title | i18n(locale) }}</a> - {% endif %} - {% endfor %} - </div> - </article> - {% set cardCount = cardCount + 1 %} - {% endif %} - {% endif %} - {% endif %} - {% endfor %} - </div> - </div> - </div> - {# Case studies end #} - - {# Patterns start #} - <div class="homepage__section bg-core-bg"> - <div class="wrapper"> - <div class="headline all-center flow"> - <h2 class="headline__title">{{ patterns.title }}</h2> - <p>{{ patterns.summary }}</p> - <div class="headline__action"> - <a href="/patterns/">{{ 'i18n.common.see_all' | i18n(locale) }}</a> - </div> - </div> - <div class="homepage__patterns cluster gap-top-size-3"> - {% for setId, set in patterns.sets %} - {% if (site.env == 'prod' and set.draft) or set.suite %} - {# Don't display draft suite cards in prod, and don't display - sets that have a parent suite #} - {% else %} - <a href="/patterns/{{ set.id }}" class="card"> - {% Img src=set.hero, alt=set.title, width="354", height="240", params={fit: 'center', h: '240', w: '354'} %} - <div class="card__content flow gap-top-size-2"> - <h3 class="card__heading text-size-3">{{ set.title }}</h3> - <p class="color-mid-text">{{ set.description }}</p> - </div> - </a> - {% endif %} - {% endfor %} - </div> - </div> - </div> - {# Patterns end #} - - {# Podcasts start #} - <div class="homepage__section bg-core-bg"> - <div class="wrapper"> - <div class="headline all-center flow"> - <h2 class="headline__title">{{ podcasts.title }}</h2> - <p>{{ podcasts.summary }}</p> - <div class="headline__action"> - <a href="/podcasts/">{{ 'i18n.common.see_all' | i18n(locale) }}</a> - </div> - </div> - <div class="homepage__shows gap-top-size-3"> - <a class="homepage__show" href="/shows/designing-in-the-browser/"> - {% Img src="image/VbAJIREinuYvovrBzzvEyZOpw5w1/XXZm5qRstbVipZB9op3U.jpg", alt="Designer Vs Developer artwork", width="800", height="947", loading="lazy", class="homepage__show-bg" %} - <div class="flow t-color-shades-light-bright"> - <p>Show</p> - <h3 class="text-size-4">Designing in the browser</h3> - <p>Designing in the Browser explores the intersection of design and front-end development, teaching you how to build beautiful UIs with modern web standards in mind.</p> - </div> - </a> - <a class="homepage__show" href="https://pod.link/thecsspodcast"> - {% Img src="image/VbAJIREinuYvovrBzzvEyZOpw5w1/ipfeeYVWUsDER4LRnUkf.jpg", alt="Designer Vs Developer artwork", width="800", height="947", loading="lazy", class="homepage__show-bg" %} - <div class="flow t-color-shades-light-bright"> - <p>Podcast</p> - <h3 class="text-size-4">The CSS Podcast</h3> - <p>Cascading Style Sheets (CSS) is the web’s core styling language. For web developers, It’s one of the quickest technologies to get started.</p> - </div> - </a> - </div> - </div> - </div> - {# Podcasts end #} - - {% include 'partials/subscribe.njk' %} -</div> diff --git a/src/site/_includes/homepage.njk b/src/site/_includes/homepage.njk new file mode 100644 index 00000000000..190a6e16748 --- /dev/null +++ b/src/site/_includes/homepage.njk @@ -0,0 +1,137 @@ +--- +layout: default +pageScripts: + - '/js/home.js' +--- +{% from 'macros/icon.njk' import icon with context %} + +<div class="homepage"> + {# Hero starts #} + <header class="hero bg-core-bg"> + <div class="wrapper"> + <div class="hero__columns switcher"> + <div> + <span aria-hidden="true" class="hero__eyebrow">{{ intro.eyebrow }}</span> + <div class="hero__content flow"> + <img fetchpriority="high" src="{{ intro.image }}" alt="" aria-hidden="true" class="hero__decor" width="{{ intro.imageWidth }}" height="{{ intro.imageHeight }}" /> + <h1 class="hero__title">{{ intro.title }}</h1> + {{ intro.summary | md | safe }} + <a class="button" data-type="primary" href="{{ intro.buttonUrl }}">{{ intro.buttonText }}</a> + </div> + </div> + <div class="flow"> + <a class="feature-card" href="{{ featuredCard.url }}" data-theme="{{ featuredCard.theme }}" data-treatment="illustration"> + <span class="feature-card__eyebrow">{{ featuredCard.eyebrow }}</span> + <h3 class="feature-card__title">{{ featuredCard.title | safe }}</h3> + {% if featuredCard.video %} + <video autoplay loop muted playsinline + class="feature-card__background" + aria-label="{{ featuredCard.alt }}"> + <source src="{{ featuredCard.video }}" type="video/mp4;"> + </video> + {% elif featuredCard.background %} + {% Img src=featuredCard.background, alt=featuredCard.alt, width="800", height="434", class="feature-card__background", fetchpriority="high" %} + {% endif %} + </a> + + {% include "partials/picked-case-study.njk" %} + </div> + </div> + </div> + </header> + {# Hero ends #} + + {# Web Platform News start #} + <div class="homepage__section bg-mid-bg"> + <div class="wrapper"> + <div class="headline all-center flow"> + <h2 class="headline__title">{{ platformNews.title }}</h2> + <p>{{ platformNews.subTitle }}</p> + </div> + <div class="homepage__news gap-top-size-2"> + {% set cardCount = 0 %} + {% set pickedLeft = platformNews.pickedLeft %} + {% set pickedRight = platformNews.pickedRight %} + {% set items = [pickedLeft, pickedRight] %} + + {% for item in items %} + {% if item.url %} + {% set post = item.url | findByUrl %} + {% endif %} + + {% if post.data.lang === 'en' %} + {% if cardCount <= 1 %} + {% if post.data.hero %} + <article class="card"> + <a href="{{ post.url }}" aria-hidden="true"> + {% Img src=item.thumbnail or post.data.thumbnail or post.data.hero, alt=post.data.alt or '', width="570", height="330", class="card__hero" %} + </a> + <div class="card__content flow"> + <h3 class="card__heading text-size-3"> + <a href="{{ post.url }}">{{ item.title or post.data.title }}</a> + </h3> + <p>{{ item.description or post.data.description }}</p> + </div> + <div class="card__tags cluster gap-top-size-1" aria-label="tags for this case study"> + {% for tagKey in post.data.tags or [] %} + {% if tagKey in collections.tags %} + {% set tag = collections.tags[tagKey] %} + <a class="pill" href="{{ tag.url }}">{{ tag.overrideTitle or tag.title | i18n(locale) }}</a> + {% endif %} + {% endfor %} + </div> + </article> + {% set cardCount = cardCount + 1 %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + </div> + </div> + </div> + {# Web Platform News end #} + + {# Themes start #} + <div class="wrapper"> + <div class="pad-block-size-1 repel"> + <h2 id="themes" class="text-size-3"> Themes </h2> + + {% set filterItems = [] %} + {% for theme in themes %} + {% set filterItems = (filterItems.push({title: theme.category, id: theme.category | slug }), filterItems) %} + {% endfor %} + <web-learn-filter all="all" filters="{{filterItems | dump}}"></web-learn-filter> + </div> + </div> + + <div id="learn__collections"> + {% for theme in themes %} + <div class="homepage__collection" id="{{ theme.category | slug }}"> + <div class="region wrapper"> + <h5> {{ theme.category }} </h5> + <div class="collection__layout" aria-label="topics"> + {% set cards = theme.cards %} + {% include 'partials/cards-collection.njk' %} + </div> + </div> + </div> + {% endfor %} + </div> + {# Themes end #} + + {# Chrome developers start #} + <section class="homepage__developers region bg-mid-bg"> + <div class="wrapper flow all-center"> + <div> {% include "icons/chrome.svg" %} </div> + + <h1 class="headline__title">{{ developers.title }}</h1> + <p class="color-mid-text">{{ developers.summary | safe }}</p> + <div> + <a class="button gap-top-size-1" data-type="primary" href="{{ developers.primaryButtonUrl }}">{{ developers.primaryButtonText }}</a> + </div> + </div> + </section> + {# Chrome developers end #} + + {% include 'partials/subscribe.njk' %} +</div> diff --git a/src/site/_includes/icons/baseline.svg b/src/site/_includes/icons/baseline.svg new file mode 100644 index 00000000000..2e38bf2bbfb --- /dev/null +++ b/src/site/_includes/icons/baseline.svg @@ -0,0 +1,13 @@ + +<svg width="38" height="22" viewBox="0 0 38 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M12.6676 2.21159L2.11839 13.2002L0.00854492 11.0024L10.5578 0.0138804L12.6676 2.21159Z" fill="#A8DAB5"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M8.44415 2.19735L14.7737 8.79049L16.8835 6.59277L10.554 -0.000363149L8.44415 2.19735Z" fill="#A8DAB5"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M25.3324 2.21159L35.8816 13.2002L37.9915 11.0024L27.4422 0.0138804L25.3324 2.21159Z" fill="#A8DAB5"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M27.4548 21.9998L21.1253 15.4067L23.2351 13.209L29.5647 19.8021L27.4548 21.9998Z" fill="#A8DAB5"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M38.0001 10.9934L29.5088 19.8383L27.3989 17.6406L35.8902 8.79572L38.0001 10.9934Z" fill="#A8DAB5"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5493 21.9822L1.35582e-05 10.9936L2.10986 8.7959L12.6591 19.7845L10.5493 21.9822Z" fill="#1E8E3E"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5625 21.991L19.0019 13.2002L16.8921 11.0024L8.45269 19.7933L10.5625 21.991Z" fill="#DDB98E"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M29.5558 2.21159L19.0066 13.2002L16.8967 11.0024L27.446 0.0138804L29.5558 2.21159Z" fill="#DDB98E"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5625 21.991L19.0019 13.2002L16.8921 11.0024L8.45269 19.7933L10.5625 21.991Z" fill="#1E8E3E"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M29.5558 2.21159L19.0066 13.2002L16.8967 11.0024L27.446 0.0138804L29.5558 2.21159Z" fill="#1E8E3E"/> +</svg> diff --git a/src/site/_includes/icons/blog.svg b/src/site/_includes/icons/blog.svg new file mode 100644 index 00000000000..5d2bad0eecd --- /dev/null +++ b/src/site/_includes/icons/blog.svg @@ -0,0 +1,4 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3Z" /> +<path d="M14 17H7V15H14V17ZM17 13H7V11H17V13ZM17 9H7V7H17V9Z" /> +</svg> diff --git a/src/site/_includes/icons/chrome-white.svg b/src/site/_includes/icons/chrome-white.svg new file mode 100644 index 00000000000..bd833bd6cee --- /dev/null +++ b/src/site/_includes/icons/chrome-white.svg @@ -0,0 +1,3 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M12.0002 0.000198896C8.03654 0.000198896 4.52717 1.9163 2.34307 4.87283L6.04945 11.2927C6.22181 9.848 6.91291 8.51514 7.99463 7.54208C9.07636 6.56901 10.4747 6.0223 11.9296 6.00331C11.9529 6.00073 11.9767 5.99962 12.0005 5.99981L22.3939 5.99981C20.3207 2.41237 16.4471 0.000198896 12.0002 0.000198896ZM1.60671 5.99906C0.586498 7.76412 0 9.81226 0 12.0003C0 18.1811 4.65658 23.2593 10.6575 23.9249L14.3581 17.5155C13.6129 17.8346 12.8109 17.9998 12.0001 18.0003C9.89088 17.9976 7.93796 16.8875 6.85643 15.0765C6.83691 15.0526 6.81923 15.027 6.80376 15.0003L1.60671 5.99906ZM12.0002 7.20025C10.7271 7.20025 9.50625 7.70609 8.60612 8.60622C7.70598 9.50636 7.20033 10.7273 7.20033 12.0003C7.20033 13.2733 7.70603 14.4942 8.60612 15.3943C9.50621 16.2945 10.7271 16.8001 12.0002 16.8001C13.2732 16.8001 14.4941 16.2944 15.3942 15.3943C16.2944 14.4943 16.8 13.2733 16.8 12.0003C16.8 10.7273 16.2943 9.50636 15.3942 8.60622C14.4941 7.70609 13.2732 7.20025 12.0002 7.20025ZM15.5902 7.20025C17.1048 8.33129 17.9977 10.11 18.0001 12.0003C17.9977 13.0181 17.7364 14.0185 17.2409 14.9076C17.2289 14.9397 17.2142 14.9706 17.1969 15.0003L12.0009 24.0002C18.6352 23.9998 24 18.6345 24 12.0001C24 10.2923 23.6427 8.66976 23.0015 7.2001L15.5902 7.20025Z" fill="white"/> +</svg> diff --git a/src/site/_includes/icons/chrome.svg b/src/site/_includes/icons/chrome.svg new file mode 100644 index 00000000000..e315037d65b --- /dev/null +++ b/src/site/_includes/icons/chrome.svg @@ -0,0 +1,53 @@ +<svg width="238" height="36" viewBox="0 0 238 36" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> + <path d="M54.5001 26.3499C53.4194 26.3768 52.3446 26.1822 51.3419 25.7781C50.3393 25.3739 49.43 24.7688 48.6701 23.9999C47.8956 23.2332 47.2866 22.3159 46.8806 21.3045C46.4747 20.2932 46.2805 19.2093 46.3101 18.1199C46.3101 15.7799 47.1001 13.8199 48.6701 12.2499C49.43 11.4811 50.3393 10.8759 51.3419 10.4718C52.3446 10.0676 53.4194 9.873 54.5001 9.89992C56.8701 9.89992 58.8001 10.7499 60.2801 12.4699L58.8801 13.8299C58.3592 13.175 57.6909 12.6525 56.9298 12.3049C56.1686 11.9574 55.3361 11.7946 54.5001 11.8299C53.6937 11.812 52.8919 11.9568 52.1428 12.2558C51.3937 12.5548 50.7125 13.0017 50.1401 13.5699C49.5504 14.1671 49.0899 14.8792 48.7871 15.662C48.4843 16.4447 48.3458 17.2814 48.3801 18.1199C48.3801 19.9999 48.9701 21.5199 50.1401 22.6799C50.7125 23.2481 51.3937 23.6951 52.1428 23.994C52.8919 24.293 53.6937 24.4378 54.5001 24.4199C56.3901 24.4199 58.0001 23.6499 59.3401 22.1199L60.7401 23.5399C60.0025 24.4168 59.0806 25.1202 58.0401 25.5999C56.9501 26.0999 55.7701 26.3499 54.5001 26.3499V26.3499ZM64.5701 10.2499V15.2199L64.4801 16.7199H64.5701C64.8701 16.1999 65.3201 15.7699 65.9501 15.4199C66.565 15.0574 67.2662 14.8674 67.9801 14.8699C69.3101 14.8699 70.3301 15.2699 71.0401 16.0999C71.7801 17.0354 72.1534 18.2088 72.09 19.3999V25.9999H70.0701V19.6999C70.0701 17.7099 69.1801 16.7199 67.4101 16.7199C66.5701 16.7199 65.8901 17.0499 65.3601 17.7199C64.8301 18.3899 64.5601 19.1599 64.5601 20.0399V25.9999H62.5401V10.2499H64.5701ZM76.4901 25.9999H74.4701V15.2199H76.4001V16.9799H76.5001C76.7001 16.3899 77.1201 15.9099 77.7501 15.5299C78.2472 15.2107 78.8139 15.0159 79.4022 14.962C79.9905 14.908 80.5831 14.9965 81.1301 15.2199L80.3601 17.1199C80.1001 17.0099 79.7401 16.9599 79.2901 16.9599C78.5501 16.9599 77.9001 17.2599 77.3301 17.8399C77.0462 18.1414 76.8256 18.4967 76.6813 18.8849C76.5371 19.2731 76.472 19.6862 76.4901 20.0999V25.9999V25.9999ZM82.7401 16.5199C83.2486 15.9785 83.8665 15.5514 84.5526 15.2669C85.2388 14.9825 85.9776 14.8471 86.7201 14.8699C88.3401 14.8699 89.6601 15.4199 90.7001 16.5199C91.2199 17.0634 91.6265 17.705 91.896 18.4072C92.1656 19.1093 92.2927 19.8581 92.2701 20.6099C92.2701 22.2499 91.7501 23.6199 90.7001 24.7199C90.1881 25.2556 89.5692 25.6775 88.8835 25.9583C88.1978 26.2392 87.4607 26.3726 86.7201 26.3499C85.9794 26.3727 85.2423 26.2393 84.5566 25.9585C83.8709 25.6777 83.2519 25.2557 82.7401 24.7199C81.6962 23.6106 81.1351 22.1325 81.1801 20.6099C81.1801 18.9699 81.7001 17.6099 82.7401 16.5099V16.5199ZM84.2401 23.4499C84.5579 23.7874 84.9415 24.0563 85.3671 24.2401C85.7927 24.4239 86.2514 24.5187 86.715 24.5187C87.1787 24.5187 87.6374 24.4239 88.063 24.2401C88.4886 24.0563 88.8722 23.7874 89.1901 23.4499C89.5465 23.0711 89.8231 22.6245 90.0035 22.1366C90.1839 21.6487 90.2643 21.1295 90.2401 20.6099C90.2662 20.0931 90.1866 19.5765 90.0061 19.0916C89.8255 18.6066 89.5478 18.1637 89.1901 17.7899C88.8745 17.4485 88.4917 17.176 88.0658 16.9897C87.6399 16.8033 87.18 16.7071 86.715 16.7071C86.2501 16.7071 85.7902 16.8033 85.3643 16.9897C84.9384 17.176 84.5556 17.4485 84.2401 17.7899C83.8865 18.1662 83.6122 18.6098 83.4335 19.0942C83.2548 19.5787 83.1754 20.0941 83.2001 20.6099C83.2001 21.7799 83.5501 22.7299 84.2401 23.4499ZM93.8901 25.9999V15.2199H95.8301V16.7199H95.9101C96.2201 16.1999 96.6901 15.7699 97.3201 15.4199C97.9007 15.0713 98.5629 14.8816 99.2401 14.8699C100.91 14.8699 102.04 15.5599 102.64 16.9399C103.024 16.2875 103.577 15.7508 104.24 15.3865C104.904 15.0221 105.654 14.8437 106.41 14.8699C107.68 14.8699 108.64 15.2699 109.29 16.0999C109.94 16.8999 110.26 17.9999 110.26 19.3999V25.9999H108.23V19.6999C108.23 18.6199 108.03 17.8499 107.64 17.3999C107.24 16.9399 106.64 16.7199 105.84 16.7199C105.04 16.7199 104.38 17.0499 103.86 17.7199C103.349 18.3844 103.078 19.2019 103.09 20.0399V25.9999H101.06V19.6999C101.06 18.6199 100.86 17.8499 100.46 17.3999C100.07 16.9399 99.4701 16.7199 98.6601 16.7199C97.8701 16.7199 97.2101 17.0499 96.6801 17.7199C96.1694 18.3844 95.8981 19.2019 95.9101 20.0399V25.9999H93.8901ZM117.51 26.3499C116.769 26.3759 116.031 26.244 115.345 25.963C114.659 25.6819 114.04 25.2582 113.53 24.7199C112.505 23.6014 111.96 22.126 112.01 20.6099C112.01 19.0399 112.5 17.6899 113.48 16.5599C114.48 15.4299 115.75 14.8599 117.28 14.8599C118.88 14.8599 120.16 15.3899 121.12 16.4299C122.127 17.5825 122.647 19.0813 122.57 20.6099L122.55 20.9799H114.03C114.036 21.9486 114.424 22.8758 115.11 23.5599C115.78 24.1899 116.57 24.4999 117.47 24.4999C118.92 24.4999 119.9 23.8899 120.41 22.6599L122.21 23.3999C121.846 24.2564 121.246 24.9917 120.48 25.5199C119.68 26.0699 118.68 26.3499 117.51 26.3499ZM120.41 19.3099C120.343 18.6414 120.042 18.0181 119.56 17.5499C119.04 16.9899 118.27 16.7199 117.25 16.7199C116.5 16.7199 115.85 16.9499 115.29 17.4199C114.74 17.8899 114.37 18.5199 114.16 19.3199H120.41V19.3099V19.3099ZM129.61 25.9999V10.2499H134.42C136.84 10.2499 138.78 10.9799 140.23 12.4499C140.96 13.1972 141.529 14.0854 141.904 15.0603C142.279 16.0352 142.451 17.0763 142.41 18.1199C142.41 20.4599 141.68 22.3599 140.23 23.8199C138.78 25.2699 136.84 25.9999 134.43 25.9999H129.6H129.61V25.9999ZM131.63 24.0599H134.43C136.24 24.0599 137.68 23.5399 138.73 22.4999C139.81 21.4599 140.34 19.9999 140.34 18.1199C140.34 16.2599 139.81 14.8099 138.74 13.7699C138.166 13.2256 137.486 12.8038 136.744 12.5305C136.001 12.2571 135.21 12.1379 134.42 12.1799H131.62V24.0599H131.63V24.0599ZM149.03 26.3599C148.287 26.3853 147.546 26.2521 146.859 25.9694C146.171 25.6866 145.551 25.2607 145.04 24.7199C144.019 23.5998 143.477 22.1246 143.53 20.6099C143.53 19.0399 144.02 17.6899 145 16.5599C146 15.4299 147.27 14.8599 148.8 14.8599C150.4 14.8599 151.68 15.3899 152.63 16.4299C153.641 17.5809 154.164 19.0799 154.09 20.6099L154.06 20.9799H145.55C145.556 21.9486 145.944 22.8758 146.63 23.5599C147.3 24.1899 148.09 24.4999 148.98 24.4999C150.43 24.4999 151.42 23.8899 151.93 22.6599L153.73 23.3999C153.366 24.2564 152.766 24.9917 152 25.5199C151.19 26.0699 150.2 26.3499 149.03 26.3499V26.3599V26.3599ZM151.93 19.3099C151.86 18.6401 151.556 18.0165 151.07 17.5499C150.56 16.9899 149.79 16.7199 148.77 16.7199C148.01 16.7199 147.37 16.9499 146.8 17.4199C146.26 17.8899 145.89 18.5199 145.68 19.3199H151.93V19.3099V19.3099ZM158.93 25.9999L154.58 15.2199H156.78L159.95 23.5799H159.99L163.2 15.2199H165.36L160.96 25.9999H158.93V25.9999ZM171.24 26.3499C170.499 26.3752 169.761 26.243 169.075 25.9621C168.389 25.6811 167.77 25.2577 167.26 24.7199C166.235 23.6014 165.69 22.126 165.74 20.6099C165.74 19.0399 166.24 17.6899 167.21 16.5599C168.21 15.4299 169.48 14.8599 171.02 14.8599C172.62 14.8599 173.9 15.3899 174.85 16.4299C175.857 17.5825 176.377 19.0813 176.3 20.6099L176.28 20.9799H167.76C167.766 21.9486 168.154 22.8758 168.84 23.5599C169.52 24.1899 170.3 24.4999 171.2 24.4999C172.65 24.4999 173.63 23.8899 174.15 22.6599L175.95 23.3999C175.584 24.2579 174.98 24.9934 174.21 25.5199C173.41 26.0699 172.41 26.3499 171.24 26.3499V26.3499ZM174.14 19.3099C174.073 18.6414 173.772 18.0181 173.29 17.5499C172.77 16.9899 172 16.7199 170.98 16.7199C170.23 16.7199 169.58 16.9499 169.02 17.4199C168.48 17.8899 168.1 18.5199 167.9 19.3199H174.15L174.14 19.3099V19.3099ZM180.18 25.9999H178.15V10.2499H180.18V25.9999V25.9999ZM183.48 16.5199C183.989 15.9785 184.606 15.5513 185.293 15.2668C185.979 14.9824 186.718 14.8471 187.46 14.8699C189.08 14.8699 190.4 15.4199 191.44 16.5199C191.96 17.0637 192.366 17.7052 192.635 18.4074C192.905 19.1095 193.032 19.8582 193.01 20.6099C193.01 22.2499 192.49 23.6199 191.45 24.7199C190.937 25.2567 190.316 25.6794 189.629 25.9602C188.941 26.2411 188.202 26.3739 187.46 26.3499C186.719 26.373 185.982 26.2398 185.296 25.959C184.611 25.6781 183.992 25.2559 183.48 24.7199C182.436 23.6106 181.875 22.1325 181.92 20.6099C181.92 18.9699 182.44 17.6099 183.48 16.5099V16.5199V16.5199ZM184.98 23.4499C185.3 23.7848 185.685 24.0507 186.112 24.2313C186.538 24.4118 186.997 24.5033 187.46 24.4999C188.42 24.4999 189.24 24.1499 189.93 23.4499C190.287 23.0711 190.563 22.6245 190.744 22.1366C190.924 21.6487 191.004 21.1295 190.98 20.6099C191.006 20.0931 190.927 19.5764 190.746 19.0914C190.566 18.6065 190.288 18.1636 189.93 17.7899C189.454 17.2758 188.83 16.9226 188.145 16.7792C187.459 16.6359 186.746 16.7095 186.104 16.9899C185.678 17.1763 185.296 17.4487 184.98 17.7899C184.626 18.1662 184.352 18.6098 184.174 19.0942C183.995 19.5787 183.915 20.0941 183.94 20.6099C183.94 21.7799 184.29 22.7299 184.98 23.4499ZM200.35 26.3499C199.53 26.3499 198.79 26.1799 198.13 25.8199C197.535 25.5172 197.031 25.0617 196.67 24.4999H196.59L196.67 25.9999V30.7499H194.65V15.2199H196.59V16.7199H196.67C197 16.1899 197.48 15.7499 198.13 15.3999C198.79 15.0399 199.53 14.8699 200.35 14.8699C201.75 14.8699 202.95 15.4199 203.95 16.5199C204.968 17.6345 205.513 19.101 205.47 20.6099C205.47 22.2399 204.97 23.6099 203.96 24.7099C203.512 25.2275 202.958 25.6421 202.335 25.9252C201.711 26.2082 201.034 26.3531 200.35 26.3499V26.3499ZM200.02 24.4999C200.96 24.4999 201.76 24.1499 202.44 23.4499C203.136 22.6723 203.499 21.6524 203.45 20.6099C203.476 20.0965 203.4 19.5831 203.226 19.0992C203.053 18.6152 202.786 18.1703 202.44 17.7899C202.136 17.4496 201.763 17.1781 201.346 16.9936C200.928 16.8091 200.476 16.7158 200.02 16.7199C199.06 16.7199 198.25 17.0699 197.58 17.7699C196.92 18.4699 196.58 19.4199 196.58 20.6099C196.58 21.7999 196.92 22.7399 197.58 23.4499C198.25 24.1499 199.06 24.4999 200.02 24.4999ZM212.22 26.3499C211.477 26.3773 210.737 26.2461 210.049 25.965C209.361 25.684 208.741 25.2595 208.23 24.7199C207.205 23.6014 206.66 22.126 206.71 20.6099C206.71 19.0399 207.21 17.6899 208.19 16.5599C209.19 15.4299 210.45 14.8599 211.99 14.8599C213.59 14.8599 214.87 15.3899 215.82 16.4299C216.827 17.5825 217.347 19.0813 217.27 20.6099L217.25 20.9799H208.74C208.744 21.9471 209.128 22.8739 209.81 23.5599C210.49 24.1899 211.27 24.4999 212.17 24.4999C213.62 24.4999 214.6 23.8899 215.12 22.6599L216.92 23.3999C216.554 24.2579 215.95 24.9934 215.18 25.5199C214.38 26.0699 213.38 26.3499 212.21 26.3499H212.22V26.3499ZM215.12 19.3099C215.05 18.6401 214.746 18.0165 214.26 17.5499C213.74 16.9899 212.97 16.7199 211.95 16.7199C211.2 16.7199 210.55 16.9499 209.99 17.4199C209.45 17.8899 209.07 18.5199 208.87 19.3199H215.12V19.3099V19.3099ZM221.15 25.9999H219.12V15.2199H221.06V16.9799H221.15C221.35 16.3899 221.77 15.9099 222.4 15.5299C222.898 15.2083 223.467 15.0121 224.057 14.9581C224.647 14.9041 225.242 14.9939 225.79 15.2199L225.02 17.1199C224.75 17.0099 224.39 16.9599 223.94 16.9599C223.21 16.9599 222.56 17.2599 221.98 17.8399C221.698 18.142 221.479 18.4976 221.336 18.8858C221.193 19.274 221.13 19.6868 221.15 20.0999V25.9999V25.9999ZM230.69 26.3499C229.49 26.3499 228.49 26.0499 227.69 25.4699C226.936 24.9025 226.349 24.1426 225.99 23.2699L227.79 22.5199C228.36 23.8699 229.33 24.5499 230.71 24.5499C231.34 24.5499 231.85 24.4099 232.25 24.1299C232.66 23.8499 232.87 23.4799 232.87 23.0299C232.87 22.3299 232.37 21.8499 231.39 21.5999L229.22 21.0699C228.504 20.8812 227.837 20.5439 227.26 20.0799C226.959 19.8426 226.718 19.538 226.557 19.1906C226.395 18.8433 226.318 18.4628 226.33 18.0799C226.33 17.1299 226.75 16.3599 227.59 15.7699C228.44 15.1699 229.44 14.8699 230.6 14.8699C231.55 14.8699 232.4 15.0899 233.15 15.5299C233.883 15.9409 234.449 16.5954 234.75 17.3799L233 18.0999C232.6 17.1499 231.78 16.6699 230.53 16.6699C229.93 16.6699 229.43 16.7999 229.02 17.0499C228.61 17.2999 228.4 17.6299 228.4 18.0499C228.4 18.6699 228.88 19.0899 229.83 19.3099L231.96 19.8099C232.98 20.0499 233.72 20.4599 234.21 21.0299C234.479 21.3406 234.682 21.7032 234.805 22.0954C234.928 22.4876 234.97 22.9009 234.927 23.3098C234.884 23.7186 234.757 24.1142 234.554 24.4721C234.352 24.8299 234.078 25.1423 233.75 25.3899C232.95 26.0299 231.94 26.3499 230.69 26.3499Z"/> + <mask id="mask0_636_18464" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="33" height="32"> + <path d="M18.5 34C27.337 34 34.5 26.837 34.5 18C34.5 9.163 27.337 2 18.5 2C9.663 2 2.5 9.163 2.5 18C2.5 26.837 9.663 34 18.5 34Z" fill="#C4C4C4"/> + </mask> + <g mask="url(#mask0_636_18464)"> + <path d="M2.5 2V21.636H12.202L18.5 10.727H34.5V2H2.5Z" fill="#DB4437"/> + <path d="M2.5 34.0001H17.73L24.8 26.9301V21.6361H12.202L2.5 4.99609V34.0001Z" fill="#0F9D58"/> + <path d="M2.5 34.0001H17.73L24.8 26.9301V21.6361H12.202L2.5 4.99609V34.0001Z" fill="url(#paint0_linear_636_18464)"/> + <path d="M18.5 10.7266L24.8 21.6366L17.73 33.9996H34.5V10.7266H18.5Z" fill="#FFCD40"/> + <path d="M18.5 10.7266L24.8 21.6366L17.73 33.9996H34.5V10.7266H18.5Z" fill="url(#paint1_linear_636_18464)"/> + <path d="M12.3741 21.5733L5.1331 9.15332L5.0271 9.33532L12.2171 21.6623L12.3741 21.5723V21.5733Z" fill="#3E2723" fill-opacity="0.15"/> + <path d="M24.653 21.878L24.502 21.791L17.522 34H17.731L24.658 21.884L24.653 21.878Z" fill="#263238" fill-opacity="0.15"/> + <path d="M5.04004 9.35352L15.449 19.7615L12.202 21.6355L5.04004 9.35352Z" fill="url(#paint2_radial_636_18464)"/> + <path d="M17.7419 33.9797L21.5519 19.7617L24.7999 21.6357L17.7419 33.9797Z" fill="url(#paint3_radial_636_18464)"/> + <path d="M18.5 10.7266V14.5366L32.755 10.7266H18.5Z" fill="url(#paint4_radial_636_18464)"/> + <path d="M18.5001 25.2726C20.429 25.2726 22.2789 24.5063 23.6428 23.1424C25.0068 21.7784 25.7731 19.9285 25.7731 17.9996C25.7731 16.0706 25.0068 14.2207 23.6428 12.8568C22.2789 11.4928 20.429 10.7266 18.5001 10.7266C16.5711 10.7266 14.7212 11.4928 13.3573 12.8568C11.9933 14.2207 11.2271 16.0706 11.2271 17.9996C11.2271 19.9285 11.9933 21.7784 13.3573 23.1424C14.7212 24.5063 16.5711 25.2726 18.5001 25.2726V25.2726Z" fill="#F1F1F1"/> + <path d="M18.4999 23.8176C20.0429 23.8176 21.5227 23.2047 22.6138 22.1136C23.7049 21.0225 24.3179 19.5427 24.3179 17.9996C24.3179 16.4566 23.7049 14.9768 22.6138 13.8857C21.5227 12.7946 20.0429 12.1816 18.4999 12.1816C16.9569 12.1816 15.477 12.7946 14.3859 13.8857C13.2949 14.9768 12.6819 16.4566 12.6819 17.9996C12.6819 19.5427 13.2949 21.0225 14.3859 22.1136C15.477 23.2047 16.9569 23.8176 18.4999 23.8176V23.8176Z" fill="#4285F4"/> + <path d="M18.5001 10.5459C16.5713 10.5459 14.7215 11.312 13.3576 12.6758C11.9937 14.0395 11.2273 15.8892 11.2271 17.8179V17.9999C11.2271 16.071 11.9933 14.2211 13.3573 12.8571C14.7212 11.4932 16.5711 10.7269 18.5001 10.7269H34.5V10.5459H18.5001V10.5459Z" fill="#3E2723" fill-opacity="0.2"/> + <path d="M24.79 21.6361C24.153 22.741 23.2364 23.6588 22.1322 24.2973C21.0281 24.9357 19.7754 25.2722 18.5 25.2731C17.2241 25.2728 15.9707 24.9365 14.866 24.298C13.7614 23.6596 12.8443 22.7415 12.207 21.6361H12.2L2.5 4.99609V5.17809L12.202 21.8181H12.209C12.8464 22.9233 13.7635 23.8412 14.8682 24.4795C15.9729 25.1177 17.2262 25.4539 18.502 25.4541C19.7774 25.4537 21.0302 25.1175 22.1344 24.4792C23.2386 23.841 24.1552 22.9231 24.792 21.8181H24.802V21.6361H24.791H24.79Z" fill="white" fill-opacity="0.1"/> + <path opacity="0.1" d="M18.6821 10.7266C18.6511 10.7266 18.6221 10.7306 18.5911 10.7326C20.5034 10.7557 22.3296 11.5315 23.6739 12.8917C25.0182 14.2519 25.7724 16.0871 25.7731 17.9996C25.7724 19.912 25.0182 21.7472 23.6739 23.1074C22.3296 24.4677 20.5034 25.2434 18.5911 25.2666C18.6211 25.2666 18.6511 25.2726 18.6811 25.2726C20.61 25.2726 22.4599 24.5063 23.8239 23.1424C25.1878 21.7784 25.9541 19.9285 25.9541 17.9996C25.9541 16.0706 25.1878 14.2207 23.8239 12.8568C22.4599 11.4928 20.61 10.7266 18.6811 10.7266H18.6821Z" fill="#3E2723"/> + <path d="M24.864 21.8778C25.3698 21.0043 25.6876 20.0348 25.7971 19.0314C25.9066 18.028 25.8054 17.0128 25.5 16.0508C25.673 16.6728 25.773 17.3258 25.773 18.0008C25.773 19.3258 25.415 20.5608 24.796 21.6308L24.8 21.6378L17.73 34.0018H17.942L24.867 21.8848L24.864 21.8778V21.8778Z" fill="white" fill-opacity="0.2"/> + <path d="M18.5 2.182C27.305 2.182 34.45 9.296 34.498 18.091L34.5 18C34.5 9.164 27.336 2 18.5 2C9.664 2 2.5 9.164 2.5 18L2.502 18.09C2.55 9.297 9.694 2.183 18.5 2.183V2.182Z" fill="white" fill-opacity="0.2"/> + <path d="M18.5 33.8182C27.305 33.8182 34.45 26.7042 34.498 17.9092L34.5 18.0002C34.5 26.8362 27.336 34.0002 18.5 34.0002C9.664 34.0002 2.5 26.8362 2.5 18.0002L2.502 17.9102C2.55 26.7032 9.694 33.8172 18.5 33.8172V33.8182Z" fill="#3E2723" fill-opacity="0.15"/> + <path d="M18.5 34C27.337 34 34.5 26.837 34.5 18C34.5 9.163 27.337 2 18.5 2C9.663 2 2.5 9.163 2.5 18C2.5 26.837 9.663 34 18.5 34Z" fill="url(#paint5_radial_636_18464)"/> + </g> + <defs> + <linearGradient id="paint0_linear_636_18464" x1="21.204" y1="30.4541" x2="10.598" y2="24.2421" gradientUnits="userSpaceOnUse"> + <stop stop-color="#055524" stop-opacity="0.4"/> + <stop offset="0.33" stop-color="#055524" stop-opacity="0"/> + </linearGradient> + <linearGradient id="paint1_linear_636_18464" x1="23.201" y1="9.60056" x2="25.872" y2="21.2956" gradientUnits="userSpaceOnUse"> + <stop stop-color="#EA6100" stop-opacity="0.3"/> + <stop offset="0.66" stop-color="#EA6100" stop-opacity="0"/> + </linearGradient> + <radialGradient id="paint2_radial_636_18464" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(5.02304 9.36652) scale(14.1898)"> + <stop stop-color="#3E2723" stop-opacity="0.2"/> + <stop offset="1" stop-color="#3E2723" stop-opacity="0"/> + </radialGradient> + <radialGradient id="paint3_radial_636_18464" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(18.4719 18.0247) scale(15.9764 15.9764)"> + <stop stop-color="#263238" stop-opacity="0.2"/> + <stop offset="1" stop-color="#263238" stop-opacity="0"/> + </radialGradient> + <radialGradient id="paint4_radial_636_18464" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(17.805 10.7176) scale(15.2869 15.2869)"> + <stop stop-color="#3E2723" stop-opacity="0.2"/> + <stop offset="1" stop-color="#3E2723" stop-opacity="0"/> + </radialGradient> + <radialGradient id="paint5_radial_636_18464" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(7.28 6.366) scale(32.1356)"> + <stop stop-color="white" stop-opacity="0.1"/> + <stop offset="1" stop-color="white" stop-opacity="0"/> + </radialGradient> + </defs> +</svg> diff --git a/src/site/_includes/icons/dcc.svg b/src/site/_includes/icons/dcc.svg new file mode 100644 index 00000000000..d5225091411 --- /dev/null +++ b/src/site/_includes/icons/dcc.svg @@ -0,0 +1,3 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path d="M10.0001 0.000165745C6.69712 0.000165745 3.77264 1.5969 1.95256 4.06066L5.04121 9.41048C5.18484 8.20659 5.76075 7.09589 6.6622 6.28501C7.56364 5.47413 8.72896 5.01854 9.9413 5.00271C9.96079 5.00056 9.98058 4.99964 10.0004 4.99979H18.6616C16.934 2.01029 13.7059 0.000165745 10.0001 0.000165745ZM1.33892 4.99917C0.488748 6.47004 0 8.17681 0 10.0001C0 15.1508 3.88048 19.3826 8.88123 19.9373L11.9651 14.5961C11.3441 14.862 10.6758 14.9997 10.0001 15.0001C8.2424 14.9978 6.61497 14.0728 5.71369 12.5637C5.69742 12.5437 5.68269 12.5224 5.6698 12.5001L1.33892 4.99917ZM10.0001 6.00015C8.93929 6.00015 7.92188 6.42168 7.17176 7.17179C6.42165 7.9219 6.00028 8.93929 6.00028 10.0001C6.00028 11.061 6.42169 12.0784 7.17176 12.8285C7.92184 13.5786 8.93929 14 10.0001 14C11.061 14 12.0784 13.5786 12.8285 12.8285C13.5786 12.0784 14 11.061 14 10.0001C14 8.93929 13.5786 7.9219 12.8285 7.17179C12.0785 6.42168 11.061 6.00015 10.0001 6.00015ZM12.9918 6.00015C14.254 6.94268 14.9981 8.42494 15.0001 10.0001C14.9981 10.8483 14.7804 11.682 14.3674 12.4229C14.3574 12.4496 14.3452 12.4754 14.3307 12.5001L10.0007 20C15.5293 19.9997 20 15.5286 20 10C20 8.57684 19.7023 7.22474 19.1679 6.00003L12.9918 6.00015Z" /> +</svg> diff --git a/src/site/_includes/icons/edit.svg b/src/site/_includes/icons/edit.svg new file mode 100644 index 00000000000..c087e92da85 --- /dev/null +++ b/src/site/_includes/icons/edit.svg @@ -0,0 +1,3 @@ +<svg width="37" height="37" viewBox="0 0 37 37" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path d="M0.25 29.5001V37.0001H7.75L29.87 14.8801L22.37 7.38012L0.25 29.5001ZM35.67 9.08012C36.45 8.30012 36.45 7.04012 35.67 6.26012L30.99 1.58012C30.21 0.800117 28.95 0.800117 28.17 1.58012L24.51 5.24012L32.01 12.7401L35.67 9.08012V9.08012Z" fill="#585B63"/> +</svg> diff --git a/src/site/_includes/icons/event.svg b/src/site/_includes/icons/event.svg new file mode 100644 index 00000000000..d0c6dfea270 --- /dev/null +++ b/src/site/_includes/icons/event.svg @@ -0,0 +1,3 @@ +<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M16 2H15V0H13V2H5V0H3V2H2C0.89 2 0.00999999 2.9 0.00999999 4L0 18C0 19.1 0.89 20 2 20H16C17.1 20 18 19.1 18 18V4C18 2.9 17.1 2 16 2ZM16 18H2V8H16V18ZM16 6H2V4H16V6ZM6 12H4V10H6V12ZM10 12H8V10H10V12ZM14 12H12V10H14V12ZM6 16H4V14H6V16ZM10 16H8V14H10V16ZM14 16H12V14H14V16Z" /> +</svg> diff --git a/src/site/_includes/icons/featured.svg b/src/site/_includes/icons/featured.svg new file mode 100644 index 00000000000..cb081ca4997 --- /dev/null +++ b/src/site/_includes/icons/featured.svg @@ -0,0 +1,3 @@ +<svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M10 15.27L16.18 19L14.54 11.97L20 7.24L12.81 6.63L10 0L7.19 6.63L0 7.24L5.46 11.97L3.82 19L10 15.27Z" /> +</svg> diff --git a/src/site/_includes/icons/github.svg b/src/site/_includes/icons/github.svg new file mode 100644 index 00000000000..934c111cc04 --- /dev/null +++ b/src/site/_includes/icons/github.svg @@ -0,0 +1,3 @@ +<svg width="21" height="20" viewBox="0 0 21 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M10.1779 0C4.54977 0 0 4.58331 0 10.2535C0 14.786 2.9152 18.6226 6.95935 19.9805C7.46497 20.0826 7.65018 19.7599 7.65018 19.4885C7.65018 19.2508 7.63351 18.436 7.63351 17.587C4.80227 18.1983 4.21269 16.3647 4.21269 16.3647C3.75769 15.1764 3.08353 14.871 3.08353 14.871C2.15687 14.2429 3.15103 14.2429 3.15103 14.2429C4.17894 14.3108 4.71831 15.2954 4.71831 15.2954C5.6281 16.857 7.09414 16.4158 7.68393 16.1441C7.76809 15.482 8.03788 15.0237 8.32434 14.7691C6.06623 14.5314 3.6904 13.6487 3.6904 9.71017C3.6904 8.58976 4.09457 7.67309 4.73498 6.96018C4.63394 6.7056 4.27998 5.65289 4.83623 4.24394C4.83623 4.24394 5.6956 3.97228 7.6333 5.29644C8.4629 5.07199 9.31845 4.95782 10.1779 4.95685C11.0372 4.95685 11.9133 5.07581 12.7222 5.29644C14.6601 3.97228 15.5195 4.24394 15.5195 4.24394C16.0758 5.65289 15.7216 6.7056 15.6206 6.96018C16.2778 7.67309 16.6653 8.58976 16.6653 9.71017C16.6653 13.6487 14.2895 14.5143 12.0145 14.7691C12.3854 15.0916 12.7054 15.7026 12.7054 16.6703C12.7054 18.0453 12.6887 19.1489 12.6887 19.4883C12.6887 19.7599 12.8741 20.0826 13.3795 19.9808C17.4237 18.6224 20.3389 14.786 20.3389 10.2535C20.3555 4.58331 15.7891 0 10.1779 0Z" /> +</svg> diff --git a/src/site/_includes/icons/glitch.svg b/src/site/_includes/icons/glitch.svg new file mode 100644 index 00000000000..609014c2c58 --- /dev/null +++ b/src/site/_includes/icons/glitch.svg @@ -0,0 +1,3 @@ +<svg width="24" height="20" viewBox="0 0 24 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M10.9684 18.1769L10.9716 18.1843L10.9642 18.1839L10.9684 18.1769ZM10.9716 18.1843C11.1189 18.5178 11.1827 18.8823 11.1575 19.2461C10.9165 19.3047 10.6691 19.3326 10.4211 19.3294C9.74093 19.4503 9.04286 19.4256 8.37295 19.2569C7.0258 18.9713 6.40323 17.5335 6.40323 17.5335C6.40323 17.5335 6.41607 17.5207 6.4421 17.4988C6.40057 17.4861 6.3568 17.4823 6.3137 17.4877C5.65974 17.6145 4.99327 17.6649 4.32767 17.638C3.66485 17.638 1.04307 16.642 0.198067 15.5749C0.198067 15.5749 1.50982 15.2546 1.50982 14.9836C1.50982 14.7126 0.0110196 14.2122 0.0110196 14.2122C0.0110196 14.2122 -0.215935 12.9629 1.3901 11.716C2.22362 11.0164 3.16768 10.4603 4.18366 10.0704C3.34941 9.95936 0.99102 9.02031 0.197719 8.01844C0.197719 8.01844 1.50948 7.69814 1.50948 7.42711C1.50948 7.15608 0.0110196 6.65671 0.0110196 6.65671C0.0110196 6.65671 -0.215935 5.40742 1.3901 4.16056C2.99614 2.91369 4.19823 2.32132 5.54886 2.25192L7.35235 2.18251C7.35235 2.18251 8.52807 0.595215 9.14578 0.595215C9.4581 0.595215 13.9788 1.55648 14.3706 2.18286C14.5414 2.50792 14.8174 2.76545 15.1535 2.91335C15.2627 2.99511 15.2749 2.99667 15.4107 3.01401C15.5238 3.02846 15.7229 3.05388 16.1356 3.14585C17.2846 3.40229 17.7728 3.58005 18.1929 3.73304C18.6029 3.88232 18.9481 4.00802 19.7793 4.16021C20.1538 4.22875 21.2644 3.79694 22.2394 3.41782C23.0415 3.10592 23.7519 2.82968 23.8854 2.89704C24.0228 2.96644 24.1307 4.28514 23.5938 5.15617C23.3219 5.59742 23.4361 5.99788 23.5585 6.4272C23.6777 6.84538 23.8048 7.29095 23.5904 7.82827C23.324 8.49591 23.5714 9.05528 23.7562 9.47287C23.8727 9.73641 23.9643 9.94349 23.886 10.0857C23.777 10.2837 22.762 9.919 21.7581 9.55825C20.8992 9.24959 20.0484 8.94385 19.78 8.99601C19.6288 9.02555 19.3966 9.10518 19.0725 9.21636C18.281 9.48784 16.941 9.94745 14.8918 10.3251C14.9809 10.3698 15.0675 10.4191 15.1514 10.473C15.2606 10.5547 15.2727 10.5563 15.4085 10.5736C15.5217 10.5881 15.7207 10.6135 16.1335 10.7055C17.2825 10.9619 17.7707 11.1397 18.1908 11.2926C18.6008 11.4419 18.946 11.5676 19.7773 11.7198C20.1518 11.7884 21.2623 11.3565 22.2373 10.9774C23.0394 10.6655 23.7498 10.3893 23.8833 10.4566C24.0207 10.5261 24.1286 11.8447 23.5918 12.7158C23.3198 13.157 23.434 13.5575 23.5564 13.9868C23.6756 14.405 23.8027 14.8506 23.5883 15.3879C23.3219 16.0555 23.5694 16.6149 23.7541 17.0325C23.8706 17.296 23.9622 17.5031 23.884 17.6453C23.7749 17.8433 22.76 17.4786 21.7561 17.1179C20.8971 16.8092 20.0463 16.5035 19.778 16.5556C19.6265 16.5851 19.3941 16.665 19.0696 16.7766C18.1471 17.0937 16.4804 17.6668 13.8147 18.0634C12.8732 18.1962 11.921 18.2367 10.9716 18.1843ZM7.21958 11.8527L7.24387 11.8944L7.31328 12.0203L7.52635 12.4611C7.6376 12.7099 7.72352 12.9692 7.7828 13.2353C7.81094 13.364 7.82594 13.4953 7.82757 13.6271C7.81877 13.9935 7.75032 14.356 7.6249 14.7004L7.48366 15.0613L7.43786 15.1606L7.42259 15.1953C7.39167 15.2544 7.38371 15.3229 7.40024 15.3875C7.41677 15.4521 7.45662 15.5084 7.51212 15.5454C7.53919 15.5618 7.56941 15.5722 7.60079 15.5761C7.63218 15.58 7.66403 15.5773 7.69428 15.568C7.72453 15.5588 7.7525 15.5433 7.77636 15.5225C7.80022 15.5018 7.81944 15.4762 7.83277 15.4476L7.90773 15.2879L8.06597 14.8836C8.21182 14.4812 8.29049 14.0575 8.29883 13.6295C8.29738 13.4588 8.27843 13.2886 8.24226 13.1218C8.17557 12.8192 8.07837 12.5241 7.95215 12.241L7.71964 11.7615L7.61137 11.5692C7.59603 11.5416 7.57501 11.5176 7.5497 11.4987C7.5244 11.4798 7.49538 11.4665 7.46456 11.4597C7.43374 11.4528 7.40182 11.4526 7.3709 11.4589C7.33998 11.4653 7.31076 11.4782 7.28517 11.4967C7.2322 11.5375 7.19612 11.5964 7.18383 11.6622C7.17154 11.7279 7.1839 11.7959 7.21854 11.8531L7.21958 11.8527ZM7.24343 4.25113L7.21914 4.20879L7.21879 4.21226C7.18402 4.15506 7.17155 4.08704 7.18378 4.02123C7.19601 3.95541 7.23207 3.89641 7.28507 3.85552C7.31066 3.83703 7.33988 3.82417 7.3708 3.81779C7.40173 3.81141 7.43365 3.81165 7.46447 3.81851C7.49529 3.82536 7.52431 3.83866 7.54961 3.85754C7.57491 3.87643 7.59593 3.90045 7.61128 3.92805L7.71955 4.1203L7.95206 4.59989C8.07828 4.88291 8.17548 5.17801 8.24217 5.48064C8.27808 5.64683 8.29692 5.81624 8.29839 5.98626C8.29005 6.41425 8.21139 6.83795 8.06553 7.24041L7.90729 7.64469L7.83233 7.80432C7.819 7.833 7.79978 7.85855 7.77592 7.87931C7.75206 7.90007 7.72409 7.91557 7.69384 7.9248C7.66359 7.93403 7.63174 7.93679 7.60035 7.93289C7.56897 7.929 7.53875 7.91853 7.51168 7.90219C7.45618 7.86516 7.41633 7.80891 7.3998 7.74427C7.38327 7.67963 7.39123 7.61116 7.42215 7.55204L7.43742 7.51733L7.48322 7.41809L7.62446 7.05718C7.74988 6.71278 7.81833 6.35025 7.82713 5.98383C7.8255 5.85205 7.8105 5.72078 7.78236 5.59204C7.72308 5.32601 7.63716 5.06663 7.52591 4.81782L7.31284 4.3771L7.24343 4.25113ZM9.30864 4.11439L10.5121 4.17859L10.8959 4.20045L11.7552 4.25389C12.8022 4.34609 13.8434 4.49624 14.8739 4.70364C16.5028 5.05492 18.0843 5.59834 19.5851 6.32251L20.2604 6.62304C20.2926 6.63625 20.3273 6.64252 20.3621 6.64145C20.3969 6.64039 20.4311 6.632 20.4625 6.61685C20.4938 6.60169 20.5217 6.5801 20.5441 6.55349C20.5666 6.52687 20.5832 6.49582 20.5929 6.46237C20.619 6.39354 20.6188 6.3175 20.5924 6.2488C20.5659 6.1801 20.5151 6.12356 20.4496 6.09001L19.7732 5.78914C18.241 5.05043 16.6264 4.4964 14.9634 4.13868C13.9137 3.92742 12.8531 3.77473 11.7864 3.6813L10.9223 3.62751L10.5371 3.60565L9.33189 3.54145L8.78359 3.51369C8.73559 3.51605 8.68896 3.53048 8.64803 3.55565C8.60709 3.58081 8.57316 3.6159 8.54939 3.65767C8.52562 3.69943 8.51277 3.74652 8.51204 3.79457C8.5113 3.84262 8.5227 3.89007 8.54518 3.93255L8.566 3.98009L8.62569 4.12064L8.80892 4.6089C8.89742 4.86534 8.96746 5.12779 9.01852 5.39422L9.05323 5.659C9.05866 6.06308 9.00821 6.46597 8.90331 6.85624L8.75687 7.44688L8.54518 8.17806L8.47577 8.39808L8.45634 8.45707L8.4494 8.47685C8.4244 8.54601 8.42584 8.62196 8.45345 8.69012C8.48106 8.75828 8.53288 8.81383 8.59897 8.84609C8.63151 8.85861 8.66633 8.86416 8.70115 8.86237C8.73598 8.86057 8.77004 8.85148 8.80112 8.83567C8.83221 8.81987 8.85962 8.79771 8.88159 8.77063C8.90356 8.74355 8.91959 8.71215 8.92864 8.67847L8.93628 8.65592L8.9571 8.59345L9.02928 8.3658L9.24791 7.61171L9.4006 6.9954C9.52332 6.53883 9.57793 6.06664 9.56266 5.59411C9.55248 5.49231 9.53744 5.38705 9.51755 5.27831C9.46106 4.98197 9.38336 4.69006 9.28504 4.40485L9.17815 4.10641L9.30864 4.11439ZM10.5118 11.8222L9.30829 11.758L9.17815 11.7507L9.28504 12.0491C9.38335 12.3344 9.46106 12.6263 9.51754 12.9226C9.53744 13.0309 9.55248 13.1359 9.56266 13.2377C9.57793 13.7102 9.52332 14.1824 9.4006 14.639L9.24791 15.2553L9.02928 16.0094L8.9571 16.2371L8.93628 16.2995L8.92864 16.3221C8.91959 16.3557 8.90356 16.3871 8.88159 16.4142C8.85962 16.4413 8.83221 16.4635 8.80112 16.4793C8.77004 16.4951 8.73598 16.5042 8.70115 16.506C8.66633 16.5078 8.63151 16.5022 8.59897 16.4897C8.53288 16.4574 8.48106 16.4019 8.45345 16.3337C8.42584 16.2656 8.4244 16.1896 8.4494 16.1205L8.45634 16.1007L8.47577 16.0417L8.54518 15.8217L8.75686 15.0905L8.90331 14.4998C9.00821 14.1096 9.05865 13.7067 9.05322 13.3026L9.01852 13.0378C8.96746 12.7714 8.89742 12.5089 8.80892 12.2525L8.62569 11.7642L8.566 11.6237L8.54518 11.5761C8.5227 11.5337 8.5113 11.4862 8.51204 11.4382C8.51277 11.3901 8.52562 11.343 8.54939 11.3013C8.57316 11.2595 8.60709 11.2244 8.64803 11.1992C8.68896 11.1741 8.73559 11.1596 8.78359 11.1573L9.33189 11.185L10.5371 11.2492L10.9223 11.2711L11.7864 11.3249C12.8531 11.4183 13.9137 11.571 14.9634 11.7823C16.6264 12.14 18.241 12.694 19.7732 13.4327L20.4492 13.7336C20.5147 13.7672 20.5656 13.8237 20.592 13.8924C20.6185 13.9611 20.6186 14.0371 20.5925 14.106C20.5829 14.1394 20.5662 14.1705 20.5438 14.1971C20.5213 14.2237 20.4935 14.2453 20.4621 14.2604C20.4308 14.2756 20.3966 14.284 20.3618 14.2851C20.327 14.2861 20.2923 14.2798 20.2601 14.2666L19.5848 13.9661C18.084 13.2419 16.5025 12.6985 14.8735 12.3472C13.8431 12.1398 12.8019 11.9897 11.7548 11.8975L10.8956 11.8441L10.5118 11.8222ZM3.05566 5.42375V5.41091C3.06214 5.19043 3.13345 4.97675 3.26067 4.79657C3.38789 4.61638 3.56539 4.47768 3.77098 4.39779C3.97658 4.3179 4.20115 4.30037 4.41666 4.34738C4.63216 4.39439 4.82903 4.50387 4.98268 4.66212C5.13632 4.82038 5.23993 5.0204 5.28055 5.2372C5.32117 5.454 5.297 5.67796 5.21107 5.8811C5.12514 6.08425 4.98125 6.25756 4.79738 6.3794C4.61352 6.50124 4.39782 6.5662 4.17725 6.56616C3.90333 6.58533 3.633 6.49496 3.42568 6.31491C3.21836 6.13485 3.09101 5.87985 3.07163 5.60594C3.09644 5.81074 3.19766 5.99862 3.35504 6.132C3.51242 6.26538 3.71435 6.33443 3.92045 6.32532C4.09721 6.33054 4.27152 6.28304 4.42119 6.18886C4.57085 6.09469 4.68911 5.9581 4.76088 5.79649C4.83266 5.63488 4.85472 5.45556 4.82424 5.28138C4.79377 5.10719 4.71214 4.94601 4.58976 4.81837C4.46738 4.69073 4.30977 4.6024 4.13702 4.56464C3.96427 4.52687 3.78419 4.54137 3.6197 4.60629C3.45522 4.67121 3.31378 4.78362 3.2134 4.92919C3.11301 5.07477 3.05788 5.24693 3.05566 5.42375ZM3.05566 13.0215V13.034C3.05795 12.8572 3.11279 12.6851 3.21322 12.5396C3.31364 12.394 3.4551 12.2817 3.61959 12.2168C3.78408 12.1519 3.96415 12.1375 4.13688 12.1753C4.30961 12.2131 4.46718 12.3015 4.58953 12.4291C4.71188 12.5568 4.79347 12.7179 4.82391 12.8921C4.85436 13.0663 4.83229 13.2456 4.7605 13.4072C4.68871 13.5688 4.57046 13.7053 4.4208 13.7995C4.27114 13.8937 4.09685 13.9412 3.92011 13.9359C3.71401 13.945 3.51207 13.876 3.35469 13.7426C3.19731 13.6092 3.09609 13.4214 3.07128 13.2166C3.09066 13.4905 3.21806 13.7456 3.42545 13.9257C3.63285 14.1057 3.90327 14.196 4.17725 14.1768C4.39782 14.1768 4.61352 14.1119 4.79738 13.99C4.98125 13.8682 5.12514 13.6949 5.21107 13.4917C5.297 13.2886 5.32117 13.0646 5.28055 12.8478C5.23993 12.631 5.13632 12.431 4.98268 12.2727C4.82903 12.1145 4.63216 12.005 4.41666 11.958C4.20115 11.911 3.97658 11.9285 3.77098 12.0084C3.56539 12.0883 3.38789 12.227 3.26067 12.4072C3.13345 12.5874 3.06214 12.8011 3.05566 13.0215ZM3.50421 6.03104C3.66214 6.03104 3.79016 5.90301 3.79016 5.74509C3.79016 5.58716 3.66214 5.45914 3.50421 5.45914C3.34629 5.45914 3.21826 5.58716 3.21826 5.74509C3.21826 5.90301 3.34629 6.03104 3.50421 6.03104ZM3.79016 13.356C3.79016 13.514 3.66214 13.642 3.50421 13.642C3.34629 13.642 3.21826 13.514 3.21826 13.356C3.21826 13.1981 3.34629 13.0701 3.50421 13.0701C3.66214 13.0701 3.79016 13.1981 3.79016 13.356Z" /> +</svg> diff --git a/src/site/_includes/icons/language.svg b/src/site/_includes/icons/language.svg new file mode 100644 index 00000000000..34ae382f49d --- /dev/null +++ b/src/site/_includes/icons/language.svg @@ -0,0 +1,3 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path d="M10 20C8.63333 20 7.34167 19.7373 6.125 19.212C4.90833 18.6873 3.846 17.9707 2.938 17.062C2.02933 16.154 1.31267 15.0917 0.788 13.875C0.262667 12.6583 0 11.3667 0 10C0 8.61667 0.262667 7.321 0.788 6.113C1.31267 4.90433 2.02933 3.846 2.938 2.938C3.846 2.02933 4.90833 1.31233 6.125 0.787C7.34167 0.262333 8.63333 0 10 0C11.3833 0 12.679 0.262333 13.887 0.787C15.0957 1.31233 16.154 2.02933 17.062 2.938C17.9707 3.846 18.6873 4.90433 19.212 6.113C19.7373 7.321 20 8.61667 20 10C20 11.3667 19.7373 12.6583 19.212 13.875C18.6873 15.0917 17.9707 16.154 17.062 17.062C16.154 17.9707 15.0957 18.6873 13.887 19.212C12.679 19.7373 11.3833 20 10 20ZM10 17.95C10.4333 17.35 10.8083 16.725 11.125 16.075C11.4417 15.425 11.7 14.7333 11.9 14H8.1C8.3 14.7333 8.55833 15.425 8.875 16.075C9.19167 16.725 9.56667 17.35 10 17.95ZM7.4 17.55C7.1 17 6.83767 16.429 6.613 15.837C6.38767 15.2457 6.2 14.6333 6.05 14H3.1C3.58333 14.8333 4.18733 15.5583 4.912 16.175C5.63733 16.7917 6.46667 17.25 7.4 17.55ZM12.6 17.55C13.5333 17.25 14.3623 16.7917 15.087 16.175C15.8123 15.5583 16.4167 14.8333 16.9 14H13.95C13.8 14.6333 13.6127 15.2457 13.388 15.837C13.1627 16.429 12.9 17 12.6 17.55ZM2.25 12H5.65C5.6 11.6667 5.56233 11.3373 5.537 11.012C5.51233 10.6873 5.5 10.35 5.5 10C5.5 9.65 5.51233 9.31267 5.537 8.988C5.56233 8.66267 5.6 8.33333 5.65 8H2.25C2.16667 8.33333 2.104 8.66267 2.062 8.988C2.02067 9.31267 2 9.65 2 10C2 10.35 2.02067 10.6873 2.062 11.012C2.104 11.3373 2.16667 11.6667 2.25 12ZM7.65 12H12.35C12.4 11.6667 12.4377 11.3373 12.463 11.012C12.4877 10.6873 12.5 10.35 12.5 10C12.5 9.65 12.4877 9.31267 12.463 8.988C12.4377 8.66267 12.4 8.33333 12.35 8H7.65C7.6 8.33333 7.56267 8.66267 7.538 8.988C7.51267 9.31267 7.5 9.65 7.5 10C7.5 10.35 7.51267 10.6873 7.538 11.012C7.56267 11.3373 7.6 11.6667 7.65 12ZM14.35 12H17.75C17.8333 11.6667 17.896 11.3373 17.938 11.012C17.9793 10.6873 18 10.35 18 10C18 9.65 17.9793 9.31267 17.938 8.988C17.896 8.66267 17.8333 8.33333 17.75 8H14.35C14.4 8.33333 14.4373 8.66267 14.462 8.988C14.4873 9.31267 14.5 9.65 14.5 10C14.5 10.35 14.4873 10.6873 14.462 11.012C14.4373 11.3373 14.4 11.6667 14.35 12ZM13.95 6H16.9C16.4167 5.16667 15.8123 4.44167 15.087 3.825C14.3623 3.20833 13.5333 2.75 12.6 2.45C12.9 3 13.1627 3.57067 13.388 4.162C13.6127 4.754 13.8 5.36667 13.95 6ZM8.1 6H11.9C11.7 5.26667 11.4417 4.575 11.125 3.925C10.8083 3.275 10.4333 2.65 10 2.05C9.56667 2.65 9.19167 3.275 8.875 3.925C8.55833 4.575 8.3 5.26667 8.1 6ZM3.1 6H6.05C6.2 5.36667 6.38767 4.754 6.613 4.162C6.83767 3.57067 7.1 3 7.4 2.45C6.46667 2.75 5.63733 3.20833 4.912 3.825C4.18733 4.44167 3.58333 5.16667 3.1 6Z" /> +</svg> diff --git a/src/site/_includes/icons/latest.svg b/src/site/_includes/icons/latest.svg new file mode 100644 index 00000000000..613905b665d --- /dev/null +++ b/src/site/_includes/icons/latest.svg @@ -0,0 +1,3 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path d="M18 11V13H22V11H18ZM16 17.61C16.96 18.32 18.21 19.26 19.2 20C19.6 19.47 20 18.93 20.4 18.4C19.41 17.66 18.16 16.72 17.2 16C16.8 16.54 16.4 17.08 16 17.61ZM20.4 5.6C20 5.07 19.6 4.53 19.2 4C18.21 4.74 16.96 5.68 16 6.4C16.4 6.93 16.8 7.47 17.2 8C18.16 7.28 19.41 6.35 20.4 5.6ZM4 9C2.9 9 2 9.9 2 11V13C2 14.1 2.9 15 4 15H5V19H7V15H8L13 18V6L8 9H4ZM15.5 12C15.5 10.67 14.92 9.47 14 8.65V15.34C14.92 14.53 15.5 13.33 15.5 12Z" /> +</svg> diff --git a/src/site/_includes/icons/linkedin.svg b/src/site/_includes/icons/linkedin.svg new file mode 100644 index 00000000000..bf211ed3f6c --- /dev/null +++ b/src/site/_includes/icons/linkedin.svg @@ -0,0 +1,3 @@ +<svg width="18" height="18" viewBox="0 0 18 18" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path d="M18 1.32353V16.6765C18 17.0275 17.8606 17.3641 17.6123 17.6123C17.3641 17.8606 17.0275 18 16.6765 18H1.32353C0.972508 18 0.635863 17.8606 0.387653 17.6123C0.139443 17.3641 0 17.0275 0 16.6765L0 1.32353C0 0.972508 0.139443 0.635863 0.387653 0.387653C0.635863 0.139443 0.972508 0 1.32353 0L16.6765 0C17.0275 0 17.3641 0.139443 17.6123 0.387653C17.8606 0.635863 18 0.972508 18 1.32353ZM5.29412 6.88235H2.64706V15.3529H5.29412V6.88235ZM5.53235 3.97059C5.53375 3.77036 5.49569 3.57182 5.42035 3.3863C5.34502 3.20078 5.23387 3.03191 5.09328 2.88935C4.95268 2.74678 4.78537 2.6333 4.60091 2.5554C4.41646 2.47749 4.21846 2.43668 4.01824 2.43529H3.97059C3.5634 2.43529 3.17289 2.59705 2.88497 2.88497C2.59705 3.17289 2.43529 3.5634 2.43529 3.97059C2.43529 4.37777 2.59705 4.76828 2.88497 5.05621C3.17289 5.34413 3.5634 5.50588 3.97059 5.50588C4.17083 5.51081 4.37008 5.47623 4.55696 5.40413C4.74383 5.33202 4.91467 5.2238 5.0597 5.08565C5.20474 4.94749 5.32113 4.78212 5.40223 4.59897C5.48333 4.41582 5.52755 4.21848 5.53235 4.01824V3.97059ZM15.3529 10.2071C15.3529 7.66059 13.7329 6.67059 12.1235 6.67059C11.5966 6.6442 11.0719 6.75644 10.6019 6.9961C10.1318 7.23577 9.73285 7.59448 9.44471 8.03647H9.37059V6.88235H6.88235V15.3529H9.52941V10.8476C9.49115 10.3862 9.63649 9.92835 9.93388 9.57347C10.2313 9.2186 10.6567 8.9954 11.1176 8.95235H11.2182C12.06 8.95235 12.6847 9.48177 12.6847 10.8159V15.3529H15.3318L15.3529 10.2071Z" /> +</svg> diff --git a/src/site/_includes/icons/mastodon.svg b/src/site/_includes/icons/mastodon.svg new file mode 100644 index 00000000000..6157b466445 --- /dev/null +++ b/src/site/_includes/icons/mastodon.svg @@ -0,0 +1,3 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M13.9683 15.2439C16.4742 14.9446 18.6561 13.4006 18.9304 11.9898C19.3625 9.76737 19.3268 6.56632 19.3268 6.56632C19.3268 2.22771 16.4842 0.955994 16.4842 0.955994C15.051 0.297725 12.5899 0.0209043 10.033 0H9.97018C7.41328 0.0209043 4.95379 0.297725 3.52045 0.955994C3.52045 0.955994 0.677788 2.22771 0.677788 6.56632C0.677788 6.82934 0.676429 7.10599 0.675013 7.39399C0.671083 8.19382 0.666722 9.08121 0.689857 10.0074C0.793085 14.2504 1.46773 18.432 5.39063 19.4703C7.19939 19.9491 8.75234 20.0493 10.003 19.9805C12.2712 19.8548 13.5444 19.1711 13.5444 19.1711L13.4696 17.5254C13.4696 17.5254 11.8488 18.0365 10.0285 17.9742C8.22499 17.9124 6.32109 17.7797 6.0294 15.5655C6.00246 15.371 5.98899 15.163 5.98899 14.9446C5.98899 14.9446 7.75939 15.3774 10.003 15.4802C11.375 15.5431 12.6616 15.3998 13.9683 15.2439ZM15.9738 12.1562V6.90289C15.9738 5.82923 15.7004 4.97603 15.1514 4.34481C14.5851 3.71359 13.8435 3.39 12.9231 3.39C11.8579 3.39 11.0514 3.79936 10.5182 4.61818L9.9997 5.48722L9.4813 4.61818C8.94802 3.79936 8.14148 3.39 7.07644 3.39C6.1559 3.39 5.41433 3.71359 4.84809 4.34481C4.29897 4.97603 4.0256 5.82923 4.0256 6.90289V12.1562H6.10687V7.0573C6.10687 5.98245 6.55911 5.4369 7.46371 5.4369C8.46388 5.4369 8.96526 6.08407 8.96526 7.36375V10.1547H11.0342V7.36375C11.0342 6.08407 11.5355 5.4369 12.5357 5.4369C13.4403 5.4369 13.8925 5.98245 13.8925 7.0573V12.1562H15.9738Z" /> +</svg> diff --git a/src/site/_includes/icons/news.svg b/src/site/_includes/icons/news.svg new file mode 100644 index 00000000000..2f853530e99 --- /dev/null +++ b/src/site/_includes/icons/news.svg @@ -0,0 +1,7 @@ +<svg width="22" height="21" viewBox="0 0 22 21" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M0 21L14 16L5 7L0 21ZM10.35 15.18L3.3 17.7L5.82 10.65L10.35 15.18Z" /> +<path d="M12.5297 11.5296L18.1197 5.93965C18.6097 5.44965 19.3997 5.44965 19.8897 5.93965L20.4797 6.52965L21.5397 5.46965L20.9497 4.87965C19.8797 3.80965 18.1297 3.80965 17.0597 4.87965L11.4697 10.4696L12.5297 11.5296Z"/> +<path d="M8.05973 5.87996L7.46973 6.46996L8.52973 7.52996L9.11973 6.93996C10.1897 5.86996 10.1897 4.11996 9.11973 3.04996L8.52973 2.45996L7.46973 3.52996L8.05973 4.11996C8.53973 4.59996 8.53973 5.39996 8.05973 5.87996Z"/> +<path d="M15.0597 10.8796L13.4697 12.4696L14.5297 13.5296L16.1197 11.9396C16.6097 11.4496 17.3997 11.4496 17.8897 11.9396L19.4997 13.5496L20.5597 12.4896L18.9497 10.8796C17.8697 9.80965 16.1297 9.80965 15.0597 10.8796Z"/> +<path d="M13.0597 4.87996L9.46973 8.46996L10.5297 9.52996L14.1197 5.93996C15.1897 4.86996 15.1897 3.11996 14.1197 2.04996L12.5297 0.459961L11.4697 1.51996L13.0597 3.10996C13.5397 3.59996 13.5397 4.39996 13.0597 4.87996Z"/> +</svg> diff --git a/src/site/_includes/icons/pattern.svg b/src/site/_includes/icons/pattern.svg new file mode 100644 index 00000000000..3f26f4684b6 --- /dev/null +++ b/src/site/_includes/icons/pattern.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M0 2C0 0.9 0.9 0 2 0C3.1 0 4 0.9 4 2C4 3.1 3.1 4 2 4C0.9 4 0 3.1 0 2ZM2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10ZM8 4C9.1 4 10 3.1 10 2C10 0.9 9.1 0 8 0C6.9 0 6 0.9 6 2C6 3.1 6.9 4 8 4ZM14 6C12.9 6 12 6.9 12 8C12 9.1 12.9 10 14 10C15.1 10 16 9.1 16 8C16 6.9 15.1 6 14 6ZM13.98 12C13.24 12 12.61 12.4 12.26 13H9.72C9.38 12.4 8.74 12 8 12C7.26 12 6.63 12.4 6.28 13H4.41L7.48 9.93C7.65 9.97 7.82 10 8 10C9.1 10 10 9.1 10 8C10 7.82 9.97 7.65 9.93 7.49L13.49 3.93C13.65 3.97 13.82 4 14 4C15.1 4 16 3.1 16 2C16 0.9 15.1 0 14 0C12.9 0 12 0.9 12 2C12 2.18 12.03 2.35 12.07 2.51L8.51 6.07C8.35 6.03 8.18 6 8 6C6.9 6 6 6.9 6 8C6 8.18 6.03 8.35 6.07 8.51L2.51 12.07C2.35 12.03 2.18 12 2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C2.74 16 3.37 15.6 3.72 15H6.29C6.63 15.6 7.27 16 8.01 16C8.75 16 9.38 15.6 9.73 15H12.28C12.62 15.6 13.26 16 14 16C15.1 16 16 15.1 16 14C15.98 12.9 15.08 12 13.98 12Z" /> +</svg> diff --git a/src/site/_includes/icons/podcast.svg b/src/site/_includes/icons/podcast.svg new file mode 100644 index 00000000000..7cef6363502 --- /dev/null +++ b/src/site/_includes/icons/podcast.svg @@ -0,0 +1,3 @@ +<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M12 10C12 10.74 11.6 11.38 11 11.72V20H9V11.72C8.4 11.37 8 10.74 8 10C8 8.9 8.9 8 10 8C11.1 8 12 8.9 12 10ZM10 4C6.69 4 4 6.69 4 10C4 11.74 4.75 13.31 5.94 14.4L7.36 12.98C6.53 12.25 6 11.19 6 10C6 7.79 7.79 6 10 6C12.21 6 14 7.79 14 10C14 11.19 13.47 12.25 12.64 12.98L14.06 14.4C15.25 13.31 16 11.74 16 10C16 6.69 13.31 4 10 4ZM10 0C4.48 0 0 4.48 0 10C0 12.85 1.2 15.41 3.11 17.24L4.53 15.82C2.98 14.36 2 12.29 2 10C2 5.59 5.59 2 10 2C14.41 2 18 5.59 18 10C18 12.29 17.02 14.36 15.47 15.82L16.89 17.24C18.8 15.41 20 12.85 20 10C20 4.48 15.52 0 10 0Z" /> +</svg> diff --git a/src/site/_includes/icons/rss.svg b/src/site/_includes/icons/rss.svg new file mode 100644 index 00000000000..d066ce2e6ca --- /dev/null +++ b/src/site/_includes/icons/rss.svg @@ -0,0 +1,3 @@ +<svg width="17" height="17" viewBox="0 0 17 17" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path d="M2 17C1.45 17 0.979167 16.8042 0.5875 16.4125C0.195833 16.0208 0 15.55 0 15C0 14.45 0.195833 13.9792 0.5875 13.5875C0.979167 13.1958 1.45 13 2 13C2.55 13 3.02083 13.1958 3.4125 13.5875C3.80417 13.9792 4 14.45 4 15C4 15.55 3.80417 16.0208 3.4125 16.4125C3.02083 16.8042 2.55 17 2 17ZM14 17C14 15.0667 13.6333 13.2542 12.9 11.5625C12.1667 9.87083 11.1625 8.3875 9.8875 7.1125C8.6125 5.8375 7.12917 4.83333 5.4375 4.1C3.74583 3.36667 1.93333 3 0 3V0C2.35 0 4.55833 0.445833 6.625 1.3375C8.69167 2.22917 10.4917 3.44167 12.025 4.975C13.5583 6.50833 14.7708 8.30833 15.6625 10.375C16.5542 12.4417 17 14.65 17 17H14ZM8 17C8 14.7833 7.22083 12.8958 5.6625 11.3375C4.10417 9.77917 2.21667 9 0 9V6C1.53333 6 2.96667 6.2875 4.3 6.8625C5.63333 7.4375 6.79583 8.22083 7.7875 9.2125C8.77917 10.2042 9.5625 11.3667 10.1375 12.7C10.7125 14.0333 11 15.4667 11 17H8Z" /> +</svg> diff --git a/src/site/_includes/icons/spotted.svg b/src/site/_includes/icons/spotted.svg new file mode 100644 index 00000000000..46680bbafc7 --- /dev/null +++ b/src/site/_includes/icons/spotted.svg @@ -0,0 +1,3 @@ +<svg width="41" height="40" viewBox="0 0 41 40" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path fill-rule="evenodd" clip-rule="evenodd" d="M20.75 0C9.71 0 0.75 8.96 0.75 20C0.75 31.04 9.71 40 20.75 40C31.79 40 40.75 31.04 40.75 20C40.75 8.96 31.79 0 20.75 0ZM18.75 30V26H22.75V30H18.75ZM18.75 10V22H22.75V10H18.75Z" fill="#585B63"/> +</svg> diff --git a/src/site/_includes/icons/twitter.svg b/src/site/_includes/icons/twitter.svg index b082fa7078c..22facf9ca33 100644 --- a/src/site/_includes/icons/twitter.svg +++ b/src/site/_includes/icons/twitter.svg @@ -1,4 +1,3 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"> - <path d="M350 400H50c-27.6 0-50-22.4-50-50V50C0 22.4 22.4 0 50 0h300c27.6 0 50 22.4 50 50v300c0 27.6-22.4 50-50 50z" fill="currentColor"/> - <path d="M153.6 301.6c94.3 0 145.9-78.2 145.9-145.9 0-2.2 0-4.4-.1-6.6 10-7.2 18.7-16.3 25.6-26.6-9.2 4.1-19.1 6.8-29.5 8.1 10.6-6.3 18.7-16.4 22.6-28.4-9.9 5.9-20.9 10.1-32.6 12.4-9.4-10-22.7-16.2-37.4-16.2-28.3 0-51.3 23-51.3 51.3 0 4 .5 7.9 1.3 11.7-42.6-2.1-80.4-22.6-105.7-53.6-4.4 7.6-6.9 16.4-6.9 25.8 0 17.8 9.1 33.5 22.8 42.7-8.4-.3-16.3-2.6-23.2-6.4v.7c0 24.8 17.7 45.6 41.1 50.3-4.3 1.2-8.8 1.8-13.5 1.8-3.3 0-6.5-.3-9.6-.9 6.5 20.4 25.5 35.2 47.9 35.6-17.6 13.8-39.7 22-63.7 22-4.1 0-8.2-.2-12.2-.7 22.6 14.4 49.6 22.9 78.5 22.9" fill="#fff"/> +<svg width="20" height="18" viewBox="0 0 20 18" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> +<path d="M17.9525 4.9201C17.9647 5.09642 17.9647 5.27273 17.9647 5.45067C17.9647 10.8726 13.8371 17.1257 6.28966 17.1257V17.1224C4.06013 17.1257 1.8769 16.487 0 15.2829C0.324193 15.3219 0.65001 15.3414 0.97664 15.3422C2.82429 15.3438 4.61913 14.7239 6.07272 13.5823C4.31688 13.549 2.77717 12.4042 2.23928 10.7328C2.85436 10.8514 3.48812 10.8271 4.09181 10.6621C2.17753 10.2754 0.800325 8.59347 0.800325 6.64019C0.800325 6.62232 0.800325 6.60525 0.800325 6.58819C1.37071 6.90588 2.00934 7.0822 2.6626 7.1017C0.859638 5.89674 0.30388 3.49821 1.39265 1.62293C3.47593 4.1864 6.54967 5.7448 9.84928 5.90974C9.51859 4.4846 9.97034 2.9912 11.0364 1.98937C12.689 0.435846 15.2882 0.515472 16.8418 2.16731C17.7607 1.98612 18.6415 1.64893 19.4475 1.17117C19.1412 2.121 18.5001 2.92782 17.6437 3.44052C18.457 3.34464 19.2517 3.12689 20 2.79457C19.4491 3.62008 18.7552 4.33916 17.9525 4.9201Z" /> </svg> diff --git a/src/site/_includes/icons/update.svg b/src/site/_includes/icons/update.svg new file mode 100644 index 00000000000..f8554b84641 --- /dev/null +++ b/src/site/_includes/icons/update.svg @@ -0,0 +1,3 @@ +<svg viewBox="0 0 18 19" xmlns="http://www.w3.org/2000/svg"> + <path d="M8 5.5V10.5L12.25 13.02L13.02 11.74L9.5 9.65V5.5H8ZM18 7.5V0.5L15.36 3.14C13.74 1.51 11.49 0.5 9 0.5C4.03 0.5 0 4.53 0 9.5C0 14.47 4.03 18.5 9 18.5C13.97 18.5 18 14.47 18 9.5H16C16 13.36 12.86 16.5 9 16.5C5.14 16.5 2 13.36 2 9.5C2 5.64 5.14 2.5 9 2.5C10.93 2.5 12.68 3.29 13.95 4.55L11 7.5H18Z" fill="currentColor"/> +</svg> diff --git a/src/site/_includes/index-page.njk b/src/site/_includes/index-page.njk index 33a75820bbe..d9c13786ca8 100644 --- a/src/site/_includes/index-page.njk +++ b/src/site/_includes/index-page.njk @@ -27,6 +27,6 @@ eleventyComputed: {# Elements end #} <div class="wrapper gap-top-size-3"> - {% include "partials/pagination-next.njk" %} + {% include "partials/pagination.njk" %} </div> </div> diff --git a/src/site/_includes/item-page.njk b/src/site/_includes/item-page.njk index 18d060b64fa..577c1ebc774 100644 --- a/src/site/_includes/item-page.njk +++ b/src/site/_includes/item-page.njk @@ -1,66 +1,105 @@ --- -layout: default-next +layout: default algolia_priority: 0.9 eleventyComputed: noindex: "{{ paged.index > 0 }}" --- <div class="landing-page"> {# Hero starts #} - <header class="region bg-mid-bg"> + <header class="region bg-mid-bg author-profile"> <div class="wrapper"> - <div class="headline all-center flow"> - {% if paged.data.hero and showHero %} - {% if imageType == 'round' %} - <div class="avatar gap-inline-auto" data-size="large"> + <div class="headline"> + <div class="switcher flex-align-center author-profile__name"> + {% if paged.data.hero and showHero %} + {% if imageType == 'round' %} + <div class="avatar gap-inline-auto" data-size="medium"> + {% Img + src=paged.data.hero, + alt=renderData.title or title, + height="120", + width="120", + fetchpriority="high" + %} + </div> + {% else %} {% Img src=paged.data.hero, alt=renderData.title or title, - height="192", - width="192", - sizes="(min-width: 481px) 192px, 128px", - options={minWidth: 128} + height="120", + width="120", + fetchpriority="high" %} - </div> - {% else %} - {% Img - src=paged.data.hero, - alt=renderData.title or title, - height="192", - width="192", - sizes="(min-width: 481px) 192px, 128px", - options={minWidth: 128} - %} + {% endif %} {% endif %} - {% endif %} + <div class="flow"> + <h1 class="headline__title">{{ renderData.title or title }}</h1> + <p>{{ renderData.description | md | safe or description | md | safe }}</p> + </div> + </div> - <h1 class="headline__title">{{ renderData.title or title }}</h1> - <p>{{ renderData.description | md | safe or description | md | safe }}</p> + <div class="author-profile__detail"> + {% from 'macros/icon.njk' import icon, svg with context %} + <div class="cluster author-profile__socials flex-justify-left"> + {% if paged.homepage %} + <a href="{{ paged.homepage }}" target="_blank"> + {{ icon('language') }} + </a> + {% endif %} + {% if paged.linkedin %} + <a href="{{ paged.linkedin }}" target="_blank"> + {{ icon('linkedin') }} + </a> + {% endif %} + {% if paged.mastodon %} + <a href="{{ paged.mastodon }}" target="_blank"> + {{ icon('mastodon') }} + </a> + {% endif %} + {% if paged.dcc %} + <a href="https://developer.chrome.com/authors/{{ paged.dcc }}" target="_blank"> + {{ icon('dcc') }} + </a> + {% endif %} + {% if paged.github %} + <a href="https://github.com/{{ paged.github }}" target="_blank"> + {{ icon('github') }} + </a> + {% endif %} + {% if paged.glitch %} + <a href="https://glitch.com/@{{ paged.glitch }}" target="_blank"> + {{ icon('glitch') }} + </a> + {% endif %} + {% if paged.twitter %} + <a href="https://twitter.com/{{ paged.twitter }}" target="_blank"> + {{ icon('twitter') }} + </a> + {% endif %} + {% if renderData.rss %} + <a href="{{ renderData.rss }}" target="_blank"> + {{ icon('rss') }} + </a> + {% endif %} + </div> - <div class="cluster flex-justify-center"> - {% if paged.homepage %} - <a href="{{ paged.homepage }}" target="_blank"> - <img src="/images/icons/language.svg" alt="Homepage" width="32" height="32"> - </a> - {% endif %} - {% if paged.twitter %} - <a href="https://twitter.com/{{ paged.twitter }}" target="_blank"> - <img src="/images/icons/twitter.svg" alt="Twitter" width="32" height="32"> - </a> - {% endif %} - {% if paged.github %} - <a href="https://github.com/{{ paged.github }}" target="_blank"> - <img src="/images/icons/github.svg" alt="GitHub" width="32" height="32"> - </a> - {% endif %} - {% if paged.glitch %} - <a href="https://glitch.com/@{{ paged.glitch }}" target="_blank"> - <img src="/images/icons/glitch.svg" alt="Glitch" width="32" height="32"> - </a> - {% endif %} - {% if renderData.rss %} - <a href="{{ renderData.rss }}" target="_blank"> - <img src="/images/icons/rss.svg" alt="RSS Feed" width="32" height="32"> - </a> + {% macro renderBio(bio) %} + {% if bio is string %} + <p class="gap-top-size-1">{{ bio }}</p> + {% else %} + {% for paragraph in bio %} + <p class="gap-top-size-1">{{ paragraph }}</p> + {% endfor %} + {% endif %} + {% endmacro %} + + {% set bio = renderData.bio | i18n(locale, true) %} + {% if bio %} + {% Details %} + {% DetailsSummary %} Bio {% endDetailsSummary %} + {{ renderBio(bio) }} + {% endDetails %} + + <div class="author-profile__bio"> {{ renderBio(bio) }} </div> {% endif %} </div> </div> @@ -68,7 +107,7 @@ eleventyComputed: </header> {# Hero ends #} - {% include 'partials/paged-next.njk' %} + {% include 'partials/paged.njk' %} {% if path %} <div class="region"> diff --git a/src/site/_includes/landing-page.njk b/src/site/_includes/landing-page.njk index 217946e8447..73f9acaae9f 100644 --- a/src/site/_includes/landing-page.njk +++ b/src/site/_includes/landing-page.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default --- <div class="landing-page"> {# Hero starts #} diff --git a/src/site/_includes/learn-page.njk b/src/site/_includes/learn-page.njk index 58190eefb6a..d8aa753e9ab 100644 --- a/src/site/_includes/learn-page.njk +++ b/src/site/_includes/learn-page.njk @@ -1,9 +1,8 @@ --- -layout: default-next +layout: default title: Learn description: | - Learn best practices for the modern web and hone your skills with hands-on - codelabs. + Explore our growing collection of courses on key web design and development subjects. An industry expert has written each course, helped by members of the Chrome team. Follow the modules sequentially, or dip into the topics you most want to learn about. pageScripts: - '/js/learn.js' --- @@ -11,7 +10,7 @@ pageScripts: <div class="learn wide-card-index"> {# Hero starts #} - <header class="region"> + <header class="region bg-mid-bg learn__hero"> <div class="wrapper"> <div class="headline all-center flow"> <h1 class="headline__title">{{ title }}</h1> @@ -22,58 +21,29 @@ pageScripts: {# Hero ends #} {# Courses start #} - <div class="wrapper"> - <h2 id="{{ 'i18n.learn.courses' | i18n(locale) | slug }}" class="text-size-3">{{ 'i18n.learn.courses' | i18n(locale) }}</h2> - </div> - <div class="bg-mid-bg region gap-top-size-1"> - <div class="wrapper"> - {% include "partials/course-cards-next.njk" %} - </div> - </div> - {# Courses end #} - - - {# Collections start #} - <div class="wrapper"> - <div class="pad-block-size-1 repel"> - <h2 id="{{ 'i18n.learn.collections' | i18n(locale) | slug }}" class="text-size-3">{{ 'i18n.learn.collections' | i18n(locale) }}</h2> - - {% set filterItems = [] %} - {% for category, paths in learn %} - {% set i18nKey = 'i18n.learn.' + category %} - {% set filterItems = (filterItems.push({title: i18nKey | i18n(locale), id: i18nKey | i18n(locale) | slug}), filterItems) %} + <div class="region"> + <div class="wrapper auto-grid learn__collection"> + {% set coursesArr = helpers.values(courses) %} + {% for course in coursesArr|sort(true, false, 'meta.date') %} + {% if course.meta and not course.meta.draft and not course.meta.invisible %} + <a href="{{ course.meta.url }}" class="card" data-style="branded"> + <h3 class="visually-hidden">{{ course.meta.title }}</h3> + <div class="card__header repel"> + <p class="color-mid-text">Course</p> + <div class="counter"> + {% set pages = collections.all | navigation(course.toc) %} + <span class="counter__content" aria-label="{{ pages.list.length }} {{ 'i18n.learn.resources' | i18n(locale) }}">{{ pages.list.length }}</span> + {{ icon('mortarboard') }} + </div> + </div> + <img src="{{ course.meta.card }}" alt="{{ course.meta.title }} branding" /> + <div class="card__content flow"> + <p class="text-size-1">{{ course.meta.description | i18n(locale) }}</p> + </div> + </a> + {% endif %} {% endfor %} - <web-learn-filter all="{{'i18n.common.all' | i18n(locale)}}" filters="{{filterItems | dump}}"></web-learn-filter> </div> </div> - - <div id="learn__collections"> - {% for category, paths in learn %} - {% set i18nKey = 'i18n.learn.' + category %} - <div id="{{ i18nKey | i18n(locale) | slug }}" class="learn__collection"> - <div class="wrapper flow"> - <h2 id="{{ 'i18n.learn.collections' | i18n(locale) | slug }}" class="text-size-2">{{ i18nKey | i18n(locale) }}</h2> - <div class="auto-grid gap-top-size-2"> - {% for path in paths %} - <a href="/{{ path.slug }}" class="card"> - <div class="card__header repel"> - <p class="color-mid-text">Collection</p> - <div class="counter" data-layout="flush"> - <span class="counter__content">{{ path.topics.length }}</span> - {% include 'icons/mortarboard.svg' %} - </div> - </div> - <img src="{{ path.cover | imgix }}" alt="{{ path.title | i18n(locale) }}" /> - <div class="card__content flow"> - <h3 class="card__heading text-size-2">{{ path.title | i18n(locale) }}</h3> - <p class="text-size-0">{{ path.description | i18n(locale) }}</p> - </div> - </a> - {% endfor %} - </div> - </div> - </div> - {% endfor %} - </div> - {# Collections end #} + {# Courses end #} </div> diff --git a/src/site/_includes/macros/patterns-card.njk b/src/site/_includes/macros/patterns-card.njk deleted file mode 100644 index 875811c47cb..00000000000 --- a/src/site/_includes/macros/patterns-card.njk +++ /dev/null @@ -1,34 +0,0 @@ -{# - @typedef {PatternSuite} patternSuite - The PatternSuite to display in card format. -#} -{% macro PatternSuiteCard(patternSuite) %} - -<div class="w-card" role="listitem"> - <article class="w-card-base {{ 'w-card-base__with--cover' if hero }}"> - {% if patternSuite.hero %} - <div class="w-card-base__cover"> - {# - We intentionally hide the hero image from screen readers because it appears out of context - from the rest of the article content and may be confusing. Since the link for the article is duplicated - in the heading down below, this might be an OK tradeoff. - #} - <a href="/patterns/{{patternSuite.id}}" class="w-card-base__link" tabindex="-1" aria-hidden="true"> - {% Img src=patternSuite.hero, alt=title, width="354", height="240", params={fit: 'center', h: '240', w: '354'} %} - </a> - </div> - {% endif %} - <div class="w-card-base__blurb"> - <a href="/patterns/{{patternSuite.id}}" class="w-card-base__link"> - <h2 class="{{ 'w-card-base__headline--with-image' if hero else 'w-card-base__headline' }}">{{patternSuite.title}}</h2> - </a> - <div class="w-card-base__desc"> - {% if patternSuite.description %} - <a class="w-card-base__link" tabindex="-1" href="/patterns/{{patternSuite.id}}"> - <p class="w-card-base__subhead">{{patternSuite.description}}</p> - </a> - {% endif %} - </div> - </div> - </article> -</div> -{% endmacro %} diff --git a/src/site/_includes/macros/prerender.njk b/src/site/_includes/macros/prerender.njk new file mode 100644 index 00000000000..57d39045c1c --- /dev/null +++ b/src/site/_includes/macros/prerender.njk @@ -0,0 +1,20 @@ +{# + @typedef {string} url - The url for the prerendering. +#} +{% macro prerender(url) %} +{% if url and not url.startsWith('http://') and not url.startsWith('https://') %} +{% set speculationRules %} +{ + "prerender":[ + { + "source":"list", + "urls":[ + "{{ url }}" + ] + } + ] +} +{% endset %} +<script type="speculationRules">{{ speculationRules | minifyJSON | cspHash | safe }}</script> +{% endif %} +{% endmacro %} diff --git a/src/site/_includes/macros/tag-chips.njk b/src/site/_includes/macros/tag-chips.njk index 1d57fe48f89..52be2142a6f 100644 --- a/src/site/_includes/macros/tag-chips.njk +++ b/src/site/_includes/macros/tag-chips.njk @@ -3,11 +3,11 @@ @property {string} [className] - A space separated list of classes to apply. #} {% macro tagChips(tags, className = '') %} - <div class="w-chips {{className}}"> + <div class="chips {{className}}"> {% for tagKey in tags or [] %} {% if tagKey in collections.tags %} {% set tag = collections.tags[tagKey] %} - <a class="w-chip" href="{{tag.url}}">{{tag.overrideTitle or tag.title | i18n(locale)}}</a> + <a class="chip" href="{{tag.url}}">{{tag.overrideTitle or tag.title | i18n(locale)}}</a> {% endif %} {% endfor %} </div> diff --git a/src/site/_includes/newsletter.njk b/src/site/_includes/newsletter.njk index 303fda36127..41bf393096c 100644 --- a/src/site/_includes/newsletter.njk +++ b/src/site/_includes/newsletter.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default pageScripts: - '/js/newsletter.js' --- diff --git a/src/site/_includes/pagination.njk b/src/site/_includes/pagination.njk deleted file mode 100644 index c19ba6dfcd2..00000000000 --- a/src/site/_includes/pagination.njk +++ /dev/null @@ -1,41 +0,0 @@ -<nav class="w-pagination"> - {# Show first page anchor only if not on the first page #} - {% if paged.index != 0 %} - <a class="w-pagination__link w-pagination__arrow w-pagination__arrow--first" aria-label="First Page" href="{{ paged.href }}"></a> - {% endif %} - - {# Show previous page anchor only if not on the first two pages #} - {% if paged.index > 1 %} - <a class="w-pagination__link w-pagination__arrow w-pagination__arrow--previous" aria-label="Previous Page" href="{{ paged.href }}{{ paged.index }}"></a> - {% endif %} - - {%- for pageEntry in paged | pagedNavigation %} - {% if pageEntry.showEllipses %} - <span class="w-pagination__spacer">…</span> - {% endif %} - <a - {% if paged.index == (pageEntry.index - 1) %} - class="w-pagination__link w-pagination__link--active" - aria-current="page" - {% else %} - class="w-pagination__link" - {% endif %} - - aria-label="Page {{pageEntry.index}}" - href="{{ pageEntry.href }}" - > - {{ pageEntry.index }} - </a> - {%- endfor %} - - {# Show next page anchor only if not on the last or penultimate pages #} - {% if (paged.index + 2) < (paged.pages) %} - <a class="w-pagination__link w-pagination__arrow w-pagination__arrow--next" aria-label="Next Page" href="{{ paged.href }}{{ paged.index + 2 }}"></a> - {% endif %} - - {# Show last page anchor only if not on the last page #} - {% if paged.index != (paged.pages - 1) %} - <a class="w-pagination__link w-pagination__arrow w-pagination__arrow--last" aria-label="Last Page" href="{{ paged.href }}{{ paged.pages }}"></a> - {% endif %} - -</nav> diff --git a/src/site/_includes/partials/analytics.njk b/src/site/_includes/partials/analytics.njk index dfab4ffe36d..feeb08e87eb 100644 --- a/src/site/_includes/partials/analytics.njk +++ b/src/site/_includes/partials/analytics.njk @@ -1,21 +1,13 @@ {% set analyticsScript %} -window.ga = - window.ga || - function () { - (ga.q = ga.q || []).push(arguments); - }; -ga.l = +new Date(); -ga('create', '{{ site.analytics.ids.prod }}'); -ga('set', 'transport', 'beacon'); -ga('set', 'anonymizeIp', true); -ga('set', 'page', window.location.pathname); -ga('set', '{{ site.analytics.dimensions.TRACKING_VERSION }}', '{{ site.analytics.version}}'); -try { - ga('set', '{{ site.analytics.dimensions.NAVIGATION_TYPE }}', performance.getEntriesByType('navigation')[0].type); -} catch (error) { - ga('set', '{{ site.analytics.dimensions.NAVIGATION_TYPE }}', '(not set)'); -} -ga('set', '{{ site.analytics.dimensions.COLOR_SCHEME_PREFERENCE }}', window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); -ga('send', 'pageview'); +window.dataLayer = window.dataLayer || []; +window.dataLayer.push({'gtm.start': new Date().getTime(),event:'gtm.js'}); +window.dataLayer.push({'user_agent': navigator.userAgent}); +//Restrict GTM variables: +window.dataLayer.push({'gtm.blocklist': ['html', 'd', 'jsm', 'j']}); +function gtag(){dataLayer.push(arguments)}; +{% if (site.env != 'prod') %} + {# In development, log debug events to the console instead of sending them to GA #} + window.gtag = console.debug; +{% endif %} {% endset %} <script>{{ analyticsScript | minifyJs | cspHash | safe }}</script> diff --git a/src/site/_includes/partials/cards-collection.njk b/src/site/_includes/partials/cards-collection.njk new file mode 100644 index 00000000000..a097da03ebf --- /dev/null +++ b/src/site/_includes/partials/cards-collection.njk @@ -0,0 +1,42 @@ +{% if cards %} + {% for card in cards %} + {% set post = null %} + {% if card.latestPostByTags %} + {% set post = collections.all | latestPostByTags(card.latestPostByTags) %} + {% set eyebrowIcon = 'latest' %} + {% set eyebrowText = 'i18n.post.latest' | i18n(locale) %} + {% endif %} + {% if card.url %} + {% set post = card.url | findByUrl %} + {% set eyebrowIcon = card.eyebrow.icon %} + {% set eyebrowText = card.eyebrow.text %} + {% endif %} + + <a + {% if post or card.url %} href="{{ post.url or card.url }}" {% endif %} + class="card {% if card.cardLayout %}card-{{card.cardLayout}}{% endif %}{% if card.row %} row-{{card.row}}{% endif %}{% if card.column %} col-{{card.column}}{% endif %}{% if card.theme %} bg-{{card.theme}}{% endif %}" + data-category="web.dev" + data-label="Topic: {{card.title or post.data.title }}" + data-action="click" + role="listitem" + > + {% set thumbnail = card.thumbnail or post.data.thumbnail or post.data.hero %} + {% set alt = post.data.alt or card.title or '' %} + {% if (card.cardLayout == 'vertical' or card.cardLayout == 'horizontal') %} + {% if thumbnail %} {% Img src=thumbnail, alt=alt, width="370", height="220" %} {% endif %} + {% endif %} + + <div class="content"> + <div class="card__eyebrow flow"> + {{ icon(eyebrowIcon) }} + <span class="text-size-0 color-mid-text">{{ eyebrowText }}</span> + </div> + + <div class="card__content flow"> + <h4 class="card__heading color-core-text">{{ card.title or post.data.title }}</h4> + <p class="text-size-1 color-mid-text">{{ card.description or post.data.description }}</p> + </div> + </div> + </a> + {% endfor %} +{% endif %} \ No newline at end of file diff --git a/src/site/_includes/partials/course-cards-next.njk b/src/site/_includes/partials/course-cards-next.njk deleted file mode 100644 index 865059624a1..00000000000 --- a/src/site/_includes/partials/course-cards-next.njk +++ /dev/null @@ -1,39 +0,0 @@ -{% from 'macros/icon.njk' import svg with context %} - -<web-carousel> - <div class="carousel"> - <button class="icon-button" data-direction="prev" aria-label="back"> - {% include "icons/carat-back.svg" %} - </button> - <div class="carousel__track reel scrollbar" data-scroll="snap" aria-label="available courses"> - {# Convert the courses object into an array of objects. #} - {% set coursesArr = helpers.values(courses) %} - {# Sort courses by descending date order (most recent comes first) #} - {% for course in coursesArr|sort(true, false, 'meta.date') %} - {% if course.meta and not course.meta.draft %} - <div> - <a href="{{ course.meta.url }}" class="card" data-style="branded"> - <h3 class="visually-hidden">{{ course.meta.title }}</h3> - <div class="card__header repel"> - <p class="color-mid-text">Course</p> - <div class="counter t-bg-core-primary t-color-shades-light-bright"> - {% set pages = collections.all | navigation(course.toc) %} - <span class="counter__content" aria-label="{{ pages.list.length }} {{ 'i18n.learn.resources' | i18n(locale) }}">{{ pages.list.length }}</span> - {{ icon('mortarboard') }} - </div> - </div> - <img fetchpriority="high" src="{{ course.meta.card }}" alt="{{ course.meta.title }} branding" /> - <div class="card__content flow"> - <p class="text-size-0">{{ course.meta.description | i18n(locale) }}</p> - </div> - </a> - </div> - {% endif %} - {% endfor %} - </div> - <button class="icon-button" data-direction="next" aria-label="forward"> - {% include "icons/carat-forward.svg" %} - </button> - </div> -</web-carousel> - diff --git a/src/site/_includes/partials/course-cards.njk b/src/site/_includes/partials/course-cards.njk deleted file mode 100644 index 0a8f2aa1db2..00000000000 --- a/src/site/_includes/partials/course-cards.njk +++ /dev/null @@ -1,28 +0,0 @@ -{% from 'macros/icon.njk' import svg with context %} - -<div class="auto-fit-grid" style="--grid-min: 400px; --grid-gap: 0;"> - {# Convert the courses object into an array of objects. #} - {% set coursesArr = helpers.values(courses) %} - {# Sort courses by descending date order (most recent comes first) #} - {% for course in coursesArr|sort(true, false, 'meta.date') %} - {% if not course.meta.draft %} - {# If we have 3 or more courses set the grid to use a more dense styling. #} - {# This makes the thumbnails smaller. #} - <div class="course-card w-card" {% if coursesArr.length >= 3 %} data-dense {% endif %}> - <div class="course-card__info gap-bottom-400"> - <span class="font-google-sans weight-medium">{{ 'i18n.learn.course' | i18n(locale) }}</span> - <span class="gap-left-200 gap-right-200">·</span> - {# Count up the number of pages in the course and display it as "n resources" #} - {% set pages = collections.all | navigation(course.toc) %} - <span>{{ pages.list.length }} {{ 'i18n.learn.resources' | i18n(locale) }}</span> - </div> - <a href="{{ course.meta.url }}"> - <img class="course-card__thumbnail" src="{{ course.meta.card }}"> - </a> - <a href="{{ course.meta.url }}" class="course-card__description display-block gap-top-400"> - {{ course.meta.description | i18n(locale) }} - </a> - </div> - {% endif %} - {% endfor %} -</div> diff --git a/src/site/_includes/partials/course-pagination.njk b/src/site/_includes/partials/course-pagination.njk index 72f28a647df..1953e0345a2 100644 --- a/src/site/_includes/partials/course-pagination.njk +++ b/src/site/_includes/partials/course-pagination.njk @@ -37,4 +37,4 @@ {% endif %} {% endif %} {% endfor %} -</nav> \ No newline at end of file +</nav> diff --git a/src/site/_includes/partials/devrel-ribbon.njk b/src/site/_includes/partials/devrel-ribbon.njk new file mode 100644 index 00000000000..197c0620790 --- /dev/null +++ b/src/site/_includes/partials/devrel-ribbon.njk @@ -0,0 +1,7 @@ +<web-devrel-ribbon class="devrel-ribbon"> + <a class="devrel-ribbon__ribbon bg-floating-ribbon-bg" href="/about/"> + <span>{{ 'i18n.common.by' | i18n(locale) }}</span> + {% include "icons/chrome-white.svg" %} + <span>{{ 'i18n.common.chrome_devrel' | i18n(locale) }}</span> + </a> +</web-devrel-ribbon> diff --git a/src/site/_includes/partials/footer.njk b/src/site/_includes/partials/footer.njk deleted file mode 100644 index cef7e1a9b39..00000000000 --- a/src/site/_includes/partials/footer.njk +++ /dev/null @@ -1,147 +0,0 @@ -<footer class="w-footer"> - <nav class="w-footer__linkboxes"> - <ul class="w-footer__linkboxes-list"> - <li class="w-footer__linkbox"> - <h3 class="w-footer__linkbox-heading">Contribute</h3> - <ul class="w-footer__linkbox-list"> - <li class="w-footer__linkbox-item"> - <a href="https://github.com/GoogleChrome/web.dev/issues/new?assignees=&labels=bug&template=bug_report.md&title=" - class="w-footer__linkbox-link" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - {{ 'i18n.footer.file_a_bug' | i18n(locale) }} - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="https://github.com/googlechrome/web.dev" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> - {{ 'i18n.footer.view_source' | i18n(locale) }} - </a> - </li> - </ul> - </li> - <li class="w-footer__linkbox"> - <h3 class="w-footer__linkbox-heading">{{ 'i18n.footer.related_content' | i18n(locale) }}</h3> - <ul class="w-footer__linkbox-list"> - <li class="w-footer__linkbox-item"> - <a href="https://developer.chrome.com/" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - {{ 'i18n.footer.developer_chrome_com' | i18n(locale) }} - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="https://blog.chromium.org/" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - {{ 'i18n.footer.chrome_updates' | i18n(locale) }} - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="https://developers.google.com/web/fundamentals" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> - {{ 'i18n.footer.web_fundamentals' | i18n(locale) }} - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="https://developers.google.com/web/showcase/" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> - {{ 'i18n.footer.case_studies' | i18n(locale) }} - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="/podcasts/" class="w-footer__linkbox-link" - data-category="Podcasts" data-label="Footer Link (index 5)"> - {{ 'i18n.footer.podcasts' | i18n(locale) }} - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="/shows/" class="w-footer__linkbox-link" - data-category="Shows" data-label="Footer Link (index 6)"> - {{ 'i18n.footer.shows' | i18n(locale) }} - </a> - </li> - </ul> - </li> - <li class="w-footer__linkbox"> - <h3 class="w-footer__linkbox-heading">{{ 'i18n.footer.connect' | i18n(locale) }}</h3> - <ul class="w-footer__linkbox-list"> - <li class="w-footer__linkbox-item"> - <a href="https://www.twitter.com/ChromiumDev" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - Twitter - </a> - </li> - <li class="w-footer__linkbox-item"> - <a href="https://www.youtube.com/user/ChromeDevelopers" class="w-footer__linkbox-link" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> - YouTube - </a> - </li> - </ul> - </li> - </ul> - </nav> - - <div class="w-footer__utility"> - <nav class="w-footer__utility-nav"> - <a href="https://developers.google.com/" class="w-footer__utility-logo-link" - data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> - <img loading="lazy" width="185" height="33" class="w-footer__utility-logo" src="/images/lockup-color.png" - alt="Google Developers" /> - </a> - <ul class="w-footer__utility-list"> - <li class="w-footer__utility-item"> - <a class="w-footer__utility-link" href="https://developer.chrome.com/" - data-category="Site-Wide Custom Events" data-label="Footer Chrome Link"> - Chrome - </a> - </li> - <li class="w-footer__utility-item"> - <a class="w-footer__utility-link" href="https://firebase.google.com/" data-category="Site-Wide Custom Events" - data-label="Footer Firebase Link"> - Firebase - </a> - </li> - <li class="w-footer__utility-item"> - <a class="w-footer__utility-link" href="https://cloud.google.com/" data-category="Site-Wide Custom Events" - data-label="Footer Google Cloud Platform Link"> - Google Cloud Platform - </a> - </li> - <li class="w-footer__utility-item"> - <a class="w-footer__utility-link" href="https://developers.google.com/products" - data-category="Site-Wide Custom Events" data-label="Footer All products Link"> - {{ 'i18n.footer.all_products' | i18n(locale) }} - </a> - </li> - </ul> - <web-language-select current="{{ lang }}"></web-language-select> - </nav> - <nav class="w-footer__utility-nav"> - <ul class="w-footer__utility-list"> - <li class="w-footer__utility-item"> - <a class="w-footer__utility-link" href="https://policies.google.com/" data-category="Site-Wide Custom Events" - data-label="Footer Terms and Privacy link"> - {{ 'i18n.footer.terms_and_privacy' | i18n(locale) }} - </a> - </li> - <li class="w-footer__utility-item"> - <a class="w-footer__utility-link" href="/community-guidelines/" data-category="Site-Wide Custom Events" - data-label="Footer Community Guidelines link"> - {{ 'i18n.footer.community_guidelines' | i18n(locale) }} - </a> - </li> - </ul> - <div class="w-footer__license"> - <p> - Except as otherwise noted, the content of this page is licensed - under the - <a href="https://creativecommons.org/licenses/by/4.0/"> - Creative Commons Attribution 4.0 License</a>, - and code samples are licensed under the - <a href="https://www.apache.org/licenses/LICENSE-2.0"> - Apache 2.0 License</a>. For details, see the - <a href="https://developers.google.com/terms/site-policies"> - Google Developers Site Policies</a>. - </p> - </div> - </nav> - </div> -</footer> diff --git a/src/site/_includes/partials/head.njk b/src/site/_includes/partials/head.njk index 78af6329efa..e8f4a9324ee 100644 --- a/src/site/_includes/partials/head.njk +++ b/src/site/_includes/partials/head.njk @@ -1,23 +1,9 @@ <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -{% if CSS_ORIGIN === 'next' %} - {% include "partials/theme-script.njk" %} - {# hashForProd() will cache bust the css in dev with a random string. #} - <link rel="stylesheet" href="{{ helpers.hashForProd('/css/next.css') }}"> - <link rel="stylesheet" href="{{ helpers.hashForProd('/css/legacy-rollout.css') }}"> - <link rel="preload" as="font" crossorigin="anonymous" href="/fonts/material-icons/regular.woff2"> -{% else %} - {% if process.env.ELEVENTY_ENV === 'prod' %} - {# CSS will be injected by purify-css transform. #} - <!-- __PURGECSS_INJECT --> - {% else %} - {# hashForProd() will cache bust the css in dev with a random string. #} - <link rel="stylesheet" href="{{ helpers.hashForProd('/css/main.css') }}"> - {% endif %} - - <link rel="preload" as="font" crossorigin="anonymous" href="/fonts/material-icons/regular.woff2"> -{% endif %} +{% include "partials/theme-script.njk" %} +<link rel="stylesheet" href="{{ helpers.hashForProd('/css/next.css') }}"> +<link rel="preload" as="font" crossorigin="anonymous" href="/fonts/material-icons/regular.woff2"> <link rel="preload" as="font" crossorigin="anonymous" href="/fonts/google-sans/regular/latin.woff2"> <link rel="preload" as="font" crossorigin="anonymous" href="/fonts/google-sans/bold/latin.woff2"> @@ -25,7 +11,7 @@ <meta name="theme-color" content="#fff"/> -{% if noindex or draft -%} +{% if (noindex and noindex != "false") or draft -%} <meta name="robots" content="noindex" /> {%- endif %} {% if offline %} @@ -42,21 +28,44 @@ <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"> <link rel="mask-icon" color="#0054ff" href="/images/safari-pinned-tab.svg"> -{# Include the GA object so we can start queuing events. #} -{% include 'partials/analytics.njk' %} - -{% for item in inlineScripts %} - {% set inlineScript %} - {% includeRaw item %} - {% endset %} - <script>{{ inlineScript | minifyJs | cspHash | safe }}</script> -{% endfor %} - {# Script loader for sourced scripts, as they cannot be authorized by a CSP hash. #} {% include 'partials/script-loader.njk' %} -{% set apiScripts %} - loadScript('https://www.google-analytics.com/analytics.js', null); - loadScript('https://www.google.com/recaptcha/api.js', null); + +{# Private Aggregation API testing script #} +{# The testing will run until mid-April 2023 #} +{% set paaScript %} + loadScript('https://shared-storage-demo-content-producer.web.app/paa/scripts/private-aggregation-test.js', null); +{% endset %} +<script>{{ paaScript | minifyJs | cspHash | safe }}</script> + +{% include 'partials/analytics.njk' %} + +{# Dogfood document speculation rules origin trial #} +<!-- web.dev speculation rules origin trial --> +<meta http-equiv="origin-trial" content="AuLV+OPMY8vBf0KOuf+wa79CbvuL8StRjFn/uhNIe3iLaFNrTmpm3CkNoi7piGlUFOwiAId206QJVoty89TsiQsAAABfeyJvcmlnaW4iOiJodHRwczovL3dlYi5kZXY6NDQzIiwiZmVhdHVyZSI6IlNwZWN1bGF0aW9uUnVsZXNQcmVmZXRjaEZ1dHVyZSIsImV4cGlyeSI6MTcwOTY4MzE5OX0="> +{# Exclude the /patterns/ section as a control #} +{% set speculationRules %} +{ + "prerender": [ + { + "source": "document", + "where": { + "and": [ + { + "href_matches": "/*\\?*#*", "relative_to": "document" + }, + { + "not": { + "href_matches": "/patterns/*\\?*#*", + "relative_to": "document" + } + } + ] + }, + "eagerness": "moderate" + } + ] +} {% endset %} -<script>{{ apiScripts | minifyJs | cspHash | safe }}</script> +<script type="speculationrules">{{ speculationRules | minifyJSON | cspHash | safe }}</script> diff --git a/src/site/_includes/partials/header-default.njk b/src/site/_includes/partials/header-default.njk deleted file mode 100644 index 3a9b1520e9c..00000000000 --- a/src/site/_includes/partials/header-default.njk +++ /dev/null @@ -1,61 +0,0 @@ -{% from 'macros/icon.njk' import icon with context %} - -<web-header class="header-default" role="navigation"> - <button data-open-drawer-button class="w-button--svg w-button--round" aria-label="{{ 'i18n.header.open_menu' | i18n(locale) }}"> - {{ icon('menu') }} - <span class="w-tooltip w-tooltip--left">{{ 'i18n.header.open_menu' | i18n(locale) }}</span> - </button> - - <a - href="/" - class="header-default__logo-link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="Site logo" - > - <img class="header-default__logo" width="125" height="23" src="/images/lockup.svg" alt="web.dev" /> - </a> - - <div class="header-default__middle"> - <div class="header-default__links"> - <a - href="/learn/" - class="header-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="Tab: Learn" - > - {{ 'i18n.header.learn' | i18n(locale) }} - </a> - - <a - href="/measure/" - class="header-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="Tab: Measure" - > - {{ 'i18n.header.measure' | i18n(locale) }} - </a> - - <a - href="/blog/" - class="header-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="Tab: Blog" - > - {{ 'i18n.header.blog' | i18n(locale) }} - </a> - - <a - href="/about/" - class="header-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="Tab: About" - > - {{ 'i18n.header.about' | i18n(locale) }} - </a> - </div> - <web-search results-id="search-main-results" i18n="{{ i18n.search | dump }}"></web-search> - <web-search-results id="search-main-results"></web-search-results> - </div> - - <web-profile-switcher-container></web-profile-switcher-container> -</web-header> diff --git a/src/site/_includes/partials/language-list.njk b/src/site/_includes/partials/language-list.njk new file mode 100644 index 00000000000..8aec3406db0 --- /dev/null +++ b/src/site/_includes/partials/language-list.njk @@ -0,0 +1,18 @@ +<span class="post-signpost__title"> + {% set languages = page | supportedLanguages(lang) %} + + {% if (languages.length) %} + {{'i18n.post.available_in' | i18n(locale)}}: + {% for language in languages %} + {% set lang = language[0] %} + {% set langHref = language[1] %} + {% set langName = language[2] %} + + <span> + <a href={{langHref}} class="post-signpost__link" translate="no" lang={{lang}}>{{langName}}</a> + {%- if not loop.last -%}, {%- endif -%} + {% if loop.index === (languages.length - 1) %} and {% endif %} + </span> + {% endfor %} + {% endif %} +</span> diff --git a/src/site/_includes/partials/load-script-func.njk b/src/site/_includes/partials/load-script-func.njk new file mode 100644 index 00000000000..e3f4a038c5e --- /dev/null +++ b/src/site/_includes/partials/load-script-func.njk @@ -0,0 +1,27 @@ + +{% set scriptLoader %} +function loadScript(url, type) { + const s = document.createElement('script'); + s.src = url; + s.onload = () => { + document.dispatchEvent(new CustomEvent('scriptLoaded', {detail: {url}})); + } + if (type) { + s.type = type; + } + if (type === 'module') { + s.async = false; // Preserve load order. + const pre = document.createElement('link'); + pre.rel = 'modulepreload'; + pre.href = url; + document.head.append(pre); + // We use DOMContentLoaded as the loader script is running sync, and inserting a module script here doesn't defer. This brings back normal type="module" behavior. + window.addEventListener('DOMContentLoaded', () => { + document.head.append(s); + }); + } else { + document.head.append(s); + } +} +{% endset %} +<script>{{ scriptLoader | minifyJs | cspHash | safe }}</script> diff --git a/src/site/_includes/partials/navigation-drawer-default.njk b/src/site/_includes/partials/navigation-drawer-default.njk deleted file mode 100644 index 55387cc7d88..00000000000 --- a/src/site/_includes/partials/navigation-drawer-default.njk +++ /dev/null @@ -1,64 +0,0 @@ -{% from 'macros/icon.njk' import icon with context %} - -<web-navigation-drawer class="drawer-default" type="modal"> - <nav data-drawer-container> - <div class="drawer-default__contents"> - <div class="drawer-default__header"> - <button - data-drawer-close-button - class="drawer-default__hide w-button--svg w-button--round" - aria-label="{{ 'i18n.common.close' | i18n(locale) }}" - > - {{ icon('close') }} - <span class="w-tooltip">{{ 'i18n.common.close' | i18n(locale) }}</span> - </button> - <a - href="/" - class="gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="Site logo" - > - <img - width="125" - height="30" - class="drawer-default__logo" - src="/images/lockup.svg" - alt="web.dev" - /> - </a> - </div> - <a - href="/learn/" - class="drawer-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="SideNav: Learn" - > - {{ 'i18n.header.learn' | i18n(locale) }} - </a> - <a - href="/measure/" - class="drawer-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="SideNav: Measure" - > - {{ 'i18n.header.measure' | i18n(locale) }} - </a> - <a - href="/blog/" - class="drawer-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="SideNav: Blog" - > - {{ 'i18n.header.blog' | i18n(locale) }} - </a> - <a - href="/about/" - class="drawer-default__link gc-analytics-event" - data-category="Site-Wide Custom Events" - data-label="SideNav: About" - > - {{ 'i18n.header.about' | i18n(locale) }} - </a> - </div> - </nav> -</web-navigation-drawer> diff --git a/src/site/_includes/partials/paged-next.njk b/src/site/_includes/partials/paged-next.njk deleted file mode 100644 index bbc76b964a5..00000000000 --- a/src/site/_includes/partials/paged-next.njk +++ /dev/null @@ -1,28 +0,0 @@ -{% from 'macros/post-card.njk' import postCard with context %} - -<div class="region"> - <div class="wrapper auto-grid"> - {% for element in paged.elements %} - {% set data = element.data %} - - {# The `alt` property fallsback onto the element's - title in cases like authors or tags which do not have an alt. #} - {{ postCard({ - title: data.title, - subhead: data.subhead, - url: element.url, - thumbnail: data.thumbnail or data.hero, - alt: data.alt or data.title or '', - authors: data.authors, - tags: data.tags, - date: element.date, - updated: data.updated, - draft: data.draft - }) }} - {% endfor %} - </div> - - <div class="wrapper gap-top-size-3"> - {% include "partials/pagination-next.njk" %} - </div> -</div> diff --git a/src/site/_includes/partials/paged.njk b/src/site/_includes/partials/paged.njk new file mode 100644 index 00000000000..891aef9f55c --- /dev/null +++ b/src/site/_includes/partials/paged.njk @@ -0,0 +1,27 @@ +{% from 'macros/post-card.njk' import postCard with context %} + +<div class="region"> + <div class="wrapper auto-grid"> + {% for element in paged.elements %} + {% set data = element.data %} + {# The `alt` property fallsback onto the element's + title in cases like authors or tags which do not have an alt. #} + {{ postCard({ + title: data.title, + subhead: data.subhead, + url: element.url, + thumbnail: data.thumbnail or data.hero, + alt: data.alt or data.title or '', + authors: data.authors, + tags: data.tags, + date: data.date, + updated: data.updated, + draft: data.draft + }) }} + {% endfor %} + </div> + + <div class="wrapper gap-top-size-3"> + {% include "partials/pagination.njk" %} + </div> +</div> diff --git a/src/site/_includes/partials/pagination-next.njk b/src/site/_includes/partials/pagination.njk similarity index 100% rename from src/site/_includes/partials/pagination-next.njk rename to src/site/_includes/partials/pagination.njk diff --git a/src/site/_includes/partials/picked-case-study.njk b/src/site/_includes/partials/picked-case-study.njk index 8b4f2031f13..a06ecd704aa 100644 --- a/src/site/_includes/partials/picked-case-study.njk +++ b/src/site/_includes/partials/picked-case-study.njk @@ -8,6 +8,10 @@ <a class="feature-card" href="{{ pickedItem.url }}" data-treatment="bg-image"> <span class="feature-card__eyebrow">Case study</span> <h3 class="feature-card__title">{{ pickedItem.data.title }}</h3> - {% Img src=pickedItem.data.hero, alt="", width="570", height="330", class="feature-card__background" %} + {% if featuredCard.video %} + {% Img src=pickedItem.data.hero, alt="", width="570", height="330", class="feature-card__background", fetchpriority="high"%} + {% else %} + {% Img src=pickedItem.data.hero, alt="", width="570", height="330", class="feature-card__background", loading="eager" %} + {% endif %} </a> {% endif %} diff --git a/src/site/_includes/partials/post-credits.njk b/src/site/_includes/partials/post-credits.njk new file mode 100644 index 00000000000..b78adff09bf --- /dev/null +++ b/src/site/_includes/partials/post-credits.njk @@ -0,0 +1,37 @@ +<div class="post-credits"> + {% if editors %} + <div class="post-credits__editors"> + <h3>{{ 'i18n.post.editors' | i18n(locale) }}</h3> + {% for editor in editors %} + <a href="{{collections.authors[editor].href}}">{{collections.authors[editor].title | i18n(locale)}}</a> + {% endfor %} + </div> + {% endif %} + + {% if credits %} + <div class="post-credits__credits"> + <h3>{{ 'i18n.post.credits' | i18n(locale) }}</h3> + {% for credit in credits %} + <a href="{{credit.href}}">{{credit.name}}</a> + {% endfor %} + </div> + {% endif %} + + {% if updated or date %} + <div> + <h3>{{ 'i18n.post.last_updated' | i18n(locale) }}</h3> + <span> + {% if updated %} + <time>{{ updated | prettyDate }}</time> + {% else %} + <time>{{ date | prettyDate }}</time> + {% endif %} + </span> + — + <a + href="{{ page.inputPath | githubLink }}" + > + {{ 'i18n.post.improve_article' | i18n(locale) }} + </a></div> + {% endif %} +</div> diff --git a/src/site/_includes/partials/post-next.njk b/src/site/_includes/partials/post-next.njk deleted file mode 100644 index 67385be2908..00000000000 --- a/src/site/_includes/partials/post-next.njk +++ /dev/null @@ -1,190 +0,0 @@ -{% from 'macros/tag-chips.njk' import tagChips with context %} -{% from 'macros/authors.njk' import authorsMacro with context %} - -{# - Grab the ToC contents for headings ToC. This powers the list of headings - that appears on the right-hand side of the page. Unfortunately our use of - the word 'toc' is a bit overloaded :P -#} -{% set tocContents %} - {{- content | toc | safe -}} -{% endset %} -{% set tocTitle = 'i18n.toc.on_this_page' | i18n(locale) %} - -{% if hero %} - {% Img src=hero, alt=alt or '', importance='high', class='hero-image', height='480', width='1600', sizes='100vw' %} -{% endif %} - -<div class="post wrapper" data-flush> - {% if path === undefined %} - {% set postPaths = page | getPaths %} - {# Use first found path as a default path. #} - {% set path = paths[postPaths[0]] %} - {% endif %} - {% set safeTitle = title | trim | md({linkify: false}) | safe %} - - <div class="sidebar region flex-align-start flex-dir-rev flex-wrap-no"> - {% include 'partials/toc-side.njk' %} - {# - TODO: The legacy rollout task can be removed - when the design system has been full rolled-out across the site - #} - <article class="prose legacy-rollout"> - <header class="flow gap-bottom-size-3"> - {% if 'blog' in tags or crumbs %} - <nav class="breadcrumbs" aria-label="breadcrumbs"> - <ul class="breadcrumbs__list" role="list"> - <li> - <a - class="gc-analytics-event" - data-category="web.dev" - data-label="post, home breadcrumb" - data-action="click" - href="/" - > - {{site.titleVariation}} - </a> - </li> - {% if 'blog' in tags %} - <li> - <a - class="gc-analytics-event" - data-category="web.dev" - data-label="post, path breadcrumb" - data-action="click" - href="/blog" - > - {{ 'i18n.search.all_articles' | i18n(locale) }} - </a> - </li> - {% elif crumbs %} - {% for crumb in crumbs %} - <li> - <a - class="gc-analytics-event" - data-category="web.dev" - data-label="post, path breadcrumb" - data-action="click" - href="{{crumb[1]}}" - > - {{crumb[0]}} - </a> - </li> - {% endfor %} - {% endif %} - </ul> - </nav> - {% endif %} - - <h1 id="{{ safeTitle | slugify }}">{{ safeTitle }}</h1> - {% if subhead | length %} - <p class="color-mid-text flow-space-base"> - {{ subhead | md | safe }} - </p> - {% endif %} - - {% if date %} - <div class="flow-space-size-1 color-mid-text text-size-0"> - <time>{{date | prettyDate}}</time> - {% if updated %} — {{ 'i18n.common.updated' | i18n((locale)) }} <time>{{ updated | prettyDate }}</time> {% endif %} - </div> - {% endif %} - - {% set languageListHtml %}{% LanguageList page.url, lang %}{% endset %} - {% if languageListHtml %} - <div class="flow"> - {{ languageListHtml | safe }} - </div> - {% endif %} - - {% SignPosts page.fileSlug %} - - {% if authors %} - {{ authorsMacro() }} - {% endif %} - </header> - - {% if draft and site.env === 'dev' %} - <div class="banner bg-state-warn-bg color-core-text"> - <p><strong>{{ 'i18n.post.is_draft' | i18n(locale) }}</strong></p> - </div> - {% endif %} - - {% include 'partials/toc-inner.njk' %} - - {{ content | safe }} - - {% if stack_overflow_tag %} - {% StackOverflow stack_overflow_tag %} - {% endif %} - - <nav class="cluster gutter-base flow-space-size-2" aria-label="tags"> - {% for tagKey in tags or [] %} - {% if tagKey in collections.tags %} - {% set tag = collections.tags[tagKey] %} - <a class="pill" href="{{tag.url}}">{{tag.overrideTitle or tag.title | i18n(locale)}}</a> - {% endif %} - {% endfor %} - </nav> - - <div class="text-size-0 color-mid-text"> - <span> - {% if updated %} - {{ 'i18n.post.last_updated' | i18n(locale) }}: <time>{{ updated | prettyDate }}</time> - {% else %} - {{ 'i18n.post.last_updated' | i18n(locale) }}: <time>{{ date | prettyDate }}</time> - {% endif %} - </span> - — - <a - href="{{ page.inputPath | githubLink }}" - > - {{ 'i18n.post.improve_article' | i18n(locale) }} - </a> - </div> - - {% if codelabs %} - <div class="flow-space-size-2"> - {% CodelabsCallout codelabs, lang %} - </div> - {% endif %} - - {% if 'blog' in tags %} - {% set backUrl = '/blog' %} - {% set backLabel = 'Return to all articles' %} - {% elif path %} - {% set backUrl = '/' + path.slug %} - {% set backLabel = 'Return to all articles' %} - {% endif %} - - {% if backLabel and backUrl %} - <div class="flow-space-size-2"> - <a href="{{ backUrl }}" class="button" data-type="secondary"> - {% include 'icons/arrow-back.svg' %} - <span>{{ backLabel }}</span> - </a> - </div> - {% endif %} - <div class="docked-actions flow flow-space-base"> - <div> - <share-action class="gc-analytics-event fab" - authors="{{ authors | expandAuthors(collections.authors, lang) }}" - data-category="web.dev" - data-label="share" - data-action="click" - data-type="primary" - data-icon="share" - tabindex="0" - role="button" - > - {% include "icons/share.svg" %} - <span class="fab__label">{{ 'i18n.common.share' | i18n(locale) }}</span> - </share-action> - </div> - <div> - {% include 'partials/subscribe-action.njk' %} - </div> - </div> - </article> - </div> -</div> diff --git a/src/site/_includes/partials/post.njk b/src/site/_includes/partials/post.njk new file mode 100644 index 00000000000..392c90d6280 --- /dev/null +++ b/src/site/_includes/partials/post.njk @@ -0,0 +1,201 @@ +{% from 'macros/tag-chips.njk' import tagChips with context %} +{% from 'macros/authors.njk' import authorsMacro with context %} + +{# + Grab the ToC contents for headings ToC. This powers the list of headings + that appears on the right-hand side of the page. Unfortunately our use of + the word 'toc' is a bit overloaded :P +#} +{% set tocContents %} + {{- content | toc | safe -}} +{% endset %} +{% set tocTitle = 'i18n.toc.on_this_page' | i18n(locale) %} + +{% if hero %} + {% Img src=hero, alt=alt or '', fetchpriority='high', class='hero-image', height='480', width='1600', sizes='100vw' %} +{% endif %} + +<div class="post wrapper" data-flush> + {% if path === undefined %} + {% set postPaths = page | getPaths %} + {# Use first found path as a default path. #} + {% set path = paths[postPaths[0]] %} + {% endif %} + {% set safeTitle = title | trim | md({linkify: false}) | safe %} + + <div class="sidebar region flex-align-start flex-dir-rev flex-wrap-no"> + {% include 'partials/toc-side.njk' %} + {# + TODO: The legacy rollout task can be removed + when the design system has been full rolled-out across the site + #} + <article class="prose legacy-rollout"> + <header class="flow gap-bottom-size-3"> + {% if 'blog' in tags or crumbs %} + <nav class="breadcrumbs" aria-label="breadcrumbs"> + <ul class="breadcrumbs__list" role="list"> + <li> + <a + class="gc-analytics-event" + data-category="web.dev" + data-label="post, home breadcrumb" + data-action="click" + href="/" + > + {{site.titleVariation}} + </a> + </li> + {% if 'blog' in tags %} + <li> + <a + class="gc-analytics-event" + data-category="web.dev" + data-label="post, path breadcrumb" + data-action="click" + href="/blog" + > + {{ 'i18n.search.all_articles' | i18n(locale) }} + </a> + </li> + {% elif crumbs %} + {% for crumb in crumbs %} + <li> + <a + class="gc-analytics-event" + data-category="web.dev" + data-label="post, path breadcrumb" + data-action="click" + href="{{crumb[1]}}" + > + {{crumb[0]}} + </a> + </li> + {% endfor %} + {% endif %} + </ul> + </nav> + {% endif %} + + <h1>{{ safeTitle }}</h1> + {% if is_baseline %} + <details class="baseline flow"> + <summary class="color-core-text text-size-1"> + <div class="switcher"> + <div class="baseline__title"> + <span class="baseline__icon"> + {% include "icons/baseline.svg" %} + </span> + <p> + <span class="baseline__keyword">Baseline: </span>{{ 'i18n.baseline.widely_supported' | i18n((locale)) }} + </p> + </div> + <div> + <span class="baseline__browser"> + <img alt="Chrome 74" src="/images/icons/chrome.svg"><img alt="Chrome 74" src="/images/icons/edge.svg"></span> + <span class="baseline__browser"><img alt="Chrome 74" src="/images/icons/firefox.svg"></span> + <span class="baseline__browser"><img alt="Chrome 74" src="/images/icons/safari.svg"></span> + </div> + </div> + </summary> + <p class="text-size-0"> + {{ 'i18n.baseline.definition' | i18n((locale)) }} + </p> + <p><a href="http://web.dev/baseline">{{ 'i18n.baseline.learn_more' | i18n((locale)) }}</a></p> + </details> + {% endif %} + {% if subhead | length %} + <p class="color-mid-text flow-space-base"> + {{ subhead | md | safe }} + </p> + {% endif %} + + {% if date %} + <div class="flow-space-size-1 color-mid-text text-size-0"> + <time>{{date | prettyDate}}</time> + {% if updated %} — {{ 'i18n.common.updated' | i18n((locale)) }} <time>{{ updated | prettyDate }}</time> {% endif %} + </div> + {% endif %} + + <div class="flow"> + {% include 'partials/language-list.njk' %} + </div> + + <div class="flow"> + {% include 'partials/sign-post.njk' %} + </div> + + {% if authors %} + {{ authorsMacro() }} + {% endif %} + </header> + + {% if draft and site.env === 'dev' %} + <div class="banner bg-state-warn-bg color-core-text"> + <p><strong>{{ 'i18n.post.is_draft' | i18n(locale) }}</strong></p> + </div> + {% endif %} + + {% include 'partials/toc-inner.njk' %} + + {{ content | safe }} + + {% if stack_overflow_tag %} + {% StackOverflow stack_overflow_tag %} + {% endif %} + + <nav class="cluster gutter-base flow-space-size-2" aria-label="tags"> + {% for tagKey in tags or [] %} + {% if tagKey in collections.tags %} + {% set tag = collections.tags[tagKey] %} + <a class="pill" href="{{tag.url}}">{{tag.overrideTitle or tag.title | i18n(locale)}}</a> + {% endif %} + {% endfor %} + </nav> + + {% include 'partials/post-credits.njk' %} + + {% if codelabs %} + <div class="flow-space-size-2"> + {% CodelabsCallout codelabs, lang %} + </div> + {% endif %} + + {% if 'blog' in tags %} + {% set backUrl = '/blog' %} + {% set backLabel = 'Return to all articles' %} + {% elif path %} + {% set backUrl = '/' + path.slug %} + {% set backLabel = 'Return to all articles' %} + {% endif %} + + {% if backLabel and backUrl %} + <div class="flow-space-size-2"> + <a href="{{ backUrl }}" class="button" data-type="secondary"> + {% include 'icons/arrow-back.svg' %} + <span>{{ backLabel }}</span> + </a> + </div> + {% endif %} + <div class="docked-actions flow flow-space-base"> + <div> + <share-action class="gc-analytics-event fab" + authors="{{ authors | expandAuthors(collections.authors, lang) }}" + data-category="web.dev" + data-label="share" + data-action="click" + data-type="primary" + data-icon="share" + tabindex="0" + role="button" + > + {% include "icons/share.svg" %} + <span class="fab__label">{{ 'i18n.common.share' | i18n(locale) }}</span> + </share-action> + </div> + <div> + {% include 'partials/subscribe-action.njk' %} + </div> + </div> + </article> + </div> +</div> diff --git a/src/site/_includes/partials/script-loader.njk b/src/site/_includes/partials/script-loader.njk index c3981f07523..09a072c5181 100644 --- a/src/site/_includes/partials/script-loader.njk +++ b/src/site/_includes/partials/script-loader.njk @@ -5,58 +5,42 @@ <script>{{ inlineScript | minifyJs | cspHash | safe }}</script> {% endfor %} + {# Sourced scripts cannot be authorized by a CSP hash individually, so we need to use an inline script loader for any sourced scripts. #} {# This works because the CSP includes the 'strict-dynamic' keyword, allowing the children of an authorized script to run. #} -{% set scriptLoader %} -function loadScript(url, type) { - const s = document.createElement('script'); - s.src = url; - s.onload = () => { - document.dispatchEvent(new CustomEvent('scriptLoaded', {detail: {url}})); - } - if (type) { - s.type = type; - } - if (type === 'module') { - s.async = false; // Preserve load order. - const pre = document.createElement('link'); - pre.rel = 'modulepreload'; - pre.href = url; - document.head.append(pre); - // We use DOMContentLoaded as the loader script is running sync, and inserting a module script here doesn't defer. This brings back normal type="module" behavior. - window.addEventListener('DOMContentLoaded', () => { - document.head.append(s); - }); - } else { - document.head.append(s); - } -} -loadScript('{{ helpers.hashForProd('/js/app.js') }}', 'module'); -{# Add a facility for pages to declare an array of script paths. #} -{# If no scripts are declared we will use the default page script. #} -{# default.js loads the basic set of custom elements that all pages need. #} +{% include 'partials/load-script-func.njk' %} +{% set loadScripts %} + loadScript('{{ helpers.hashForProd('/js/app.js') }}', 'module'); -{# Dispatch event to notify that all pageScripts got loaded. #} -{% if pageScripts %} - let pageScripts = {{ pageScripts | dump | safe }}; - document.addEventListener('scriptLoaded', (e) => { - const source = e.detail.url.split('?')[0] - const index = pageScripts.indexOf(source); - if (index > -1) { - pageScripts.splice(index, 1); - } - if (pageScripts.length === 0) { - document.dispatchEvent(new CustomEvent('pageScriptsLoaded')); - } - }) -{% endif %} -{% for item in pageScripts %} - loadScript('{{ helpers.hashForProd(item) }}', 'module'); -{% else %} - loadScript('{{ helpers.hashForProd('/js/default.js') }}', 'module'); -{% endfor %} + {# Add a facility for pages to declare an array of script paths. #} + {# If no scripts are declared we will use the default page script. #} + {# default.js loads the basic set of custom elements that all pages need. #} + {# Dispatch event to notify that all pageScripts got loaded. #} + {% if pageScripts %} + let pageScripts = {{ pageScripts | dump | safe }}; + document.addEventListener('scriptLoaded', (e) => { + const source = e.detail.url.split('?')[0] + const index = pageScripts.indexOf(source); + if (index > -1) { + pageScripts.splice(index, 1); + } + if (pageScripts.length === 0) { + document.dispatchEvent(new CustomEvent('pageScriptsLoaded')); + } + }) + {% endif %} + {% for item in pageScripts %} + loadScript('{{ helpers.hashForProd(item) }}', 'module'); + {% else %} + loadScript('{{ helpers.hashForProd('/js/default.js') }}', 'module'); + {% endfor %} + + {% for item in externalScripts %} + loadScript('{{item}}', null); + {% endfor %} {% endset %} -<script>{{ scriptLoader | minifyJs | cspHash | safe }}</script> +<script>{{ loadScripts | minifyJs | cspHash | safe }}</script> + diff --git a/src/site/_includes/partials/sign-post.njk b/src/site/_includes/partials/sign-post.njk new file mode 100644 index 00000000000..9dafc57f4a0 --- /dev/null +++ b/src/site/_includes/partials/sign-post.njk @@ -0,0 +1,21 @@ +{% set postPaths = postToPaths[slug] %} + +{% if postPaths %} + <div class="flow post-signpost"> + {% if postPaths.length %} + <span class="post-signpost__title"> + {{'i18n.post.appears_in' | i18n(locale)}}: + </span> + + {% for pathName in postPaths %} + {% set postHref = '/' + paths[pathName].slug + '/' %} + + <a href={{postHref}} class="post-signpost__link">{{paths[pathName].title | i18n(locale)}}</a> + + {% if not loop.last %} + <span class="post-signpost__divider"> | </span> + {% endif %} + {% endfor %} + {% endif %} + </div> +{% endif %} diff --git a/src/site/_includes/partials/site-footer.njk b/src/site/_includes/partials/site-footer.njk index e48c7e8789d..e7cfb734252 100644 --- a/src/site/_includes/partials/site-footer.njk +++ b/src/site/_includes/partials/site-footer.njk @@ -1,86 +1,92 @@ +{% from 'macros/icon.njk' import icon, svg with context %} + <footer class="site-footer" role="contentinfo"> <nav class="site-footer__primary-nav auto-grid" aria-label="footer navigation"> - <div> - <h3 class="text-size-2 color-mid-text">Contribute</h3> - <ul class="w-footer__linkbox-list" role="list"> - <li> - <a href="https://github.com/GoogleChrome/web.dev/issues/new?assignees=&labels=bug&template=bug_report.md&title=" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - {{ 'i18n.footer.file_a_bug' | i18n(locale) }} - </a> - </li> - <li> - <a href="https://github.com/googlechrome/web.dev" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> - {{ 'i18n.footer.view_source' | i18n(locale) }} - </a> - </li> - </ul> + <div class="site-footer__primary-nav-content"> + <a href="/" class="site-footer__brand brand"> + {{ svg('../../images/logo.svg', {label: 'web.dev'}) }} + </a> + <p class="text-size-0"> + {{ 'i18n.footer.mission' | i18n(locale) }} + </p> </div> - <div> - <h3 class="text-size-2 color-mid-text">{{ 'i18n.footer.related_content' | i18n(locale) }}</h3> - <ul class="w-footer__linkbox-list" role="list"> + <div class="site-footer__primary-nav-links auto-grid"> + <div> + <h3 class="text-size-2 color-mid-text">Contribute</h3> + <ul class="site-footer__linkbox-list" role="list"> <li> - <a href="https://developer.chrome.com/" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - {{ 'i18n.footer.developer_chrome_com' | i18n(locale) }} - </a> - </li> - <li> - <a href="https://blog.chromium.org/" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - {{ 'i18n.footer.chrome_updates' | i18n(locale) }} - </a> - </li> - <li> - <a href="https://developers.google.com/web/fundamentals" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> - {{ 'i18n.footer.web_fundamentals' | i18n(locale) }} - </a> - </li> - <li> - <a href="/tags/case-study/" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> - {{ 'i18n.footer.case_studies' | i18n(locale) }} - </a> - </li> - <li> - <a href="/podcasts/" - data-category="Podcasts" data-label="Footer Link (index 5)"> - {{ 'i18n.footer.podcasts' | i18n(locale) }} - </a> - </li> - <li> - <a href="/shows/" - data-category="Shows" data-label="Footer Link (index 6)"> - {{ 'i18n.footer.shows' | i18n(locale) }} - </a> - </li> - </ul> - </div> - <div> - <h3 class="text-size-2 color-mid-text">{{ 'i18n.footer.connect' | i18n(locale) }}</h3> - <ul class="w-footer__linkbox-list" role="list"> - <li> - <a href="https://www.twitter.com/ChromiumDev" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> - Twitter - </a> - </li> - <li> - <a href="https://www.youtube.com/user/ChromeDevelopers" - data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> - YouTube - </a> - </li> - </ul> + <a href="https://github.com/GoogleChrome/web.dev/issues/new?assignees=&labels=bug&template=bug_report.md&title=" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> + {{ 'i18n.footer.file_a_bug' | i18n(locale) }} + </a> + </li> + <li> + <a href="https://github.com/googlechrome/web.dev" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> + {{ 'i18n.footer.view_source' | i18n(locale) }} + </a> + </li> + </ul> + </div> + <div> + <h3 class="text-size-2 color-mid-text">{{ 'i18n.footer.related_content' | i18n(locale) }}</h3> + <ul class="site-footer__linkbox-list" role="list"> + <li> + <a href="https://developer.chrome.com/" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> + {{ 'i18n.footer.developer_chrome_com' | i18n(locale) }} + </a> + </li> + <li> + <a href="https://blog.chromium.org/" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> + {{ 'i18n.footer.chrome_updates' | i18n(locale) }} + </a> + </li> + <li> + <a href="/tags/case-study/" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)"> + {{ 'i18n.footer.case_studies' | i18n(locale) }} + </a> + </li> + <li> + <a href="/podcasts/" + data-category="Podcasts" data-label="Footer Link (index 5)"> + {{ 'i18n.footer.podcasts' | i18n(locale) }} + </a> + </li> + <li> + <a href="/shows/" + data-category="Shows" data-label="Footer Link (index 6)"> + {{ 'i18n.footer.shows' | i18n(locale) }} + </a> + </li> + </ul> + </div> + <div> + <h3 class="text-size-2 color-mid-text">{{ 'i18n.footer.connect' | i18n(locale) }}</h3> + <ul class="site-footer__linkbox-list" role="list"> + <li> + <a href="https://www.twitter.com/ChromiumDev" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)"> + Twitter + </a> + </li> + <li> + <a href="https://www.youtube.com/user/ChromeDevelopers" + data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)"> + YouTube + </a> + </li> + </ul> + </div> </div> </nav> <nav class="site-footer__brand-nav repel" aria-label="Google developers"> <ul class="cluster" role="list"> <li> <a href="https://developers.google.com/" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> - <img loading="lazy" width="185" height="33" class="w-footer__utility-logo" src="/images/lockup-color.png" + <img loading="lazy" width="185" height="33" class="site-footer__utility-logo" src="/images/lockup-color.png" alt="Google Developers" /> </a> </li> diff --git a/src/site/_includes/partials/site-header.njk b/src/site/_includes/partials/site-header.njk index a1f656641d6..abeef25ac26 100644 --- a/src/site/_includes/partials/site-header.njk +++ b/src/site/_includes/partials/site-header.njk @@ -2,16 +2,32 @@ <web-header role="banner" class="site-header"> <div class="cluster gutter-base"> - <button class="icon-button tooltip color-core-text md:hidden-yes" aria-labelledby="menu-button-toolip" data-open-drawer-button data-alignment="right"> + <button class="icon-button tooltip color-core-text md:hidden-yes" aria-labelledby="menu-button-toolip" data-open-drawer-button data-alignment="right" role="tooltip"> {% include "icons/menu.svg" %} - <span class="tooltip__content" id="menu-button-toolip">Open menu</span> + <span class="tooltip__content" id="menu-button-tooltip">Open menu</span> </button> <a href="/" class="site-header__brand brand"> - {{ svg('../../images/lockup.svg', {label: 'web.dev'}) }} + {{ svg('../../images/logo.svg', {label: 'web.dev'}) }} </a> </div> <web-navigation-drawer type="standard"> <nav class="site-header__nav" aria-label="main navigation" data-drawer-container> + <a + class="site-header__link" + href="/about/" + data-category="Site-Wide Custom Events" + data-label="Tab: About" + {% if page.url === '/about/' %}aria-current="page"{% endif %}> + {{ 'i18n.header.about' | i18n(locale) }} + </a> + <a + class="site-header__link" + href="/blog/" + data-category="Site-Wide Custom Events" + data-label="Tab: Blog" + {% if page.url === '/blog/' %}aria-current="page"{% endif %}> + {{ 'i18n.header.blog' | i18n(locale) }} + </a> <a class="site-header__link" href="/learn/" data-category="Site-Wide Custom Events" @@ -21,19 +37,18 @@ </a> <a class="site-header__link" - href="/measure/" - data-category="Site-Wide Custom Events" - data-label="Tab: Measure" - {% if page.url === '/measure/' %}aria-current="page"{% endif %}> - {{ 'i18n.header.measure' | i18n(locale) }} + href="/explore/" data-category="Site-Wide Custom Events" + data-label="Tab: Explore" + {% if page.url === '/explore/' %}aria-current="page"{% endif %}> + {{ 'i18n.header.explore' | i18n(locale) }} </a> <a class="site-header__link" - href="/blog/" + href="/patterns/" data-category="Site-Wide Custom Events" - data-label="Tab: Blog" - {% if page.url === '/blog/' %}aria-current="page"{% endif %}> - {{ 'i18n.header.blog' | i18n(locale) }} + data-label="Tab: Patterns" + {% if page.url === '/patterns/' %}aria-current="page"{% endif %}> + {{ 'i18n.header.patterns' | i18n(locale) }} </a> <a class="site-header__link" @@ -43,13 +58,6 @@ {% if page.url === '/tags/case-study/' %}aria-current="page"{% endif %}> {{ 'i18n.header.case_studies' | i18n(locale) }} </a> - <a - class="site-header__link" - href="/about/" - data-category="Site-Wide Custom Events" - data-label="Tab: About" {% if page.url === '/about/' %}aria-current="page"{% endif %}> - {{ 'i18n.header.about' | i18n(locale) }} - </a> <button class="icon-button tooltip color-core-text md:hidden-yes" data-drawer-close-button> {{ icon('close') }} <span class="tooltip__content">{{ 'i18n.common.close' | i18n(locale) }}</span> diff --git a/src/site/_includes/partials/subscribe.njk b/src/site/_includes/partials/subscribe.njk index 302f83fac04..fbcb1733523 100644 --- a/src/site/_includes/partials/subscribe.njk +++ b/src/site/_includes/partials/subscribe.njk @@ -1,4 +1,4 @@ -<web-subscribe> +<web-subscribe class="unresolved"> <div class="wrapper"> <div class="headline all-center flow"> <h2 class="headline__title">{{ subscribeTitle | default('Developer Newsletter', false) }}</h2> @@ -55,7 +55,17 @@ <option selected value="en-US">en-US</option> </select> </div> - <div class="g-recaptcha all-center gap-top-size-1" data-sitekey="{{ site.recaptchaSiteKey }}" data-callback="recaptchaSuccess"></div> + <div + class="g-recaptcha captcha all-center gap-top-size-1" + data-sitekey="{{ site.recaptchaSiteKey }}" + data-callback="recaptchaSuccess" + > + <div class="captcha__placeholder"> + <svg viewBox="0 0 6 6" class="spinner"> + <circle cx="3" cy="3" r="2.5" /> + </svg> + </div> + </div> <div class="gap-top-size-2"> <div class="subscribe__error hidden-yes"> {% Aside 'warning' %} diff --git a/src/site/_includes/partials/toc-inner.njk b/src/site/_includes/partials/toc-inner.njk index 7e9592edffd..2d1b9ceae34 100644 --- a/src/site/_includes/partials/toc-inner.njk +++ b/src/site/_includes/partials/toc-inner.njk @@ -5,7 +5,7 @@ {% if tocContents %} {% from 'macros/icon.njk' import icon with context %} - <div class="xl:hidden-yes flow-space-size-1"> + <div class="lg:hidden-yes flow-space-size-1"> <details data-type="inner" role="navigation" aria-label="{{ tocTitle if tocTitle else 'i18n.toc.toc' | i18n(locale) }}"> <summary> {{ tocTitle if tocTitle else 'i18n.toc.toc' | i18n(locale) }} diff --git a/src/site/_includes/partials/toc-side.njk b/src/site/_includes/partials/toc-side.njk index 4c9107988db..c7645310a7e 100644 --- a/src/site/_includes/partials/toc-side.njk +++ b/src/site/_includes/partials/toc-side.njk @@ -3,7 +3,7 @@ Set `tocTitle` to ovverride default title of ToC. #} {% if tocContents %} - <nav class="course__toc toc over-scroll hidden-yes xl:hidden-no" data-type="side" aria-label="{{ tocTitle if tocTitle else 'i18n.toc.toc' | i18n(locale) }}"> + <nav class="course__toc toc over-scroll hidden-yes lg:hidden-no" data-type="side" aria-label="{{ tocTitle if tocTitle else 'i18n.toc.toc' | i18n(locale) }}"> <div class="course-toc__heading font-google-sans weight-medium">{{ tocTitle if tocTitle else 'i18n.toc.toc' | i18n(locale) }}</div> <web-scroll-spy> <div class="toc__wrapper flow-recursive"> diff --git a/src/site/_includes/path.njk b/src/site/_includes/path.njk deleted file mode 100644 index 12c9ac07548..00000000000 --- a/src/site/_includes/path.njk +++ /dev/null @@ -1,90 +0,0 @@ ---- -layout: default-next -algolia_priority: 1.1 -eleventyComputed: - title: "{{paths[pathName].title | i18n(locale)}}" - description: "{{paths[pathName].description | i18n(locale)}}" - hero: "{{paths[pathName].cover}}" ---- - -{% from 'macros/icon.njk' import svg with context %} -{% set path = paths[pathName] %} -{% set topics = path.topics | removeDrafts %} - -<header class="hero"> - <div class="wrapper"> - <div class="hero__content--split"> - <div> - <h1 class="text-size-6">{{path.title | i18n(locale)}}</h1> - <p>{{path.description | i18n(locale)}}</p> - </div> - {% if path.cover %} - <div class="all-center"> - {% Img - fetchpriority="high", - height=220, - width=330, - src=path.cover, - alt="Collection cover image", - class="hero__content__img" - %} - </div> - {% endif %} - </div> - </div> -</header> - -{% if path.draft and site.env === 'dev' %} - <div class="banner bg-state-bad-bg color-core-text" role="banner"> - <div class="banner__content flow"> - 🚨 This path is a draft! 🚨 - </div> - </div> -{% endif %} - -<div class="wrapper pad-block-size-1"> - <div class="sidebar" data-direction="rtl"> - <div class="pad-block-size-1 flow"> - <h2>Overview</h2> - <p>{{path.overview | i18n(locale) | safe}}</p> - {% if path.youtubeId %} - {% YouTube path.youtubeId %} - {% endif %} - </div> - <div class="pad-block-size-1"> - <div class="toc"> - <div class="toc__content"> - <h2 class="toc__header">Table of Contents</h2> - <ul class="toc__list"> - {% for topic in topics %} - <li> - <div class="path__toc--item"> - {{ svg('../../images/icons/done.svg', {label: 'done'}) }} - <a href="#{{ topic.title | i18n(locale) | slug }}">{{topic.title | i18n(locale)}}</a> - </div> - </li> - {% if topic.subtopics %} - {% for section in topic.subtopics %} - <li> - <div class="path__toc--item"> - {{ svg('../../images/icons/done.svg', {label: 'done'}) }} - <a href="#{{ section.title | i18n(locale) | slug }}">{{ section.title | i18n(locale) }}</a> - </div> - </li> - {% endfor %} - {% endif %} - {% endfor %} - </ul> - </div> - </div> - </div> - </div> -</div> - -<hr/> - -{% for topic in topics %} - <div class="path__topic"> - {% include 'partials/topic.njk' %} - </div> -{% endfor %} diff --git a/src/site/_includes/pattern-page.njk b/src/site/_includes/pattern-page.njk index d2e7fab2f23..9c9f2d20bf0 100644 --- a/src/site/_includes/pattern-page.njk +++ b/src/site/_includes/pattern-page.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default pageScripts: - '/js/content.js' --- @@ -28,4 +28,4 @@ pageScripts: {% set crumbs = null %} {% endif %} -{% include 'partials/post-next.njk' %} +{% include 'partials/post.njk' %} diff --git a/src/site/_includes/pattern-set.njk b/src/site/_includes/pattern-set.njk index a7bc25fe1a8..45d1972b744 100644 --- a/src/site/_includes/pattern-set.njk +++ b/src/site/_includes/pattern-set.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default pageScripts: - '/js/content.js' --- diff --git a/src/site/_includes/post.njk b/src/site/_includes/post.njk index 24ee5f8aaa8..ec02028e04e 100644 --- a/src/site/_includes/post.njk +++ b/src/site/_includes/post.njk @@ -1,9 +1,9 @@ --- -layout: default-next +layout: default permalink: "/{{lang}}/{{page.fileSlug}}/index.html" tags: - post pageScripts: - '/js/content.js' --- -{% include 'partials/post-next.njk' %} +{% include 'partials/post.njk' %} diff --git a/src/site/_includes/sandbox/article.njk b/src/site/_includes/sandbox/article.njk deleted file mode 100644 index 8125c202ef6..00000000000 --- a/src/site/_includes/sandbox/article.njk +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: sandbox/layout ---- - -{% if hero %} - <figure> - <img src="{{ hero }}" alt=""> - </figure> -{% endif %} - -<article class="w-layout-container--narrow"> - <h2>Sample article with {{ title }}</h2> - <p> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin dictum a - massa sit amet ullamcorper. Suspendisse auctor ultrices ante, nec tempus - nibh varius at. Cras ligula lacus, porta vitae maximus a, ultrices a mauris. - Vestibulum porta dolor erat, vel molestie dolor posuere in. - </p> - {{ content | safe }} - <p> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin dictum a - massa sit amet ullamcorper. Suspendisse auctor ultrices ante, nec tempus - nibh varius at. Cras ligula lacus, porta vitae maximus a, ultrices a mauris. - Vestibulum porta dolor erat, vel molestie dolor posuere in. - </p> -</article> \ No newline at end of file diff --git a/src/site/_includes/sandbox/container.njk b/src/site/_includes/sandbox/container.njk deleted file mode 100644 index 0e96c65cb75..00000000000 --- a/src/site/_includes/sandbox/container.njk +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: sandbox/layout ---- - -<div class="w-layout-container"> - {{ content | safe }} -</div> \ No newline at end of file diff --git a/src/site/_includes/sandbox/layout.njk b/src/site/_includes/sandbox/layout.njk deleted file mode 100644 index dbfb7434114..00000000000 --- a/src/site/_includes/sandbox/layout.njk +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>{{title}} - - - - - - - - - - - - - {{ content | safe }} - - diff --git a/src/site/_includes/show.njk b/src/site/_includes/show.njk index 70ca65a13b1..5a844599e3a 100644 --- a/src/site/_includes/show.njk +++ b/src/site/_includes/show.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default --- {% set data = paged.data %}
diff --git a/src/site/_includes/spaces.njk b/src/site/_includes/spaces.njk index ab01aa6c944..b878dc6b1a6 100644 --- a/src/site/_includes/spaces.njk +++ b/src/site/_includes/spaces.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default --- {% macro twitterSpaceCard(space) %} @@ -66,7 +66,7 @@ layout: default-next
- {% Img src="image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/LKn1zx3kYtce65rHnnIj.svg", alt="Globe", width="600", height="488" %} + {% Img src="image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/LKn1zx3kYtce65rHnnIj.svg", alt="Globe", width="600", height="488", fetchpriority="high" %}
diff --git a/src/site/_includes/text.njk b/src/site/_includes/text.njk index 6390e884de2..183903fead2 100644 --- a/src/site/_includes/text.njk +++ b/src/site/_includes/text.njk @@ -1,5 +1,5 @@ --- -layout: default-next +layout: default ---
diff --git a/src/site/_plugins/markdown.js b/src/site/_plugins/markdown.js index 58216a9bc5a..5a149275f90 100644 --- a/src/site/_plugins/markdown.js +++ b/src/site/_plugins/markdown.js @@ -33,10 +33,10 @@ const markdown = md({ .use(require('markdown-it-anchor'), { level: 2, permalink: true, - permalinkClass: 'w-headline-link', + permalinkClass: 'headline-link', permalinkSymbol: '#', // @ts-ignore - slugify: (s) => slugify(s, {lower: true, remove: /[$*_+~.()'"!\-:@]+/g}), + slugify: (s) => slugify(s, {lower: true, remove: /[$*_+~.()'"!/\-:@?]+/g}), }) // Disable indented code blocks. // We only support fenced code blocks. diff --git a/src/site/_transforms/minify-html.js b/src/site/_transforms/minify-html.js index 39daf8a729b..b6e1bb6f0bd 100644 --- a/src/site/_transforms/minify-html.js +++ b/src/site/_transforms/minify-html.js @@ -37,6 +37,8 @@ const minifyHtml = (content, outputPath) => { do_not_minify_doctype: true, ensure_spec_compliant_unquoted_attribute_values: true, keep_spaces_between_attributes: true, + keep_html_and_head_opening_tags: true, + keep_closing_tags: true, }) .toString('utf-8'); } catch (err) { diff --git a/src/site/_transforms/purify-css.js b/src/site/_transforms/purify-css.js deleted file mode 100644 index fa0c5df854c..00000000000 --- a/src/site/_transforms/purify-css.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const fs = require('fs'); -/* eslint-disable node/no-unpublished-require */ -const PurgeCSS = require('purgecss').PurgeCSS; -const csso = require('csso'); -const path = require('path'); -const {URL} = require('url'); -const stagingUrls = - require('../../../tools/lhci/lighthouserc').ci.collect.url.map((url) => - path.join('dist', new URL(url).pathname, 'index.html'), - ); -const pathToCss = 'dist/css/main.css'; -const isProd = process.env.ELEVENTY_ENV === 'prod'; -const isStaging = process.env.ELEVENTY_ENV === 'staging'; - -/** - * Inlines all of the page's CSS into the - */ - -const purifyCss = async (content, outputPath) => { - if ( - (isProd && - outputPath && - outputPath.endsWith('.html') && - !/data-style-override/.test(content)) || - (isStaging && stagingUrls.includes(outputPath)) - ) { - const before = fs.readFileSync(pathToCss, { - encoding: 'utf-8', - }); - - const purged = await new PurgeCSS().purge({ - // Here we take the actual text of the current page and give it to - // PurgeCss to grep and look for any strings that match the regex listed - // in the `defaultExtractor`. - // In addition, we tell it to look at all of our js files. - // Really all it's doing is looking for strings like ".some-class" and if - // it appears in either the js bundle or the page html, it preserves that - // class in the CSS. All other classes/selectors/etc will get purged. - // The Tailwind docs have a nice explainer: - // https://tailwindcss.com/docs/optimizing-for-production#writing-purgeable-html - content: [ - { - raw: content, - extension: 'html', - }, - './src/lib/**/*.js', - ], - css: [ - { - raw: before, - }, - ], - defaultExtractor: (content) => { - return content.match(/[A-Za-z0-9\\:_-]+/g) || []; - }, - }); - - const after = csso.minify(purged[0].css).css; - if (!after.length) { - throw new Error(`Minified CSS for ${outputPath} has no length.`); - } - content = content.replace( - '', - ``, - ); - return content; - } - - return content; -}; - -module.exports = {purifyCss}; diff --git a/src/site/_utils/browserCompat.js b/src/site/_utils/browserCompat.js deleted file mode 100644 index d08cc2cf7fd..00000000000 --- a/src/site/_utils/browserCompat.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const {AssetCache} = require('@11ty/eleventy-cache-assets'); - -// TODO: can we import the whole /types node in JS? -/** @typedef {import('@mdn/browser-compat-data/types').CompatStatement} CompatStatement */ -/** @typedef {import('@mdn/browser-compat-data/types').PrimaryIdentifier} PrimaryIdentifier */ - -/** - * Flatten a tree of data into a flat object (prep for lookup by key). - * - * @param {PrimaryIdentifier} obj - * @param {string} prefix - * @return {{[id: string]: CompatStatement}} - */ -function walk(obj, prefix = '') { - /** @type {{[id: string]: CompatStatement}} */ - const result = {}; - for (const [key, value] of Object.entries(obj)) { - if (typeof value === 'object' && value !== null) { - const prefix_ = prefix + (prefix ? '.' : '') + key; - if (value.__compat) { - result[prefix_] = value.__compat; - delete value.__compat; - } - Object.assign(result, walk(value, prefix_)); - } - } - return result; -} - -/** @type {{[id: string]: CompatStatement}|undefined} */ -let cachedBcd; - -module.exports = function () { - // nb. Parsing this file every time takes ~150ms on an i9 (and results in ~9mb of JSON). So using - // the cache is a speedup but perhaps less than you think... - - if (!cachedBcd) { - const asset = new AssetCache('bcd_data'); - if (asset.isCacheValid('1d')) { - // eleventy-cache-assets exposes the raw path. - // Internally it's doing require() too, but it's wrapped in a Promise, - // so do this synchronously. - cachedBcd = require(asset.getCachedContentsPath('json')); - } else { - const bcd = require('@mdn/browser-compat-data'); - cachedBcd = walk(bcd); - - // Don't wait for the save, since we're trying to be sync. - // The plugin does this with "fs.promises", so we can't block. - asset.save(cachedBcd, 'json').catch((err) => { - console.warn('failed to update cached bcd', err); - }); - } - } - - return cachedBcd; -}; diff --git a/src/site/content/de/blog/user-agent-client-hints/index.md b/src/site/content/de/blog/user-agent-client-hints/index.md deleted file mode 100644 index ffd095de8ae..00000000000 --- a/src/site/content/de/blog/user-agent-client-hints/index.md +++ /dev/null @@ -1,348 +0,0 @@ ---- -title: Verbesserung des Datenschutzes und der Entwicklererfahrung mit User-Agent-Client-Hinweisen -subhead: User-Agent-Client-Hinweise (User-Agent Client Hints) sind eine neue Erweiterung des Client-Hinweise-APIs (Client Hints API), die Entwicklern auf datenschutzerhaltende und ergonomische Weise Zugriff auf Browserinformationen eines Benutzers ermöglicht. -authors: - - rowan_m - - yoavweiss -date: 2020-06-25 -updated: 2021-09-10 -hero: image/admin/xlg4t3uiTp0L5TBThFHQ.jpg -thumbnail: image/admin/hgxRNa56Vb9o3QRwIrm9.jpg -alt: Eine Blaupause einer Brücke und einige alte Werkzeuge für Entwurfszeichnungen. -tags: - - blog - - privacy - - security -feedback: - - api ---- - -{% YouTube 'f0YY0o2OAKA' %} - -Client-Hinweise ermöglichen es Entwicklern, aktiv Informationen über das Gerät des Benutzers oder dessen Zustand anzufordern, anstatt sie aus dem User-Agent-String (UA) parsen zu müssen. Die Bereitstellung dieser alternativen Möglichkeit ist der erste Schritt auf dem Weg zur Reduktion der Granularität des Benutzer-Agent-Strings. - -Erfahren Sie, wie Sie die vorhandenen Funktionen, die auf dem Parsen des User-Agent-Strings basieren, aktualisieren und stattdessen User-Agent-Client-Hinweise verwenden. - -{% Aside 'caution' %} Wenn Sie bereits User-Agent-Client-Hinweise verwenden, beachten Sie, dass sich das Header-Format seit Chrome 90 dahingehend geändert hat, dass die Accept-CH-Token nun genau mit den zurückgesendeten Headern übereinstimmen müssen. {% endAside %} - -## Hintergrund - -Wenn Webbrowser Anfragen stellen, enthalten diese Informationen über den Browser und seine Umgebung, damit Server diese analysieren können und ihre Antworten daran anpassen können. Wie dies geschieht, wurde bereits 1996 festgelegt (RFC 1945 für HTTP/1.0). In diesem Text findet sich die [ursprüngliche Definition des User-Agent-Strings](https://tools.ietf.org/html/rfc1945#section-10.15) mit einem darauf folgenden Beispiel: - -```text -User-Agent: CERN-LineMode/2.15 libwww/2.17b3 -``` - -Dieser Header sollte in der Reihenfolge ihrer Wichtigkeit das Produkt (z. B. Browser oder Bibliothek) sowie einen Kommentar (z. B. Versionsnummer) beinhalten. - -### Der Zustand des User-Agent-Strings - -Im Laufe der *Jahrzehnte* hat dieser String eine Vielzahl zusätzlicher Details (sowie zur Abwärtskompatibilität einigen Datenmüll) zu den Clients, von denen die Anfragen ausgehen, aufgenommen. Wir können dies sehen, wenn wir uns den aktuellen User-Agent-String von Chrome ansehen: - -```text -Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4076.0 Mobile Safari/537.36 -``` - -Der obige String enthält Informationen über das Betriebssystem des Benutzers, z. B. dessen Versionsnummer; das Gerätemodell; die Gerätemarke sowie die vollständige Versionsnummer des Browsers; genügend Hinweise, die darauf schließen lassen können, ob es sich um einen mobilen Browser handelt; ganz zu schweigen von einer Reihe von Verweisen auf andere Browser aus historischen Gründen. - -Die Kombination dieser Parameter mit ihrer schieren Vielfalt möglicher Werte bedeutet, dass der User-Agent-String genügend Informationen enthalten kann, um einzelne Benutzer eindeutig zu identifizieren. Wenn Sie Ihren eigenen Browser bei [AmIUnique](https://amiunique.org/) überprüfen, können Sie sehen, wie genau **Sie** anhand **Ihres** User-Agent-Strings identifiziert werden können. Je niedriger Ihre resultierende „Similarity ratio“ (Ähnlichkeitsverhältnis) ist, desto einzigartiger sind Ihre Anfragen und umso einfacher ist es für Server, Sie heimlich zu tracken. - -Für den User-Agent-String gibt es viele legitime [Anwendungsfälle](https://wicg.github.io/ua-client-hints/#use-cases) und er dient Entwicklern und Websitebetreibern zu einem wichtigen Zweck. Es ist jedoch ebenfalls wichtig, dass die Privatsphäre der Benutzer vor verdeckten Trackingmethoden geschützt wird, und das standardmäßige Senden von UA-Informationen läuft diesem Ziel zuwider. - -Ebenso ist klar, dass die Webkompatibilität des User-Agent-Strings verbessert werden muss. Er ist unstrukturiert, was beim Parsen zu unnötiger Komplexität führt und oft Ursache für Fehler und Probleme mit der Webseitenkompatibilität ist, die den Benutzern schaden. Diese Probleme treffen Benutzer weniger verbreiteter Browser unverhältnismäßig, da Websites möglicherweise nicht mit ihren Konfigurationen getestet wurden. - -## Vorstellung der neuen User-Agent-Client-Hinweise - -[User-Agent-Client-Hinweise](https://github.com/WICG/ua-client-hints#explainer-reducing-user-agent-granularity) ermöglichen den Zugriff auf dieselben Informationen, allerdings auf eine datenschutzfreundlichere Weise, wodurch es Browsern wiederum ermöglicht wird, die Standardeinstellung des User-Agent-Strings, alles zu übertragen, einzuschränken. [Client-Hinweise](https://datatracker.ietf.org/doc/html/rfc8942) erzwingen ein Modell, bei dem der Server den Browser nach einer Reihe von Daten über den Client (den Hinweisen) fragen muss und der Browser seine eigenen Richtlinien oder Benutzerkonfigurationen anwendet, um zu bestimmen, welche Daten zurückgesendet werden. Dies bedeutet, dass der Zugriff jetzt explizit und überprüfbar verwaltet wird, anstatt dass standardmäßig **alle** User-Agent-Informationen offengelegt werden. Entwickler profitieren darüber hinaus von einem einfacheren API – jetzt ganz ohne regulärer Ausdrücke! - -Die aktuelle Auswahl von Client-Hinweisen beschreibt hauptsächlich die Anzeige- und Verbindungsfunktionen des Browsers. Sie können die Details unter [Automatisieren der Ressourcenauswahl mit Client-Hinweisen](https://developer.chrome.com/blog/automating-resource-selection-with-client-hints/) erkunden. Hier ist dennoch eine kurze Erinnerung dazu, wie der Prozess abläuft: - -Der Server fragt per Header nach bestimmten Client-Hinweise: - -⬇️ *Antwort vom Server* - -```text -Accept-CH: Viewport-Width, Width -``` - -Oder ein Meta-Tag: - -```html - -``` - -Der Browser kann dann die folgenden Header in nachfolgenden Anfragen zurücksenden: - -⬆️ *Nachfolgende Anfrage* - -```text -Viewport-Width: 460 -Width: 230 -``` - -Der Server kann variable Antworten zurücksenden, beispielsweise indem er Bilder stets mit geeigneter Auflösung bereitstellt. - -{% Aside %} Diskussionen über die Aktivierung von Client-Hinweisen bei Erstanfragen halten an, Sie sollten jedoch ein [responsives Design](/responsive-web-design-basics) oder eine progressive Erweiterung (Progressive Enhancement) in Betracht ziehen, bevor Sie diesen Weg einschlagen. {% endAside %} - -User-Agent Client-Hinweise erweitern den Eigenschaftsbereich mit dem `Sec-CH-UA`-Präfix, das über den `Accept-CH`-Server-Antwort-Header angegeben werden kann. Beachten Sie für weitere Details [die Erläuterung](https://github.com/WICG/ua-client-hints/blob/main/README.md) und sehen Sie sich den [vollständigen Vorschlag](https://wicg.github.io/ua-client-hints/) an. - -{% Aside %} Client-Hinweise werden **nur über sichere Verbindungen** gesendet. Stellen Sie daher sicher, dass Sie [Ihre Webseite zu HTTPS migriert](/why-https-matters) haben. {% endAside %} - -## User-Agent-Client-Hinweise von Chromium 89 - -User-Agent-Client-Hinweise sind in Chrome seit Version 89 standardmäßig aktiviert. - -Standardmäßig meldet der Browser die Browsermarke, die relevante Version bzw. die Hauptversion, die Plattform sowie einen Indikator der anzeigt, ob der Client ein mobiles Gerät ist, zurück: - -⬆️ *Alle Anfragen* - -```text -Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99" -Sec-CH-UA-Mobile: ?0 -Sec-CH-UA-Platform: "macOS" -``` - -{% Aside 'caution' %} Diese Eigenschaften sind komplexer als nur ein einzelner Wert, daher werden [strukturierte Header](https://httpwg.org/http-extensions/draft-ietf-httpbis-header-structure.html) zur Darstellung von Listen und booleschen Werten verwendet. {% endAside %} - -### User-Agent-Antwort und Anforderungsheader - - - -⬇️ Antwort `Accept-CH`
⬆️ Anfrageheader | ⬆️Anfrage
Beispielwert | Beschreibung ---- | --- | --- -`Sec-CH-UA` | `"Chromium";v="84",`
`"Google Chrome";v="84"` | Liste der Browsermarken und ihrer relevanten Versionen. -`Sec-CH-UA-Mobile` | `?1` | Boolescher Wert, der angibt, ob sich der Browser auf einem Mobilgerät befindet ( `?1` für wahr) oder nicht (`?0` für falsch). -`Sec-CH-UA-Full-Version` | `"84.0.4143.2"` | [**Deprecated**]The complete version for the browser. -`Sec-CH-UA-Full-Version-List` | `"Chromium";v="84.0.4143.2",`
`"Google Chrome";v="84.0.4143.2"` | List of browser brands and their full version. -`Sec-CH-UA-Platform` | `"Android"` | Die Plattform des Geräts, normalerweise das Betriebssystem (OS). -`Sec-CH-UA-Platform-Version` | `"10"` | Die Versionsnummer der Plattform oder des Betriebssystems. -`Sec-CH-UA-Arch` | `"arm"` | Die zugrunde liegende Architektur des Geräts. Obwohl dies für das Anzeigen der Seite möglicherweise nicht relevant ist, möchte die Seite gegebenenfalls eine Seitenversion bereitstellen, die standardmäßig das richtige Format verwendet. -`Sec-CH-UA-Model` | `"Pixel 3"` | Das Gerätemodell. -`Sec-CH-UA-Bitness` | `"64"` | Die Bitanzahl der zugrunde liegenden Architektur (d. h. die Größe einer Ganzzahl oder Speicheradresse in Bits) - -{% Aside 'gotchas' %} Datenschutz- und Kompatibilitätsüberlegungen führen eventuell dazu, dass Werte unbestimmt bleiben, nicht zurückgemeldet oder mit anderen Werten gefüllt werden. Dies wird als [GREASE](https://wicg.github.io/ua-client-hints/#grease) bezeichnet. {% endAside %} - -### Beispielhafter Datenaustausch - -Ein Beispiel eines Datenaustausches würde so aussehen: - -⬆️ *Erstanfrage vom Browser*
Der Browser fordert die Seite `/downloads` von der Website an und sendet seinen standardmäßigen User-Agent. - -```text -GET /downloads HTTP/1.1 -Host: example.site - -Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99" -Sec-CH-UA-Mobile: ?1 -Sec-CH-UA-Platform: "Android" -``` - -⬇️ *Antwort vom Server*
Der Server sendet die Seite zurück und fragt zusätzlich nach der vollständigen Versionsnummer und nach der Plattform. - -```text -HTTP/1.1 200 OK -Accept-CH: Sec-CH-UA-Full-Version-List -``` - -⬆️ *Folgeanfragen*
Der Browser gewährt dem Server Zugriff auf die zusätzlichen Informationen und sendet die zusätzlichen Hinweise bei allen nachfolgenden Anfragen zurück. - -```text -GET /downloads/app1 HTTP/1.1 -Host: example.site - -Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98" -Sec-CH-UA-Mobile: ?1 -Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0" -Sec-CH-UA-Platform: "Android" -``` - -### JavaScript-API - -Neben den Headern kann der User-Agent auch per JavaScript über `navigator.userAgentData` abgegriffen werden. Auf die standardmäßigen Header-Informationen von `Sec-CH-UA`, `Sec-CH-UA-Mobile` und `Sec-CH-UA-Platform` kann über die Eigenschaften `brands` bzw. `mobile` zugegriffen werden: - -```js -// Log the brand data -console.log(navigator.userAgentData.brands); - -// output -[ - { - brand: 'Chromium', - version: '93', - }, - { - brand: 'Google Chrome', - version: '93', - }, - { - brand: ' Not;A Brand', - version: '99', - }, -]; - -// Log the mobile indicator -console.log(navigator.userAgentData.mobile); - -// output -false; - -// Log the platform value -console.log(navigator.userAgentData.platform); - -// output -"macOS"; -``` - -Der Zugriff auf die zusätzlichen Werte erfolgt über den Aufruf `getHighEntropyValues()`. Der Begriff „high entropy“ (hohe Entropie) bezieht sich auf die [Informationsentropie](https://en.wikipedia.org/wiki/Entropy_(information_theory)), mit anderen Worten: die Menge an Informationen, die diese Werte über den Browser des Benutzers preisgeben. Wie beim Anfordern der zusätzlichen Header hängt es vom Browser ab, welche Werte, zurückgesendet werden oder ob überhaupt welche zurückgesendet werden. - -```js -// Log the full user-agent data -navigator - .userAgentData.getHighEntropyValues( - ["architecture", "model", "bitness", "platformVersion", - "fullVersionList"]) - .then(ua => { console.log(ua) }); - -// output -{ - "architecture":"x86", - "bitness":"64", - "brands":[ - { - "brand":" Not A;Brand", - "version":"99" - }, - { - "brand":"Chromium", - "version":"98" - }, - { - "brand":"Google Chrome", - "version":"98" - } - ], - "fullVersionList":[ - { - "brand":" Not A;Brand", - "version":"99.0.0.0" - }, - { - "brand":"Chromium", - "version":"98.0.4738.0" - }, - { - "brand":"Google Chrome", - "version":"98.0.4738.0" - } - ], - "mobile":false, - "model":"", - "platformVersion":"12.0.1" -} -``` - -### Demo - -Sie können sowohl die Header als auch das JavaScript-API auf Ihrem eigenen Gerät unter [user-agent-client-hints.glitch.me](https://user-agent-client-hints.glitch.me) ausprobieren. - -{% Aside %} Vergewissern Sie sich, dass Sie Chrome 89 oder höher verwenden. {% endAside %} - -### Lebensdauer eines Hinweises und Zurücksetzen - -Hinweise, die über den Header `Accept-CH` angegeben werden, werden entweder lediglich für die Dauer der Browsersitzung gesendet oder bis ein anderer Satz von Hnweisen angegeben wird. - -Wenn der Server also den folgenden Header sendet: - -⬇️ *Antwort* - -```text -Accept-CH: Sec-CH-UA-Full-Version-List -``` - -Then the browser will send the `Sec-CH-UA-Full-Version-List` header on all requests for that site until the browser is closed. - -⬆️ *Folgeanfragen* - -```text -Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0" -``` - -Wenn jedoch ein weiterer `Accept-CH`-Header empfangen wird, wird dies die gerade vom Browser gesendeten Hinweise **vollständig ersetzen**. - -⬇️ *Antwort* - -```text -Accept-CH: Sec-CH-UA-Bitness -``` - -⬆️ *Folgeanfragen* - -```text -Sec-CH-UA-Platform: "64" -``` - -The previously asked-for `Sec-CH-UA-Full-Version-List` **will not be sent**. - -Stellen Sie sich den `Accept-CH`-Header am besten als eine Information vor, die den vollständigen Satz von von dieser Seite erwünschten Hinweise angibt, und dessen Empfang zur Folge hat, dass Browser die angegebenen Hinweise dann für alle Unterressourcen auf dieser Webseite mitsenden. Auch wenn Hinweise bis zum nächsten Seitennavigationsereignis bestehen bleiben, sollte sich die Website nicht darauf verlassen oder davon ausgehen, dass sie überhaupt gesendet werden. - -{% Aside 'success' %} Stellen Sie immer sicher, dass Sie auch ohne diese Informationen ein sinnvolles Nutzungserlebnis bieten können. Client-Hinweise sollen die Benutzererfahrung bereichern und sie nicht definieren. Deshalb werden sie auch „Hinweise“ genannt und nicht „Antworten“ oder „Anforderungen“! {% endAside%} - -Sie können mithilfe des Headers auch alle vom Browser gesendeten Hinweise effektiv löschen, indem Sie eine leere `Accept-CH`-Antwort senden. Erwägen Sie dies überall dort, wo Benutzer Einstellungen zurücksetzen oder sich von Ihrer Webseite abmelden. - -Dieses Muster entspricht auch der Funktionsweise von Hnweise über das Tag ``. Die angeforderten Hinweise werden nur auf Anfragen hin gesendet, die von der Seite initiiert wurden und nicht bei einer späteren Seitennavigation. - -### Der Umfang von Hinweisen und Cross-Origin-Anfragen - -Standardmäßig werden Client-Hinweise nur bei Same-Origin-Anfragen gesendet. Das heißt, dass wenn Sie Hinweise unter `https://example.com` anfordern, die Ressourcen, die Sie optimieren möchten, sich jedoch unter `https://downloads.example.com` befinden, in der Antwort **keine** Hinweise für diese Seite enthalten sein werden. - -Um Hinweise für Cross-Origin-Anfragen zuzulassen, muss jeder Hinweis und jede Origin (Ausgangspunkt) mit einem `Permissions-Policy`-Header angegeben werden. Um dies auf einen User-Agent-Client-Hinweis anzuwenden, müssen Sie den Hinweis klein schreiben und das Präfix `sec-` entfernen. Zum Beispiel: - -⬇️ *Antwort von `example.com`* - -```text -Accept-CH: Sec-CH-UA-Platform-Version, DPR -Permissions-Policy: ch-ua-platform-version=(self "downloads.example.com"), - ch-dpr=(self "cdn.provider" "img.example.com"); -``` - -⬆️ *Anfrage an `downloads.example.com`* - -```text -Sec-CH-UA-Platform-Version: "10" -``` - -⬆️ *Anfragen an `cdn.provider` oder `img.example.com`* - -```text -DPR: 2 -``` - -## Wo werden User-Agent-Client-Hinweise verwendet? - -Die schnelle Antwort ist, dass Sie alle Instanzen umgestalten sollten, in denen Sie entweder den User-Agent-Header parsen oder einen der JavaScript-Aufrufe verwenden, die auf dieselben Informationen zugreifen (z. B.`navigator.userAgent`, `navigator.appVersion` oder `navigator.platform`). Verwenden Sie stattdessen User-Agent-Client-Hinweise. - -Wenn Sie noch einen Schritt weiter gehen möchten, dann sollten Sie Ihre Nutzung von User-Agent-Informationen überdenken und diese Praxis nach Möglichkeit durch andere Methoden ersetzen. Häufig können Sie dasselbe Ziel erreichen, indem Sie progressive Erweiterung, Funktionserkennung oder [responsives Design](/responsive-web-design-basics) anwenden. Das grundlegende Problem dabei, sich auf die User-Agent-Daten zu verlassen besteht darin, dass Sie immer eine Zuordnung zwischen der zu untersuchenden Eigenschaft und dem von ihr aktivierten Verhalten beibehalten. Dies stellt einen Wartungsaufwand dar, da gewährleistet werden muss, dass Ihre Erkennung umfassend ist und auf dem neuesten Stand bleibt. - -Unter Berücksichtigung dieser Vorbehalte listet das [Repository für User-Agent-Client-Hinweise](https://wicg.github.io/ua-client-hints/#use-cases) einige gültige Anwendungsfälle bei Websites auf. - -## Was passiert mit dem User-Agent-String? - -Der Plan besteht darin, Möglichkeiten für verdecktes Tracking im Web zu minimieren, indem die Menge der zur Identifikation nutzbaren Informationen reduziert wird, die durch den vorhandenen User-Agent-String offengelegt werden, ohne dass es dabei zu unnötigen Unterbrechungen auf bestehenden Websites kommt. Mit der Einführung von User-Agent-Client-Hinweise ergibt sich Ihnen jetzt die Möglichkeit, diese neuen Funktionen zu verstehen und mit ihnen zu experimentieren, bevor irgendwelche Änderungen an den User-Agent-Strings vorgenommen werden. - -[Am Ende](https://blog.chromium.org/2021/05/update-on-user-agent-string-reduction.html) werden die Informationen im User-Agent-String reduziert, sodass nur noch das Legacy-Format sowie der gleiche High-Level-Browser beibehalten, relevante Versionsinformationen aber nun gemäß der standardmäßigen Client-Hinweise bereitgestellt werden. In Chromium wurde diese Änderung auf mindestens 2022 verschoben, um dem Ökosystem zusätzliche Zeit zu geben, die neuen Funktionen der User-Agent-Client-Hinweise zu evaluieren. - -Sie können eine Version dieser Funktion testen, indem Sie das Flag `about://flags/#reduce-user-agent` unter Chrome 93 aktivieren (Hinweis: Dieses Flag hatte in den Chrome-Versionen 84-92 die Bezeichnung `about://flags/#freeze-user-agent`). Diese Einstellung wird aus Kompatibilitätsgründen einen String mit historischen Einträgen, aber mit bereinigten Detailangaben zurücksenden. Zum Beispiel so etwas wie: - -```text -Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36 -``` - -*Photo by [Sergey Zolkin](https://unsplash.com/@szolkin?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/photos/m9qMoh-scfE?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)* diff --git a/src/site/content/de/de.11tydata.js b/src/site/content/de/de.11tydata.js index eef4c2902e7..46f40a871ba 100644 --- a/src/site/content/de/de.11tydata.js +++ b/src/site/content/de/de.11tydata.js @@ -12,7 +12,7 @@ const lang = require('./lang'); module.exports = function () { const paths = [ - allPaths['learn-web-vitals'], + allPaths['learn-core-web-vitals'], allPaths['progressive-web-apps'], allPaths['accessible'], allPaths['fast'], diff --git a/src/site/content/en/about/index.md b/src/site/content/en/about/index.md index c79fd81796a..3582ccaa052 100644 --- a/src/site/content/en/about/index.md +++ b/src/site/content/en/about/index.md @@ -1,49 +1,59 @@ --- -layout: 'about-next' +layout: 'about' title: 'About web.dev' -intro: - title: 'Building a better web, together' +banner: + eyebrow: 'About web.dev' + title: 'Guidance from Chrome Developer Relations' summary: | - Google believes in an open, accessible, private, and secure web. We want to help developers take advantage of the latest modern technologies to build amazing user experiences for everyone. - sectionHeading: 'Google’s contributions' -pods: - - title: 'Providing guidance for modern web development' - summary: 'web.dev’s mission is to help developers build best-in-class web experiences on any browser.' - brand: 'lockup.svg' - alt: 'web.dev' - actions: - - text: 'How-tos' - url: '/learn' - - text: 'Case Studies' - url: '/tags/case-study/' - decor: - src: 'image/VbAJIREinuYvovrBzzvEyZOpw5w1/yqsykCBpsiVTwcs286tS.png' - width: '188' - height: '175' - - title: 'Innovating to push the web forward' - summary: 'Chrome’s mission is to help people get the most out of the web by building the most innovative browser possible.' - brand: 'lockup-chrome-dev.svg' - alt: 'Google Chrome' - actions: - - text: 'Chrome Developers' - url: 'https://developer.chrome.com/' - decor: - src: 'image/VbAJIREinuYvovrBzzvEyZOpw5w1/wCIKJFYjeU3bDsxbVLkE.png' - width: '259' - height: '147' -otherResources: - title: 'Other Resources' + We want to help you build beautiful, accessible, fast, and secure websites that work cross-browser, and for all of your users. This site is our home for content to help you on that journey, written by members of the Chrome team, and external experts. + image: 'image/jxu1OdD7LKOGIDU7jURMpSH2lyK2/R8GB4ZvgVvy4gimaqrXs.png' + imageWidth: '546' + imageHeight: '421' +intro: + title: 'On this site' + summary: + - paragraph: Explore our archive of content, covering subjects across the web development stack. Find the latest news and content on our blog, and discover content by groups on the explore page. + - paragraph: For complete courses on key web development topics, check out Learn. Developed by industry experts, these courses take you right through a subject. They are structured to allow you to just dip into one or two modules of interest too. + - paragraph: Want some grab and go code? Our Patterns break down common web development requirements. Whether you want to understand how to approach a certain UI component, or need to know how to copy an image to the clipboard, you’ll find a solution there. + - paragraph: To help you make a case for work on UI or Performance, we have case studies. Find out how other companies have used metrics such as Core Web Vitals to see real results. And, if that’s quite enough reading for one day we also have a great archive of podcasts and other shows, plus recordings of our Twitter Space sessions with members of the Chrome team. + - paragraph: We believe that a web with multiple browser engines is important, and that web sites and applications should work well no matter which browser your visitors use. We know that you care about that too, and so content on this site should have cross-browser status clearly explained. You’ll see that many articles have a component showing browser support—the data comes from our friends at MDN, via the Browser Compat Data project that powers the data on MDN pages. +theTeam: + title: 'The team' + subTitle: 'This site is brought to you by the Chrome DevRel team led by:' + authors: + - name: paulkinlan + role: DevRel lead + - name: rachelandrew + role: Content lead + - name: rowan_m + role: SPPI lead + - name: andreban + role: Infrastructure lead + - name: philipwalton + role: Performance Lead + - name: una + role: CSS and UI lead + - name: alispivak + role: Chrome extensions lead + - name: petelepage + role: Advanced apps lead + - name: ewagasperowicz + role: Tech lead + primaryButtonText: 'See our authors' + primaryButtonUrl: '/authors/' +developers: + title: 'Making the web better for tomorrow' summary: | - Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Curabitur blandit tempus porttitor. - decor: - src: 'image/VbAJIREinuYvovrBzzvEyZOpw5w1/B9KWrQo39fXbKSVYjz1e.svg' - width: '330' - height: '210' - pairs: - - title: 'Chrome Updates' - link: '#' - summary: 'Donec id elit non mi porta gravida at eget metus.' - - title: 'Google Chrome Developers on Youtube' - link: 'https://www.youtube.com/c/GoogleChromeDevelopers/videos' - summary: 'Keep up to date with all that’s new on the web platform with videos from the Chrome team.' + We hope web.dev helps you to create high quality web experiences today. The Chrome team is also working to make the web better tomorrow. If you want to learn more about what we are doing, and offer feedback on the features we are developing and contributing to, check out Chrome Developers. + primaryButtonText: 'Chrome Developers' + primaryButtonUrl: 'https://developer.chrome.com/' +coupledColumn: + - icon: 'icons/spotted.svg' + title: 'Spotted an error?' + summary: | + Please raise an issue with information about the page and what’s wrong, and we’ll take a look. + - icon: 'icons/edit.svg' + title: 'Want to contribute?' + summary: | + We feature articles and larger sections of content from external authors. If you would like to pitch an article, contact Rachel Andrew with an outline of your idea. --- diff --git a/src/site/content/en/accessible/color-and-contrast-accessibility/index.md b/src/site/content/en/accessible/color-and-contrast-accessibility/index.md index 5f5fb3b7388..1482c4a042c 100644 --- a/src/site/content/en/accessible/color-and-contrast-accessibility/index.md +++ b/src/site/content/en/accessible/color-and-contrast-accessibility/index.md @@ -46,7 +46,7 @@ Open DevTools, click Audits, and select Accessibility to run the report. {% Img src="image/admin/vSFzNOurQO6z2xV6qWuW.png", alt="A screenshot of the output of an audit for color contrast.", width="800", height="218" %} -Chrome also includes an experimental feature to help you [detect all the low contrast texts of your page](https://developers.google.com/web/updates/2020/10/devtools#css-overview). You can also use the [accessible color suggestion](https://developers.google.com/web/updates/2020/08/devtools#accessible-color) to fix the low contrast text. +Chrome also includes an experimental feature to help you [detect all the low contrast texts of your page](https://developer.chrome.com/blog/new-in-devtools-87/#css-overview). You can also use the [accessible color suggestion](https://developer.chrome.com/blog/new-in-devtools-86/#accessible-color) to fix the low contrast text.
{% Img src="image/admin/VYZeK2l2vs6pIoWhH2hO.png", alt="A screenshot of the output of the Chrome low contrast text experimental feature.", width="800", height="521" %} @@ -72,7 +72,7 @@ The contrast is calculated based on the following features: - Text color (perceived lightness difference between text and background) - Context (ambient light, surroundings, and intended purpose of the text) -Chrome includes an [experimental feature to replace the AA/AAA contrast ratio guidelines with APCA](https://developers.google.com/web/updates/2021/01/devtools#apca). +Chrome includes an [experimental feature to replace the AA/AAA contrast ratio guidelines with APCA](https://developer.chrome.com/blog/new-in-devtools-89/#apca).
{% Img src="image/admin/YhGKRLYvt37j3ldlwiXE.png", alt="A screenshot of the output of the APCA feature in Chrome.", width="800", height="543" %} @@ -123,7 +123,7 @@ If you're curious about how your site looks to different people, or if you rely heavily on the use of color in your UI, you can use DevTools to simulate various forms of visual impairment, including different types of color blindness. -Chrome includes an [Emulate Vision Deficiencies feature](https://developers.google.com/web/updates/2020/03/devtools#vision-deficiencies). +Chrome includes an [Emulate Vision Deficiencies feature](https://developer.chrome.com/blog/new-in-devtools-83/#vision-deficiencies). To access it open DevTools and then open the **Rendering** tab in the Drawer, you can then emulate the following color deficiencies. diff --git a/src/site/content/en/accessible/headings-and-landmarks/index.md b/src/site/content/en/accessible/headings-and-landmarks/index.md index 8784d4c56d4..513b11c71f0 100644 --- a/src/site/content/en/accessible/headings-and-landmarks/index.md +++ b/src/site/content/en/accessible/headings-and-landmarks/index.md @@ -9,7 +9,7 @@ description: | improve the navigation experience for users of assitive technology. --- -{% include 'content/lighthouse-accessibility/why-headings.njk' %} +{% include 'content/why-headings.njk' %} ## Use headings to outline the page @@ -18,7 +18,7 @@ to create a skeleton or scaffold of the page such that anyone navigating by headings can form a mental picture. A common practice is to use a single `h1` for the primary headline or logo on a -page, `h2`s to designate major sections, and `h3`'s in supporting subsections: +page, `h2` elements to designate major sections, and `h3` elements in supporting subsections: ```html

Company name

@@ -44,7 +44,7 @@ headlines: {% Img src="image/admin/CdBjBuUo2yVVHWVFnQzx.png", alt="A news site with a headline, hero image, and subsections.", width="800", height="414" %} The section heading, "IN THE NEWS", could be an `h2`, and the supporting -headlines could both be `h3`'s. +headlines could both be `h3` elements. Because the `font-size` for "IN THE NEWS" is _smaller_ than the headline, it may be tempting to make the headline for the first story an `h2` and to make @@ -52,8 +52,8 @@ be tempting to make the headline for the first story an `h2` and to make it would break the outline conveyed to a screen reader user! {% Aside %} -Though it may seem counterintuitive, it does not matter if _visually_ `h3`'s and -`h4`'s are larger than their `h2` or `h1` counterparts. What matters is the +Though it may seem counterintuitive, it does not matter if _visually_ `h3` and +`h4` elements are larger than their `h2` or `h1` counterparts. What matters is the outline conveyed by the elements and elements' ordering. {% endAside %} diff --git a/src/site/content/en/accessible/index.md b/src/site/content/en/accessible/index.md new file mode 100644 index 00000000000..c3c9536e528 --- /dev/null +++ b/src/site/content/en/accessible/index.md @@ -0,0 +1,6 @@ +--- +layout: collection +override:tags: [] +date: 2018-11-05 +pathName: accessible +--- \ No newline at end of file diff --git a/src/site/content/en/accessible/index.njk b/src/site/content/en/accessible/index.njk deleted file mode 100644 index 7a7941b5c0c..00000000000 --- a/src/site/content/en/accessible/index.njk +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: path -override:tags: [] -date: 2018-11-05 -pathName: accessible ---- \ No newline at end of file diff --git a/src/site/content/en/accessible/semantics-and-screen-readers/index.md b/src/site/content/en/accessible/semantics-and-screen-readers/index.md index c64da8b11da..fb2a86eb5ed 100644 --- a/src/site/content/en/accessible/semantics-and-screen-readers/index.md +++ b/src/site/content/en/accessible/semantics-and-screen-readers/index.md @@ -73,8 +73,8 @@ properties: - A **value** (optional) - A **state** (optional) -An element's **role** describes its type, i.e. "button," "input," or even just -"group" for things like `div`'s and `span`'s. +An element's **role** describes its type, for example, "button," "input," or even just +"group" for things like `div` and `span` elements. An element's **name** is its computed label. Screen readers typically announce an element's name followed by its role, e.g. "Sign Up, button." The algorithm @@ -103,7 +103,7 @@ to the user, it is often doing so by walking this accessibility tree. Browsers will often remove semantically uninteresting nodes like `div` and `span` from the accessibility tree, especially if they're just being used to position their children with CSS. For instance, if you have a `button` nested -inside of 5 `div`'s, the browser may prune out some of the `div`'s in the middle +inside of 5 `div` elements, the browser may prune out some of the `div` elements in the middle to cut down on noise. {% endAside %} diff --git a/src/site/content/en/accessible/style-focus/index.md b/src/site/content/en/accessible/style-focus/index.md index 855f1723210..03852c5990f 100644 --- a/src/site/content/en/accessible/style-focus/index.md +++ b/src/site/content/en/accessible/style-focus/index.md @@ -56,8 +56,8 @@ button:focus { If you click on the `
-### TL;DR +### Summary [0h h1](http://0hh1.com/) is a fun (and addictive) game that just feels right on mobile. diff --git a/src/site/content/en/blog/3d-css/index.md b/src/site/content/en/blog/3d-css/index.md index 86097f04a90..4bc1ba81ab1 100644 --- a/src/site/content/en/blog/3d-css/index.md +++ b/src/site/content/en/blog/3d-css/index.md @@ -25,8 +25,16 @@ It must be noted that the CSS 3D module is designed to help developers build ric ## Browser Support and Hardware Acceleration -As of October 2013, [all major browsers support the CSS 3D module](http://caniuse.com/#feat=transforms3d). The important piece of information to remember is that although a browser may "support" 3d, it might not be able to render 3D due to hardware and driver limitations. -3D scenes based of the DOM can be very computationally expensive and therefore browser vendors have decided rather than slow the browsers down with a pure software rendering solution, they instead will take advantage of GPU which might not be available on all platforms +### -webkit-perspective + +{% BrowserCompat 'css.properties.perspective' %} + +### -webkit-transform-3d + +{% BrowserCompat 'css.at-rules.media.-webkit-transform-3d' %} + +The important piece of information to remember is that although a browser may "support" 3d, it may not be able to render 3D due to hardware and driver limitations. +3D scenes based on the DOM can be very computationally expensive and therefore browser vendors have decided rather than slow the browsers down with a pure software rendering solution, they instead will take advantage of GPU which might not be available on all platforms ## Feature Detection @@ -37,7 +45,7 @@ Developers have been using tools such as Modernizr to detect support for specifi There is nothing better than jumping straight in. In this sample we will apply a basic set of rotations of an arbitrary DOM element. -We start by defining a perspective on the root element. Persective +We start by defining a perspective on the root element. ```html
@@ -52,7 +60,7 @@ We then add an iframe and apply a 30 degree rotation around the Z and Y axis style="-webkit-transform: rotate3d(0, 1, 1, 30deg)"> ``` -BAM! That is it, the element is fully interactive, and in all respects it is a fully fledged DOM element (excpect that it now looks even cooler). +BAM! That is it, the element is fully interactive, and in all respects it is a fully fledged DOM element (except that it now looks even cooler). If your browser doesn't support 3D transformations, nothing will happen. You will just see a simple iframe with no rotation applied. If your browser supports 3d transformations but without hardware acceleration, it might look a little odd. ## Animating @@ -61,7 +69,7 @@ The thing that I love about CSS3 3D transformations is that it ties so beautiful To animate elements that have a 3D perspective applied is easy. Simply set the "transition" style to be "transform", attach a duration and an animation function. From then on, any change to the "tranform" style will be animated. -We have re-factored the previous examples to use document styles, rather than inline styles. Not only does it clear the example up, it allows the sample to take advantage of the the `:hover` pseudo selector. By using the `:hover` selector, transitions can be initiated by simply moving the mouse over the element. Awesome! +We have re-factored the previous examples to use document styles, rather than inline styles. Not only does it clear the example up, it allows the sample to take advantage of the `:hover` pseudo selector. By using the `:hover` selector, transitions can be initiated by simply moving the mouse over the element. Awesome! ## Summary diff --git a/src/site/content/en/blog/5miles/index.md b/src/site/content/en/blog/5miles/index.md index 42eca7d5fd5..f207ce74e66 100644 --- a/src/site/content/en/blog/5miles/index.md +++ b/src/site/content/en/blog/5miles/index.md @@ -13,7 +13,7 @@ tags: {% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/0ivyLzLs74ECIJGubzvk.gif", alt="5 miles detail", width="582", height="1000" %}
-### TL;DR +## Summary 5miles decreases bounce rate by 50% and increases conversions by 60% with new Progressive Web App diff --git a/src/site/content/en/blog/6-css-snippets-every-front-end-developer-should-know-in-2023/index.md b/src/site/content/en/blog/6-css-snippets-every-front-end-developer-should-know-in-2023/index.md new file mode 100644 index 00000000000..f2b37f8c694 --- /dev/null +++ b/src/site/content/en/blog/6-css-snippets-every-front-end-developer-should-know-in-2023/index.md @@ -0,0 +1,249 @@ +--- +layout: post +title: 6 CSS snippets every front-end developer should know in 2023 +subhead: Toolbelt worthy, powerful, and stable CSS you can use today. +authors: + - adamargyle +description: Toolbelt worthy, powerful, and stable CSS you can use today. +date: 2023-03-15 +hero: image/vS06HQ1YTsbMKSFTIPl2iogUQP73/8A29dtYK0wfkRh8a8wMe.jpg +thumbthumbnail: image/vS06HQ1YTsbMKSFTIPl2iogUQP73/GBUkJYnsvmzkdKCQUfWZ.png +alt: A wooden table with a hammer and a wrench neatly placed on it. +tags: + - blog + - css +--- + +I believe every front-end developer should know how to use [container +queries](https://developer.mozilla.org/docs/Web/CSS/CSS_Container_Queries), +create a [scroll snap](https://codepen.io/collection/KpqBGW) experience, avoid +`position: absolute` with +[grid](https://developer.mozilla.org/docs/Web/CSS/CSS_Grid_Layout), +swiftly hammer out a circle, use [cascade +layers](https://developer.mozilla.org/docs/Learn/CSS/Building_blocks/Cascade_layers), +and reach more with less via [logical +properties](/learn/css/logical-properties/). Here's a quick +overview of each of those expectations. + +## 1. A container query + +The top requested CSS feature for 10 years straight, is [now +stable](/cq-stable/) across browsers and available for you to use +for width queries in 2023. + +```css +.panel { + container: layers-panel / inline-size; +} + +.card { + padding: 1rem; +} + +@container layers-panel (min-width: 20rem) { + .card { + padding: 2rem; + } +} +``` + +{% Codepen { + user: 'web-dot-dev', + id: 'OJovdLN', + height: 500, + tab: 'css,result' +} %} + +
@container
+{% BrowserCompat 'css.at-rules.container' %} + +
container
+{% BrowserCompat 'css.properties.container' %} + + + +## 2. Scroll snap + +Well orchestrated scroll experiences set your experience apart from the rest, +and [scroll +snap](https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type) is the +perfect way to match system scroll UX while providing meaningful stopping +points. + +```css +.snaps { + overflow-x: scroll; + scroll-snap-type: x mandatory; + overscroll-behavior-x: contain; +} + +.snap-target { + scroll-snap-align: center; +} + +.snap-force-stop { + scroll-snap-stop: always; +} +``` + +{% Codepen { + user: 'web-dot-dev', + id: 'QWVmYLv', + height: 700, + tab: 'result' +} %} + +Learn more about the potential of this CSS feature in this [huge and inspiring +Codepen collection](https://codepen.io/collection/KpqBGW) of around 25 demos. + +
scroll-snap-type
+{% BrowserCompat 'css.properties.scroll-snap-type' %} + +
scroll-snap-align
+{% BrowserCompat 'css.properties.scroll-snap-align' %} + +
scroll-snap-stop
+{% BrowserCompat 'css.properties.scroll-snap-stop' %} + +
overscroll-behavior
+{% BrowserCompat 'css.properties.overscroll-behavior' %} + +## 3. Grid pile + +Avoid position absolute with a single cell CSS grid. Once they're [piled on top +of each other](/shows/gui-challenges/m4DKhRJeYx4/), use justify +and align properties to position them. + +```css +.pile { + display: grid; + place-content: center; +} + +.pile > * { + grid-area: 1/1; +} +``` + +{% Codepen { + user: 'web-dot-dev', + id: 'MWqVLgQ', + height: 300, + tab: 'css,result' +} %} + +
grid
+{% BrowserCompat 'css.properties.grid' %} + +## 4. Quick circle + +There are lots of ways to make circles in CSS, but this is definitely the most +minimal. + +```css +.circle { + inline-size: 25ch; + aspect-ratio: 1; + border-radius: 50%; +} +``` + +{% Codepen { + user: 'web-dot-dev', + id: 'rNZdPBK', + height: 300, + tab: 'css,result' +} %} + +
aspect-ratio
+{% BrowserCompat 'css.properties.aspect-ratio' %} + +## 5. Control variants with @layer + +[Cascade +layers](https://developer.mozilla.org/docs/Learn/CSS/Building_blocks/Cascade_layers) +can [help insert variants](https://nerdy.dev/cascade-layer-async-overrides) +discovered or created later, into the right place in the cascade with the +original set of variants. + +```css +/* file buttons.css */ +@layer components.buttons { + .btn.primary { + … + } +} +``` + +Then, in some entirely different file, loaded at some other random time, append +a new variant to the button layer as if it was there with the rest of them this +whole time. + +```css +/* file video-player.css */ +@layer components.buttons { + .btn.player-icon { + … + } +} +``` + +{% Codepen { + user: 'web-dot-dev', + id: 'LYJdqPv', + height: 300, + tab: 'css,result' +} %} + +
@layer
+{% BrowserCompat 'css.at-rules.layer' %} + +## 6. Memorize less and reach more with logical properties + +Memorize this [one new box model](/learn/css/logical-properties/) +and [never have to worry](https://css-tricks.com/late-to-logical/) about +changing left and right padding or margin for international [writing +modes](https://developer.mozilla.org/docs/Web/CSS/writing-mode) and +[document +directions](https://developer.mozilla.org/docs/Web/CSS/direction) again. +Adjust your styles from physical properties to logical ones like +[`padding-inline`](https://developer.mozilla.org/docs/Web/CSS/padding-inline), +[`margin-inline`](https://developer.mozilla.org/docs/Web/CSS/margin-inline), +[`inset-inline`](https://developer.mozilla.org/docs/Web/CSS/inset-inline), +and now the browser will do the adjusting work. + +```css +button { + padding-inline: 2ch; + padding-block: 1ch; +} + +article > p { + text-align: start; + margin-block: 2ch; +} + +.something::before { + inset-inline: auto 0; +} +``` + +{% Codepen { + user: 'web-dot-dev', + id: 'mdGxvdJ', + height: 450, + tab: 'css,result' +} %} + +
padding-inline
+{% BrowserCompat 'css.properties.padding-inline' %} + +
margin-block
+{% BrowserCompat 'css.properties.margin-block' %} + +
inset-inline
+{% BrowserCompat 'css.properties.inset-inline' %} diff --git a/src/site/content/en/blog/a11y-for-teams/index.md b/src/site/content/en/blog/a11y-for-teams/index.md index 385f2d8af8a..c07b8c38892 100644 --- a/src/site/content/en/blog/a11y-for-teams/index.md +++ b/src/site/content/en/blog/a11y-for-teams/index.md @@ -298,7 +298,7 @@ controls (like ones created using [Custom Elements](/custom-elements-v1/) or out of simple divs and spans). For these kinds of controls you'll need to use the [`aria-label` and `aria-labelledby` -attributes](https://developers.google.com/web/fundamentals/accessibility/semantics-aria/aria-labels-and-relationships#labels). +attributes](/aria-labels-and-relationships/#labels). ### Automated testing diff --git a/src/site/content/en/blog/a11y-tips-for-web-dev/index.md b/src/site/content/en/blog/a11y-tips-for-web-dev/index.md index 0ada5a0d994..f694fd5b127 100644 --- a/src/site/content/en/blog/a11y-tips-for-web-dev/index.md +++ b/src/site/content/en/blog/a11y-tips-for-web-dev/index.md @@ -163,7 +163,7 @@ to help them with reading text, so it's important to ensure text alternatives ex or flash, which can cause [issues](http://www.w3.org/TR/WCAG20/#seizure) for some users. - The [`prefers-reduced-motion`](https://developers.google.com/web/updates/2019/03/prefers-reduced-motion#too_much_motion_in_real_life_and_on_the_web) + The [`prefers-reduced-motion`](/prefers-reduced-motion/#too-much-motion-in-real-life-and-on-the-web) CSS media query allows you to limit animations and autoplaying videos for users who prefer reduced motion: @@ -193,7 +193,7 @@ to spread awareness of best practices in your team: ## Are your UI components accessible? -**Summary (tl;dr)** +**Summary** When auditing your page's UI components for accessibility, ask yourself: diff --git a/src/site/content/en/blog/accessibility-week-2022/index.md b/src/site/content/en/blog/accessibility-week-2022/index.md new file mode 100644 index 00000000000..5fd3082b339 --- /dev/null +++ b/src/site/content/en/blog/accessibility-week-2022/index.md @@ -0,0 +1,70 @@ +--- +layout: post +title: Accessibility Week +subhead: > + Our week celebrating accessibility resources +description: > + This week we celebrated accessibility work and highlighted + resources to help you make your sites and applications + usable by everyone. +date: 2022-11-18 +authors: + - alexandrawhite + - rachelandrew +hero: image/VbsHyyQopiec0718rMq2kTE1hke2/F6xN4wjE6Y9vgh1m1uCi.png +alt: 'Learn Accessibility! Community highlight.' +thumbnail: image/VbsHyyQopiec0718rMq2kTE1hke2/F6xN4wjE6Y9vgh1m1uCi.png +tags: + - blog + - accessibility +--- + +This week we highlighted accessibility resources to help you make your sites +and applications usable by everyone. + +We're continuing to roll out [Learn Accessibility](/learn/accessibility/), a +brand new course written by [Carie Fisher](https://twitter.com/cariefisher) +that will take you through the essentials for building accessible websites and +web apps. + +We've had 3 community spotlights: + +* [Melanie Sumner](/community-highlight-melanie/) told us about her journey + into engineering, accessible design, Ember.js, and the importance of funding + these efforts. +* [Olutimilehin Olushuyi](/community-highlight-shuyi/) told us about his move + from the law to web development, building accessible community, and creating + accessible layouts. +* [Albert Kim](/community-highlight-albert-kim/) told us about mental health + awareness, building for invisible disabilities, the COGA Accessibility + Community Group, and more practical wisdom. + +## Watch us answer your questions + +On Thursday, Alexandra White spoke with Carie Fisher and Melanie Sumner about +accessibility, and we answered some of your questions. + +{% YouTube "xvGDgDRWl_E" %} + +Have more questions? Ask us on Twitter, +[@ChromiumDev](https://twitter.com/chromiumdev). + +## More resources + +A solid document structure is a great start for accessible development. Find +out how to really use HTML in our [Learn HTML](/learn/html) course. Follow it +up with Learn Accessibility's [Content structure module](/learn/accessibility/structure/) +for more on semantic HTML, landmarks, and tables for accessible content. + +In [Testing web design color contrast](/testing-web-design-color-contrast/) get +an overview of three tools and techniques to ensure your content is readable by +everyone. + +In [Building the main navigation for a website](/website-navigation/) learn how to create accessible navigation using semantic HTML. + +## On the web + +* The W3C hosts a collection of [courses, training, and certification on digital accessibility](https://www.w3.org/WAI/courses/list/) from different providers. +* Read [Accessibility articles on Smashing Magazine](https://www.smashingmagazine.com/category/accessibility/), including [<article> vs. <section>: How To Choose The Right One](https://www.smashingmagazine.com/2022/07/article-section-elements-accessibility/) by Olushuyi Olutimilehin. +* If you're making a case for accessibility work at your company, check out Melanie Sumner's [pleasefunda11y.com](https://pleasefunda11y.com/). +* If you want to support the Cognitive and Learning Disabilities Accessibility Task Force, join the [COGA Accessibility Community Group](https://www.w3.org/community/coga-community/). This group supplies user needs and feedback to the COGA Task Force. diff --git a/src/site/content/en/blog/accessibility/index.md b/src/site/content/en/blog/accessibility/index.md index 1b8b1657181..8bbe4633ec1 100644 --- a/src/site/content/en/blog/accessibility/index.md +++ b/src/site/content/en/blog/accessibility/index.md @@ -3,7 +3,7 @@ title: Accessibility subhead: Improving accessibility for web pages date: 2016-06-26 updated: 2019-06-08 -authors: +authors: - megginkearney - dgash - aliceboxhall @@ -20,9 +20,10 @@ Rather than a direct transcription of the video course, it is meant to be a more concise treatment of accessibility principles and practices, using the course's original content as a base. -## TL;DR +## Summary + - Learn what accessibility means and how it applies to web development. -- Learn how to make web sites accessible and usable for everyone. +- Learn how to make websites accessible and usable for everyone. - Learn how to include basic accessibility with minimal development impact. - Learn what HTML features are available and how to use them to improve accessibility. @@ -227,7 +228,7 @@ surgery or maybe just has to read something from across the room might have used one of those accommodations I mentioned. So I think it's pretty easy for developers to have some empathy for low-vision users. -Oh, and I shouldn't forget to mention people with poor color vision - +Oh, and I shouldn't forget to mention people with poor color vision - about 9% of males have some form of color vision deficiency! Plus about 1% of females. They may have trouble distinguishing red and green, or yellow and blue. Think about that the next time you design form validation. @@ -366,7 +367,7 @@ areas: make sure that we express our user interface in a robust way that works with a variety of assistive technologies. - - [**Styling**](https://developers.google.com/web/fundamentals/accessibility/accessible-styles): We'll consider visual + - [**Styling**](/accessible/#create-a-design-and-css-that-supports-users-with-different-needs): We'll consider visual design and look at some techniques for making the visual elements of the interface as flexible and usable as possible. diff --git a/src/site/content/en/blog/adapting-typography-to-user-preferences-with-css/index.md b/src/site/content/en/blog/adapting-typography-to-user-preferences-with-css/index.md new file mode 100644 index 00000000000..d565c603d13 --- /dev/null +++ b/src/site/content/en/blog/adapting-typography-to-user-preferences-with-css/index.md @@ -0,0 +1,277 @@ +--- +layout: post +title: Adapting typography to user preferences with CSS +subhead: A method to adapt a font to your users' preferences, so they're maximally comfortable reading your content. +authors: + - adamargyle +description: A method to adapt a font to your users' preferences, so they're maximally comfortable reading your content. +date: 2023-07-27 +hero: image/vS06HQ1YTsbMKSFTIPl2iogUQP73/JQ2Vv49WINKpelsnpIZJ.png +thumbthumbnail: image/vS06HQ1YTsbMKSFTIPl2iogUQP73/MIeIToUHSwhwTfrmqJbL.png +alt: Three font weights are shown for a headline and paragraph across two color schemes, each labeled above them with the user preference. +tags: + - blog + - css + - typography +--- + +Bringing the user into the design process has been an exciting time for users, +designers and developers. Users can land on your experience and seamlessly begin +consuming content, their preferences richly integrated into the design result. + +This blog post explores using CSS media queries with a variable font to tailor +the reading experience even further. Font grade and weight can be customized +with `font-variation-settings`, allowing microtuning given various preferences +and contexts, like a preference for dark mode or high contrast. We can take +these preferences and tailor a variable font for that user experience. + +- Dark mode gets a slightly reduced gradation. +- High contrast gets a bolder font. +- Low contrast gets a thinner font. + +
+ {% Video + src="video/vS06HQ1YTsbMKSFTIPl2iogUQP73/cgGryLwncKVnBUQ8iQOF.mp4", + autoplay="true", + controls="true", + loop="true", + muted="true" + %} +
+ https://codepen.io/argyleink/pen/mdQrqvj +
+
+ +Follow along to understand each portion of the CSS and variable font that enable +this meaningful moment! + +## Getting setup + +To help focus on the CSS and font variation setting values, but also give us +something to read and see, here's the markup you can use to preview the work: + +```html +

Variable font weight based on contrast preference

+ +

+ Lorem ipsum dolor sit amet consectetur adipisicing elit. + Officia, quod? Quidem, nemo aliquam, magnam rerum distinctio + itaque nisi nam, cupiditate dolorum ad sint. Soluta nemo + labore aliquid ex, dicta corporis. +

+``` + +Without adding any CSS, the font size is already adaptive to user preferences. +Here's a video from another demo showing how setting `font-size` in pixels will +squash any user preferences, and why you should set your font size in rems: + +{% Video + src="video/vS06HQ1YTsbMKSFTIPl2iogUQP73/8mxSKsYmv6K7zoqDor0F.mp4", + autoplay="true", + controls="true", + loop="true", + muted="true" +%} + +Lastly, to center and support the demo, a little CSS: + +```css +@layer demo.support { + body { + display: grid; + place-content: center; + padding: var(--size-5); + gap: var(--size-5); + } + + h1 { + text-wrap: balance; + } +} +``` + +{% Img src="image/vS06HQ1YTsbMKSFTIPl2iogUQP73/upVZBhu250ETgmczvTeh.png", alt="A +screenshot preview of the demo so far, in both dark and light themes.", +width="800", height="327" %} + +This demo setup lets you begin testing and implementing this neat typography UX +feature. + +## Loading the Roboto Flex variable font + +The adaptive strategy depends on a variable font with meaningful axes for +customization, specifically you need `GRAD` and `wght`. The target adaptive user +preferences in this article are for color scheme and contrast, both of which +will tailor these axes to match the user's desired preference. + +{% Aside %} +A variable font is not required to achieve this user experience that matches +preferences, however, using one achieves the effect without loading multiple +weights or versions of a font. See [this demo](https://codepen.io/web-dot-dev/pen/zYMmevQ) +for an example of this UX without a dependency on a variable font. +{% endAside %} + +Load the variable font using the `@font-face` API of CSS: + +```css +@font-face { + font-family: "Roboto Flex"; + src: url('https://assets.codepen.io/2585/RobotoFlex') format('truetype'); +} +``` + +Next, apply the font to some content. The following CSS applies it to +everything: + +```css +@layer demo.support { + body { + font-family: Roboto Flex; + } +} +``` + +{% Img src="image/vS06HQ1YTsbMKSFTIPl2iogUQP73/hfdJqPvkp2v8HvsH7x4o.png", alt="A +screenshot preview of the demo so far, with the font now in Roboto Flex in both +dark and light themes.", width="800", height="327" %} + +## CSS custom properties and media queries for the win + +With the font loaded, you can query for user preferences and adapt the variable +font settings to match. + +{% Aside %} +If you need a review on some of these styles, check out the [Learn CSS](/learn/css/) +module on [media queries](/learn/design/media-queries/) or this post on +[building an adaptive color scheme with custom properties](/building-a-color-scheme/). +{% endAside %} + +### Settings when there's no preferences (default) + +The following initial styles will be the default styles, or another way to look +at it, the styles for users without any preferences. + +```css +@layer demo { + body { + --base-weight: 400; + --base-grade: 0; + + font-variation-settings: + "wght" var(--base-weight), + "GRAD" var(--base-grade) + ; + } +} +``` + +### Settings when the preference is for high contrast + +For users who have indicated a preference for high contrast in their system +settings, increase the `--base-weight` value from `400` to `700`: + +```css +@layer demo { + @media (prefers-contrast: more) { + body { + --base-weight: 700; + } + } +} +``` + +Now there's more contrast while reading. + +### Settings when the preference is for low contrast + +For users who have indicated a preference for low contrast in their system +settings, decrease the `--base-weight` value from `400` to `200`: + +```css +@layer demo { + @media (prefers-contrast: less) { + body { + --base-weight: 200; + } + } +} +``` + +Now there's less contrast while reading. + +### Settings when the preference is for dark mode + +```css +@layer demo { + @media (prefers-color-scheme: dark) { + body { + --base-grade: -25; + } + } +} +``` + +Now the perceptual differences of light on dark vs dark on light have been +accounted for. + +### All together now + +```css +@layer demo { + body { + --base-weight: 400; + --base-grade: 0; + + font-variation-settings: + "wght" var(--base-weight), + "GRAD" var(--base-grade) + ; + } + + @media (prefers-contrast: more) { + body { + --base-weight: 700; + } + } + + @media (prefers-contrast: less) { + body { + --base-weight: 200; + } + } + + @media (prefers-color-scheme: dark) { + body { + --base-grade: -25; + } + } +} +``` + +Or, for fun, all together with [CSS nesting](https://developer.chrome.com/articles/css-nesting/): + +```css +@layer demo { + body { + --base-weight: 400; + --base-grade: 0; + + font-variation-settings: + "wght" var(--base-weight), + "GRAD" var(--base-grade) + ; + + @media (prefers-contrast: more) { --base-weight: 700 } + @media (prefers-contrast: less) { --base-weight: 200 } + @media (prefers-color-scheme: dark) { --base-grade: -25 } + } +} +``` + +The result is a reading experience that adapts the font to match the user's +preferences. Full source code is available below in the Codepen. + +{% Codepen { + user: 'web-dot-dev', + id: 'rNQZMzo' +} %} diff --git a/src/site/content/en/blog/adaptive-loading-cds-2019/index.md b/src/site/content/en/blog/adaptive-loading-cds-2019/index.md index 308c280d1f9..256d62f1063 100755 --- a/src/site/content/en/blog/adaptive-loading-cds-2019/index.md +++ b/src/site/content/en/blog/adaptive-loading-cds-2019/index.md @@ -39,9 +39,7 @@ based on their network and hardware constraints, specifically: * Progressively adding high-end-only features, if a user's network and hardware can handle it. -By optimizing for specific hardware and network constraints you enable every -user to get the best possible experience for their device. Tailoring the -experience to users' constraints can include: +By optimizing for specific hardware and network constraints you enable every user to get the best possible experience for their device. Tailoring the experience to users' constraints can include: * Serving low-quality images and videos on slow networks. @@ -53,27 +51,30 @@ experience to users' constraints can include: * Loading non-critical JavaScript for interactivity only on fast CPUs. -## How to implement adaptive loading +## Browser support and how to implement adaptive loading -The signals you can use for adaptive loading are: +The signals you can use for adaptive loading are listed below. Browser support is also included for each signal: -* Network—for fine-tuning data transfer to use less bandwidth (via - [`navigator.connection.effectiveType`](https://developer.mozilla.org/docs/Web/API/NetworkInformation/effectiveType)). - You can also leverage the user's Data Saver preferences (via - [`navigator.connection.saveData`](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/save-data#detecting_the_save-data_setting)). +### `Navigator.deviceMemory` -* Memory—for reducing memory consumption on low-end devices (via - [`navigator.deviceMemory`](https://developer.mozilla.org/docs/Web/API/Navigator/deviceMemory)). +The [`navigator.deviceMemory`](https://developer.mozilla.org/docs/Web/API/Navigator/deviceMemory) property is used to reduce memory consumption on low-end devices. {% BrowserCompat 'api.Navigator.deviceMemory' %} -* CPU core count—for limiting costly JavaScript execution and reducing CPU - intensive logic when a device can't handle it well (via - [`navigator.hardwareConcurrency`](https://developer.mozilla.org/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency)). +### `Navigator.hardwareConcurrency` +The [`navigator.hardwareConcurrency`](https://developer.mozilla.org/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency) property is the CPU core count. It is used to limit costly JavaScript execution and reduce CPU intensive logic when a device can't handle it well. {% BrowserCompat 'api.Navigator.hardwareConcurrency' %} + +### `NetworkInformation.effectiveType` + +The [`navigator.connection.effectiveType`](https://developer.mozilla.org/docs/Web/API/NetworkInformation/effectiveType) property is used to fine-tune data transfer to use less bandwidth. {% BrowserCompat 'api.NetworkInformation.effectiveType' %} + +### `NetworkInformation.saveData` + +The [`navigator.connection.saveData`](/optimizing-content-efficiency-save-data/) property is used to leverage the user's Data Saver preferences. {% BrowserCompat 'http.headers.Save-Data' %} There are two places where you can make a decision about what to serve to users: the client and the server. On the client, you have the JavaScript APIs noted above. On the server, you can use [client -hints](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/client-hints) +hints](/performance-optimizing-content-efficiency-client-hints/) to get insight into the user's device capabilities and the network they're connected to. diff --git a/src/site/content/en/blog/add-touch-to-your-site/index.md b/src/site/content/en/blog/add-touch-to-your-site/index.md index 9643694a7a4..ab9bc6d2a46 100644 --- a/src/site/content/en/blog/add-touch-to-your-site/index.md +++ b/src/site/content/en/blog/add-touch-to-your-site/index.md @@ -151,10 +151,11 @@ for users if they *want* to select the text in the element. So make sure you use it with caution and sparingly. ```css -/* Example: dDisable selecting text on a paragraph element: *? +/* Example: Disable selecting text on a paragraph element: */ p.disable-text-selection { user-select: none; } +``` ## Implement custom gestures @@ -418,7 +419,7 @@ before the browser is intending to draw a frame and will help us move some work out of our event callbacks. If you are unfamiliar with `requestAnimationFrame()`, you -can [learn more here](https://developers.google.com/web/fundamentals/performance/rendering/optimize-javascript-execution#use-requestanimationframe-for-visual-changes). +can [learn more here](/optimize-javascript-execution/#use-requestanimationframe-for-visual-changes). A typical implementation is to save the `x` and `y` coordinates from the start and move events and request an animation frame inside the move event diff --git a/src/site/content/en/blog/adobe/index.md b/src/site/content/en/blog/adobe/index.md index 2a0729c9624..04bfb484843 100644 --- a/src/site/content/en/blog/adobe/index.md +++ b/src/site/content/en/blog/adobe/index.md @@ -203,7 +203,7 @@ This section discusses future concepts not yet implemented in any browser. Leveraging the CSSOM is probably the most powerful and flexible way of implementing things like paging and responsive layout, but Adobe has been working with text and desktop publishing tools long enough to know that designers and developers are also going to want an easier way to get relatively generic paging capabilities. Therefore we are working on a proposal called CSS Page Templates which allows paging behavior to be defined entirely declaratively. -Let's take a look at a common use case for CSS Page Templates. The code snippet below shows the use of CSS to create two named flows: "article-flow" and "timeline-flow." Additionally it defines a third selector called "combined-articles" inside of which the the two flows will be contained. The simple inclusion of the `overflow-style` property inside the "combined-articles" selector indicates that the content should automatically be paged along the x axis, or horizontally: +Let's take a look at a common use case for CSS Page Templates. The code snippet below shows the use of CSS to create two named flows: "article-flow" and "timeline-flow." Additionally it defines a third selector called "combined-articles" inside of which the two flows will be contained. The simple inclusion of the `overflow-style` property inside the "combined-articles" selector indicates that the content should automatically be paged along the x axis, or horizontally: ```html - ... - -``` - -### Font inlining is now available in Next.js and Angular - -When framework developers implement optimization in the underlying tooling, they make it easier for -existing and new applications to enable it, bringing the improvement to the entire ecosystem. - -This improvement is enabled by default from Next.js v10.2 and Angular v11. Both have support for -inlining Google and Adobe fonts. Angular is expecting to introduce the latter in v12.2. - -You can find the implementation of [font inlining in Next.js on -GitHub](https://github.com/vercel/next.js/pull/14746), and check out the [video explaining this optimization in the -context of Angular](https://www.youtube.com/watch?v=yOpy9UMQG-Y). - -## Inlining critical CSS - -Another enhancement involves improving the [First Contentful Paint (FCP)](/fcp) and [Largest -Contentful Paint (LCP)](/lcp) metrics by inlining critical CSS. The critical CSS of a page includes -all of the styles used at its initial rendering. To learn more about the topic, check out -[Defer non-critical CSS](/defer-non-critical-css/). - -We observed that many applications are loading styles synchronously, which blocks application -rendering. A quick fix is to load the styles asynchronously. Rather than loading the scripts with -`media="all"`, set the value of the `media` attribute to `print`, and once the loading completes, -replace the attribute value to `all`: - -```html - -``` - -This practice, however, can cause flickering of unstyled content. - -
- {% Video - src=["video/S838B7UEsdXmwrD8q5gvNlWTHHP2/6ZSZwK3Z0bzK90aunxrW.mp4"], - autoplay=true, - loop=true, - muted=true, - playsinline=true - %} -
- The page appears to flicker as the styles load in. -
-
- -The video above shows the rendering of a page, which loads its styles asynchronously. The flicker -happens because the browser first starts downloading the styles, then renders the HTML which -follows. Once the browser downloads the styles, it triggers the `onload` event of the link element, -updating the `media` attribute to `all`, and applies the styles to the DOM. - -During the time between rendering the HTML and applying the styles the page is partially unstyled. -When the browser uses the styles, we see flickering, which is a bad user experience and results in -regressions in [Cumulative Layout Shift (CLS)](/cls/). - -[Critical CSS inlining](/extract-critical-css/), along with asynchronous style loading, can improve -the loading behavior. The [critters](http://npmjs.com/package/critters) tool finds which styles are -used on the page, by looking at the selectors in a stylesheet and matching them against the HTML. -When it finds a match, it considers the corresponding styles as part of the critical CSS, and -inlines them. - -Let's look at an example: - -{% Compare 'worse', 'Example before inlining' %} -```html - - - - -
- -
- -``` - -```css -/* styles.css */ -section button.primary { - /* ... */ -} -.list { - /* ... */ -} -``` -{% endCompare %} - -In the example above, critters will read and parse the content of `styles.css`, after that it -matches the two selectors against the HTML and discovers that we use `section button.primary`. -Finally critters will inline the corresponding styles in the `` of the page resulting in: - -{% Compare 'better', 'Example after inlining' %} -```html - - - - - -
- -
- -``` -{% endCompare %} - -After inlining the critical CSS in the HTML you will find that the flickering of the page is gone: - -
- {% Video - src=["video/S838B7UEsdXmwrD8q5gvNlWTHHP2/TPbZ9TZiDzFEYfybaPoz.mp4"], - autoplay=true, - loop=true, - muted=true, - playsinline=true - %} -
- The page loading after CSS inlining. -
-
- -Critical CSS inlining is now available in Angular and enabled by default in v12. If you're on v11, -turn it on by [setting the `inlineCritical` property to -`true`](https://angular.io/guide/workspace-config#styles-optimization-options) in `angular.json`. To -opt into this feature in Next.js add `experimental: { optimizeCss: true }` to your `next.config.js`. - -{% Aside %} Enabling the critical CSS and font inlining on angular.io improved the Lighthouse score -by 27 points on a slow 3G network. {% endAside %} - -## Conclusions - -In this post we touched on some of the collaboration between Chrome and web frameworks. If you're a -framework author and recognize some of the problems we tackled in your technology, we hope our -findings inspire you to apply similar performance optimizations. - -Find out more about the improvements at [web.dev/aurora](/aurora). You can find a comprehensive list -of the optimization work we've been doing for Core Web Vitals in the post [Introducing -Aurora](/introducing-aurora/#what-has-our-work-unlocked-so-far). diff --git a/src/site/content/en/blog/autowebperf/index.md b/src/site/content/en/blog/autowebperf/index.md index 14e8463d4d5..8415b12f930 100644 --- a/src/site/content/en/blog/autowebperf/index.md +++ b/src/site/content/en/blog/autowebperf/index.md @@ -54,7 +54,7 @@ which can be programmatically configured to automate recurrent queries to various performance monitoring APIs. For example, with AWP, you can set a daily test on your home page to capture the -field data from [CrUX API](/chrome-ux-report-api/) and lab data +field data from [CrUX API](https://developer.chrome.com/blog/chrome-ux-report-api/) and lab data from a [Lighthouse report from PageSpeed Insights](https://pagespeed.web.dev/). This data can be written and stored over time, for example, in [Google @@ -82,8 +82,8 @@ Google Sheets). AWP comes with a number of pre-implemented gatherers and connectors: * Pre-implemented gatherers: - * [CrUX API](/chrome-ux-report-api/) - * [CrUX BigQuery](/chrome-ux-report-bigquery/) + * [CrUX API](https://developer.chrome.com/blog/chrome-ux-report-api/) + * [CrUX BigQuery](https://developer.chrome.com/blog/chrome-ux-report-bigquery/) * [PageSpeed Insights API](https://developers.google.com/speed/docs/insights/v5/get-started) * [WebPageTest API](https://www.webpagetest.org/getkey.php) * Pre-implemented connectors: diff --git a/src/site/content/en/blog/avif-updates-2023/index.md b/src/site/content/en/blog/avif-updates-2023/index.md new file mode 100644 index 00000000000..9aaef79af0b --- /dev/null +++ b/src/site/content/en/blog/avif-updates-2023/index.md @@ -0,0 +1,168 @@ +--- +layout: post +title: Deploying AVIF for more responsive websites +subhead: | + An update on how AVIF has been adopted in the ecosystem. +hero: image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VTbul8MN3pUxggkYsc6F.jpg +thumbnail: image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/vnBIBHxxooLvRszJMG3b.jpg +alt: A close-up photograph of pixels on an LCD display. +authors: + - jhuoponen + - vignesh +description: | + An overview of how AVIF is adopted in the ecosystem, and what kind of performance and quality benefits developers can expect from AVIF for still images and animations. +date: 2023-05-24 +tags: + - blog + - performance + - images +--- + +[AVIF](https://aomedia.org/avif/) is a new image format that is quickly gaining popularity on the web because of its high compression rates, efficient performance, and broad adoption. AVIF is an open, royalty-free image format that is based on the AV1 video codec standardized by the Alliance for Open Media. This blog post will provide an overview of how AVIF is adopted in the ecosystem, and what kind of performance and quality benefits developers can expect from AVIF for still images and animations. + +## What’s new with the AVIF ecosystem? + +Since the introduction of AVIF in Chrome, Firefox and Safari, usage of AVIF on the web has been growing steadily; [almost all browsers](https://caniuse.com/avif) support AVIF today. + +In Chrome alone, AVIF usage grew to approximately one percent in a little over a year after Chrome added AVIF support in stable. + +
+ {% Img src="image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QunCznNR5EJf8lp4rGNe.png", alt="A line graph of AVIF usage in Chrome from May 2021 to March 2023. Support has steadily grown from 0% to just beneath 1.4%.", width="800", height="367" %} +
+ +A number of image CDNs, such as [Akamai](https://techdocs.akamai.com/ivm/changelog/apr-07-2021-new-policy-filters-and-avif-image-format), [Cloudflare](https://blog.cloudflare.com/images-avif-blur-bundle/), [Cloudinary](https://cloudinary.com/blog/how_to_adopt_avif_for_images_with_cloudinary) and [Imgix](https://blog.imgix.com/2021/10/27/avif-limited-availability) are serving AVIF images today. In a [blog post](https://blog.imgix.com/2021/10/27/avif-limited-availability) announcing AVIF support, Imgix reported 60% file size savings compared to JPEG and 35% savings compared to WebP. These file size savings lead to significant storage savings, but also help pages load faster, yielding faster [Largest Contentful Paint (LCP)](/lcp/) times. LCP is one of the [Core Web Vitals](/learn-core-web-vitals/), and represents how quickly the largest block of content on the page has loaded. Using modern codecs to compress images is one of the [key techniques](/optimize-lcp/) to reduce LCP. [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) is a great Chrome developer tool for testing your web site and to see [how much savings AVIF would bring](https://developer.chrome.com/en/docs/lighthouse/performance/uses-webp-images/). + +WordPress is the [most popular](https://www.wpbeginner.com/beginners-guide/ultimate-list-of-wordpress-stats-facts-and-other-research/) website platform in the world, and there are number of plugins available for developers to convert their images to AVIF, such as: + +- [AutoOptimize](https://wordpress.org/plugins/autoptimize/) +- [Converted for Media](https://wordpress.org/plugins/webp-converter-for-media/) +- [EWWW Image Optimizer](https://ewww.io/) +- [Optimole](https://optimole.com/) +- [ShortPixel Image Optimizer](https://shortpixel.com/) + +For more hands-on developers, tools like [ImageMagick](https://imagemagick.org/index.php) and [FFmpeg](https://ffmpeg.org/) are a good starting point. + +## AVIF encode speed + +Fast encoding speed and high visual quality are critical for deploying image compression at scale. AVIF software encoding speed has improved significantly over the past two years. Compared to other modern still image formats, AVIF produces smaller files with similar visual quality (see the following graph, lower is better) but is also [faster to encode](https://storage.googleapis.com/avif-comparison/subset1.html). + +
+ {% Img src="image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bmoOLQMWjYTQzWK8hPE8.png", alt="A bar chart comparing various image codec file sizes as a percentage of the output of TurboJPEG. AVIF is lowest, then JPEG XL, then WebP, and finally MozJPEG.", width="800", height="415" %} +
+ +The chart below (higher is better) illustrates how AVIF encoding speed compares to other image formats. Previous generation codecs like WebP benefit from the less complex (but also less efficient) compression algorithms. With a multi-threaded encoding scheme, AVIF achieves similar performance for common use cases while delivering significant compression gains. + +
+ {% Img src="image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/FSzUG4d4ixJQytow1WNU.png", alt="A comparison of image codec encoding speed. The compared encoders are average AVIF, average JPEG XL, average WebP (one thread), and average MozJPEG (one thread). AVIF is generally one of the fastest image encoders in terms of best quality and default effort, but is the slowest of all encoders for on-the-fly performance.", width="800", height="433" %} +
+ +For developers interested in more detailed encoding speed and visual quality comparisons, the [Image Coding Comparisons](https://storage.googleapis.com/avif-comparison/index.html) site contains reproducible benchmark results. + +While software implementations for modern image codecs like AVIF and WebP are optimized for x86 and ARM processors architectures, compressing vast amounts of images at scale can be computationally expensive. One alternative to reduce compression costs is to explore hardware acceleration. [Bluedot](https://www.blue-dot.io/) has developed a hardware accelerated Pulsar-AVIF encoder running on programmable FPGAs, such as AMD's Alveo U250. Compared to software based avifenc, Pulsar-AVIF delivers a 7 to 23 times speed improvement with similar [compression efficiency](https://www.blue-dot.io/avif-speed-quality-benchmark/). + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EncoderEncode time (ms)Frames per secondCPU utilizationHardware specification
+ Pulsar-AVIF
+ (FPGA) +
60409.85305% + AMD Alveo U250 1ea + Intel(R) Xeon(R)
+ Platinum 8171 CPU at 2.6GHz, 10 cores +
+ avifenc
+ (libaom) +
40559.263200% + Intel(R) Xeon(R) Platinum 8370C CPU at
+ 2.8GHz, 32 cores +
+ avifenc
+ (SVT-AV1) +
132518.113200% + Intel(R) Xeon(R) Platinum 8370C CPU at
+ 2.8GHz, 32 cores +
+ AVIF encode speed comparison
+
    +
  • Test set: Kodak (24 images of 768x512)
  • +
  • Encoding 24 images simultaneously (24 processes)
  • +
  • Each software encoding process is executed with 4 threads. (-j 4)
  • +
+
+
+ +Developers can deploy Pulsar-AVIF encoder with cloud virtual machines, such as [Azure NP-Series](https://learn.microsoft.com/en-us/azure/virtual-machines/np-series). + +## AVIF features for responsive web pages + +AVIF has a few interesting features that will help to deliver more responsive web pages. This time we’ll dive a bit into animated AVIFs, which are by far the most efficient way of delivering cool animations on the web. + +### Animated AVIF + +Animated [GIF](https://en.wikipedia.org/wiki/GIF) is still [a popular format](https://almanac.httparchive.org/en/2022/media#gifs-animated-and-not) for animated images, despite being 35 years old. Biggest drawbacks of animated GIFs are the support for 256 colors only and poor compression leading to very large file sizes while also limiting the resolution or frame rate for practical use cases. In contrast, animated AVIF coding is actually the same as AV1 video coding scheme which provides significant file size savings compared to animated GIF. + +We ran a simple benchmark where we encoded a set of animated GIFs to both AVIF and JPEG XL. Over the test set, median file size savings percentage was approximately 86% compared to original GIF files and about 73% compared to animated JPEG XL files*. + +
+ {% Img src="image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ltmx3lsTIyqiVcRAaYXL.png", alt="A comparison of animated image codec performance. AVIF outperforms GIF and JPEG XL in terms of both average and median file size.", width="600", height="371" %} +
+ * libavif and libjxl versions: libavif version 4cff6a3 (libaom version v3.5.0), libjxl version 176b1c03. Test set: 15 sample GIFs from Wikipedia. +
+
+ +Chrome, Firefox and Safari all support animated AVIF playbacks. + +FFmpeg is one tool to use for creating animated AVIF files, here’s a basic example of converting a GIF to AVIF using FFmpeg: + +```bash +ffmpeg -i "$INPUT_GIF" -crf $CRF -b:v 0 "$OUTPUT.avif" +``` + +`$CRF` is the desired output quality on a scale of `0` to `63`. Lower values mean better quality and greater file size. `0` uses [lossless compression](https://en.wikipedia.org/wiki/Lossless_compression). Start with a value of `23` for small animated AVIF files. + +FFmpeg uses libaom by default for encoding AVIF images, but it can also use [rav1e](https://github.com/xiph/rav1e) or [SVT-AV1](https://gitlab.com/AOMediaCodec/SVT-AV1) when available. More information about encoder choices, tuning the encoding parameters for speed/quality trade-offs can be found in [FFmpeg's AV1 encoding guide](https://trac.ffmpeg.org/wiki/Encode/AV1). + +Another use case is to repackage an AV1 video into AVIF without re-encoding the original file. This is significantly cheaper than decoding/encoding the original AV1 file and makes the AV1 video available for use with the `` element. Passing `-c:v copy` to FFmpeg can do this. + +```bash +ffmpeg -i "$INPUT_AV1_VIDEO" -c:v copy -an "$OUTPUT.avif" +``` + +## Conclusions + +AVIF use on the web has been steadily increasing since launch and is widely supported by browsers, image CDNs, WordPress plugins and encoding tools. All in all, AVIF is a great choice for serving images on the web; AVIF is fast to encode and decode while providing the best quality or smallest file size, whichever you prefer for your website. AVIF is the most efficient way to deliver animations on the web. If you have questions, comments, or feature requests, please reach out on the [av1-discuss mailing list](https://groups.google.com/a/aomedia.org/g/av1-discuss), [AOM Github community](https://github.com/AOMediaCodec/community/wiki), and [AVIF wiki](https://github.com/AOMediaCodec/av1-avif/wiki). + +_Hero image from [Unsplash](https://unsplash.com/photos/oXlXu2qukGE), by [Amal S +](https://unsplash.com/@amal_z7z)._ diff --git a/src/site/content/en/blog/avoid-large-complex-layouts-and-layout-thrashing/index.md b/src/site/content/en/blog/avoid-large-complex-layouts-and-layout-thrashing/index.md index 74fd7f75419..c2918674eb6 100644 --- a/src/site/content/en/blog/avoid-large-complex-layouts-and-layout-thrashing/index.md +++ b/src/site/content/en/blog/avoid-large-complex-layouts-and-layout-thrashing/index.md @@ -1,177 +1,170 @@ --- layout: post title: Avoid large, complex layouts and layout thrashing +hero: image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/Yv6fjfgK4j51XHDWIkw1.jpg +thumbnail: image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/l0vqWPN7MjFYtNw1rTkZ.jpg +alt: A rough watercolor painting of a design layout. There are three boxes laid across the X-axis. The left one is primarily painted in the blue, the middle in purple, and the one at the right in green. subhead: | Layout is where the browser figures out the geometric information for elements - their size and location in the page. Each element will have explicit or implicit sizing information based on the CSS that was used, the contents of the element, or a parent element. The process is called Layout in Chrome. authors: - paullewis + - jlwagner date: 2015-03-20 -updated: 2018-08-17 +updated: 2023-05-09 description: | Layout is where the browser figures out the geometric information for elements - their size and location in the page. Each element will have explicit or implicit sizing information based on the CSS that was used, the contents of the element, or a parent element. The process is called Layout in Chrome. tags: - - blog # blog is a required tag for the article to show up in the blog. - + - blog + - performance + - web-vitals --- -Layout is where the browser figures out the geometric information for -elements: their size and location in the page. Each element will have -explicit or implicit sizing information based on the CSS that was used, the -contents of the element, or a parent element. The process is called Layout -in Chrome, Opera, Safari, and Internet Explorer. In Firefox it’s called -Reflow, but effectively the process is the same. +Layout is where the browser figures out the geometric information for elements: their size and location in the page. Each element will have explicit or implicit sizing information based on the CSS that was used, the contents of the element, or a parent element. The process is called Layout in Chrome (and derived browsers such as Edge), and Safari. In Firefox it's called Reflow, but the process is effectively the same. Similarly to style calculations, the immediate concerns for layout cost are: -1. The number of elements that require layout. +1. The number of elements that require layout, which is a byproduct of the page's [DOM size](/dom-size-and-interactivity/). 1. The complexity of those layouts. -## TL;DR +## Summary +* Layout has a direct effect on interaction latency * Layout is normally scoped to the whole document. * The number of DOM elements will affect performance; you should avoid triggering layout wherever possible. -* Assess layout model performance; new Flexbox is typically faster than older Flexbox or float-based layout models. * Avoid forced synchronous layouts and layout thrashing; read style values then make style changes. +## The effects of layout on interaction latency + +When a user interacts with the page, those interactions should be as fast as possible. The amount of time it takes for an interaction to complete—ending when the browser presents the next frame to show the results of the interaction—is known as _interaction latency_. This is an aspect of page performance that the [Interaction to Next Paint](/inp/) metric measures. + +The amount of time it takes for the browser to present the next frame in response to a user interaction is known as the interaction's _presentation delay_. The goal of an interaction is to provide visual feedback in order to signal to the user that something has occurred, and visual updates can involve some amount of layout work in order to achieve that goal. + +In order to keep your website's INP as low as possible, it's important to avoid layout when possible. If it's not possible to avoid layout entirely, it's important to limit that layout work so that the browser can present the next frame quickly. + +{% Aside 'objective' %} +**Read to learn more:** [Interaction to Next Paint (INP)](/inp/). +{% endAside %} + ## Avoid layout wherever possible -When you change styles the browser checks to see if any of the changes require layout to be calculated, and for that render tree to be updated. Changes to “geometric properties”, such as widths, heights, left, or top all require layout. +When you change styles the browser checks to see if any of the changes require layout to be calculated, and for that render tree to be updated. Changes to "geometric properties", such as widths, heights, left, or top all require layout. ```css .box { - width: 20px; - height: 20px; + width: 20px; + height: 20px; } /** - * Changing width and height - * triggers layout. - */ + * Changing width and height + * triggers layout. + */ + .box--expanded { - width: 200px; - height: 350px; + width: 200px; + height: 350px; } ``` -**Layout is almost always scoped to the entire document.** If you have a lot of elements, it’s going to take a long time to figure out the locations and dimensions of them all. +Layout is almost always scoped to the entire document. If you have a lot of elements, it's going to take a long time to figure out the locations and dimensions of them all. -If it’s not possible to avoid layout then the key is to once again use Chrome DevTools to see how long it’s taking, and determine if layout is the cause of a bottleneck. Firstly, open DevTools, go to the Timeline tab, hit record and interact with your site. When you stop recording you’ll see a breakdown of how your site performed: +If it's not possible to avoid layout then the key is to once again use Chrome DevTools to see how long it's taking, and determine if layout is the cause of a bottleneck. Firstly, open DevTools, go to the Timeline tab, hit record and interact with your site. When you stop recording you'll see a breakdown of how your site performed:
-{% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/jD6aTiFKuGZv0zkITZj4.jpg", alt="DevTools showing a long time in Layout", width="800", height="558" %} + {% Img src="image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ZK8uTy6hUd50CVY6hoMS.png", alt="DevTools showing a long time in Layout.", width="800", height="602" %}
-When digging into the frame in the above example, we see that over 20ms is spent inside layout, which, when we have 16ms to get a frame on screen in an animation, is far too high. You can also see that DevTools will tell you the tree size (1,618 elements in this case), and how many nodes were in need of layout. +When digging into the trace in the above example, we see that over 28 milliseconds is spent inside layout for each frame, which, when we have 16 milliseconds to get a frame on screen in an animation, is far too high. You can also see that DevTools will tell you the tree size (1,618 elements in this case), and how many nodes were in need of layout (5 in this case). -{% Aside %} -Want a definitive list of which CSS properties trigger layout, paint, or composite? Check out [CSS Triggers](https://csstriggers.com). -{% endAside %} - - -## Use flexbox over older layout models - -The web has a range of layout models, some being more widely supported than others. The oldest CSS layout model allows us to position elements on screen relatively, absolutely, and by floating elements. - -The screenshot below shows the layout cost when using floats on 1,300 boxes. It is, admittedly, a contrived example, because most applications will use a variety of means to position elements. - -
-{% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/yxKK6fC5l8l4wG7RhnC8.jpg", alt="Using floats as layout.", width="800", height="544" %} -
+Keep in mind that the general advice here is to avoid layout _whenever possible_—but it isn't always possible to avoid layout. In cases where you can't avoid layout, know that the cost of layout has a relationship with the size of the DOM. Although the relationship between the two isn't tightly coupled, larger DOMs will generally incur higher layout costs. -If we update the sample to use Flexbox, a more recent addition to the web platform, we get a different picture: - -
-{% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/UuE9epBp4grxxmvsKyGw.jpg", alt="Using flexbox as layout.", width="800", height="519" %} -
- -Now we spend far less time (3.5ms vs 14ms in this case) in layout for the _same number of elements_ and the same visual appearance. It’s important to remember that for some contexts you may not be able to choose Flexbox, since it’s [less widely supported than floats](http://caniuse.com/#search=flexbox), but where you can you should at least investigate the layout model’s impact on your performance, and go with the one that minimizes the cost of performing it. - -In any case, whether you choose Flexbox or not, you should still **try and avoid triggering layout altogether** during high pressure points of your application! +{% Aside 'objective' %} +**Read to learn more:** [DOM size and interactivity](/dom-size-and-interactivity/). +{% endAside %} ## Avoid forced synchronous layouts Shipping a frame to screen has this order:
-{% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/mSZbp9o13Mub4fq8PWzT.jpg", alt="Using flexbox as layout", width="800", height="122" %} + {% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/mSZbp9o13Mub4fq8PWzT.jpg", alt="Using flexbox as layout.", width="800", height="122" %}
-First the JavaScript runs, _then_ style calculations, _then_ layout. It is, however, possible to force a browser to perform layout earlier with JavaScript. It is called a **forced synchronous layout**. - -The first thing to keep in mind is that as the JavaScript runs all the old layout values from the previous frame are known and available for you to query. So if, for example, you want to write out the height of an element (let’s call it “box”) at the start of the frame you may write some code like this: +First the JavaScript runs, _then_ style calculations, _then_ layout. It is, however, possible to force a browser to perform layout earlier with JavaScript. This is called **forced synchronous layout**. +The first thing to keep in mind is that as the JavaScript runs all the old layout values from the previous frame are known and available for you to query. So if, for example, you want to write out the height of an element (let's call it "box") at the start of the frame you may write some code like this: ```js -// Schedule our function to run at the start of the frame. +// Schedule our function to run at the start of the frame: requestAnimationFrame(logBoxHeight); -function logBoxHeight() { - // Gets the height of the box in pixels and logs it out. - console.log(box.offsetHeight); +function logBoxHeight () { + // Gets the height of the box in pixels and logs it out: + console.log(box.offsetHeight); } ``` - -Things get problematic if you’ve changed the styles of the box _before_ you ask for its height: - +Things get problematic if you've changed the styles of the box _before_ you ask for its height: ```js -function logBoxHeight() { - - box.classList.add('super-big'); +function logBoxHeight () { + box.classList.add('super-big'); - // Gets the height of the box in pixels - // and logs it out. - console.log(box.offsetHeight); + // Gets the height of the box in pixels and logs it out: + console.log(box.offsetHeight); } ``` Now, in order to answer the height question, the browser must _first_ apply the style change (because of adding the `super-big` class), and _then_ run layout. Only then will it be able to return the correct height. This is unnecessary and potentially expensive work. -Because of this you should always batch your style reads and do them first (where the browser can use the previous frame’s layout values) and then do any writes: +{% Aside 'important' %} +While the example above uses the `offsetHeight` property, there are [many properties to be aware of](https://gist.github.com/paulirish/5d52fb081b3570c81e3a) that can trigger forced synchronous layout. +{% endAside %} + +Because of this, you should always batch your style reads and do them first (where the browser can use the previous frame's layout values) and then do any writes: Done correctly the above function would be: ```js -function logBoxHeight() { - // Gets the height of the box in pixels - // and logs it out. - console.log(box.offsetHeight); +function logBoxHeight () { + // Gets the height of the box in pixels and logs it out: + console.log(box.offsetHeight); - box.classList.add('super-big'); + box.classList.add('super-big'); } ``` -For the most part you shouldn’t need to apply styles and then query values; using the last frame’s values should be sufficient. Running the style calculations and layout synchronously and earlier than the browser would like are potential bottlenecks, and not something you will typically want to do. +For the most part you shouldn't need to apply styles and then query values; using the last frame's values should be sufficient. Running the style calculations and layout synchronously and earlier than the browser would like are potential bottlenecks, and not something you will typically want to do. ## Avoid layout thrashing -There’s a way to make forced synchronous layouts even worse: _do lots of them in quick succession_. Take a look at this code: -```js -function resizeAllParagraphsToMatchBlockWidth() { +There's a way to make forced synchronous layouts even worse: _do lots of them in quick succession_. Take a look at this code: - // Puts the browser into a read-write-read-write cycle. - for (var i = 0; i < paragraphs.length; i++) { - paragraphs[i].style.width = box.offsetWidth + 'px'; - } +```js +function resizeAllParagraphsToMatchBlockWidth () { + // Puts the browser into a read-write-read-write cycle. + for (let i = 0; i < paragraphs.length; i++) { + paragraphs[i].style.width = `${box.offsetWidth}px`; + } } ``` -This code loops over a group of paragraphs and sets each paragraph’s width to match the width of an element called “box”. It looks harmless enough, but the problem is that each iteration of the loop reads a style value (`box.offsetWidth`) and then immediately uses it to update the width of a paragraph (`paragraphs[i].style.width`). On the next iteration of the loop, the browser has to account for the fact that styles have changed since `offsetWidth` was last requested (in the previous iteration), and so it must apply the style changes, and run layout. This will happen on _every single iteration!_. +This code loops over a group of paragraphs and sets each paragraph's width to match the width of an element called "box". It looks harmless enough, but the problem is that each iteration of the loop reads a style value (`box.offsetWidth`) and then immediately uses it to update the width of a paragraph (`paragraphs[i].style.width`). On the next iteration of the loop, the browser has to account for the fact that styles have changed since `offsetWidth` was last requested (in the previous iteration), and so it must apply the style changes, and run layout. This will happen on _every single iteration!_. -The fix for this sample is to once again _read_ then _write_ values: +The fix for this sample is to once again _read_ and then _write_ values: ```js // Read. -var width = box.offsetWidth; +const width = box.offsetWidth; -function resizeAllParagraphsToMatchBlockWidth() { - for (var i = 0; i < paragraphs.length; i++) { +function resizeAllParagraphsToMatchBlockWidth () { + for (let i = 0; i < paragraphs.length; i++) { // Now write. - paragraphs[i].style.width = width + 'px'; - } + paragraphs[i].style.width = `${width}px`; + } } ``` -If you want to guarantee safety you should check out [FastDOM](https://github.com/wilsonpage/fastdom), which automatically batches your reads and writes for you, and should prevent you from triggering forced synchronous layouts or layout thrashing accidentally. -å \ No newline at end of file +If you want to guarantee safety, consider using [FastDOM](https://github.com/wilsonpage/fastdom), which automatically batches your reads and writes for you, and should prevent you from triggering forced synchronous layouts or layout thrashing accidentally. + +_Hero image from [Unsplash](https://unsplash.com/), by [Hal Gatewood](https://unsplash.com/@halacious)._ diff --git a/src/site/content/en/blog/babe/index.md b/src/site/content/en/blog/babe/index.md index 19f4dd08722..ba5f3a51be7 100644 --- a/src/site/content/en/blog/babe/index.md +++ b/src/site/content/en/blog/babe/index.md @@ -13,7 +13,8 @@ tags: {% Img src="image/T4FyVKpzu4WKF1kBNvXepbi08t52/jalFicttU5q4B9S88RJg.gif", alt="BaBe detail", width="582", height="1000" %} -### TL;DR +## Summary + BaBe’s cross-browser Progressive Web App rivals performance of native app. ### Results @@ -43,7 +44,7 @@ use of low-end devices. Together these hindered their inability to scale. They built a Progressive Web App ([https://app.babe.co.id](https://app.babe.co.id)) to combine the best of their app with the broad reach of the web. It leverages new, open web APIs to offer a mobile-web experience that loads quickly, uses less data, and -re-engages users in multiple ways. +re-engages users in multiple ways. After implementing their Progressive Web App, they saw it perform slightly faster than their native app in testing. They also noticed that engagement was diff --git a/src/site/content/en/blog/backdrop-filter/index.md b/src/site/content/en/blog/backdrop-filter/index.md index e468d7a5bd6..6d91d65bb6c 100644 --- a/src/site/content/en/blog/backdrop-filter/index.md +++ b/src/site/content/en/blog/backdrop-filter/index.md @@ -39,6 +39,25 @@ Historically, these techniques were difficult to implement on the web, requiring +## Browser support + +{% BrowserCompat 'css.properties.backdrop-filter' %} + +For performance reasons, fall back to an image instead of a polyfill when `backdrop-filter` isn't supported. The example below shows this. + +```css +@supports (backdrop-filter: none) { + .background { + backdrop-filter: blur(10px); + } +} + +@supports not (backdrop-filter: none) { + .background { + background-image: blurred-hero.png; + } +} + ## Basics - The `backdrop-filter` property applies one or more filters to an element, changing the appearance of anything behind the element. @@ -82,23 +101,6 @@ When `backdrop-filter` is set to anything other than `none`, the browser creates You can combine filters for rich and clever effects, or use just one filter for more subtle or precise effects. You can even combine them with [SVG filters](https://developer.mozilla.org/docs/Web/SVG/Element/filter). -## Feature detection and fallback - -As with many features of the modern web, you'll want to know whether the user's browser supports `backdrop-filter` before using it. Do this with `@supports()`. For performance reasons, fall back to an image instead of a polyfill when `backdrop-filter` isn't supported. The example below shows this. - -```css -@supports (backdrop-filter: none) { - .background { - backdrop-filter: blur(10px); - } -} - -@supports not (backdrop-filter: none) { - .background { - background-image: blurred-hero.png; - } -} -``` ## Examples Design techniques and styles previously reserved for operating systems are now performant and achievable with a single CSS declaration. Let's look at some examples. diff --git a/src/site/content/en/blog/badging-api/index.md b/src/site/content/en/blog/badging-api/index.md deleted file mode 100644 index f28ae1bc966..00000000000 --- a/src/site/content/en/blog/badging-api/index.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: Badging for app icons -subhead: The App Badging API allows installed web apps to set an application-wide badge on the app icon. -authors: - - petelepage -description: The App Badging API allows installed web apps to set an application-wide badge, shown in an operating-system-specific place associated with the application, such as the shelf or home screen. Badging makes it easy to subtly notify the user that there is some new activity that might require their attention, or it can be used to indicate a small amount of information, such as an unread count. -date: 2018-12-11 -updated: 2022-03-28 -tags: - - blog - - capabilities - - progressive-web-apps - # - badging - - notifications -hero: image/admin/AFvb0uBtN7ZX9qToptEo.jpg -alt: Neon sign with heart and zero -feedback: - - api ---- - -## What is the App Badging API? {: #what } - -
- {% Img src="image/tcFciHGuF3MxnTr1y5ue01OGLBn2/t7XqI06whZr4oJe0yawc.jpg", alt="Example of Twitter with eight notifications and another app showing a flag type badge.", width="600", height="189" %} -
- Example of Twitter with eight notifications and another app showing a flag - type badge. -
-
- -The App Badging API allows installed web apps to set an application-wide badge, -shown in an operating-system-specific place associated with the application -(such as the shelf or home screen). - -Badging makes it easy to subtly notify the user that there is new activity -that might require their attention, or to indicate a small amount of -information, such as an unread count. - -Badges tend to be more user-friendly than notifications, and can be updated -with a much higher frequency, since they don't interrupt the user. And, -because they don't interrupt the user, they don't need the user's permission. - -### Possible use cases {: #use-cases } - -Examples of apps that might use this API include: - -* Chat, email, and social apps, to signal that new messages have arrived, or to - show the number of unread items. -* Productivity apps, to signal that a long-running background task (such as - rendering an image or video) has completed. -* Games, to signal that a player action is required (e.g., in Chess, when it - is the player's turn). - -### Support - -The App Badging API works on Windows, and macOS, in Chrome 81 and Edge 81 or later. -Support for ChromeOS is in development and will be available in a future -release. On Android, the Badging API is not supported. Instead, -Android automatically shows a badge on app icon for the installed web app -when there is an unread notification, just as for Android apps. - -## Try it - -1. Open the - [App Badging API demo][demo]. -2. When prompted, click **Install** to install the app, or use the Chrome - menu to install it. -3. Open it as an installed PWA. Note, it must be running as an installed PWA - (in your task bar or dock). -4. Click the **Set** or **Clear** button to set or clear the badge from the app - icon. You can also provide a number for the *Badge value*. - -## How to use the App Badging API {: #use } - -To use the App Badging API, your web app needs to meet -[Chrome's installability criteria](/install-criteria/#criteria), -and users must add it to their home screens. - -The Badge API consists of two methods on `navigator`: - -* `setAppBadge(`*`number`*`)`: Sets the app's badge. If a value is provided, set the - badge to the provided value otherwise, display a plain white dot (or other - flag as appropriate to the platform). Setting *`number`* to `0` is the same as - calling `clearAppBadge()`. -* `clearAppBadge()`: Removes the app's badge. - -Both return empty promises you can use for error handling. - -The badge can either be set from the current page, or from the registered -service worker. To set or clear the badge (in either the foreground page or -the service worker), call: - -```js -// Set the badge -const unreadCount = 24; -navigator.setAppBadge(unreadCount).catch((error) => { - //Do something with the error. -}); - -// Clear the badge -navigator.clearAppBadge().catch((error) => { - // Do something with the error. -}); -``` - -In some cases, the operating system may not allow the exact representation of the badge. -In such cases, the browser will attempt to provide the best representation for -that device. For example, because the Badging API isn't supported on Android, -Android only ever shows a dot instead of a numeric value. - -Don't assume anything about how the user agent displays the badge. -Some user agents may take a number like "4000" and rewrite it as -"99+". If you saturate the badge yourself (for example by setting it to "99") -then the "+" won't appear. No matter the actual number, just call -`setAppBadge(unreadCount)` and let the user agent deal with -displaying it accordingly. - -While the App Badging API *in Chrome* requires an installed app, you shouldn't -make calls to the Badging API dependent on the install state. Just call the -API when it exists, as other browsers may show the badge in other places. -If it works, it works. If not, it simply doesn't. - -## Setting and clearing the badge in the background from a service worker - -You can also set the app badge in the background using the service worker, -allowing it to be updated even when the app isn't open. Do this either -through periodic background sync, the Push API, or a combination of both. - -### Periodic background sync - -[Periodic background sync](/periodic-background-sync/) allows a service worker -to periodically poll the server, which could be used to get an updated status, -and call `navigator.setAppBadge()`. - -However, the frequency at which the sync is called isn't perfectly reliable, -and is called the at discretion of the browser. - -### Web Push API - -The [Push API][push-api] allows servers to send messages to service workers, -which can run JavaScript code even when no foreground page is running. Thus, -a server push could update the badge by calling `navigator.setAppBadge()`. - -However, most browsers, Chrome included, require a notification to be -displayed whenever a push message is received. This is fine for some use -cases (for example showing a notification when updating -the badge) but makes it impossible to subtly update the badge without -displaying a notification. - -In addition, users must grant your site notification permission in order to -receive push messages. - -### A combination of both - -While not perfect, using Push API and periodic background sync together -provides a good solution. High priority information is delivered via the Push -API, showing a notification and updating the badge. And lower priority -information is delivered by updating the badge, either when the page is open, -or via periodic background sync. - -## Feedback {: #feedback } - -The Chrome team wants to hear about your experiences with the App Badging API. - -### Tell us about the API design - -Is there something in the API that doesn't work as you expected? Or are -there missing methods or properties that you need to implement your idea? -Do you have a question or comment on the security model? - -* File a spec issue on the [Badging API GitHub repo][issues], or add your - thoughts to an existing issue. - -### Report a problem with the implementation - -Did you find a bug with Chrome's implementation? Or is the implementation -different from the spec? - -* File a bug at . Be sure to include as much detail as - you can, simple instructions for reproducing, and set **Components** to - `UI>Browser>WebAppInstalls`. [Glitch](https://glitch.com) works great for - sharing quick and easy reproductions. - -### Show support for the API - -Planning to use the App Badging API on your site? Your public support helps the -Chrome team to prioritize features, and shows other browser vendors how critical -it is to support them. - -* Send a tweet to [@ChromiumDev](https://twitter.com/chromiumdev) using the hashtag - [`#BadgingAPI`](https://twitter.com/search?q=%23BadgingAPI&src=typed_query&f=live) - and let us know where and how you're using it. - -## Helpful links {: #helpful } - -* [Public explainer][explainer] -* [Badging API Demo][demo] | [Badging API Demo source][demo-source] -* [Tracking bug][cr-bug] -* [ChromeStatus.com entry][cr-status] -* Blink Component: `UI>Browser>WebAppInstalls` - -Hero [photo](https://unsplash.com/photos/xv7-GlvBLFw) by -[Prateek Katyal](https://unsplash.com/@prateekkatyal) on -[Unsplash](https://unsplash.com/) - -[spec]: https://wicg.github.io/badging/ -[issues]: https://github.com/WICG/badging/issues -[cr-bug]: https://bugs.chromium.org/p/chromium/issues/detail?id=719176 -[cr-status]: https://www.chromestatus.com/feature/6068482055602176 -[demo]: https://badging-api.glitch.me/ -[demo-source]: https://glitch.com/edit/#!/badging-api?path=demo.js -[explainer]: https://github.com/WICG/badging/blob/master/explainer.md -[push-api]: https://www.w3.org/TR/push-api/ diff --git a/src/site/content/en/blog/baseline-features/index.md b/src/site/content/en/blog/baseline-features/index.md new file mode 100644 index 00000000000..bc2053a542e --- /dev/null +++ b/src/site/content/en/blog/baseline-features/index.md @@ -0,0 +1,133 @@ +--- +layout: post +title: "Baseline features you can use today" +subhead: > + Learn about just some of the features that are part of Baseline. +description: > + Learn about just some of the features that are part of Baseline. +date: 2023-05-10 +hero: 'image/kheDArv5csY6rvQUJDbWRscckLr1/Gv27TPZQF9EPSZIDmpHZ.png' +alt: The Baseline supported icon and the wordmark. +thumbnail: image/kheDArv5csY6rvQUJDbWRscckLr1/j1MZvXQ8fY232Q1z5El0.png +is_baseline: true +authors: + - kosamari +tags: + - blog +--- + +{% YouTube "x9rh0Du4Czg" %} + +The web is always evolving and browsers update constantly to give developers new tools to innovate on the platform. Things that previously required helper libraries become part of the web platform and supported on all browsers, along with shorter or easier ways to code design elements. + +While this constant evolution and adaptation is helpful, it can also bring confusion. It can be difficult to navigate all these updates. As developers, we have questions like, "When will all browser engines support this new feature?" "When can I actually start using those features in my production code?" "For how long should we support older browsers?" + +The true answer is "it depends". What is needed and what is usable really depends on your user base, tech stack, your team structure, and supported devices. But, one thing we all agree, is that the current landscape of the web can make it difficult to make those decisions. + +The Chrome team is collaborating with other browser engines and the web community to bring more clarity. This includes our work on projects like [Interop 2023](https://wpt.fyi/interop-2023) which helps to improve interoperability of a set of key features. But what about features landed in the past few years? Are experimental features we learned about two years ago ready to use? + +In this post, I want to highlight some features that are now available to all major browser engines for the past two major versions. This is the cut-off point where we feel that the majority of developers will feel a feature is safe to use, and is the feature set we're calling Baseline. For more, please see the announcement [of Baseline here](/baseline). + +## The dialog element + +The `` element is a new HTML element to create dialog prompts such as popups and modals. + +{% BrowserCompat 'html.elements.dialog' %} + +To use it, define the modal element, then open the dialog by calling the `showModal()` method on the dialog element. + +```html + +
+

Hi, I'm a dialog.

+ +
+
+ + +``` + +As a native HTML element, features like focus management, tab tracking, and keeping the stacking context are built in. For more, read [Building a dialog component](/building-a-dialog-component/). + +## Individual CSS transform properties + +Using CSS transforms is a performant way to add a movement to your site. +You might be familiar with writing CSS transforms with three properties in one line. +With individual transform properties you can now specify transform properties individually. This comes in handy when you are writing complex keyframe animations. + +```css +.target { + translate: 50% 0; + rotate: 30deg; + scale: 1.2; +} +``` + +{% BrowserCompat 'css.properties.scale' %} + +For an in-depth explanation of this change, read [Finer grained control over CSS transforms with individual transform properties](/css-individual-transform-properties/). + +## New viewport units + +On mobile, viewport size is influenced by the presence or absence of dynamic toolbars. +Sometimes you have a URL bar and navigation toolbar visible, but sometimes those toolbars are completely retracted. +The actual size of viewport will be different depending on whether the toolbars are visible or not. +New viewport units like `svh` and `lvh` give web developers finer control when designing for the mobile. You can learn more in the article [The large, small, and dynamic viewport units](/viewport-units/). + +{% BrowserCompat 'css.types.length.viewport_percentage_units_large' %} + +## Deep copy in JavaScript + +In the past, to create a deep copy of an object with no reference to the original object, a popular hack was `JSON.stringify` combined with `JSON.parse`. This was such a common hack that V8 (Chrome's javascript engine) aggressively improved the performance of this trick. But, you don't need this hack anymore with `structuredClone`. + +```js +const original = {id: 0, prop: {name: "Tom"}} + +/* Old hack */ +const deepCopy = JSON.parse(JSON.stringify(original)); + +/* New way */ +const deepCopy = structuredClone(original); +``` + +{% BrowserCompat 'api.structuredClone' %} + +Please refer to [Deep-copying in JavaScript using structuredClone](/structured-clone/) for more details. + +## The `:focus-visible` pseudo-class + +As web developers, we all are familiar with that "focus ring" that shows up when you are navigating a page with a keyboard or clicking on input elements. It is a necessary feature for accessibility but sometimes it gets in the way of the visual design for different users. The `:focus-visible` CSS pseudo-class checks if the browser believes that the focus should be visible. You can now specify styles for only when focus should be visible. + +```css +/* focus with tab key */ +:focus-visible { + outline: 5px solid pink; +} + +/* mouse click */ +:focus:not(:focus-visible) { + outline: none; +} +``` + +{% BrowserCompat 'css.selectors.focus-visible' %} + +Check out the [Focus section on Learn CSS](/learn/css/focus/) for more information. + +## The TransformStream interface + +The TransformStream interface of the Streams API makes it possible to pipe streams into one another. + +For example you can stream data from one place, then compress the data stream to another location as the data gets passed. The article [Streaming requests with the fetch API](https://developer.chrome.com/articles/fetch-streaming-requests/) walks you through this sample use case. + +{% BrowserCompat 'api.TransformStream' %} + +## Wrap up + +There are many more features that recently became interoperable and stable to use on the web platform. Going forward we will work with the [WebDX Community Group](https://www.w3.org/community/webdx/) to bring more clarity to these Baseline feature sets. Please check out [web.dev/baseline](/baseline/) for ongoing details. + +If you want to stay up-to-date, our team is publishing articles [when a feature becomes interoperable](/tags/newly-interoperable/), and publish [monthly updates on what's going on the web platform](/tags/new-to-the-web/) from experimental features to newly interoperable. + +We are always curious if what we are doing helps you, or if you need different kinds of support, so please reach out to us at [WebDX Community Group](https://www.w3.org/community/webdx/). diff --git a/src/site/content/en/blog/bear71/index.md b/src/site/content/en/blog/bear71/index.md index bf36306c1c6..cce741d740e 100644 --- a/src/site/content/en/blog/bear71/index.md +++ b/src/site/content/en/blog/bear71/index.md @@ -15,9 +15,7 @@ tags: [View the documentary](https://bear71vr.nfb.ca/) -### TL;DR - -[WebVR is an API](https://developers.google.com/web/fundamentals/vr/) built into browsers that combines +[WebVR is an API](https://developer.chrome.com/blog/ar-for-the-web/) built into browsers that combines stereo rendering with real-time head tracking, enabling a quick and easy way to enjoy VR content online. With WebVR, content creators can create immersive VR content that lives online and runs on a wide range of VR hardware. diff --git a/src/site/content/en/blog/better-responsiveness-metric/index.md b/src/site/content/en/blog/better-responsiveness-metric/index.md index be4a9586430..013a5710f83 100644 --- a/src/site/content/en/blog/better-responsiveness-metric/index.md +++ b/src/site/content/en/blog/better-responsiveness-metric/index.md @@ -67,7 +67,7 @@ interaction with a site. In other words, FID is a lower bound on the amount of t after interacting. Other metrics like [Total Blocking Time (TBT)](/tbt/) and [Time To Interactive (TTI)](/tti/) are based -on [long tasks](https://developer.mozilla.org/docs/Web/API/Long_Tasks_API) and, like FID, also +on [long tasks](/optimize-long-tasks/) and, like FID, also measure main thread blocking time during load. Since these metrics can be measured in both the field and the lab, many developers have asked why we don't prefer one of these over FID. @@ -346,7 +346,7 @@ One initial thought would be to use the `pointerdown` and `pointerup` events and cover all of the durations that we're interested in. Sadly, this is not the case, as this [edge case](https://output.jsbin.com/buyiyew/quiet) shows. Try opening this site on mobile, or with mobile emulation, and tapping where it says "Click me". This site triggers the [browser tap -delay](https://developers.google.com/web/updates/2013/12/300ms-tap-delay-gone-away). It can be seen +delay](https://developer.chrome.com/blog/300ms-tap-delay-gone-away/). It can be seen that the `pointerdown`, `pointerup`, and `touchend` are dispatched quickly, whereas the `mousedown`, `mouseup`, and `click` wait for the delay before being dispatched. This means that if we only looked at `pointerdown` and `pointerup` then we'd miss the duration from the synthetic events, which is @@ -397,7 +397,7 @@ and `scroll`. Except for the scroll event, this is largely dependent on the devi scrolling: touch events are dispatched when scrolling with the finger on mobile devices, while wheel events occur when scrolling with a mouse wheel. The scroll events are fired after initial scrolling has completed. And in general, no DOM event blocks scrolling, unless the website uses [non-passive -event listeners](/uses-passive-event-listeners/). So we think of scrolling as decoupled from DOM +event listeners](https://developer.chrome.com/docs/lighthouse/best-practices/uses-passive-event-listeners/). So we think of scrolling as decoupled from DOM Events altogether. What we want to measure is the time from when the user moves enough to produce a scroll gesture until the first frame that shows that scrolling happened. diff --git a/src/site/content/en/blog/better-youtube-web-part1/index.md b/src/site/content/en/blog/better-youtube-web-part1/index.md new file mode 100644 index 00000000000..91524269fc8 --- /dev/null +++ b/src/site/content/en/blog/better-youtube-web-part1/index.md @@ -0,0 +1,179 @@ +--- +title: 'Building a Better Web - Part 1: A faster YouTube on web' +subhead: > + A case study of changes the YouTube Web team made to improve performance, increase their Core Web Vitals pass rates and lift key business metrics. +description: > + This is Part 1 of our new series on Building a Better YouTube Web called "Building a faster YouTube on web" +layout: post +date: 2022-10-20 +authors: + - addyosmani + - sriramkrishnan +hero: 'image/1L2RBhCLSnXjCnSlevaDjy3vba73/CPrVgVl7t1MuwWpXzvCE.jpg' +alt: > + A hero image of the YouTube mobile web loading experience. +tags: + - blog # blog is a required tag for the article to show up in the blog. + - case-study + - performance + - web-vitals +--- + +The Chrome team often talks about "building a *better* web", but what does that +mean? Web experiences should be [fast](/why-speed-matters/), +[accessible](/accessibility/), and use [device +capabilities](/reliable/) in the moment when users need it most. +[Dogfooding](https://en.wikipedia.org/wiki/Eating_your_own_dog_food) is part of Google's culture, so the Chrome team has partnered with +YouTube to share lessons learned along the way in a new series called, "Building +a better web". The first part of the series will dive into how YouTube built a +faster web experience. + +
+{% Img src="image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png", alt="PageSpeed Insights showing the Chrome UX Report data for YouTube Mobile Web passing the Core Web Vitals.", width="800", height="450" %} +
+ The YouTube for mobile web Watch page passing the Core Web Vitals thresholds. +
+
+ +## Building a faster web + +At YouTube, _performance_ relates to how fast videos and other content—such as +recommendations and comments—load on web pages. Performance is also measured by how quickly YouTube +responds to user interactions such as search, player control, likes, and shares. + +Growing developing markets, such as Brazil, India, and Indonesia are important +for YouTube mobile web. Because many users in these regions have slower devices +and limited network bandwidth, ensuring a fast and seamless experience is a +critical goal. + +To provide an inclusive experience for all users, YouTube set out to improve +performance metrics such as [Core Web Vitals](/vitals) through lazy-loading and code +modernization. + +### Improving Core Web Vitals + +To identify areas of improvement, the YouTube team used the [Chrome User Experience Report (CrUX)](https://developer.chrome.com/docs/crux/) to see how real users were experiencing video watch and search result pages on +mobile in [the +field](/lab-and-field-data-differences/#field-data). They +realized their Core Web Vitals metrics had a lot of room for improvement, with +their [Largest Contentful Paint (LCP)](/lcp/) metric clocking in +at 4-6 seconds in some cases. This was substantially higher than their target of +2.5 seconds. + +{% Img src="image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png", alt="Charts of FCP and LCP showing YouTube Watch page pass rates as well as the YouTube origin.", width="800", height="285" %} + +To identify areas for improvement, they turned to +[Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) to audit +the YouTube watch pages, revealing a low Lighthouse +([lab](/lab-and-field-data-differences/#lab-data)) score with a +First Contentful Paint (FCP) of 3.5 seconds and a LCP of 8.5 seconds. + +
+{% Img src="image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg", alt="Lighthouse Report for YouTube Mobile.", width="800", height="518" %} + +
+ Chrome sets a target of 1.8s for FCP and 2.5s for LCP as a gold standard. The FCP and LCP were clearly in the yellow and red at 3.5s and 8.5s, respectively. +
+
+ +To optimize FCP and LCP, the YouTube team dove into several experiments, +resulting in two big discoveries. + +1. The first discovery was that they could improve performance by moving the HTML for the Video Player above the script that makes the Video Player interactive. Lab tests indicated that this could improve both FCP and LCP from 4.4 seconds to 1.1 seconds. + +1. The second discovery was that LCP only [considers](/lcp/#what-elements-are-considered) `